RegisterCollectibleResource registers a resource type which can be referenced by metadata resources and garbage collected. Collectible Resources are useful ephemeral resources which need to be tracked by go away after reboot or process restart. A few limitations to consider: - Collectible Resources
(t gc.ResourceType, c Collector)
| 320 | // - Collectible Resources must track whether the resource is active and/or |
| 321 | // lease membership. |
| 322 | func (m *DB) RegisterCollectibleResource(t gc.ResourceType, c Collector) { |
| 323 | if t < resourceEnd { |
| 324 | panic("cannot re-register metadata resource") |
| 325 | } else if t >= gc.ResourceMax { |
| 326 | panic("resource type greater than max") |
| 327 | } |
| 328 | |
| 329 | m.wlock.Lock() |
| 330 | defer m.wlock.Unlock() |
| 331 | |
| 332 | if m.collectors == nil { |
| 333 | m.collectors = map[gc.ResourceType]Collector{} |
| 334 | } |
| 335 | |
| 336 | if _, ok := m.collectors[t]; ok { |
| 337 | panic("cannot register collectible type twice") |
| 338 | } |
| 339 | m.collectors[t] = c |
| 340 | } |
| 341 | |
| 342 | // namespacedEvent is used to handle any event for a namespace |
| 343 | type namespacedEvent struct { |