public DynamicFileHelixManager(
      String clusterName,
      String instanceName,
      InstanceType instanceType,
      FilePropertyStore<ZNRecord> store) {
    _clusterName = clusterName;
    _instanceName = instanceName;
    _instanceType = instanceType;

    _handlers = new ArrayList<FileCallbackHandler>();

    _store = store;
    _fileDataAccessor = new FileDataAccessor(_store, clusterName);
    _accessor = new FileHelixDataAccessor(_store, clusterName);

    _mgmtTool = new FileHelixAdmin(_store);
    _messagingService = new DefaultMessagingService(this);
    _sessionId = UUID.randomUUID().toString();
    if (instanceType == InstanceType.PARTICIPANT) {
      addLiveInstance();
      addMessageListener(_messagingService.getExecutor(), _instanceName);
    }

    _version =
        new PropertiesReader("cluster-manager-version.properties")
            .getProperty("clustermanager.version");

    _stateMachEngine = new HelixStateMachineEngine(this);

    _messagingService.registerMessageHandlerFactory(
        MessageType.STATE_TRANSITION.toString(), _stateMachEngine);
  }
  @Override
  public void disconnect() {
    _store.stop();
    _messagingService.getExecutor().shutDown();

    _isConnected = false;
  }
 @Override
 public void connect() {
   if (!isClusterSetup(_clusterName)) {
     throw new HelixException(
         "Initial cluster structure is not set up for cluster:" + _clusterName);
   }
   _messagingService.onConnected();
   _store.start();
   _isConnected = true;
 }