code: public ListenableFuture<Boolean> removeAsync(@NotNull V entity) {
          Timer removeAsyncTimer = METRICS.getTimer(MetricsType.DATA_PROVIDER_REMOVE.name());
  
          Delete from = QueryBuilder.delete()
                                    .from(getEntityMetadata().getTableName());
  
          int primaryKeysSize = getEntityMetadata().getPrimaryKeysSize();
  
          Delete.Where where = null;
  
          for (int i = 0; i < primaryKeysSize; i++) {
              Optional<PrimaryKeyMetadata> primaryKey = getEntityMetadata().getPrimaryKey(i);
  
              if (!primaryKey.isPresent()) {
                  throw new QueryException(String.format("Invalid primary key index: %d", i));
              }
  
              PrimaryKeyMetadata primaryKeyMetadata = primaryKey.get();
  
              if (i == 0) {
                  where = from.where(QueryBuilder.eq(primaryKeyMetadata.getName(), QueryBuilder.bindMarker()));
              } else {
                  where = where.and(QueryBuilder.eq(primaryKeyMetadata.getName(), QueryBuilder.bindMarker()));
              }
  
          }
  
          assert where != null;
  
          PreparedStatement prepare = getCassandraClient().prepare(getEntityMetadata().getKeyspace(), where.getQueryString());
          prepare.setConsistencyLevel(getWriteConsistencyLevel());
  
          BoundStatement boundStatement = new BoundStatement(prepare);
  
          for (int i = 0; i < primaryKeysSize; i++) {
              Optional<PrimaryKeyMetadata> primaryKey = getEntityMetadata().getPrimaryKey(i);
  
              if (!primaryKey.isPresent()) {
                  throw new QueryException(String.format("Invalid primary key index: %d", i));
              }
  
              PrimaryKeyMetadata primaryKeyMetadata = primaryKey.get();
  
              Object value = primaryKeyMetadata.readValue(entity);
  
              boundStatement.setBytesUnsafe(i, primaryKeyMetadata.serialize(value));
          }
  
          ResultSetFuture resultSetFuture = getCassandraClient().executeAsync(boundStatement);
  
          ListenableFuture<Boolean> transform = Futures.transform(resultSetFuture, ResultSet::wasApplied, getExecutorService());
  
          monitorFuture(removeAsyncTimer, transform);
  
          return transform;
      }
docs: Remove entity asynchronously
  
  @param entity Target entity
  
  @return Operation status result