Search in sources :

Example 76 with ZNRecord

use of org.apache.helix.ZNRecord in project helix by apache.

the class TestAutoFallbackPropertyStore method testSingleSet.

@Test
public void testSingleSet() {
    String className = TestHelper.getTestClassName();
    String methodName = TestHelper.getTestMethodName();
    String clusterName = className + "_" + methodName;
    System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
    String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
    String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
    ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
    // create 0 under fallbackRoot
    for (int i = 0; i < 1; i++) {
        String path = String.format("%s/%d", fallbackRoot, i);
        baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
    }
    AutoFallbackPropertyStore<ZNRecord> store = new AutoFallbackPropertyStore<ZNRecord>(baseAccessor, root, fallbackRoot);
    String path = String.format("/%d", 0);
    Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0), "Should not exist under new location");
    Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0), "Should exist under fallback location");
    ZNRecord record = new ZNRecord("new0");
    boolean succeed = store.set(path, record, AccessOption.PERSISTENT);
    Assert.assertTrue(succeed);
    record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
    Assert.assertNotNull(record);
    Assert.assertEquals(record.getId(), "0");
    record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
    Assert.assertNotNull(record);
    Assert.assertEquals(record.getId(), "new0");
    System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
Also used : ZkBaseDataAccessor(org.apache.helix.manager.zk.ZkBaseDataAccessor) Date(java.util.Date) ZNRecord(org.apache.helix.ZNRecord) Test(org.testng.annotations.Test)

Example 77 with ZNRecord

use of org.apache.helix.ZNRecord in project helix by apache.

the class TestZkHelixPropertyStore method testSet.

@Test
public void testSet() {
    // Logger.getRootLogger().setLevel(Level.INFO);
    System.out.println("START testSet() at " + new Date(System.currentTimeMillis()));
    String subRoot = _root + "/" + "set";
    List<String> subscribedPaths = new ArrayList<String>();
    subscribedPaths.add(subRoot);
    ZkHelixPropertyStore<ZNRecord> store = new ZkHelixPropertyStore<ZNRecord>(new ZkBaseDataAccessor<ZNRecord>(_gZkClient), subRoot, subscribedPaths);
    // test set
    setNodes(store, 'a', false);
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            String nodeId = getNodeId(i, j);
            String key = getSecondLevelKey(i, j);
            ZNRecord record = store.get(key, null, 0);
            Assert.assertEquals(record.getId(), nodeId);
        }
    }
    // test get from cache
    long startT = System.currentTimeMillis();
    for (int i = 0; i < 1000; i++) {
        ZNRecord record = store.get("/node_0/childNode_0_0", null, 0);
        Assert.assertNotNull(record);
    }
    long endT = System.currentTimeMillis();
    System.out.println("1000 Get() time used: " + (endT - startT) + "ms");
    long latency = endT - startT;
    Assert.assertTrue(latency < 200, "1000 Gets should be finished within 200ms, but was " + latency + " ms");
    store.stop();
    System.out.println("END testSet() at " + new Date(System.currentTimeMillis()));
}
Also used : ArrayList(java.util.ArrayList) Date(java.util.Date) ZNRecord(org.apache.helix.ZNRecord) Test(org.testng.annotations.Test)

Example 78 with ZNRecord

use of org.apache.helix.ZNRecord in project helix by apache.

the class TestZkHelixPropertyStore method testSetInvalidPath.

@Test
public void testSetInvalidPath() {
    String subRoot = _root + "/" + "setInvalidPath";
    ZkHelixPropertyStore<ZNRecord> store = new ZkHelixPropertyStore<ZNRecord>(new ZkBaseDataAccessor<ZNRecord>(_gZkClient), subRoot, null);
    try {
        store.set("abc/xyz", new ZNRecord("testInvalid"), AccessOption.PERSISTENT);
        Assert.fail("Should throw illegal-argument-exception since path doesn't start with /");
    } catch (IllegalArgumentException e) {
    // e.printStackTrace();
    // OK
    } catch (Exception e) {
        Assert.fail("Should not throw exceptions other than illegal-argument");
    }
}
Also used : ZNRecord(org.apache.helix.ZNRecord) ZkNoNodeException(org.I0Itec.zkclient.exception.ZkNoNodeException) JMException(javax.management.JMException) Test(org.testng.annotations.Test)

Example 79 with ZNRecord

use of org.apache.helix.ZNRecord in project helix by apache.

the class TestZkManagerWithAutoFallbackStore method testBasic.

