class UnpartitionedTableMetadataUpdateReplication implements Replication {

  @Override
  public void replicate() throws CircusTrainException {
    try {
      replica.validateReplicaTable(replicaDatabaseName, replicaTableName);
      try (CloseableMetaStoreClient client = replica.getMetaStoreClientSupplier().get()) {
        String previousLocation = getPreviousLocation(client);
        // using previous eventId because we shouldn't override the path
        ReplicaLocationManager replicaLocationManager = new MetadataUpdateReplicaLocationManager(client,
            TableType.UNPARTITIONED, previousLocation, replicaDatabaseName, replicaTableName);
        TableAndStatistics sourceTableAndStatistics = source.getTableAndStatistics(database, table);
        replica
            .updateMetadata(eventId, sourceTableAndStatistics, replicaDatabaseName, replicaTableName,
                replicaLocationManager);
      }
      LOG.info("Metadata updated for table {}.{} (no data copied).", database, table);
    } catch (Throwable t) {
      throw new CircusTrainException("Unable to replicate", t);
    }
  }

    UnpartitionedTableMetadataUpdateReplication(
      String database,
      String table,
      Source source,
      Replica replica,
      EventIdFactory eventIdFactory,
      String replicaDatabaseName,
      String replicaTableName);

}