@startuml participant auth as "b10-auth" [-> auth: new/initial config\n(datasrc cfg) activate auth participant list as "Configurable\nClientList" create list auth -> list: <> auth -> list: configure(cfg) activate list create CacheConfig list -> CacheConfig: <> (cfg) participant zt_segment as "ZoneTable\nSegment\n(Local)" create zt_segment list -> zt_segment: <> activate zt_segment create ZoneTable zt_segment -> ZoneTable: <> deactivate zt_segment list -> zt_segment: isWritable() activate zt_segment note over zt_segment: Local segments are\nalways writable zt_segment --> list: true deactivate zt_segment loop for each zone in CacheConfig list -> CacheConfig: getLoadAction() activate CacheConfig create LoadAction CacheConfig -> LoadAction: <> participant LoadAction.2 CacheConfig --> list : LoadAction deactivate CacheConfig create ZoneWriter list -> ZoneWriter: <> (load_action) participant ZoneWriter.2 list -> ZoneWriter: load() activate ZoneWriter ZoneWriter -> LoadAction: (funcall) activate LoadAction create ZoneData LoadAction -> ZoneData: <> via helpers participant ZoneData.2 LoadAction --> ZoneWriter: ZoneData deactivate LoadAction deactivate ZoneWriter list -> ZoneWriter: install() activate ZoneWriter ZoneWriter -> ZoneTable: addZone(ZoneData) activate ZoneTable ZoneTable --> ZoneWriter: NULL (no old data) deactivate ZoneTable deactivate ZoneWriter end deactivate list deactivate auth ... [-> auth: reload\n(zonename) activate auth auth -> list: getCachedZoneWriter\n(zone_name) activate list list -> CacheConfig: getLoadAction() activate CacheConfig create LoadAction.2 CacheConfig -> LoadAction.2: <> CacheConfig --> list : LoadAction.2 deactivate CacheConfig create ZoneWriter.2 list -> ZoneWriter.2: <> (load_action) list --> auth: ZoneWriter.2 deactivate list auth -> ZoneWriter.2: load() activate ZoneWriter.2 ZoneWriter.2 -> LoadAction.2: (funcall) activate LoadAction.2 create ZoneData.2 LoadAction.2 -> ZoneData.2: <> via helpers LoadAction.2 --> ZoneWriter.2: ZoneData.2 deactivate LoadAction.2 deactivate ZoneWriter.2 auth -> ZoneWriter.2: install() activate ZoneWriter.2 ZoneWriter.2 -> ZoneTable: addZone(ZoneData.2) activate ZoneTable ZoneTable --> ZoneWriter.2: ZoneData (old data) deactivate ZoneTable deactivate ZoneWriter.2 auth -> ZoneWriter.2: cleanup() activate ZoneWriter.2 ZoneWriter.2 -> ZoneData: <> destroy ZoneData deactivate ZoneWriter.2 deactivate auth @enduml