@startuml participant memmgr as "memmgr" [-> memmgr: reload\n(zonename) activate memmgr participant list as "Configurable\nClientList" memmgr -> list: getCachedZoneWriter\n(zone_name) activate list participant CacheConfig participant zt_segment as "ZoneTable\nSegment\n(Mapped)" participant segment as "Memory\nSegment\n(Mapped)" participant segment.2 as "Memory\nSegment\n(Mapped)\n2" list -> zt_segment: isWritable() activate zt_segment zt_segment --> list: true deactivate zt_segment list -> CacheConfig: getLoadAction() activate CacheConfig participant ZoneTable participant ZoneWriter create LoadAction CacheConfig -> LoadAction: <> CacheConfig --> list: LoadAction deactivate CacheConfig create ZoneWriter list -> ZoneWriter: <> (LoadAction) list --> memmgr: ZoneWriter deactivate list memmgr -> ZoneWriter: load() activate ZoneWriter ZoneWriter -> LoadAction: (funcall) activate LoadAction participant ZoneData create ZoneData.2 LoadAction -> ZoneData.2: <> via helpers LoadAction --> ZoneWriter: ZoneData.2 deactivate LoadAction deactivate ZoneWriter memmgr -> ZoneWriter: install() activate ZoneWriter ZoneWriter -> ZoneTable: addZone(ZoneData.2) activate ZoneTable ZoneTable --> ZoneWriter: ZoneData (old data) deactivate ZoneTable deactivate ZoneWriter memmgr -> ZoneWriter: cleanup() activate ZoneWriter ZoneWriter -> ZoneData: <> destroy ZoneData deactivate ZoneWriter [<- 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: (repeat the\nsame sequence\nfor loading to the\nother segment) memmgr -> list: getCachedZoneWriter\n(zone_name) ... @enduml