Event Speed: The key rule which inhibits creation of duplicate entities is that followers of existing entities cannot spawn new entities. Instead, when they eventually sense the event, they must join the membership of the entity of which they were followers. By extending awareness of the event (i.e., the awareness horizon) beyond its sensory horizon we can ensure that new nodes will always become aware of the current entity before they sense the event. Hence, a single unique entity will exist for each event in the environment. The above uniqueness property is violated only if the event moves fast enough in the environment such that it is sensed by nodes outside of the awareness horizon before information of this event is propagated to them. Controlling the awareness horizon therefore determines the maximum tolerable event velocity as will be detailed below.
Note that a new leader is elected once the old one stops sensing the
target. This new leader will cause the center of the awareness horizon
to shift to its new location. If leader re-election and heartbeat
propagation took zero time, the system could theoretically track
infinitely fast targets as long as the awareness horizon was at least
double the sensory horizon. This is because the current leader would
always be within sensor radius from the target and no other node within
the sensory horizon could be more than twice the sensor radius away from
the leader. Hence, all nodes who sense the target are always within the
awareness horizon and are therefore inhibited from creating new
entities. In reality, however, leader re-election and heartbeat
propagation take time. If the maximum combined leader re-election and
heartbeat propagation delay was , it is easy to show that the maximum
speed that preserves entity uniqueness is
awareness horizon
sensory horizon
. It should be noted that the above is a
conservative estimate. Entity uniqueness will not be compromised
immediately at higher target speeds.
Robustness to Message Loss and Failure: To prevent handoff failure in the case that an entity leader dies or otherwise fails to send out the relinquish heartbeat message, each entity member sets a failed leader timer. This timer, upon expiration, prompts an entity member to assume the entity leader role and begin sending heartbeats after an additional random delay (to prevent simultaneous takeover collisions). This failed leader timer must be set to a value larger than the heartbeat period, the interval between heartbeats, to ensure that timer expiration does not occur prematurely while the current leader is still alive. Depending on expected message loss, one might also set this timer to a value greater than two or three times the heartbeat period to prevent inopportune and premature handoff when heartbeats are lost or subject to collisions. Note the delay that a node waits before assuming the entity leader role could be determined in accordance with the strength of a node's sensor reading, whether or not this sensor reading is growing or shrinking in strength, the number of entity members that are direct neighbors of that node, or by some other appropriate metric.
Message loss can also prevent nodes within the awareness horizon from getting the leader's heartbeats. Consequently, these nodes may not become aware of the entity and may create a spurious one when they sense the event. To kill such spurious entities, we employ a mechanism that associates larger weights with older entities and biases nodes against joining entities with smaller weights. The mechanism maintains an alive counter at the leader of each entity. This counter is propagated through heartbeats and its value is accumulated across leader handoffs. When a new entity is first created, its counter is initialized to 0. This value is then incremented for each heartbeat sent out and is therefore a reflection of how long the entity has remained in the network. When a node tries to spawn a new entity, every neighbor that is already part of an entity with a higher alive counter ignores the new node. Hence, the faulty node is isolated. The mechanism will send a kill message to the faulty node to request termination of its spurious entity.
The above mechanism serves to prevent spurious groups from forming in
the presence of message loss, but fails to handle the case
where events of the same signature migrate across one another's path.
To handle this more complex scenario we define a compile time specified
threshold, min time alive, to ensure entities that have existed
over some time period remain after crossing paths with an even older
entity. When a node of entity receives a heartbeat from the leader
of another entity
and both entities have an alive counter set
greater than the min time alive threshold, we require that both entities
coexist. In this case, nodes independently apply the EMM protocol with
respect to each entity. They may be within the awareness
horizon of multiple entities at the same time. When they sense the
event, they become members of all entities that exceed the min time
alive threshold of which they are aware.