public static int transitionNodeOpening(ZooKeeperWatcher zkw, EntityGroupInfo entityGroup, ServerName serverName, final EventType beginState) throws KeeperException { return transitionNode(zkw, entityGroup, serverName, beginState, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, -1); }
/** * Fakes the regionserver-side zk transitions of a region open. * @param w ZooKeeperWatcher to use. * @param sn Name of the regionserver doing the 'opening' * @param egInfo EntityGroup we're 'opening'. * @throws org.apache.zookeeper.KeeperException * @throws com.alibaba.wasp.DeserializationException */ static void fakeEntityGroupServerEntityGroupOpenInZK(FMaster master, final ZooKeeperWatcher w, final ServerName sn, final EntityGroupInfo egInfo) throws KeeperException, DeserializationException, InterruptedException { // Wait till the we region is ready to be open in RIT. waitForEntityGroupPendingOpenInRIT(master.getAssignmentManager(), egInfo.getEncodedName()); // Get current versionid else will fail on transition from OFFLINE to OPENING below int versionid = ZKAssign.getVersion(w, egInfo); assertNotSame(-1, versionid); // This uglyness below is what the openregionhandler on FSERVER side does. I // looked at exposing the method over in openregionhandler but its just a // one liner and its deep over in another package so just repeat it below. versionid = ZKAssign.transitionNode(w, egInfo, sn, EventType.M_ZK_ENTITYGROUP_OFFLINE, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, versionid); assertNotSame(-1, versionid); // Move znode from OPENING to OPENED as FSERVER does on successful open. versionid = ZKAssign.transitionNodeOpened(w, egInfo, sn, versionid); assertNotSame(-1, versionid); // We should be done now. The master open handler will notice the // transition and remove this regions znode. }
versionid = ZKAssign.transitionNode(server.getZooKeeper(), ENTITYGROUPINFO, SERVERNAME_A, EventHandler.EventType.M_ZK_ENTITYGROUP_OFFLINE, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_OPENING, versionid);
/** * * @param zkw * zk reference * @param parent * entityGroup to be transitioned to splitting * @param serverName * server event originates from * @param version * znode version * @return version of node after transition, -1 if unsuccessful transition * @throws org.apache.zookeeper.KeeperException * @throws java.io.IOException */ int transitionNodeSplitting(final ZooKeeperWatcher zkw, final EntityGroupInfo parent, final ServerName serverName, final int version) throws KeeperException, IOException { return ZKAssign.transitionNode(zkw, parent, serverName, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLITTING, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLITTING, version); }
EntityGroupInfo entityGroup, ServerName serverName, int expectedVersion) throws KeeperException { return transitionNode(zkw, entityGroup, serverName, EventType.M_ZK_ENTITYGROUP_CLOSING, EventType.FSERVER_ZK_ENTITYGROUP_CLOSED, expectedVersion);
EntityGroupInfo entityGroup, ServerName serverName, int expectedVersion) throws KeeperException { return transitionNode(zkw, entityGroup, serverName, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, EventType.FSERVER_ZK_ENTITYGROUP_OPENED, expectedVersion);
ServerName serverName, EventType beginState, EventType endState, int expectedVersion) throws KeeperException { return transitionNode(zkw, entityGroup, serverName, beginState, endState, expectedVersion, null);
EntityGroupInfo entityGroup, ServerName serverName, int expectedVersion) throws KeeperException { return transitionNode(zkw, entityGroup, serverName, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, expectedVersion);
private static int tickleNodeSplit(ZooKeeperWatcher zkw, EntityGroupInfo parent, EntityGroupInfo a, EntityGroupInfo b, ServerName serverName, final int znodeVersion) throws KeeperException, IOException { byte[] payload = EntityGroupInfo.toDelimitedByteArray(a, b); return ZKAssign.transitionNode(zkw, parent, serverName, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLIT, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLIT, znodeVersion, payload); } }
IOException { byte[] payload = EntityGroupInfo.toDelimitedByteArray(a, b); return ZKAssign.transitionNode(zkw, parent, serverName, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLITTING, EventHandler.EventType.FSERVER_ZK_ENTITYGROUP_SPLIT, znodeVersion,
/** * @param egi * we're working on. This is not guaranteed to succeed, we just do * our best. * @return whether znode is successfully transitioned to FAILED_OPEN state. */ private boolean tryTransitionToFailedOpen(final EntityGroupInfo egi) { boolean result = false; final String name = egi.getEntityGroupNameAsString(); try { LOG.info("Opening of entityGroup " + egi + " failed, marking as FAILED_OPEN in ZK"); if (ZKAssign.transitionNode(this.server.getZooKeeper(), egi, this.server.getServerName(), EventType.FSERVER_ZK_ENTITYGROUP_OPENING, EventType.FSERVER_ZK_ENTITYGROUP_FAILED_OPEN, this.version) == -1) { LOG.warn("Unable to mark entityGroup " + egi + " as FAILED_OPEN. " + "It's likely that the master already timed out this open " + "attempt, and thus another RS already has the entityGroup."); } else { result = true; } } catch (KeeperException e) { LOG.error("Failed transitioning node " + name + " from OPENING to FAILED_OPEN", e); } return result; }
/** * Transition ZK node from OFFLINE to OPENING. * * @param encodedName * Name of the znode file (EntityGroup encodedName is the znode * name). * @param versionOfOfflineNode * - version Of OfflineNode that needs to be compared before changing * the node's state from OFFLINE * @return True if successful transition. */ boolean transitionZookeeperOfflineToOpening(final String encodedName, int versionOfOfflineNode) { try { // Initialize the znode version. this.version = ZKAssign.transitionNode(server.getZooKeeper(), entityGroupInfo, server.getServerName(), EventType.M_ZK_ENTITYGROUP_OFFLINE, EventType.FSERVER_ZK_ENTITYGROUP_OPENING, versionOfOfflineNode); } catch (KeeperException e) { LOG.error("Error transition from OFFLINE to OPENING for entityGroup=" + encodedName, e); } boolean b = isGoodVersion(); if (!b) { LOG.warn("Failed transition from OFFLINE to OPENING for entityGroup=" + encodedName); } return b; }
stat.getVersion()); ZKAssign.transitionNode(zkw, entityGroup.getEntityGroupInfo(), server.getServerName(), EventType.FSERVER_ZK_ENTITYGROUP_OPENED, EventType.FSERVER_ZK_ENTITYGROUP_OPENED, stat.getVersion());