code: public <T> CompletableFuture<VersionedMetadata<T>> getEntry(String tableName, String key, Function<byte[], T> fromBytes) {
          log.trace("get entry called for : {} key : {}", tableName, key);
          List<TableKey<byte[]>> keys = Collections.singletonList(new TableKeyImpl<>(key.getBytes(Charsets.UTF_8), null));
          CompletableFuture<VersionedMetadata<T>> result = new CompletableFuture<>();
          String message = "get entry: key: %s table: %s";
          withRetries(() -> segmentHelper.readTable(tableName, keys, authToken.get(), RequestTag.NON_EXISTENT_ID),
                  () -> String.format(message, key, tableName))
                  .thenApplyAsync(x -> {
                      TableEntry<byte[], byte[]> first = x.get(0);
                      if (first.getKey().getVersion().equals(KeyVersion.NOT_EXISTS)) {
                          throw StoreException.create(StoreException.Type.DATA_NOT_FOUND, String.format(message, key, tableName));   
                      } else {
                          log.trace("returning entry for : {} key : {} with version {}", tableName, key,
                                  first.getKey().getVersion().getSegmentVersion());
  
                          T deserialized = fromBytes.apply(first.getValue());
  
                          return new VersionedMetadata<>(deserialized, new Version.LongVersion(first.getKey().getVersion().getSegmentVersion()));
                      }
                  }, executor)
                  .whenCompleteAsync((r, e) -> {
                     if (e != null) {
                         result.completeExceptionally(e);
                     } else {
                         result.complete(r);
                     }
                  }, executor);
          return result;
      }
docs: Method to retrieve the value for a given key from a table. This method takes a deserialization function and deserializes
  the received byte[] using the supplied function.
  @param tableName tableName
  @param key key
  @param fromBytes deserialization function
  @param <T> Type of deserialized object
  @return CompletableFuture which when completed will have the versionedMetadata retrieved from the store.