Package com.linkedin.helix

Examples of com.linkedin.helix.HelixDataAccessor


    _statsHolder.persistStats();
    String stat2 = "window(5)(dbFoo.partition11.latency)";
    _statsHolder.addStat(stat2);
    _statsHolder.persistStats();

    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();

    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(statRecordContains(rec, stat1));
    AssertJUnit.assertTrue(statRecordContains(rec, stat2));
    AssertJUnit.assertEquals(2, statsSize(rec));
View Full Code Here


    String stat = "window(5)(dbFoo.partition10.latency)";
    _statsHolder.addStat(stat);
    _statsHolder.addStat(stat);
    _statsHolder.persistStats();

    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();

    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(statRecordContains(rec, stat));
    AssertJUnit.assertEquals(1, statsSize(rec));
  }
View Full Code Here

  {
    String exp = "accumulate()(dbFoo.partition10.latency, dbFoo.partition10.count)";
    _statsHolder.addStat(exp);
    _statsHolder.persistStats();

    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(statRecordContains(rec,
                                              "accumulate()(dbFoo.partition10.latency)"));
    AssertJUnit.assertTrue(statRecordContains(rec,
                                              "accumulate()(dbFoo.partition10.count)"));
View Full Code Here

    String exp =
        "accumulate()(dbFoo.partition10.latency, dbFoo.partition10.count)|EACH|ACCUMULATE|DIVIDE";
    _statsHolder.addStat(exp);
    _statsHolder.persistStats();

    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();

    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(statRecordContains(rec,
                                              "accumulate()(dbFoo.partition10.latency)"));
    AssertJUnit.assertTrue(statRecordContains(rec,
View Full Code Here

      }
      return;
    }

    HelixManager manager = changeContext.getManager();
    HelixDataAccessor accessor = manager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    if (messages == null || messages.size() == 0)
    {
      logger.info("No Messages to process");
      return;
    }

    // Sort message based on creation timestamp
    Collections.sort(messages, new Comparator<Message>()
    {
      @Override
      public int compare(Message m1, Message m2)
      {
        return (int) (m1.getCreateTimeStamp() - m2.getCreateTimeStamp());
      }
    });

    List<Message> readMsgs = new ArrayList<Message>();
    List<PropertyKey> readMsgKeys = new ArrayList<PropertyKey>();

    String sessionId = manager.getSessionId();
    List<String> curResourceNames =
        accessor.getChildNames(keyBuilder.currentStates(instanceName, sessionId));
    List<PropertyKey> createCurStateKeys = new ArrayList<PropertyKey>();
    List<CurrentState> metaCurStates = new ArrayList<CurrentState>();
    Set<String> createCurStateNames = new HashSet<String>();
   
    // parallel lists that contains handler and the corresponding message
    List<MessageHandler> handlers = new ArrayList<MessageHandler>();
    List<Message> handleMessages = new ArrayList<Message>();

    for (Message message : messages)
    {
      // NO_OP messages are removed with nothing done. It is used to trigger the
      // onMessage() call if needed.
      if (message.getMsgType().equalsIgnoreCase(MessageType.NO_OP.toString()))
      {
        logger.info("Dropping NO-OP msg from " + message.getMsgSrc());
        if (message.getTgtName().equalsIgnoreCase("controller"))
        {
          accessor.removeProperty(keyBuilder.controllerMessage(message.getId()));
        }
        else
        {
          accessor.removeProperty(keyBuilder.message(instanceName, message.getId()));
        }
        continue;
      }

      String tgtSessionId = message.getTgtSessionId();
      if (sessionId.equals(tgtSessionId) || tgtSessionId.equals("*"))
      {
        if (MessageState.NEW == message.getMsgState())
        {
          // create message handlers, if handlers not found, don't mark it as READ
          try
          {
            if (!message.getGroupMessageMode())
            {
              logger.info("Creating handler for message " + message.getMsgId() + "/"
                  + message.getPartitionName());

              MessageHandler handler = createMessageHandler(message, changeContext);
             
              // We did not find a MessageHandlerFactory for the message;
              // we will keep the message and we may be able to handler it when
              // the corresponding MessageHandlerFactory factory is registered.
              if (handler == null)
              {
                logger.warn("Message handler factory not found for message type:"
                    + message.getMsgType() + ", message:" + message);

                continue;
              }
              handlers.add(handler);
              handleMessages.add(message);
            }
            else
            {
              List<String> partitionNames = message.getPartitionNames();
              AtomicInteger countDown = new AtomicInteger(partitionNames.size());
              for (String partitionName : partitionNames)
              {
                Message msg = new Message(message.getRecord());
                msg.setPartitionName(partitionName);
                msg.setGroupMsgCountDown(countDown);

               
                logger.info("Creating handler for group message " + msg.getMsgId() + "/"
                    + partitionName);
                MessageHandler handler = createMessageHandler(msg, changeContext);

                // We did not find a MessageHandlerFactory for the message;
                // we will keep the message and we may be able to handler it when
                // the corresponding MessageHandlerFactory factory is registered.
                if (handler == null)
                {
                  logger.warn("Message handler factory not found for group message type:"
                      + msg.getMsgType() + ", message:" + msg);

                  continue;
                }
                handlers.add(handler);
                handleMessages.add(msg);
              }
            }
          }
          catch (Exception e)
          {
            logger.error("Failed to create message handler for " + message.getMsgId(), e);
            String error =
                "Failed to create message handler for " + message.getMsgId()
                    + " exception: " + e;

            _statusUpdateUtil.logError(message,
                                       HelixStateMachineEngine.class,
                                       e,
                                       error,
                                       accessor);
            // Mark the message as UNPROCESSABLE if we hit a exception while creating
            // handler for it. The message will stay on ZK and not be processed.
            message.setMsgState(MessageState.UNPROCESSABLE);
            if (message.getTgtName().equalsIgnoreCase("controller"))
            {
              accessor.updateProperty(keyBuilder.controllerMessage(message.getId()),
                                      message);
            }
            else
            {
              accessor.updateProperty(keyBuilder.message(instanceName, message.getId()),
                                      message);
            }
            continue;
          }
         
          // update msgState to read
          message.setMsgState(MessageState.READ);
          message.setReadTimeStamp(new Date().getTime());
          message.setExecuteSessionId(changeContext.getManager().getSessionId());

          _statusUpdateUtil.logInfo(message,
                                    HelixStateMachineEngine.class,
                                    "New Message",
                                    accessor);

          // batch all messages
          readMsgs.add(message);
          if (message.getTgtName().equalsIgnoreCase("controller"))
          {
            readMsgKeys.add(keyBuilder.controllerMessage(message.getMsgId()));
          }
          else
          {
            // batch all creation of current state meta data
            // do it for state transition messages only
            if (message.getMsgType()
                       .equals(Message.MessageType.STATE_TRANSITION.toString()))
            {
              String resourceName = message.getResourceName();
              if (!curResourceNames.contains(resourceName)
                  && !createCurStateNames.contains(resourceName))
              {
                createCurStateNames.add(resourceName);
                createCurStateKeys.add(keyBuilder.currentState(instanceName,
                                                               sessionId,
                                                               resourceName));

                CurrentState metaCurState = new CurrentState(resourceName);
                metaCurState.setBucketSize(message.getBucketSize());
                metaCurState.setStateModelDefRef(message.getStateModelDef());
                metaCurState.setSessionId(sessionId);
                metaCurState.setGroupMessageMode(message.getGroupMessageMode());
                String ftyName = message.getStateModelFactoryName();
                if (ftyName != null)
                {
                  metaCurState.setStateModelFactoryName(ftyName);
                }
                else
                {
                  metaCurState.setStateModelFactoryName(HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
                }

                metaCurStates.add(metaCurState);
              }
            }

            readMsgKeys.add(keyBuilder.message(instanceName, message.getMsgId()));
          }
        }
        else
        {
          // This will happen because we don't delete the message as soon as we
          // read it.
          // We keep it until the current state is changed.
          // We will read the message again if there is a new message but we
          // check for the status and ignore if its already read
          logger.trace("Message already read" + message.getMsgId());
          // _statusUpdateUtil.logInfo(message, StateMachineEngine.class,
          // "Message already read", client);
        }
      }
      else
      {
        String warningMessage =
            "Session Id does not match. Expected sessionId: " + sessionId
                + ", sessionId from Message: " + tgtSessionId + ". MessageId: "
                + message.getMsgId();
        logger.warn(warningMessage);
        accessor.removeProperty(keyBuilder.message(instanceName, message.getId()));
        _statusUpdateUtil.logWarning(message,
                                     HelixStateMachineEngine.class,
                                     warningMessage,
                                     accessor);
      }
    }

    // batch create curState meta
    if (createCurStateKeys.size() > 0)
    {
      try
      {
        accessor.createChildren(createCurStateKeys, metaCurStates);
      }
      catch (Exception e)
      {
        logger.error(e);
      }
    }

    // update messages in batch and schedule all read messages
    if (readMsgs.size() > 0)
    {
      accessor.setChildren(readMsgKeys, readMsgs);

      for (int i = 0; i < handlers.size(); i++)
      {
        MessageHandler handler = handlers.get(i);
        Message handleMessage = handleMessages.get(i);
View Full Code Here

    ErrorType type = ErrorType.INTERNAL;
    ErrorCode code = ErrorCode.ERROR;

    long start = System.currentTimeMillis();
    logger.info("msg:" + _message.getMsgId() + " handling task begin, at: " + start);
    HelixDataAccessor accessor = _manager.getHelixDataAccessor();
    _statusUpdateUtil.logInfo(_message,
                              HelixTask.class,
                              "Message handling task begin execute",
                              accessor);
    _message.setExecuteStartTimeStamp(new Date().getTime());

    // Handle the message
    try
    {
      taskResult = _handler.handleMessage();
      exception = taskResult.getException();
    }
    catch (InterruptedException e)
    {
      _statusUpdateUtil.logError(_message,
                                 HelixTask.class,
                                 e,
                                 "State transition interrupted, timeout:" + _isTimeout,
                                 accessor);
      logger.info("Message " + _message.getMsgId() + " is interrupted");
      taskResult.setInterrupted(true);
      taskResult.setException(e);
      exception = e;
    }
    catch (Exception e)
    {
      String errorMessage =
          "Exception while executing a message. " + e + " msgId: " + _message.getMsgId()
              + " type: " + _message.getMsgType();
      logger.error(errorMessage, e);
      _statusUpdateUtil.logError(_message, HelixTask.class, e, errorMessage, accessor);
      taskResult.setSuccess(false);
      taskResult.setException(e);
      taskResult.setMessage(e.getMessage());
      exception = e;
    }

    // Cancel the timer since the handling is done
    // it is fine if the TimerTask for canceling is called already
    if (timer != null)
    {
      timer.cancel();
    }

    if (taskResult.isSucess())
    {
      _statusUpdateUtil.logInfo(_message,
                                _handler.getClass(),
                                "Message handling task completed successfully",
                                accessor);
      logger.info("Message " + _message.getMsgId() + " completed.");
    }
    else if (taskResult.isInterrupted())
    {
      logger.info("Message " + _message.getMsgId() + " is interrupted");
      code = _isTimeout ? ErrorCode.TIMEOUT : ErrorCode.CANCEL;
      if (_isTimeout)
      {
        int retryCount = _message.getRetryCount();
        logger.info("Message timeout, retry count: " + retryCount + " MSGID:"
            + _message.getMsgId());
        _statusUpdateUtil.logInfo(_message,
                                  _handler.getClass(),
                                  "Message handling task timeout, retryCount:"
                                      + retryCount,
                                  accessor);
        // Notify the handler that timeout happens, and the number of retries left
        // In case timeout happens (time out and also interrupted)
        // we should retry the execution of the message by re-schedule it in
        if (retryCount > 0)
        {
          _message.setRetryCount(retryCount - 1);
          _executor.scheduleTask(_message, _handler, _notificationContext);
          return taskResult;
        }
      }
    }
    else
    // logging for errors
    {
      String errorMsg =
          "Message execution failed. msgId: " + _message.getMsgId()
              + taskResult.getMessage();
      if (exception != null)
      {
        errorMsg += exception;
      }
      logger.error(errorMsg, exception);
      _statusUpdateUtil.logError(_message, _handler.getClass(), errorMsg, accessor);
    }

    // Post-processing for the finished task
    try
    {
      if (!_message.getGroupMessageMode())
      {
        removeMessageFromZk(accessor, _message);
        reportMessageStat(_manager, _message, taskResult);
        sendReply(accessor, _message, taskResult);
      }
      else
      {
        GroupMessageInfo info = _executor._groupMsgHandler.onCompleteSubMessage(_message);
        if (info != null)
        {
          // TODO: changed to async update
          // group update current state
          Map<PropertyKey, CurrentState> curStateMap = info.merge();
          for (PropertyKey key : curStateMap.keySet())
          {
            accessor.updateProperty(key, curStateMap.get(key));
          }

          // remove group message
          removeMessageFromZk(accessor, _message);
          reportMessageStat(_manager, _message, taskResult);
View Full Code Here

  {
    String alert =
        EXP + "(accumulate()(dbFoo.partition10.latency))" + CMP + "(GREATER)" + CON
            + "(10)";
    _alertsHolder.addAlert(alert);
    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.alerts()).getRecord();
    System.out.println("alert: " + alert);
    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(alertRecordContains(rec, alert));
    AssertJUnit.assertEquals(1, alertsSize(rec));
  }
View Full Code Here

        EXP + "(accumulate()(dbFoo.partition10.latency))" + CMP + "(GREATER)" + CON
            + "(100)";
    _alertsHolder.addAlert(alert1);
    _alertsHolder.addAlert(alert2);

    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.alerts()).getRecord();
    // System.out.println("alert: "+alert1);
    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(alertRecordContains(rec, alert1));
    AssertJUnit.assertTrue(alertRecordContains(rec, alert2));
    AssertJUnit.assertEquals(2, alertsSize(rec));
View Full Code Here

  {
    String alert1 =
        EXP + "(accumulate()(dbFoo.partition*.put*))" + CMP + "(GREATER)" + CON + "(10)";
    _alertsHolder.addAlert(alert1);
   
    HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();

    ZNRecord rec = accessor.getProperty(keyBuilder.alerts()).getRecord();
    // System.out.println("alert: "+alert1);
    System.out.println("rec: " + rec.toString());
    AssertJUnit.assertTrue(alertRecordContains(rec, alert1));
    AssertJUnit.assertEquals(1, alertsSize(rec));
  }
View Full Code Here

    ZNRecord record = IdealStateCalculatorForStorageNode.calculateIdealState(
        instances, partitions, replicas, resourceName, "MASTER", "SLAVE");
    IdealState idealState = new IdealState(record);
    idealState.setStateModelDefRef("MasterSlave");
   
    HelixDataAccessor accessor = manager.getHelixDataAccessor();
    Builder keyBuilder = accessor.keyBuilder();
    accessor.setProperty(keyBuilder.idealStates(resourceName),
                                          idealState);
    ResourceComputationStage stage = new ResourceComputationStage();
    runStage(event, new ReadClusterDataStage());
    runStage(event, stage);
View Full Code Here

TOP

Related Classes of com.linkedin.helix.HelixDataAccessor

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.