code: public CompletableFuture<Version> addNewEntry(String tableName, String key, @NonNull byte[] value) {
          log.trace("addNewEntry called for : {} key : {}", tableName, key);
  
          List<TableEntry<byte[], byte[]>> entries = Collections.singletonList(
                  new TableEntryImpl<>(new TableKeyImpl<>(key.getBytes(Charsets.UTF_8), KeyVersion.NOT_EXISTS), value));
          Supplier<String> errorMessage = () -> String.format("addNewEntry: key: %s table: %s", key, tableName);
          return withRetries(() -> segmentHelper.updateTableEntries(tableName, entries, authToken.get(), RequestTag.NON_EXISTENT_ID),
                  errorMessage)
                  .exceptionally(e -> {
                      Throwable unwrap = Exceptions.unwrap(e);
                      if (unwrap instanceof StoreException.WriteConflictException) {
                          throw StoreException.create(StoreException.Type.DATA_EXISTS, errorMessage.get());
                      } else {
                          log.debug("add new entry {} to {} threw exception {} {}", key, tableName, unwrap.getClass(), unwrap.getMessage());
                          throw new CompletionException(e);
                      }
                  })
                  .thenApplyAsync(x -> {
                      KeyVersion first = x.get(0);
                      log.trace("entry for key {} added to table {} with version {}", key, tableName, first.getSegmentVersion());
                      return new Version.LongVersion(first.getSegmentVersion());
                  }, executor);
      }
docs: Method to add new entry to a table.
  @param tableName table name
  @param key key to add
  @param value value to add
  @return CompletableFuture which when completed will have the version of the key returned by segment store.
  If the key already exists, it will throw StoreException.DataExistsException.