Package com.linkedin.helix

Examples of com.linkedin.helix.ZNRecord


    ZkHelixPropertyStore<ZNRecord> store =
        new ZkHelixPropertyStore<ZNRecord>(new ZkBaseDataAccessor<ZNRecord>(_gZkClient),
                                           subRoot,
                                           subscribedPaths);

    store.set("/child0", new ZNRecord("child0"), AccessOption.PERSISTENT);

    ZNRecord record = store.get("/child0", null, 0); // will put the record in cache
    Assert.assertEquals(record.getId(), "child0");
    // System.out.println("1:get:" + record);

    String child0Path = subRoot + "/child0";
    for (int i = 0; i < 2; i++)
    {
      _gZkClient.delete(child0Path);
      _gZkClient.createPersistent(child0Path, new ZNRecord("child0-new-" + i));
    }

    Thread.sleep(500); // should wait for zk callback to add "/child0" into cache
    record = store.get("/child0", null, 0);
    Assert.assertEquals(record.getId(),
                        "child0-new-1",
                        "Cache shoulde be updated to latest create");
    // System.out.println("2:get:" + record);

    _gZkClient.delete(child0Path);
View Full Code Here


    for (int i = 0; i < firstLevelNr; i++)
    {
      for (int j = 0; j < secondLevelNr; j++)
      {
        String nodeId = getNodeId(i, j);
        ZNRecord record = new ZNRecord(nodeId);
        record.setSimpleFields(map);
        if (needTimestamp)
        {
          long now = System.currentTimeMillis();
          record.setSimpleField("SetTimestamp", Long.toString(now));
        }
        String key = getSecondLevelKey(i, j);
        store.set(key, record, AccessOption.PERSISTENT);
      }
    }
