/** * Return whether AM finishes the meta loading, i.e, the region states rebuilding. * @see #isMetaAssigned() * @see #waitMetaLoaded(Procedure) */ public boolean isMetaLoaded() { return metaLoadEvent.isReady(); }
/** * Notice that, this only means the meta region is available on a RS, but the AM may still be * loading the region states from meta, so usually you need to check {@link #isMetaLoaded()} first * before checking this method, unless you can make sure that your piece of code can only be * executed after AM builds the region states. * @see #isMetaLoaded() */ public boolean isMetaAssigned() { return metaAssignEvent.isReady(); }
/** * Report whether this master has completed with its initialization and is * ready. If ready, the master is also the active master. A standby master * is never ready. * * This method is used for testing. * * @return true if master is ready to go, false if not. */ @Override public boolean isInitialized() { return initialized.isReady(); }
@Override public String toString() { return getClass().getSimpleName() + " for " + object + ", ready=" + isReady() + ", " + suspendedProcedures; } }
public void wake(MasterProcedureScheduler scheduler) { if (!event.isReady()) { event.wake(scheduler); } }
public void wake(MasterProcedureScheduler scheduler) { if (!event.isReady()) { event.wake(scheduler); } } }
public void unlock(final MasterProcedureEnv env) { unlock.set(true); locked.set(false); // Maybe timeout already awakened the event and the procedure has finished. synchronized (event) { if (!event.isReady()) { setState(ProcedureProtos.ProcedureState.RUNNABLE); event.wake(env.getProcedureScheduler()); } } }
/** * Re run the procedure after every timeout to write new WAL entries so we don't hold back old * WALs. * @return false, so procedure framework doesn't mark this procedure as failure. */ @Override protected synchronized boolean setTimeoutFailure(final MasterProcedureEnv env) { synchronized (event) { if (LOG.isDebugEnabled()) LOG.debug("Timeout failure " + this.event); if (!event.isReady()) { // Maybe unlock() awakened the event. setState(ProcedureProtos.ProcedureState.RUNNABLE); if (LOG.isDebugEnabled()) LOG.debug("Calling wake on " + this.event); event.wake(env.getProcedureScheduler()); } } return false; // false: do not mark the procedure as failed. }
@Override public void remoteCallFailed(MasterProcedureEnv env, ServerName remote, IOException exception) { RegionStateNode regionNode = getRegionNode(env); regionNode.lock(); try { ProcedureEvent<?> event = regionNode.getProcedureEvent(); if (event.isReady()) { LOG.warn( "The procedure event of procedure {} for region {} to server {} is not suspended, " + "usually this should not happen, but anyway let's skip the following wake up code, ", this, region, targetServer); return; } LOG.warn("The remote operation {} for region {} to server {} failed", this, region, targetServer, exception); event.wake(env.getProcedureScheduler()); } finally { regionNode.unlock(); } }
assertEquals(false, event.isReady()); assertEquals(0, event.getSuspendedProcedures().size()); assertEquals(false, event.isReady()); assertEquals(1, event.getSuspendedProcedures().size()); assertEquals(true, event.isReady()); assertEquals(true, event.isReady()); assertEquals(0, event.getSuspendedProcedures().size()); LOG.debug("completed execution of " + proc +
@Override public String toString() { return getClass().getSimpleName() + " for " + object + ", ready=" + isReady() + ", " + suspendedProcedures; } }
@Override public String toString() { return getClass().getSimpleName() + " for " + object + ", ready=" + isReady() + ", " + suspendedProcedures; } }
assertEquals(false, event.isReady()); assertEquals(0, event.getSuspendedProcedures().size()); assertEquals(false, event.isReady()); assertEquals(1, event.getSuspendedProcedures().size()); assertEquals(true, event.isReady()); assertEquals(true, event.isReady()); assertEquals(0, event.getSuspendedProcedures().size()); LOG.debug("completed execution of " + proc +