/** * VMware Continuent Tungsten Replicator * Copyright (C) 2015 VMware, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Initial developer(s): Edward Archibald * Contributor(s): */ package com.continuent.tungsten.common.cluster.resource.notification; import com.continuent.tungsten.common.cluster.resource.ResourceState; import com.continuent.tungsten.common.cluster.resource.ResourceType; import com.continuent.tungsten.common.cluster.resource.physical.Replicator; import com.continuent.tungsten.common.config.TungstenProperties; public class ReplicationServiceNotification extends ClusterResourceNotification { /** * Used to determine if a given de-serialized object is compatible with this * class version.<br> * This value must be changed if and only if the new version of this class * is not compatible with old versions. See <a * href=http://java.sun.com/products/jdk/1.1/docs/guide * /serialization/spec/version.doc.html/> for a list of compatible changes. */ private static final long serialVersionUID = -2097111546144612171L; private static final String SERVICE_STATE_ONLINE = "ONLINE"; private static final String SERVICE_STATE_GOING_ONLINE = "GOING-ONLINE"; private static final String SERVICE_STATE_OFFLINE = "OFFLINE"; private static final String SERVICE_STATE_ERROR = "OFFLINE:ERROR"; private static final String SERVICE_STATE_BACKUP = "OFFLINE:BACKUP"; private static final String SERVICE_STATE_SYNCHRONIZING = "SYNCHRONIZING"; private static final String SERVICE_STATE_RESTORING = "RESTORING"; /** * @param clusterName * @param memberName * @param notificationSource * @param resourceName * @param resourceState * @param resourceProps */ public ReplicationServiceNotification(String clusterName, String memberName, String notificationSource, String resourceName, ResourceState resourceState, TungstenProperties resourceProps) { super(NotificationStreamID.MONITORING, clusterName, memberName, notificationSource, ResourceType.REPLICATION_SERVICE, resourceName, resourceState, resourceProps); } /** * Parses the given state provided by the replicator and guess a generic * resourceState from it * * @param state the state of the connected replicator, as provided by its * JMX state attribute * @return a resource state, one of {@link ResourceState} */ static public ResourceState replicatorStateToResourceState(String state) { if (state.startsWith(SERVICE_STATE_ONLINE)) return ResourceState.ONLINE; else if (state.startsWith(SERVICE_STATE_OFFLINE)) { if (state.equals(SERVICE_STATE_ERROR)) { return ResourceState.SUSPECT; } else if (state.equals(SERVICE_STATE_BACKUP)) { return ResourceState.BACKUP; } else { return ResourceState.OFFLINE; } } else if (state.contains(SERVICE_STATE_SYNCHRONIZING)) { return ResourceState.SYNCHRONIZING; } else if (state.startsWith(SERVICE_STATE_GOING_ONLINE)) { if (state.contains(SERVICE_STATE_RESTORING)) { return ResourceState.RESTORING; } else { return ResourceState.UNKNOWN; } } else return ResourceState.UNKNOWN; } public String getRole() { return resourceProps.getString(Replicator.ROLE); } public String getHost() { return resourceProps.getString(Replicator.HOST); } public String getDataServerHost() { return resourceProps.getString(Replicator.DATASERVER_HOST); } public String getMasterReplicator() { String masterUri = resourceProps .getString(Replicator.MASTER_CONNECT_URI); return masterUri.substring(masterUri.indexOf("//") + 2, masterUri.lastIndexOf("/")); } }