View Full Code Here

      String firstLevelKey = getFirstLevelKey(i);

      for (int j = 0; j < secondLevelNr; j++)
      {
        String nodeId = getNodeId(i, j);
        ZNRecord record = new ZNRecord(nodeId);
        record.setSimpleFields(map);
        if (needTimestamp)
        {
          long now = System.currentTimeMillis();
          record.setSimpleField("SetTimestamp", Long.toString(now));
        }
        String key = getSecondLevelKey(i, j);
        try
        {
          zkClient.writeData(root + key, record);
View Full Code Here

          pos = inputLine.indexOf("CONFIGS");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());

            formatter(cfgBw,
                      timestamp,
                      record.getId(),
                      record.getSimpleField("HOST"),
                      record.getSimpleField("PORT"),
                      record.getSimpleField("ENABLED"));

          }
        }
        else if (inputLine.indexOf("IDEALSTATES") != -1)
        {
          pos = inputLine.indexOf("IDEALSTATES");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());
            // System.out.println("record=" + record);
            for (String partition : record.getListFields().keySet())
            {
              List<String> preferenceList = record.getListFields().get(partition);
              for (int i = 0; i < preferenceList.size(); i++)
              {
                String instance = preferenceList.get(i);
                formatter(isBw,
                          timestamp,
                          record.getId(),
                          record.getSimpleField(IdealStateProperty.NUM_PARTITIONS.toString()),
                          record.getSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString()),
                          partition,
                          instance,
                          Integer.toString(i));
              }
            }
          }
        }
        else if (inputLine.indexOf("LIVEINSTANCES") != -1)
        {
          pos = inputLine.indexOf("LIVEINSTANCES");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());
            formatter(liBw, timestamp, record.getId(), record.getSimpleField("SESSION_ID"), "ADD");
            String zkSessionId = getAttributeValue(inputLine, "session:");
            if (zkSessionId == null)
            {
              System.err.println("no zk session id associated with the adding of live instance: "
                  + inputLine);
            }
            else
            {
              liveInstanceSessionMap.put(zkSessionId, record);
            }
          }

        }
        else if (inputLine.indexOf("EXTERNALVIEW") != -1)
        {
          pos = inputLine.indexOf("EXTERNALVIEW");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());
            // System.out.println("record=" + record);
            for (String partition : record.getMapFields().keySet())
            {
              Map<String, String> stateMap = record.getMapFields().get(partition);
              for (String instance : stateMap.keySet())
              {
                String state = stateMap.get(instance);
                formatter(evBw, timestamp, record.getId(), partition, instance, state);
              }
            }
          }
        }
        else if (inputLine.indexOf("STATEMODELDEFS") != -1)
        {
          pos = inputLine.indexOf("STATEMODELDEFS");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());

            for (String stateInfo : record.getMapFields().keySet())
            {
              if (stateInfo.endsWith(".meta"))
              {
                Map<String, String> metaMap = record.getMapFields().get(stateInfo);
                formatter(smdCntBw,
                          timestamp,
                          record.getId(),
                          stateInfo.substring(0, stateInfo.indexOf('.')),
                          metaMap.get("count"));
              }
              else if (stateInfo.endsWith(".next"))
              {
                Map<String, String> nextMap = record.getMapFields().get(stateInfo);
                for (String destState : nextMap.keySet())
                {
                  formatter(smdNextBw,
                            timestamp,
                            record.getId(),
                            stateInfo.substring(0, stateInfo.indexOf('.')),
                            destState,
                            nextMap.get(destState));
                }
              }
            }
          }
        }
        else if (inputLine.indexOf("CURRENTSTATES") != -1)
        {
          pos = inputLine.indexOf("CURRENTSTATES");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());
            // System.out.println("record=" + record);
            for (String partition : record.getMapFields().keySet())
            {
              Map<String, String> stateMap = record.getMapFields().get(partition);
              String path = getAttributeValue(inputLine, "path:");
              if (path != null)
              {
                String instance = HelixUtil.getInstanceNameFromPath(path);
                formatter(csBw,
                          timestamp,
                          record.getId(),
                          partition,
                          instance,
                          record.getSimpleField("SESSION_ID"),
                          stateMap.get("CURRENT_STATE"));
              }
            }
          }
        }
        else if (inputLine.indexOf("MESSAGES") != -1)
        {
          pos = inputLine.indexOf("MESSAGES");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());

            formatter(msgBw,
                      timestamp,
                      record.getSimpleField("RESOURCE_NAME"),
                      record.getSimpleField("PARTITION_NAME"),
                      record.getSimpleField("TGT_NAME"),
                      record.getSimpleField("TGT_SESSION_ID"),
                      record.getSimpleField("FROM_STATE"),
                      record.getSimpleField("TO_STATE"),
                      record.getSimpleField("MSG_TYPE"),
                      record.getSimpleField("MSG_STATE"));
          }

        }
        else if (inputLine.indexOf("closeSession") != -1)
        {
          String zkSessionId = getAttributeValue(inputLine, "session:");
          if (zkSessionId == null)
          {
            System.err.println("no zk session id associated with the closing of zk session: "
                + inputLine);
          }
          else
          {
            ZNRecord record = liveInstanceSessionMap.remove(zkSessionId);
            // System.err.println("zkSessionId:" + zkSessionId + ", record:" + record);
            if (record != null)
            {
              String timestamp = getAttributeValue(inputLine, "time:");
              formatter(liBw,
                        timestamp,
                        record.getId(),
                        record.getSimpleField("SESSION_ID"),
                        "DELETE");
            }
          }
        }
        else if (inputLine.indexOf("HEALTHREPORT/defaultPerfCounters") != -1)
        {
          pos = inputLine.indexOf("HEALTHREPORT/defaultPerfCounters");
          pos = inputLine.indexOf("data:{", pos);
          if (pos != -1)
          {
            String timestamp = getAttributeValue(inputLine, "time:");
            ZNRecord record =
                (ZNRecord) _deserializer.deserialize(inputLine.substring(pos + 5)
                                                              .getBytes());

            String path = getAttributeValue(inputLine, "path:");
            if (path != null)
            {
              String instance = HelixUtil.getInstanceNameFromPath(path);
              formatter(hrPerfBw,
                        timestamp,
                        instance,
                        record.getSimpleField("availableCPUs"),
                        record.getSimpleField("averageSystemLoad"),
                        record.getSimpleField("freeJvmMemory"),
                        record.getSimpleField("freePhysicalMemory"),
                        record.getSimpleField("totalJvmMemory"));
            }
          }
        }
      }
