public StaticFileHelixManager( String clusterName, String instanceName, InstanceType instanceType, String clusterViewFile) { _clusterName = clusterName; _instanceName = instanceName; _instanceType = instanceType; _clusterView = ClusterViewSerializer.deserialize(new File(clusterViewFile)); }
public static ClusterView convertStateModelMapToClusterView( String outFile, String instanceName, StateModelFactory<StateModel> stateModelFactory) { Map<String, StateModel> currentStateMap = stateModelFactory.getStateModelMap(); ClusterView curView = new ClusterView(); ClusterView.MemberInstance memberInstance = curView.getMemberInstance(instanceName, true); List<ZNRecord> curStateList = new ArrayList<ZNRecord>(); for (Map.Entry<String, StateModel> entry : currentStateMap.entrySet()) { String stateUnitKey = entry.getKey(); String curState = entry.getValue().getCurrentState(); ZNRecord record = new ZNRecord(stateUnitKey); record.setSimpleField(stateUnitKey, curState); curStateList.add(record); } memberInstance.setInstanceProperty(PropertyType.CURRENTSTATES, curStateList); // serialize to file // String outFile = "/tmp/curClusterView_" + instanceName +".json"; if (outFile != null) { // ClusterViewSerializer serializer = new // ClusterViewSerializer(outFile); // serializer.serialize(curView); ClusterViewSerializer.serialize(curView, new File(outFile)); } return curView; }
public static boolean verifyFileBasedClusterStates( String instanceName, String expectedFile, String curFile) { boolean ret = true; ClusterView expectedView = ClusterViewSerializer.deserialize(new File(expectedFile)); ClusterView curView = ClusterViewSerializer.deserialize(new File(curFile)); // ideal_state for instance with the given instanceName Map<String, String> idealStates = new HashMap<String, String>(); for (ZNRecord idealStateItem : expectedView.getPropertyList(PropertyType.IDEALSTATES)) { Map<String, Map<String, String>> allIdealStates = idealStateItem.getMapFields(); for (Map.Entry<String, Map<String, String>> entry : allIdealStates.entrySet()) { if (entry.getValue().containsKey(instanceName)) { String state = entry.getValue().get(instanceName); idealStates.put(entry.getKey(), state); } } } ClusterView.MemberInstance memberInstance = curView.getMemberInstance(instanceName, false); List<ZNRecord> curStateList = memberInstance.getInstanceProperty(PropertyType.CURRENTSTATES); if (curStateList == null && idealStates.size() > 0) { LOG.info("current state is null"); return false; } else if (curStateList == null && idealStates.size() == 0) { LOG.info("empty current state and ideal state"); return true; } else if (curStateList.size() != idealStates.size()) { LOG.info( "Number of current states (" + curStateList.size() + ") mismatch " + "number of ideal states (" + idealStates.size() + ")"); return false; } for (ZNRecord record : curStateList) { String stateUnitKey = record.getId(); String curState = record.getSimpleField(stateUnitKey); // if (!curState.equalsIgnoreCase("offline")) // nonOfflineNr++; if (!idealStates.containsKey(stateUnitKey)) { LOG.error("Current state does not contain " + stateUnitKey); ret = false; continue; } String idealState = idealStates.get(stateUnitKey); if (!curState.equalsIgnoreCase(idealState)) { LOG.error( "State mismatch--unit_key:" + stateUnitKey + " cur:" + curState + " ideal:" + idealState + " instance_name:" + instanceName); ret = false; continue; } } return ret; }