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;
  }