Assert.fail("Fail to register ClusterStatusMonitor");
}
// Test #setPerInstanceResourceStatus()
BestPossibleStateOutput bestPossibleStates = new BestPossibleStateOutput();
ResourceAssignment assignment = new ResourceAssignment(ResourceId.from(testDB));
Map<ParticipantId, State> replicaMap = Maps.newHashMap();
replicaMap.put(ParticipantId.from("localhost_12918"), State.from("MASTER"));
replicaMap.put(ParticipantId.from("localhost_12919"), State.from("SLAVE"));
replicaMap.put(ParticipantId.from("localhost_12920"), State.from("SLAVE"));
replicaMap.put(ParticipantId.from("localhost_12921"), State.from("OFFLINE"));
replicaMap.put(ParticipantId.from("localhost_12922"), State.from("DROPPED"));
assignment.addReplicaMap(PartitionId.from(testDB_0), replicaMap);
bestPossibleStates.setResourceAssignment(ResourceId.from(testDB), assignment);
Map<String, InstanceConfig> instanceConfigMap = Maps.newHashMap();
for (int i = 0; i < n; i++) {
String instanceName = "localhost_" + (12918 + i);
InstanceConfig config = new InstanceConfig(instanceName);
instanceConfigMap.put(instanceName, config);
}
Map<ResourceId, ResourceConfig> resourceMap = Maps.newHashMap();
ResourceId resourceId = ResourceId.from(testDB);
AutoModeISBuilder idealStateBuilder = new AutoModeISBuilder(resourceId).add(testDB_0);
idealStateBuilder.setStateModel("MasterSlave");
IdealState idealState = idealStateBuilder.build();
ResourceConfig resourceConfig =
new ResourceConfig.Builder(resourceId).idealState(idealState).build();
resourceMap.put(resourceId, resourceConfig);
Map<String, StateModelDefinition> stateModelDefMap = Maps.newHashMap();
StateModelDefinition msStateModelDef =
new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave());
stateModelDefMap.put("MasterSlave", msStateModelDef);
monitor.setPerInstanceResourceStatus(bestPossibleStates, instanceConfigMap, resourceMap,
stateModelDefMap);
// localhost_12918 should have 1 partition because it's MASTER
ObjectName objName =
monitor.getObjectName(monitor.getPerInstanceResourceBeanName("localhost_12918", testDB));
Object value = _server.getAttribute(objName, "PartitionGauge");
Assert.assertTrue(value instanceof Long);
Assert.assertEquals((Long) value, new Long(1));
value = _server.getAttribute(objName, "SensorName");
Assert.assertTrue(value instanceof String);
Assert.assertEquals((String) value, String.format("%s.%s.%s.%s.%s",
ClusterStatusMonitor.PARTICIPANT_STATUS_KEY, clusterName, ClusterStatusMonitor.DEFAULT_TAG,
"localhost_12918", testDB));
// localhost_12919 should have 1 partition because it's SLAVE
objName =
monitor.getObjectName(monitor.getPerInstanceResourceBeanName("localhost_12919", testDB));
value = _server.getAttribute(objName, "PartitionGauge");
Assert.assertTrue(value instanceof Long);
Assert.assertEquals((Long) value, new Long(1));
// localhost_12921 should have 0 partition because it's OFFLINE
objName =
monitor.getObjectName(monitor.getPerInstanceResourceBeanName("localhost_12921", testDB));
value = _server.getAttribute(objName, "PartitionGauge");
Assert.assertTrue(value instanceof Long);
Assert.assertEquals((Long) value, new Long(0));
// localhost_12922 should have 0 partition because it's DROPPED
objName =
monitor.getObjectName(monitor.getPerInstanceResourceBeanName("localhost_12922", testDB));
value = _server.getAttribute(objName, "PartitionGauge");
Assert.assertTrue(value instanceof Long);
Assert.assertEquals((Long) value, new Long(0));
// Missing localhost_12918 in best possible ideal-state should remove it from mbean
replicaMap.remove(ParticipantId.from("localhost_12918"));
assignment.addReplicaMap(PartitionId.from(testDB_0), replicaMap);
bestPossibleStates.setResourceAssignment(ResourceId.from(testDB), assignment);
monitor.setPerInstanceResourceStatus(bestPossibleStates, instanceConfigMap, resourceMap,
stateModelDefMap);
try {
objName =