skip to main content
Ballot messages
Every ten seconds, each member server submits a ballot to each other member server in the group. The ballot message is a JSON-formatted data structure that looks like this:
{
"id": "a23b4555-e9e7-48ac-b6ce-5f79e56e9cd1",
"votes": 1,
"ms": 1710628477713,
"rids": [ "4d7e92ac-8c63-4950-aeba-4520e52e4cf8" ],
"lids": [ "4d7e92ac-8c63-4950-aeba-4520e52e4cf8" ],
"hmac": "f0e5286e1dc98645d026fa7880e302cfbb25b36d9231473aa2f66ed7c94d7def"
}
Each property in the message is described in the table below:
Property
Description
id
The unique ID of the member server who is submitting this ballot.
votes
The number of votes this member server is submitting for itself. This value is used to represent selection priority and makes it possible for an administrator to force a member server to become active, or to have precedence or subservience in an election. A negative value means the server is out of service (represented by toggling the "Enabled" switch in ICE Desktop to the off position); it continues to send ballots for purposes of quorum, but may not ever be made leader.
ms
A timestamp (represented in milliseconds since the Unix epoch) of when this ballot was submitted (transmitted to others).
rids
Race IDs: A list of zero or more race IDs that this member server is competing in. While this election system supports the ability for a member server to participate in multiple elections (races) simultaneously, in this context, there is only one race.
lids
Leading IDs: A list of zero or more race IDs that this member server is currently the leader of.
hmac
hashed message authentication code used to verify the authenticity of the ballot and to assure that a malicious attacker cannot affect the outcome of an election by submitting bogus ballots. The ms timestamp, in conjunction with this property prevents replay attacks. This cryptographic hash is based on a salt that is assigned to the server group and randomly generated at the time the server group is created.