title E2T Init flow participant E2 Manager as E2M participant E2 Terminator instance as E2T participant RanReconnectionManager as RRM participant E2tAssociationManager as EAM participant E2TInstancesManager as E2TM participant RoutingManagerClient as RMC participant rNib DB as RNIB E2T->E2M: INIT {} E2M->E2TM: GetE2TInstance(e2tAddress) E2TM->RNIB: GetE2TInstance(e2tAddress) alt existing E2T RNIB->E2TM: E2TInstance {Address:...,AssociatedRanList:[...]} E2TM->E2M: E2TInstance alt state: TO_BE_DELETED note over E2M: Log it.\nSTOP else state: RM_FAILURE E2M->+E2TM: SetE2tInstanceState(RM_FAILURE, ACTIVE) alt error E2TM->E2M: error note over E2M: Log it.\nSTOP else success E2TM->-E2M: ok end note over E2M: Proceed as ACTIVE... else state: ACTIVE loop all associated RANs E2M->RRM: ReconnectRan RRM->RNIB: GetNodeb RNIB->RRM: ok alt RAN's connection status is SHUT_DOWN note over RRM: return else RAN's connection status is SHUTTING_DOWN RRM->RNIB: UpdateNodeb(SHUT_DOWN) else RAN's connection attempts >= MaxConnectionAttempts? RRM->RNIB: UpdateNodeb(DISCONNECTED) RRM->+EAM: DissociateRan(ranName, e2tAddress) note over EAM: Detailed in another sequence diagram... EAM-->-RRM: ok else Can reconnect note over RRM: execute Setup end end else new E2T (error: ResourceNotFoundError) RNIB->E2TM: err ResourceNotFoundError E2TM->E2M: err ResourceNotFoundError E2M->+RMC: POST /handles/v1/e2t alt RM failure RMC->E2M: 4xx/5xx/TO note over E2M: Log it.\nSTOP else RM success RMC->-E2M: 201 end E2M->+E2TM: AddE2TInstance(et2Address) note over E2TM: Create E2tInstance:\nkeepAliveTimestamp = now\nstate = ACTIVE note over E2TM: Lock (atomic operation) E2TM->+RNIB: SaveE2TInstance(E2TInstance:
) RNIB-->-E2TM: ok E2TM->+RNIB: GetE2TAddresses RNIB-->-E2TM: []string note over E2TM: add e2t address to list E2TM->+RNIB: SaveE2TAddresses RNIB-->-E2TM: ok note over E2TM: Unlock E2TM-->-E2M: ok note over E2M: In case of save failure, log it #E2M->E2M: iterate orphan RANs (?) #counter (?) else error (InternalError) RNIB->-E2TM: err InternalError E2TM->E2M: err InternalError note over E2M: log error end