@Override
  public void put(MessageWriteSet messageSetToWrite) throws StoreException {
    List<MessageInfo> newInfos = messageSetToWrite.getMessageSetInfo();
    try {
      messageSetToWrite.writeTo(log);
    } catch (StoreException e) {
      throw new IllegalStateException(e);
    }
    List<MessageInfo> infos = new ArrayList<>();
    for (MessageInfo info : newInfos) {
      short lifeVersion = 0;
      if (info.getLifeVersion() != MessageInfo.LIFE_VERSION_FROM_FRONTEND) {
        lifeVersion = info.getLifeVersion();
      }
      if (info.isTtlUpdated()) {
        info = new MessageInfo(info.getStoreKey(), info.getSize(), info.isDeleted(), false, info.isUndeleted(),
            info.getExpirationTimeInMs(), info.getCrc(), info.getAccountId(), info.getContainerId(),
            info.getOperationTimeMs(), lifeVersion);
      }
      infos.add(info);
    }
    messageInfos.addAll(infos);
    if (listener != null) {
      listener.onPut(this, infos);
    }
  }
Log that stores all data in memory.
ambry-replication/src/test/java/com/github/ambry/replication/InMemoryStore.java