public void reconfigureInstance(String name, String params) throws NoAssignmentException, InterruptedException, KeeperException { if (LOG.isDebugEnabled()) { LOG.debug("Reconfiguring " + name + " with " + params); } Assigned assigned = instanceToAssignment.get(name); if (assigned == null) { throw new NoAssignmentException(); } KeeperException lastException = null; for(int i = 0; i < maxTries; i++) { try { zk.setData(assignmentsNode + '/' + assigned.container + '/' + name, ("update " + params).getBytes(), -1); break; } catch (ConnectionLossException e) { lastException = e; } } if (lastException != null) { throw lastException; } }
/** * Ensure the client is able to talk to the server. * * @param idx the idx of the server the client is talking to */ private void checkClientConnected(int idx) throws Exception { ZooKeeper zk = getClient(idx); if (zk == null) { return; } try { assertNull(zk.exists("/foofoofoo-connected", false)); } catch (ConnectionLossException e) { // second chance... // in some cases, leader change in particular, the timing is // very tricky to get right in order to assure that the client has // disconnected and reconnected. In some cases the client will // disconnect, then attempt to reconnect before the server is // back, in which case we'll see another connloss on the operation // in the try, this catches that case and waits for the server // to come back PeerStruct peer = qu.getPeer(idx); Assert.assertTrue("Waiting for server down", ClientBase.waitForServerUp( "127.0.0.1:" + peer.clientPort, ClientBase.CONNECTION_TIMEOUT)); assertNull(zk.exists("/foofoofoo-connected", false)); } }
/** * Create the znodes, this may fail if the lower 32 roll over, if so * wait for the clients to be re-connected after the re-election */ private int createNodes(ZooKeeper zk, int start, int count) throws Exception { LOG.info("Creating nodes " + start + " thru " + (start + count)); int j = 0; try { for (int i = start; i < start + count; i++) { zk.create("/foo" + i, new byte[0], Ids.READ_ACL_UNSAFE, CreateMode.EPHEMERAL); j++; } } catch (ConnectionLossException e) { // this is ok - the leader has dropped leadership waitForClientsConnected(); } return j; }
/** * Ensure the client is able to talk to the server. * * @param idx the idx of the server the client is talking to */ private void checkClientConnected(int idx) throws Exception { ZooKeeper zk = getClient(idx); if (zk == null) { return; } try { Assert.assertNull(zk.exists("/foofoofoo-connected", false)); } catch (ConnectionLossException e) { // second chance... // in some cases, leader change in particular, the timing is // very tricky to get right in order to assure that the client has // disconnected and reconnected. In some cases the client will // disconnect, then attempt to reconnect before the server is // back, in which case we'll see another connloss on the operation // in the try, this catches that case and waits for the server // to come back PeerStruct peer = qu.getPeer(idx); Assert.assertTrue("Waiting for server down", ClientBase.waitForServerUp( "127.0.0.1:" + peer.clientPort, ClientBase.CONNECTION_TIMEOUT)); Assert.assertNull(zk.exists("/foofoofoo-connected", false)); } }
/** * Create the znodes, this may fail if the lower 32 roll over, if so * wait for the clients to be re-connected after the re-election */ private int createNodes(ZooKeeper zk, int start, int count) throws Exception { LOG.info("Creating nodes {} thru {}", start, (start + count)); int j = 0; try { for (int i = start; i < start + count; i++) { zk.create("/foo" + i, new byte[0], Ids.READ_ACL_UNSAFE, CreateMode.EPHEMERAL); j++; } } catch (ConnectionLossException e) { // this is ok - the leader has dropped leadership waitForClientsConnected(); } return j; }
public void start() { Preconditions.checkNotNull(nameSpace, "nameSpace can not be null"); Preconditions.checkNotNull(zkurl, "zkurl can not be null"); zkClient = RegisterHolder.getClient(zkurl); pathChildrenCache = new PathChildrenCache(zkClient, "/" + nameSpace, true); pathChildrenCache.getListenable().addListener(this); try { pathChildrenCache.start(); initDataFromZk(); } catch (Exception e) { // zookeeper cluster 不可用时,load the conf from localfile if (e instanceof ConnectionLossException) { logger.error(" ConnectionLossException has happen ,start to laod the local confFile to mem"); } } }
/** * Create the znodes, this may fail if the lower 32 roll over, if so * wait for the clients to be re-connected after the re-election */ private int createNodes(ZooKeeper zk, int start, int count) throws Exception { LOG.info("Creating nodes " + start + " thru " + (start + count)); int j = 0; try { for (int i = start; i < start + count; i++) { zk.create("/foo" + i, new byte[0], Ids.READ_ACL_UNSAFE, CreateMode.EPHEMERAL); j++; } } catch (ConnectionLossException e) { // this is ok - the leader has dropped leadership waitForClients(); } return j; }