@startuml participant memmgr as "memmgr" [-> memmgr: new/initial config\n(datasrc cfg) activate memmgr participant list as "Configurable\nClientList" create list memmgr -> list: <> memmgr -> list: configure(cfg) activate list create CacheConfig list -> CacheConfig: <> (cfg) participant zt_segment as "ZoneTable\nSegment\n(Mapped)" create zt_segment list -> zt_segment: <> list -> zt_segment: isWritable() activate zt_segment note over zt_segment: Segment not writable\nwhen not reset zt_segment --> list: false deactivate zt_segment deactivate list memmgr -> list: getStatus() activate list list --> memmgr: DataSourceStatus[] deactivate list loop for each datasrc with mapped segment memmgr -> list: resetMemorySegment\n(datasrc_name,\nREAD_WRITE,\nsegmentparam) activate list list -> zt_segment: reset\n(READ_WRITE,\nsegmentparam) activate zt_segment participant segment as "Memory\nSegment\n(Mapped)" create segment zt_segment -> segment: <> participant segment.2 as "Memory\nSegment\n(Mapped)\n2" create ZoneTable zt_segment -> ZoneTable: <> deactivate zt_segment deactivate list memmgr -> list: getZoneTableAccessor\n(datasrc_name,\ncache=true) activate list list -> memmgr: ZoneTableAccessor deactivate list loop for each zone given by ZoneTableIterator memmgr -> list: getCachedZoneWriter\n(zone_name) activate list list -> CacheConfig: getLoadAction() activate CacheConfig create LoadAction CacheConfig -> LoadAction: <> CacheConfig --> list : LoadAction deactivate CacheConfig create ZoneWriter list -> ZoneWriter: <> (load_action) list --> memmgr: ZoneWriter deactivate list memmgr -> ZoneWriter: load() activate ZoneWriter ZoneWriter -> LoadAction: (funcall) activate LoadAction create ZoneData LoadAction -> ZoneData: <> via helpers LoadAction --> ZoneWriter: ZoneData deactivate LoadAction deactivate ZoneWriter memmgr -> ZoneWriter: install() activate ZoneWriter ZoneWriter -> ZoneTable: addZone(ZoneData) activate ZoneTable ZoneTable --> ZoneWriter: NULL (no old data) deactivate ZoneTable deactivate ZoneWriter end [<- memmgr: command to\nmodules\n(datasrc_name,\nsegmentparam) [--> memmgr: ack from all\nmodules memmgr -> list: resetMemorySegment\n(datasrc_name,\nREAD_WRITE,\nsegmentparam) activate list list -> zt_segment: reset\n(READ_WRITE,\nsegmentparam) activate zt_segment zt_segment -> segment: <> destroy segment create segment.2 zt_segment -> segment.2: <> deactivate zt_segment deactivate list note left of memmgr: load zone\nfor each zone\ngiven by\nZoneTableIterator end [<-- memmgr deactivate memmgr @enduml