class FileChannel extends BasicChannelSemantics implements TransactionCapacitySupported {

  @Override
  public synchronized void start() {
    LOG.info("Starting {}...", this);
    channelCounter.start();
    try {
      Builder builder = createLogBuilder();
      log = builder.build();
      log.replay();
      setOpen(true);

      int depth = getDepth();
      Preconditions.checkState(queueRemaining.tryAcquire(depth),
          "Unable to acquire " + depth + " permits " + channelNameDescriptor);
      LOG.info("Queue Size after replay: " + depth + " "
          + channelNameDescriptor);
    } catch (Throwable t) {
      setOpen(false);
      channelCounter.setUnhealthy(1);
      startupError = t;
      LOG.error("Failed to start the file channel " + channelNameDescriptor, t);
      if (t instanceof Error) {
        throw (Error) t;
      }
    }
    if (open) {
      channelCounter.setChannelSize(getDepth());
      channelCounter.setChannelCapacity(capacity);
    }
    super.start();
  }

}