@Test
public void testBasic() throws Exception {
    // Logger.getRootLogger().setLevel(Level.INFO);
    String className = TestHelper.getTestClassName();
    String methodName = TestHelper.getTestMethodName();
    String clusterName = className + "_" + methodName;
    int n = 2;
    System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
    // participant port
    TestHelper.setupCluster(// participant port
    clusterName, // participant port
    ZK_ADDR, // participant port
    12918, // participant name prefix
    "localhost", // resource name prefix
    "TestDB", // resources
    1, // partitions per resource
    32, // number of nodes
    n, // replicas
    2, "MasterSlave", // do rebalance
    false);
    // start participants
    MockParticipantManager[] participants = new MockParticipantManager[n];
    for (int i = 0; i < 1; i++) {
        String instanceName = "localhost_" + (12918 + i);
        participants[i] = new MockParticipantManager(ZK_ADDR, clusterName, instanceName);
        participants[i].syncStart();
    }
    // add some data to fallback path: HELIX_PROPERTYSTORE
    BaseDataAccessor<ZNRecord> accessor = participants[0].getHelixDataAccessor().getBaseDataAccessor();
    for (int i = 0; i < 10; i++) {
        String path = String.format("/%s/HELIX_PROPERTYSTORE/%d", clusterName, i);
        ZNRecord record = new ZNRecord("" + i);
        record.setSimpleField("key1", "value1");
        accessor.set(path, record, AccessOption.PERSISTENT);
    }
    ZkHelixPropertyStore<ZNRecord> store = participants[0].getHelixPropertyStore();
    // read shall use fallback paths
    for (int i = 0; i < 10; i++) {
        String path = String.format("/%d", i);
        ZNRecord record = store.get(path, null, 0);
        Assert.assertNotNull(record);
        Assert.assertEquals(record.getId(), "" + i);
        Assert.assertNotNull(record.getSimpleField("key1"));
        Assert.assertEquals(record.getSimpleField("key1"), "value1");
    }
    // update shall update new paths
    for (int i = 0; i < 10; i++) {
        String path = String.format("/%d", i);
        store.update(path, new DataUpdater<ZNRecord>() {

            @Override
            public ZNRecord update(ZNRecord currentData) {
                if (currentData != null) {
                    currentData.setSimpleField("key2", "value2");
                }
                return currentData;
            }
        }, AccessOption.PERSISTENT);
    }
    for (int i = 0; i < 10; i++) {
        String path = String.format("/%d", i);
        ZNRecord record = store.get(path, null, 0);
        Assert.assertNotNull(record);
        Assert.assertEquals(record.getId(), "" + i);
        Assert.assertNotNull(record.getSimpleField("key1"));
        Assert.assertEquals(record.getSimpleField("key1"), "value1");
        Assert.assertNotNull(record.getSimpleField("key2"));
        Assert.assertEquals(record.getSimpleField("key2"), "value2");
    }
    // set shall use new path
    for (int i = 10; i < 20; i++) {
        String path = String.format("/%d", i);
        ZNRecord record = new ZNRecord("" + i);
        record.setSimpleField("key3", "value3");
        store.set(path, record, AccessOption.PERSISTENT);
    }
    for (int i = 10; i < 20; i++) {
        String path = String.format("/%d", i);
        ZNRecord record = store.get(path, null, 0);
        Assert.assertNotNull(record);
        Assert.assertEquals(record.getId(), "" + i);
        Assert.assertNotNull(record.getSimpleField("key3"));
        Assert.assertEquals(record.getSimpleField("key3"), "value3");
    }
    participants[0].syncStop();
    System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
Also used : MockParticipantManager(org.apache.helix.integration.manager.MockParticipantManager) Date(java.util.Date) ZNRecord(org.apache.helix.ZNRecord) Test(org.testng.annotations.Test)

Example 80 with ZNRecord

use of org.apache.helix.ZNRecord in project helix by apache.

the class TestDistControllerElection method testParticipant.

@Test()
public void testParticipant() throws Exception {
    String className = getShortClassName();
    LOG.info("RUN " + className + " at " + new Date(System.currentTimeMillis()));
    final String clusterName = CLUSTER_PREFIX + "_" + className + "_" + "testParticipant";
    String path = "/" + clusterName;
    if (_gZkClient.exists(path)) {
        _gZkClient.deleteRecursively(path);
    }
    TestHelper.setupEmptyCluster(_gZkClient, clusterName);
    final String controllerName = "participant_0";
    HelixManager manager = new MockZKHelixManager(clusterName, controllerName, InstanceType.PARTICIPANT, _gZkClient);
    GenericHelixController participant0 = new GenericHelixController();
    List<HelixTimerTask> timerTasks = Collections.emptyList();
    DistributedLeaderElection election = new DistributedLeaderElection(manager, participant0, timerTasks);
    NotificationContext context = new NotificationContext(manager);
    context.setType(NotificationContext.Type.INIT);
    election.onControllerChange(context);
    path = PropertyPathBuilder.controllerLeader(clusterName);
    ZNRecord leaderRecord = _gZkClient.<ZNRecord>readData(path, true);
    AssertJUnit.assertNull(leaderRecord);
// AssertJUnit.assertNull(election.getController());
// AssertJUnit.assertNull(election.getLeader());
}
Also used : NotificationContext(org.apache.helix.NotificationContext) HelixTimerTask(org.apache.helix.HelixTimerTask) HelixManager(org.apache.helix.HelixManager) GenericHelixController(org.apache.helix.controller.GenericHelixController) DistributedLeaderElection(org.apache.helix.manager.zk.DistributedLeaderElection) Date(java.util.Date) ZNRecord(org.apache.helix.ZNRecord) Test(org.testng.annotations.Test)

Aggregations

ZNRecord (org.apache.helix.ZNRecord)448 Test (org.testng.annotations.Test)186 ArrayList (java.util.ArrayList)117 Date (java.util.Date)111 HelixDataAccessor (org.apache.helix.HelixDataAccessor)91 ZKHelixDataAccessor (org.apache.helix.manager.zk.ZKHelixDataAccessor)78 Builder (org.apache.helix.PropertyKey.Builder)75 HashMap (java.util.HashMap)72 IdealState (org.apache.helix.model.IdealState)69 PropertyKey (org.apache.helix.PropertyKey)61 HelixException (org.apache.helix.HelixException)47 Map (java.util.Map)41 MockParticipantManager (org.apache.helix.integration.manager.MockParticipantManager)40 ZkBaseDataAccessor (org.apache.helix.manager.zk.ZkBaseDataAccessor)40 ClusterControllerManager (org.apache.helix.integration.manager.ClusterControllerManager)33 PropertyPathBuilder (org.apache.helix.PropertyPathBuilder)30 List (java.util.List)29 ZkClient (org.apache.helix.manager.zk.ZkClient)29 HelixAdmin (org.apache.helix.HelixAdmin)28 LiveInstance (org.apache.helix.model.LiveInstance)28