View Full Code Here

        3, // replicas
        "LeaderStandby", false); // do not rebalance

    // calculate and set custom ideal state
    String idealPath = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0");
    ZNRecord curIdealState = _gZkClient.readData(idealPath);

    List<String> instanceNames = new ArrayList<String>(5);
    for (int i = 0; i < 5; i++)
    {
      int port = 12918 + i;
      instanceNames.add("localhost_" + port);
    }
    ZNRecord idealState = IdealStateCalculatorForStorageNode.calculateIdealState(instanceNames, 10,
        2, "TestDB0", "LEADER", "STANDBY");
    // System.out.println(idealState);
    // curIdealState.setSimpleField(IdealState.IdealStateProperty.IDEAL_STATE_MODE.toString(),
    // "CUSTOMIZED");
    curIdealState.setSimpleField(IdealState.IdealStateProperty.REPLICAS.toString(), "3");

    curIdealState.setListFields(idealState.getListFields());
    _gZkClient.writeData(idealPath, curIdealState);

    // start controller
    TestHelper
        .startController(clusterName, "controller_0", ZK_ADDR, HelixControllerMain.STANDALONE);
View Full Code Here

                            3, // replicas
                            "MasterSlave",
                            true); // do rebalance

    // add a bad current state
    ZNRecord badCurState = new ZNRecord("TestDB0");
    String path = PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_12918", "session_0", "TestDB0");
    _gZkClient.createPersistent(path, true);
    _gZkClient.writeData(path, badCurState);
   
   
View Full Code Here

      summary.put("Timeout", "" + timeOut);
      _resultSummaryMap.put("Summary", summary);

      HelixDataAccessor accessor = manager.getHelixDataAccessor();
      Builder keyBuilder = accessor.keyBuilder();
      ZNRecord statusUpdate = accessor.getProperty(
          keyBuilder.controllerTaskStatus(MessageType.SCHEDULER_MSG.toString(),
              originalMessage.getMsgId())).getRecord();

      statusUpdate.getMapFields().putAll(_resultSummaryMap);
      accessor.setProperty(keyBuilder.controllerTaskStatus(
          MessageType.SCHEDULER_MSG.toString(), originalMessage.getMsgId()),
          new StatusUpdate(statusUpdate));

    }
View Full Code Here

        store.setProperty("key1", _record);

        boolean success;
        do
        {
          ZNRecord current = store.getProperty("key1");
          ZNRecord update = new ZNRecord(current);
          update.setSimpleField("thread_" + id, "simpleValue");

          success = store.compareAndSet("key1", current, update, comparator);
        } while (!success);

        return Boolean.TRUE;
