Skip to content

Commit

Permalink
Move table dropping inside ShardManager
Browse files Browse the repository at this point in the history
  • Loading branch information
electrum committed Oct 23, 2015
1 parent fe4a5f9 commit 61720c4
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 27 deletions.
Expand Up @@ -19,7 +19,6 @@
import com.facebook.presto.raptor.metadata.ShardDelta;
import com.facebook.presto.raptor.metadata.ShardInfo;
import com.facebook.presto.raptor.metadata.ShardManager;
import com.facebook.presto.raptor.metadata.ShardManagerDao;
import com.facebook.presto.raptor.metadata.Table;
import com.facebook.presto.raptor.metadata.TableColumn;
import com.facebook.presto.raptor.metadata.ViewResult;
Expand All @@ -45,11 +44,8 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Multimaps;
import io.airlift.json.JsonCodec;
import io.airlift.log.Logger;
import io.airlift.slice.Slice;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.exceptions.DBIException;

import javax.annotation.Nullable;
import javax.inject.Inject;
Expand All @@ -70,7 +66,6 @@
import static com.facebook.presto.raptor.RaptorSessionProperties.getExternalBatchId;
import static com.facebook.presto.raptor.RaptorTableProperties.getSortColumns;
import static com.facebook.presto.raptor.RaptorTableProperties.getTemporalColumn;
import static com.facebook.presto.raptor.metadata.DatabaseShardManager.shardIndexTable;
import static com.facebook.presto.raptor.metadata.SchemaDaoUtil.createTablesWithRetry;
import static com.facebook.presto.raptor.util.DatabaseUtil.onDemandDao;
import static com.facebook.presto.raptor.util.DatabaseUtil.runTransaction;
Expand All @@ -93,8 +88,6 @@
public class RaptorMetadata
implements ConnectorMetadata
{
private static final Logger log = Logger.get(RaptorMetadata.class);

private final IDBI dbi;
private final MetadataDao dao;
private final ShardManager shardManager;
Expand Down Expand Up @@ -254,26 +247,7 @@ public void createTable(ConnectorSession session, ConnectorTableMetadata tableMe
public void dropTable(ConnectorSession session, ConnectorTableHandle tableHandle)
{
RaptorTableHandle raptorHandle = checkType(tableHandle, RaptorTableHandle.class, "tableHandle");
long tableId = raptorHandle.getTableId();
runTransaction(dbi, (handle, status) -> {
ShardManagerDao shardManagerDao = handle.attach(ShardManagerDao.class);
shardManagerDao.dropShardNodes(tableId);
shardManagerDao.dropShards(tableId);

MetadataDao dao = handle.attach(MetadataDao.class);
dao.dropColumns(tableId);
dao.dropTable(tableId);
return null;
});

// TODO: add a cleanup process for leftover index tables
// It is not possible to drop the index tables in a transaction.
try (Handle handle = dbi.open()) {
handle.execute("DROP TABLE " + shardIndexTable(tableId));
}
catch (DBIException e) {
log.warn(e, "Failed to drop index table %s", shardIndexTable(tableId));
}
shardManager.dropTable(raptorHandle.getTableId());
}

@Override
Expand Down
Expand Up @@ -29,6 +29,7 @@
import com.google.common.collect.Maps;
import com.google.common.util.concurrent.ExecutionError;
import com.google.common.util.concurrent.UncheckedExecutionException;
import io.airlift.log.Logger;
import org.h2.jdbc.JdbcConnection;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.IDBI;
Expand Down Expand Up @@ -80,6 +81,8 @@
public class DatabaseShardManager
implements ShardManager
{
private static final Logger log = Logger.get(DatabaseShardManager.class);

private static final String INDEX_TABLE_PREFIX = "x_shards_t";

private final IDBI dbi;
Expand Down Expand Up @@ -135,6 +138,30 @@ public void createTable(long tableId, List<ColumnInfo> columns)
}
}

@Override
public void dropTable(long tableId)
{
runTransaction(dbi, (handle, status) -> {
ShardManagerDao shardManagerDao = handle.attach(ShardManagerDao.class);
shardManagerDao.dropShardNodes(tableId);
shardManagerDao.dropShards(tableId);

MetadataDao dao = handle.attach(MetadataDao.class);
dao.dropColumns(tableId);
dao.dropTable(tableId);
return null;
});

// TODO: add a cleanup process for leftover index tables
// It is not possible to drop the index tables in a transaction.
try (Handle handle = dbi.open()) {
handle.execute("DROP TABLE " + shardIndexTable(tableId));
}
catch (DBIException e) {
log.warn(e, "Failed to drop index table %s", shardIndexTable(tableId));
}
}

@Override
public void addColumn(long tableId, ColumnInfo column)
{
Expand Down
Expand Up @@ -31,6 +31,11 @@ public interface ShardManager
*/
void createTable(long tableId, List<ColumnInfo> columns);

/**
* Drop a table.
*/
void dropTable(long tableId);

/**
* Add a column to the end of the table.
*/
Expand Down

0 comments on commit 61720c4

Please sign in to comment.