/* * Copyright (c) 2008-2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.coordinator.client.model; /** * The state of site, used to track state transaction during disaster recovery. **/ public enum SiteState { /** * Active site. Eligible for all provisioning operations */ ACTIVE { @Override public boolean isDROperationOngoing() { return false; } }, /** * Active site is doing planned failover */ ACTIVE_SWITCHING_OVER { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_SWITCHOVER; } }, /** * Active site is doing failover */ ACTIVE_FAILING_OVER { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_FAILOVER; } }, /** * Active site is back after failover, site has been down graded. */ ACTIVE_DEGRADED { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site. Adding site */ STANDBY_ADDING { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_ADD_STANDBY; } }, /** * Standby site. Syncing from an active one */ STANDBY_SYNCING { @Override public boolean isDROperationOngoing() { return true; } }, /** * Standby site. Synced with active one */ STANDBY_SYNCED { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site. Replication is being paused */ STANDBY_PAUSING { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_PAUSE_STANDBY; } }, /** * Standby site. Replication is paused */ STANDBY_PAUSED { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site. Db is being excluded from strategy options */ STANDBY_DEGRADING { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_DEGRADE_STANDBY; } }, /** * Standby site. Db is excluded from strategy options */ STANDBY_DEGRADED { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site. Run DR testing */ STANDBY_TESTING { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site is doing planned failover */ STANDBY_SWITCHING_OVER { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_SWITCHOVER; } }, /** * Standby site is doing failover */ STANDBY_FAILING_OVER { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_FAILOVER; } }, /** * Standby site. Removing */ STANDBY_REMOVING { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_REMOVE_STANDBY; } }, /** * Standby site. Syncing incremental data to standby */ STANDBY_INCR_SYNCING { @Override public boolean isDROperationOngoing() { return false; } }, /** * Standby site. Resuming */ STANDBY_RESUMING { @Override public boolean isDROperationOngoing() { return true; } @Override public String getDRAction() { return SiteInfo.DR_OP_RESUME_STANDBY; } }, /** * Unrecoverable error for this standby site */ STANDBY_ERROR { @Override public boolean isDROperationOngoing() { return false; } }, /** * None state for dummy active site */ NONE { @Override public boolean isDROperationOngoing() { return false; } }; /** * Check if this SiteState indicates that a DR Operation is ongoing * * @return True if there is a DR Operation ongoing, false otherwise */ public abstract boolean isDROperationOngoing(); public String getDRAction() { return SiteInfo.NONE; } }