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.")

Reply via email to