Committed by
Gerrit Code Review
MastershipManager: make "useRegionForBalanceRoles" a property
useRegionForBalance roles has been available for a while but seems to only be accessed directly (it's a public field). It'd be useful to be able to change that using the CLI. Change-Id: If8c6dfbb300513e4d8dc0ba3d0d8f6ce9eac036a
Showing
2 changed files
with
43 additions
and
0 deletions
... | @@ -23,10 +23,14 @@ import com.google.common.util.concurrent.Futures; | ... | @@ -23,10 +23,14 @@ import com.google.common.util.concurrent.Futures; |
23 | import org.apache.felix.scr.annotations.Activate; | 23 | import org.apache.felix.scr.annotations.Activate; |
24 | import org.apache.felix.scr.annotations.Component; | 24 | import org.apache.felix.scr.annotations.Component; |
25 | import org.apache.felix.scr.annotations.Deactivate; | 25 | import org.apache.felix.scr.annotations.Deactivate; |
26 | +import org.apache.felix.scr.annotations.Modified; | ||
27 | +import org.apache.felix.scr.annotations.Property; | ||
26 | import org.apache.felix.scr.annotations.Reference; | 28 | import org.apache.felix.scr.annotations.Reference; |
27 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 29 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
28 | import org.apache.felix.scr.annotations.Service; | 30 | import org.apache.felix.scr.annotations.Service; |
29 | import org.onlab.metrics.MetricsService; | 31 | import org.onlab.metrics.MetricsService; |
32 | +import org.onosproject.cfg.ComponentConfigService; | ||
33 | +import org.onosproject.cfg.ConfigProperty; | ||
30 | import org.onosproject.cluster.ClusterService; | 34 | import org.onosproject.cluster.ClusterService; |
31 | import org.onosproject.cluster.ControllerNode; | 35 | import org.onosproject.cluster.ControllerNode; |
32 | import org.onosproject.cluster.NodeId; | 36 | import org.onosproject.cluster.NodeId; |
... | @@ -97,12 +101,22 @@ public class MastershipManager | ... | @@ -97,12 +101,22 @@ public class MastershipManager |
97 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 101 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
98 | protected RegionService regionService; | 102 | protected RegionService regionService; |
99 | 103 | ||
104 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
105 | + protected ComponentConfigService cfgService; | ||
106 | + | ||
100 | private NodeId localNodeId; | 107 | private NodeId localNodeId; |
101 | private Timer requestRoleTimer; | 108 | private Timer requestRoleTimer; |
109 | + | ||
110 | + static final boolean DEFAULT_USE_REGION_FOR_BALANCE_ROLES = false; | ||
111 | + @Property(name = "useRegionForBalanceRoles", boolValue = DEFAULT_USE_REGION_FOR_BALANCE_ROLES, | ||
112 | + label = "Use Regions for balancing roles") | ||
102 | public boolean useRegionForBalanceRoles; | 113 | public boolean useRegionForBalanceRoles; |
103 | 114 | ||
104 | @Activate | 115 | @Activate |
105 | public void activate() { | 116 | public void activate() { |
117 | + cfgService.registerProperties(getClass()); | ||
118 | + modified(); | ||
119 | + | ||
106 | requestRoleTimer = createTimer("Mastership", "requestRole", "responseTime"); | 120 | requestRoleTimer = createTimer("Mastership", "requestRole", "responseTime"); |
107 | localNodeId = clusterService.getLocalNode().id(); | 121 | localNodeId = clusterService.getLocalNode().id(); |
108 | eventDispatcher.addSink(MastershipEvent.class, listenerRegistry); | 122 | eventDispatcher.addSink(MastershipEvent.class, listenerRegistry); |
... | @@ -110,11 +124,22 @@ public class MastershipManager | ... | @@ -110,11 +124,22 @@ public class MastershipManager |
110 | log.info("Started"); | 124 | log.info("Started"); |
111 | } | 125 | } |
112 | 126 | ||
127 | + @Modified | ||
128 | + public void modified() { | ||
129 | + Set<ConfigProperty> configProperties = cfgService.getProperties(getClass().getCanonicalName()); | ||
130 | + for (ConfigProperty property : configProperties) { | ||
131 | + if (property.name().equals("useRegionForBalanceRoles")) { | ||
132 | + useRegionForBalanceRoles = property.asBoolean(); | ||
133 | + } | ||
134 | + } | ||
135 | + } | ||
136 | + | ||
113 | @Deactivate | 137 | @Deactivate |
114 | public void deactivate() { | 138 | public void deactivate() { |
115 | eventDispatcher.removeSink(MastershipEvent.class); | 139 | eventDispatcher.removeSink(MastershipEvent.class); |
116 | store.unsetDelegate(delegate); | 140 | store.unsetDelegate(delegate); |
117 | log.info("Stopped"); | 141 | log.info("Stopped"); |
142 | + cfgService.unregisterProperties(getClass(), false); | ||
118 | } | 143 | } |
119 | 144 | ||
120 | @Override | 145 | @Override | ... | ... |
... | @@ -21,11 +21,13 @@ import java.util.function.Consumer; | ... | @@ -21,11 +21,13 @@ import java.util.function.Consumer; |
21 | 21 | ||
22 | import com.google.common.collect.ImmutableList; | 22 | import com.google.common.collect.ImmutableList; |
23 | import com.google.common.collect.ImmutableSet; | 23 | import com.google.common.collect.ImmutableSet; |
24 | +import org.easymock.EasyMock; | ||
24 | import org.junit.After; | 25 | import org.junit.After; |
25 | import org.junit.Before; | 26 | import org.junit.Before; |
26 | import org.junit.Test; | 27 | import org.junit.Test; |
27 | import org.onlab.junit.TestUtils; | 28 | import org.onlab.junit.TestUtils; |
28 | import org.onlab.packet.IpAddress; | 29 | import org.onlab.packet.IpAddress; |
30 | +import org.onosproject.cfg.ComponentConfigService; | ||
29 | import org.onosproject.cluster.ClusterService; | 31 | import org.onosproject.cluster.ClusterService; |
30 | import org.onosproject.cluster.ControllerNode; | 32 | import org.onosproject.cluster.ControllerNode; |
31 | import org.onosproject.cluster.DefaultControllerNode; | 33 | import org.onosproject.cluster.DefaultControllerNode; |
... | @@ -47,6 +49,10 @@ import org.onosproject.store.trivial.SimpleMastershipStore; | ... | @@ -47,6 +49,10 @@ import org.onosproject.store.trivial.SimpleMastershipStore; |
47 | import com.google.common.collect.Sets; | 49 | import com.google.common.collect.Sets; |
48 | import com.google.common.util.concurrent.Futures; | 50 | import com.google.common.util.concurrent.Futures; |
49 | 51 | ||
52 | +import static org.easymock.EasyMock.anyObject; | ||
53 | +import static org.easymock.EasyMock.expect; | ||
54 | +import static org.easymock.EasyMock.expectLastCall; | ||
55 | +import static org.easymock.EasyMock.replay; | ||
50 | import static org.junit.Assert.*; | 56 | import static org.junit.Assert.*; |
51 | import static org.onosproject.net.MastershipRole.MASTER; | 57 | import static org.onosproject.net.MastershipRole.MASTER; |
52 | import static org.onosproject.net.MastershipRole.NONE; | 58 | import static org.onosproject.net.MastershipRole.NONE; |
... | @@ -106,6 +112,18 @@ public class MastershipManagerTest { | ... | @@ -106,6 +112,18 @@ public class MastershipManagerTest { |
106 | TestUtils.setField(regionManager, "store", regionStore); | 112 | TestUtils.setField(regionManager, "store", regionStore); |
107 | regionManager.activate(); | 113 | regionManager.activate(); |
108 | mgr.regionService = regionManager; | 114 | mgr.regionService = regionManager; |
115 | + | ||
116 | + ComponentConfigService mockConfigService = | ||
117 | + EasyMock.createMock(ComponentConfigService.class); | ||
118 | + expect(mockConfigService.getProperties(anyObject())).andReturn(ImmutableSet.of()); | ||
119 | + mockConfigService.registerProperties(mgr.getClass()); | ||
120 | + expectLastCall(); | ||
121 | + mockConfigService.unregisterProperties(mgr.getClass(), false); | ||
122 | + expectLastCall(); | ||
123 | + expect(mockConfigService.getProperties(anyObject())).andReturn(ImmutableSet.of()); | ||
124 | + mgr.cfgService = mockConfigService; | ||
125 | + replay(mockConfigService); | ||
126 | + | ||
109 | mgr.activate(); | 127 | mgr.activate(); |
110 | } | 128 | } |
111 | 129 | ... | ... |
-
Please register or login to post a comment