Here is what the oracle server says right now as from OracleServer.java: /** * Oracle server is the responsible for providing incrementing logical timestamps to clients. It * should never give the same timestamp to two clients and it should always provide an incrementing * timestamp. * * <p> * If multiple oracle servers are run, they will choose a leader and clients will automatically * connect to that leader. If the leader goes down, the client will automatically fail over to the * next leader. In the case where an oracle fails over, the next oracle will begin a new block of * timestamps. */
I'd like to add some information to the first paragraph, and this might be useful just because. The conditions in the first paragraph create what is known as a strict ordering [1]. There are 3 conditions for a strict ordering on a set, let S be a set: 1) irreflexive: a < a is false for all a the timestamp gives out, TFAE: a is unique, and a != a for any a in S 2) antisymmetric: if a < b then ! b < a, for all a,b in S. This is pretty obvious but fundamental. 3) transitive: a < b and b < c then a < c, for all a,b,c in S. Again this is intuitive. Note by 1 that a != b and b !=c (and to be silly a != c is obvious), there must be three unique time stamps. Another equivalent definition is 'strictly increasing' [3], 'monotonic increasing' [2]. Calling the allocateTimestamp function strictly increasing or a strictly increasing function is also a pretty intuitive and mathematically sound statement. This would make precise what is being said in the first paragraph. Please give comments if this is too much geek/math or if its ok. [1] http://mathworld.wolfram.com/StrictOrder.html [2] http://mathworld.wolfram.com/MonotoneIncreasing.html [3] http://mathworld.wolfram.com/StrictlyIncreasingFunction.html