View Full Code Here

                                      new PropertyJsonSerializer<ZNRecord>(ZNRecord.class),
                                      propertyStoreRoot);

    // test back to back add-delete-add

    store.setProperty("child0", new ZNRecord("child0"));

    ZNRecord record2 = store.getProperty("child0"); // will put the record in cache
    String child0Path = propertyStoreRoot + "/child0";
    _gZkClient.subscribeDataChanges(child0Path, new IZkDataListener()
    {
      @Override
      public void handleDataDeleted(String dataPath) throws Exception
      {
        // TODO Auto-generated method stub
        System.out.println("TestZKPropertyStore.testZKPropertyStore().new IZkDataListener() {...}.handleDataDeleted()");
      }

      @Override
      public void handleDataChange(String dataPath, Object data) throws Exception
      {
        // TODO Auto-generated method stub
        System.out.println("TestZKPropertyStore.testZKPropertyStore().new IZkDataListener() {...}.handleDataChange()");
      }
    });
    for (int i = 0; i < 2; i++)
    {
      _gZkClient.delete(child0Path);
      _gZkClient.createPersistent(child0Path, new ZNRecord("child0-new"));
    }
    record2 = store.getProperty("child0");
    Assert.assertEquals(record2.getId(), "child0-new");
    _gZkClient.delete(child0Path);
    Thread.sleep(300); // should wait for zk callback to remove "child0" from cache
    record2 = store.getProperty("child0");
    Assert.assertNull(record2);

    // zookeeper has a default 1M limit on size
    char[] data = new char[bufSize];
    for (int i = 0; i < bufSize; i++)
    {
      data[i] = 'a';
    }

    Map<String, String> map = new TreeMap<String, String>();
    for (int i = 0; i < mapNr; i++)
    {
      map.put("key_" + i, new String(data));
    }
    String node = "node";
    ZNRecord record = new ZNRecord(node);
    record.setSimpleFields(map);

    ZNRecordSerializer serializer = new ZNRecordSerializer();
    int bytesPerNode = serializer.serialize(record).length;
    System.out.println("use znode of size " + bytesPerNode / 1024 + "K");
    Assert.assertTrue(bytesPerNode < 1024 * 1024,
                      "zookeeper has a default 1M limit on size");

    // test getPropertyRootNamespace()
    String root = store.getPropertyRootNamespace();
    Assert.assertEquals(root, propertyStoreRoot);

    // set 100 nodes and get 100 nodes, verify get what we set
    long start = System.currentTimeMillis();
    setNodes(store, 'a', false);
    long end = System.currentTimeMillis();
    System.out.println("ZKPropertyStore write throughput is " + bytesPerNode * totalNodes
        / (end - start) + " kilo-bytes per second");

    start = System.currentTimeMillis();
    for (int i = 0; i < 10; i++)
    {
      for (int j = 0; j < 10; j++)
      {
        String nodeId = getNodeId(i, j);
        String key = getSecondLevelKey(i, j);
        record = store.getProperty(key);
        Assert.assertEquals(record.getId(), nodeId);
      }
    }
    end = System.currentTimeMillis();
    System.out.println("ZKPropertyStore read throughput is " + bytesPerNode * totalNodes
        / (end - start) + " kilo-bytes per second");

    // test subscribe
    Map<String, String> keyMap = new TreeMap<String, String>();
    // verify initial callbacks invoked for all 100 nodes
    PropertyChangeListener<ZNRecord> listener = new TestListener(keyMap);
    store.subscribeForPropertyChange("", listener);
    System.out.println("keyMap size: " + keyMap.size());
    Assert.assertTrue(keyMap.size() > 100);
    for (int i = 0; i < firstLevelNr; i++)
    {
      for (int j = 0; j < secondLevelNr; j++)
      {
        String key = getSecondLevelKey(i, j);
        Assert.assertTrue(keyMap.containsKey(key));
      }
    }

    // change nodes via property store interface
    // and verify all notifications have been received (TODO: without latency?)
    start = System.currentTimeMillis();
    keyMap.clear();
    setNodes(store, 'b', true);

    // wait for all callbacks completed
    for (int i = 0; i < 10; i++)
    {
      System.out.println("keySet size: " + keyMap.size());
      if (keyMap.size() == totalNodes)
      {
        break;
      }
      Thread.sleep(500);
    }
    Assert.assertEquals(keyMap.size(), totalNodes, "should receive " + totalNodes
        + " callbacks");
    end = System.currentTimeMillis();
    long waitTime = (end - start) * 2;

    long maxLatency = 0;
    for (int i = 0; i < firstLevelNr; i++)
    {
      for (int j = 0; j < secondLevelNr; j++)
      {
        String key = getSecondLevelKey(i, j);
        Assert.assertTrue(keyMap.containsKey(key));
        record = store.getProperty(key);
        start = Long.parseLong(record.getSimpleField("SetTimestamp"));
        end = Long.parseLong(keyMap.get(key));
        long latency = end - start;
        if (latency > maxLatency)
        {
          maxLatency = latency;
        }
      }
    }
    System.out.println("ZKPropertyStore callback latency is " + maxLatency
        + " millisecond");

    // change nodes via native zkclient interface
    // and verify all notifications have been received with some latency
    keyMap.clear();
    setNodes(_gZkClient, propertyStoreRoot, 'a', true);

    // wait for all callbacks completed
    Thread.sleep(waitTime);
    Assert.assertEquals(keyMap.size(), totalNodes, "should receive " + totalNodes
        + " callbacks");

    // remove node via native zkclient interface
    // should receive callbacks on parent key
    keyMap.clear();
    for (int i = 0; i < firstLevelNr; i++)
    {
      int j = 0;
      String key = getSecondLevelKey(i, j);
      _gZkClient.delete(propertyStoreRoot + key);
    }
    Thread.sleep(waitTime);
    for (int i = 0; i < firstLevelNr; i++)
    {
      String key = getFirstLevelKey(i);
      Assert.assertTrue(keyMap.containsKey(key), "should receive callbacks on " + key);
    }

    keyMap.clear();
    for (int j = 1; j < secondLevelNr; j++)
    {
      int i = 0;
      String key = getSecondLevelKey(i, j);
      _gZkClient.delete(propertyStoreRoot + key);
    }
    Thread.sleep(waitTime);
    String node0Key = getFirstLevelKey(0);
    Assert.assertTrue(keyMap.containsKey(node0Key), "should receive callback on "
        + node0Key);

    // add back removed nodes
    // should receive callbacks on parent key
    keyMap.clear();
    for (int i = 0; i < bufSize; i++)
    {
      data[i] = 'a';
    }

    map = new TreeMap<String, String>();
    for (int i = 0; i < mapNr; i++)
    {
      map.put("key_" + i, new String(data));
    }

    for (int i = 0; i < firstLevelNr; i++)
    {
      int j = 0;
      String nodeId = getNodeId(i, j);
      String key = getSecondLevelKey(i, j);
      record = new ZNRecord(nodeId);
      record.setSimpleFields(map);
      store.setProperty(key, record);
    }
    Thread.sleep(waitTime);
    for (int i = 0; i < firstLevelNr; i++)
    {
      String key = getFirstLevelKey(i);
      Assert.assertTrue(keyMap.containsKey(key), "should receive callbacks on " + key);
    }

    keyMap.clear();
    for (int j = 1; j < secondLevelNr; j++)
    {
      int i = 0;
      String nodeId = getNodeId(i, j);
      String key = getSecondLevelKey(i, j);
      record = new ZNRecord(nodeId);
      record.setSimpleFields(map);
      store.setProperty(key, record);
    }
    Thread.sleep(waitTime);
    node0Key = getFirstLevelKey(0);
    Assert.assertTrue(keyMap.containsKey(node0Key), "should receive callback on "
        + node0Key);

    // test unsubscribe
    store.unsubscribeForPropertyChange("", listener);
    // change all nodes and verify no notification happens
    keyMap.clear();
    setNodes(store, 'c', false);
    Thread.sleep(waitTime);
    Assert.assertEquals(keyMap.size(), 0);

    // test getPropertyNames
    List<String> names = store.getPropertyNames("");
    int cnt = 0;
    for (String name : names)
    {
      int i = cnt / 10;
      int j = cnt % 10;
      cnt++;
      String key = getSecondLevelKey(i, j);
      Assert.assertEquals(name, key);
    }

    // test compare and set
    char[] updateData = new char[bufSize];
    for (int i = 0; i < bufSize; i++)
    {
      data[i] = 'c';
      updateData[i] = 'd';
    }

    Map<String, String> updateMap = new TreeMap<String, String>();
    for (int i = 0; i < 10; i++)
    {
      map.put("key_" + i, new String(data));
      updateMap.put("key_" + i, new String(updateData));
    }

    PropertyJsonComparator<ZNRecord> comparator =
        new PropertyJsonComparator<ZNRecord>(ZNRecord.class);
    for (int i = 0; i < firstLevelNr; i++)
    {
      for (int j = 0; j < secondLevelNr; j++)
      {
        String nodeId = getNodeId(i, j);
        record = new ZNRecord(nodeId);
        record.setSimpleFields(map);
        String key = getSecondLevelKey(i, j);

        ZNRecord update = new ZNRecord(nodeId);
        update.setSimpleFields(updateMap);
        boolean succeed = store.compareAndSet(key, record, update, comparator);
        Assert.assertTrue(succeed);
        record = store.getProperty(key);
        Assert.assertEquals(record.getSimpleField("key_0").charAt(0), 'd');
      }
View Full Code Here

    List<ZNRecord> childRecords = new ArrayList<ZNRecord>();
    for (String child : children)
    {
      String childPath = path + "/" + child;
      Stat newStat = new Stat();
      ZNRecord record = client.readDataAndStat(childPath, newStat, true);
      if (record != null)
      {
        record.setVersion(newStat.getVersion());
        record.setCreationTime(newStat.getCtime());
        record.setModifiedTime(newStat.getMtime());
        childRecords.add(record);
      }
    }
    return childRecords;
  }
View Full Code Here

TOP

Related Classes of com.linkedin.helix.ZNRecord

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.