When announcing an endpoint with additional endpoints they all need to join
the path together. However, announcements are decoupled and can happen in any
order. The ZkAnnouncer will gather endpoints together in order to announce
them as a group. Main endpoints are required and are thus announced immediately
while additional endpoints are only announced if the path also has a main
endpoint. For this reason if a main endpoint is announced first and an additional
endpoint announced later, the announcer must leave the path and re-announce. The
process is similar: leave the path, then remove either the additional endpoint
or the main endpoint, re-join only if the main endpoint exists.
When announcing an endpoint with additional endpoints they all need to join the path together. However, announcements are decoupled and can happen in any order. The ZkAnnouncer will gather endpoints together in order to announce them as a group. Main endpoints are required and are thus announced immediately while additional endpoints are only announced if the path also has a main endpoint. For this reason if a main endpoint is announced first and an additional endpoint announced later, the announcer must leave the path and re-announce. The process is similar: leave the path, then remove either the additional endpoint or the main endpoint, re-join only if the main endpoint exists.