int TRI_StartReplicationApplier (TRI_replication_applier_t* applier,
                                 TRI_voc_tick_t initialTick,
                                 bool useTick) {
  LOG_TRACE("requesting replication applier start. initialTick: %llu, useTick: %d",
            (unsigned long long) initialTick,
            (int) useTick);

  if (applier->_vocbase->_type == TRI_VOCBASE_TYPE_COORDINATOR) {
    return TRI_ERROR_CLUSTER_UNSUPPORTED;
  }

  int res = TRI_ERROR_NO_ERROR;
  // wait until previous applier thread is shut down
  while (! TRI_WaitReplicationApplier(applier, 10 * 1000));

  TRI_WriteLockReadWriteLock(&applier->_statusLock);

  if (! applier->_state._active) {
    res = StartApplier(applier, initialTick, useTick);
  }

  TRI_WriteUnlockReadWriteLock(&applier->_statusLock);

  return res;
}
int TRI_StartReplicationApplier (TRI_replication_applier_t* applier,
                                 TRI_voc_tick_t initialTick,
                                 bool useTick) {
  int res;
  
  res = TRI_ERROR_NO_ERROR;

  LOG_TRACE("requesting replication applier start. initialTick: %llu, useTick: %d",
            (unsigned long long) initialTick,
            (int) useTick);

  // wait until previous applier thread is shut down
  while (! TRI_WaitReplicationApplier(applier, 10 * 1000));
  
  TRI_WriteLockReadWriteLock(&applier->_statusLock);

  if (! applier->_state._active) {
    res = StartApplier(applier, initialTick, useTick);
  }
  
  TRI_WriteUnlockReadWriteLock(&applier->_statusLock);

  return res;
}