sequenceDiagram
participant EdgeRuntime
participant Connector
participant Databus
participant App
EdgeRuntime ->> Databus : Start
EdgeRuntime ->> Connector : Start
Connector ->> Connector : Read configuration (hashVer=0x4567)
Connector ->> Databus : Connect and Login
Connector ->> Databus : Publish Metadata (retain=true, hashVer=0x4567)
Connector ->> Databus : Publish Values(retain=false, seq=1, hashVer=0x4567)
EdgeRuntime ->> App : Start
App ->> Databus : Subscribe for Metadata and Values
Databus ->> App : Notify Metadata (retain=true, hashVer=0x4567)
App ->> App: Build Name <=> Id Map
Connector ->> Databus : Publish values(retain=false, seq=2, hashVer=0x4567)
Databus ->> App : Notify Values(retain=false, seq=2, hashVer=0x4567)
Connector ->> Databus : Publish values(retain=false, seq=3, hashVer=0x4567)
Databus ->> App : Notify Values(retain=false, seq=3, hashVer=0x4567)
Connector ->> Connector : Detected Configuration Change
Connector ->> Connector : Restart
Connector ->> Connector : Read changed Configuration (hashVer=0x7825)
alt normal case: Metadata notification arrives before first Value notification
Connector ->> Databus : Publish Metadata (retain=true, hashVer=0x7825) (new hash)
Databus ->> App : Notify Metadata (retain=true, hashVer=0x7825)
App ->> App: Build Name <=> Id Map
Connector ->> Databus : Publish Values(retain=false, seq=1, hashVer=07825) (seq restarts)
Databus ->> App : Notify Values(retain=false, seq=1, hashVer=0x7825)
else inversion of message notification order: Value before new Metadata
Connector ->> Databus : Publish Metadata (retain=true, hashVer=0x7825) (new hash)
Connector ->> Databus : Publish Values(retain=false, seq=1, hashVer=07825) (seq restarts)
Databus ->> App : Notify Values(retain=false, seq=1, hashVer=0x7825) (requires updated metadata: ignore or put on hold)
Databus ->> App : Notify Metadata (retain=true, hashVer=0x7825)
App ->> App: Build Name <=> Id Map
end