Skip to content

Commit

Permalink
Merge pull request cmu-db#5 from alphalzh/debug2
Browse files Browse the repository at this point in the history
Debug2
  • Loading branch information
star013 authored May 5, 2018
2 parents 4ac2c0e + 601c9f6 commit 8e2a3de
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 4 deletions.
47 changes: 46 additions & 1 deletion src/catalog/catalog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ Catalog::Catalog() : pool_(new type::EphemeralPool()) {
void Catalog::BootstrapSystemCatalogs(storage::Database *database,
concurrency::TransactionContext *txn) {
oid_t database_oid = database->GetOid();
LOG_INFO("database_oid = %d", database_oid);
LOG_INFO("database name = %s", database->GetDBName().c_str());
catalog_map_.emplace(database_oid,
std::shared_ptr<SystemCatalogs>(
new SystemCatalogs(database, pool_.get(), txn)));
Expand Down Expand Up @@ -157,6 +159,7 @@ void Catalog::BootstrapSystemCatalogs(storage::Database *database,
CATALOG_SCHEMA_NAME, IndexType::BWTREE, IndexConstraintType::DEFAULT,
false, {TableCatalog::ColumnId::DATABASE_OID}, pool_.get(), txn);


// Insert records(default + pg_catalog namespace) into pg_namespace
system_catalogs->GetSchemaCatalog()->InsertSchema(
CATALOG_SCHEMA_OID, CATALOG_SCHEMA_NAME, pool_.get(), txn);
Expand Down Expand Up @@ -226,7 +229,7 @@ ResultType Catalog::CreateDatabase(const std::string &database_name,
oid_t database_oid = pg_database->GetNextOid();

storage::Database *database = new storage::Database(database_oid);

LOG_INFO("get database");
// TODO: This should be deprecated, dbname should only exists in pg_db
database->setDBName(database_name);
{
Expand All @@ -239,13 +242,55 @@ ResultType Catalog::CreateDatabase(const std::string &database_name,
pg_database->InsertDatabase(database_oid, database_name, pool_.get(), txn);

// add core & non-core system catalog tables into database
LOG_INFO("begin bootstrap %s", database_name.c_str());
BootstrapSystemCatalogs(database, txn);
LOG_INFO("end bootstrap %s", database_name.c_str());
catalog_map_[database_oid]->Bootstrap(database_name, txn);
LOG_TRACE("Database %s created. Returning RESULT_SUCCESS.",
database_name.c_str());
return ResultType::SUCCESS;
}


ResultType Catalog::CreateDatabaseWithoutIndex(const std::string &database_name,
concurrency::TransactionContext *txn) {
if (txn == nullptr)
throw CatalogException("Do not have transaction to create database " +
database_name);

auto pg_database = DatabaseCatalog::GetInstance();
auto storage_manager = storage::StorageManager::GetInstance();
// Check if a database with the same name exists
auto database_object = pg_database->GetDatabaseObject(database_name, txn);
if (database_object != nullptr)
throw CatalogException("Database " + database_name + " already exists");

// Create actual database
oid_t database_oid = pg_database->GetNextOid();

storage::Database *database = new storage::Database(database_oid);
LOG_INFO("get database");
// TODO: This should be deprecated, dbname should only exists in pg_db
database->setDBName(database_name);
{
std::lock_guard<std::mutex> lock(catalog_mutex);
storage_manager->AddDatabaseToStorageManager(database);
}
// put database object into rw_object_set
txn->RecordCreate(database_oid, INVALID_OID, INVALID_OID);
// Insert database record into pg_db
pg_database->InsertDatabase(database_oid, database_name, pool_.get(), txn);

// add core & non-core system catalog tables into database
LOG_INFO("begin bootstrap %s", database_name.c_str());
BootstrapSystemCatalogs(database, txn);
LOG_INFO("end bootstrap %s", database_name.c_str());
// catalog_map_[database_oid]->Bootstrap(database_name, txn);
LOG_TRACE("Database %s created. Returning RESULT_SUCCESS.",
database_name.c_str());
return ResultType::SUCCESS;
}

/*@brief create schema(namespace)
* @param database_name the database which the namespace belongs to
* @param schema_name name of the schema
Expand Down
4 changes: 3 additions & 1 deletion src/catalog/system_catalogs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,13 @@ SystemCatalogs::~SystemCatalogs() {
* @param txn TransactionContext
*/
void SystemCatalogs::Bootstrap(const std::string &database_name,
concurrency::TransactionContext *txn) {
UNUSED_ATTRIBUTE concurrency::TransactionContext *txn) {
LOG_DEBUG("Bootstrapping database: %s", database_name.c_str());

if (!pg_trigger_) {
LOG_INFO("TriggerCatalog begin");
pg_trigger_ = new TriggerCatalog(database_name, txn);
LOG_INFO("TriggerCatalog end");
}

// if (!pg_proc) {
Expand Down
4 changes: 4 additions & 0 deletions src/include/catalog/catalog.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ class Catalog {
ResultType CreateDatabase(const std::string &database_name,
concurrency::TransactionContext *txn);

ResultType CreateDatabaseWithoutIndex(const std::string &database_name,
concurrency::TransactionContext *txn);

// Create a schema(namespace)
ResultType CreateSchema(const std::string &database_name,
const std::string &schema_name,
Expand Down Expand Up @@ -118,6 +121,7 @@ class Catalog {
concurrency::TransactionContext *txn,
bool is_catalog = false);


//===--------------------------------------------------------------------===//
// DROP FUNCTIONS
//===--------------------------------------------------------------------===//
Expand Down
11 changes: 9 additions & 2 deletions test/concurrency/testing_transaction_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ storage::DataTable *TestingTransactionUtil::CreateTable(
storage::DataTable *TestingTransactionUtil::CreateTableWithoutIndex(
std::string database_name, std::string schema_name, std::string table_name) {
LOG_INFO("database name = %s", database_name.c_str());
LOG_INFO("table name = %s", table_name.c_str());

auto id_column = catalog::Column(
type::TypeId::INTEGER, type::Type::GetTypeSize(type::TypeId::INTEGER),
"id", true);
Expand All @@ -228,14 +228,21 @@ storage::DataTable *TestingTransactionUtil::CreateTableWithoutIndex(
std::unique_ptr<catalog::Schema> table_schema(
new catalog::Schema({id_column, value_column}));

LOG_INFO("schema name = %s", schema_name.c_str());
auto catalog = catalog::Catalog::GetInstance();
// Create Database and Table
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
auto txn = txn_manager.BeginTransaction();
catalog->CreateDatabase(database_name, txn);
LOG_INFO("table name = %s", table_name.c_str());
catalog->CreateDatabaseWithoutIndex(database_name, txn);
txn_manager.CommitTransaction(txn);
LOG_INFO("create database %s", database_name.c_str());

txn = txn_manager.BeginTransaction();
catalog->CreateSchema(database_name, schema_name, txn);
txn_manager.CommitTransaction(txn);
LOG_INFO("create schema %s", schema_name.c_str());

txn = txn_manager.BeginTransaction();
catalog->CreateTable(database_name, schema_name, table_name, std::move(table_schema), txn);
txn_manager.CommitTransaction(txn);
Expand Down

0 comments on commit 8e2a3de

Please sign in to comment.