Updated Branches: refs/heads/trunk 468e69765 -> 0214bfbfc
Support weighting the leveldb store replication nodes so that some have a better chance of becoming the master than others. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/0214bfbf Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/0214bfbf Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/0214bfbf Branch: refs/heads/trunk Commit: 0214bfbfcdef3e68d02b23d006a6f039ef8e154f Parents: 468e697 Author: Hiram Chirino <[email protected]> Authored: Thu Oct 10 15:41:14 2013 -0400 Committer: Hiram Chirino <[email protected]> Committed: Thu Oct 10 15:42:02 2013 -0400 ---------------------------------------------------------------------- .../activemq/leveldb/replicated/ElectingLevelDBStore.scala | 2 ++ .../apache/activemq/leveldb/replicated/MasterElector.scala | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/0214bfbf/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/ElectingLevelDBStore.scala ---------------------------------------------------------------------- diff --git a/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/ElectingLevelDBStore.scala b/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/ElectingLevelDBStore.scala index c397760..53e9971 100644 --- a/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/ElectingLevelDBStore.scala +++ b/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/ElectingLevelDBStore.scala @@ -82,6 +82,8 @@ class ElectingLevelDBStore extends ProxyLevelDBStore { var bind = "tcp://0.0.0.0:61619" @BeanProperty + var weight = 1 + @BeanProperty var replicas = 3 @BeanProperty var sync="quorum_mem" http://git-wip-us.apache.org/repos/asf/activemq/blob/0214bfbf/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/MasterElector.scala ---------------------------------------------------------------------- diff --git a/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/MasterElector.scala b/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/MasterElector.scala index 2abfbfe..216e7cd 100644 --- a/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/MasterElector.scala +++ b/activemq-leveldb-store/src/main/scala/org/apache/activemq/leveldb/replicated/MasterElector.scala @@ -37,6 +37,9 @@ class LevelDBNodeState extends NodeState { var position: Long = -1 @JsonProperty + var weight: Int = 0 + + @JsonProperty var elected: String = _ override def equals(obj: Any): Boolean = { @@ -93,6 +96,7 @@ class MasterElector(store: ElectingLevelDBStore) extends ClusteredSingleton[Leve rc.id = store.brokerName rc.elected = elected rc.position = position + rc.weight = store.weight rc.address = address rc.container = store.container rc.address = address @@ -140,7 +144,10 @@ class MasterElector(store: ElectingLevelDBStore) extends ClusteredSingleton[Leve if (elected == null) { // Find the member with the most updates. val sortedMembers = members.filter(_._2.position >= 0).sortWith { - (a, b) => a._2.position > b._2.position + (a, b) => { + a._2.position > b._2.position || + (a._2.position == b._2.position && a._2.weight > b._2.weight ) + } } if (sortedMembers.size != members.size) { info("Not enough cluster members have reported their update positions yet.")
