@Test public void testSyncSet() { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String testName = className + "_" + methodName; System.out.println("START " + testName + " at " + new Date(System.currentTimeMillis())); String path = String.format("/%s/%s", testName, "msg_0"); ZNRecord record = new ZNRecord("msg_0"); BaseDataAccessor<ZNRecord> accessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); boolean success = accessor.set(path, record, AccessOption.PERSISTENT); Assert.assertTrue(success); ZNRecord getRecord = _gZkClient.readData(path); Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getId(), "msg_0"); System.out.println("END " + testName + " at " + new Date(System.currentTimeMillis())); }
@Test public void testSyncSetWithVersion() { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String testName = className + "_" + methodName; System.out.println("START " + testName + " at " + new Date(System.currentTimeMillis())); String path = String.format("/%s/%s", testName, "msg_0"); ZNRecord record = new ZNRecord("msg_0"); BaseDataAccessor<ZNRecord> accessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); // set persistent boolean success = accessor.set(path, record, 0, AccessOption.PERSISTENT); Assert.assertFalse(success, "Should fail since version not match"); try { _gZkClient.readData(path, false); Assert.fail("Should get no node exception"); } catch (Exception e) { // OK } success = accessor.set(path, record, -1, AccessOption.PERSISTENT); Assert.assertTrue(success); ZNRecord getRecord = _gZkClient.readData(path); Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getId(), "msg_0"); // set ephemeral path = String.format("/%s/%s", testName, "msg_1"); record = new ZNRecord("msg_1"); success = accessor.set(path, record, 0, AccessOption.EPHEMERAL); Assert.assertFalse(success); try { _gZkClient.readData(path, false); Assert.fail("Should get no node exception"); } catch (Exception e) { // OK } success = accessor.set(path, record, -1, AccessOption.EPHEMERAL); Assert.assertTrue(success); getRecord = _gZkClient.readData(path); Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getId(), "msg_1"); record.setSimpleField("key0", "value0"); success = accessor.set(path, record, 0, AccessOption.PERSISTENT); Assert.assertTrue(success, "Should pass. AccessOption.PERSISTENT is ignored"); getRecord = _gZkClient.readData(path); Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getSimpleFields().size(), 1); Assert.assertNotNull(getRecord.getSimpleField("key0")); Assert.assertEquals(getRecord.getSimpleField("key0"), "value0"); System.out.println("END " + testName + " at " + new Date(System.currentTimeMillis())); }
@Override public void handleNewSession() throws Exception { waitUntilConnected(); /** * stop all timer tasks, reset all handlers, make sure cleanup completed for previous session * disconnect if fail to cleanup */ stopTimerTasks(); if (_leaderElectionHandler != null) { _leaderElectionHandler.reset(); } resetHandlers(); /** clean up write-through cache */ _baseDataAccessor.reset(); /** from here on, we are dealing with new session */ if (!ZKUtil.isClusterSetup(_clusterName, _zkclient)) { throw new HelixException("Cluster structure is not set up for cluster: " + _clusterName); } switch (_instanceType) { case PARTICIPANT: handleNewSessionAsParticipant(); break; case CONTROLLER: handleNewSessionAsController(); break; case CONTROLLER_PARTICIPANT: handleNewSessionAsParticipant(); handleNewSessionAsController(); break; case ADMINISTRATOR: case SPECTATOR: default: break; } startTimerTasks(); /** * init handlers ok to init message handler and data-accessor twice the second init will be * skipped (see CallbackHandler) */ initHandlers(_handlers); }