diff --git a/src/postgres/src/backend/executor/ybcModifyTable.c b/src/postgres/src/backend/executor/ybcModifyTable.c index 7c8684384..46814a745 100644 --- a/src/postgres/src/backend/executor/ybcModifyTable.c +++ b/src/postgres/src/backend/executor/ybcModifyTable.c @@ -711,11 +711,13 @@ void YBCUpdateSysCatalogTuple(Relation rel, HeapTuple oldtuple, HeapTuple tuple) void YBCStartBufferingWriteOperations() { + return; /* TODO mbautin: revert this */ HandleYBStatus(YBCPgStartBufferingWriteOperations(ybc_pg_session)); } void YBCFlushBufferedWriteOperations() { + return; /* TODO mbautin: revert this */ HandleYBStatus(YBCPgFlushBufferedWriteOperations(ybc_pg_session)); } diff --git a/src/yb/client/table_creator.cc b/src/yb/client/table_creator.cc index 9dc4a43e7..5e63e9cb7 100644 --- a/src/yb/client/table_creator.cc +++ b/src/yb/client/table_creator.cc @@ -241,9 +241,9 @@ Status YBTableCreator::Create() { } else { int tserver_count = 0; RETURN_NOT_OK(client_->TabletServerCount(&tserver_count, true /* primary_only */)); - num_tablets_ = tserver_count * FLAGS_yb_num_shards_per_tserver; + num_tablets_ = std::max(1, tserver_count * FLAGS_yb_num_shards_per_tserver); VLOG(1) << "num_tablets = " << num_tablets_ << ": " - << "calculated as tserver_count * FLAGS_yb_num_shards_per_tserver (" + << "calculated as tserver_count * FLAGS_yb_num_shards_per_tserver, but at least 1 (" << tserver_count << " * " << FLAGS_yb_num_shards_per_tserver << ")"; } } diff --git a/src/yb/client/transaction_manager.cc b/src/yb/client/transaction_manager.cc index 9b019963d..8444b1a4d 100644 --- a/src/yb/client/transaction_manager.cc +++ b/src/yb/client/transaction_manager.cc @@ -75,15 +75,24 @@ class PickStatusTabletTask { } void Run() { + // // TODO mbautin : this is a hack to always use the sys catalog tablet. + // std::vector tablets { "00000000000000000000000000000000" }; + // InvokeCallback(table_state_->local_tablet_filter, tablets, callback_); + + // return; + // TODO(dtxn) async std::vector tablets; auto status = client_->GetTablets(kTransactionTableName, 0, &tablets, /* ranges */ nullptr); if (!status.ok()) { + VLOG(1) << "Failed to get tablets of txn status table: " << status; callback_(status); return; } if (tablets.empty()) { - callback_(STATUS_FORMAT(IllegalState, "No tablets in table $0", kTransactionTableName)); + Status s = STATUS_FORMAT(IllegalState, "No tablets in table $0", kTransactionTableName); + VLOG(1) << s; + callback_(s); return; } auto expected = TransactionTableStatus::kExists; diff --git a/src/yb/common/schema.h b/src/yb/common/schema.h index cfe236923..6c20058e6 100644 --- a/src/yb/common/schema.h +++ b/src/yb/common/schema.h @@ -1145,6 +1145,10 @@ class SchemaBuilder { CHECKED_STATUS RenameColumn(const string& old_name, const string& new_name); CHECKED_STATUS AlterProperties(const TablePropertiesPB& pb); + void SetTransactional(bool transasctional) { + table_properties_.SetTransactional(transasctional); + } + private: ColumnId next_id_; diff --git a/src/yb/integration-tests/external_mini_cluster.cc b/src/yb/integration-tests/external_mini_cluster.cc index 4d9cad4ed..f40f13ee8 100644 --- a/src/yb/integration-tests/external_mini_cluster.cc +++ b/src/yb/integration-tests/external_mini_cluster.cc @@ -349,6 +349,10 @@ Status ExternalMiniCluster::Start(rpc::Messenger* messenger) { LOG(INFO) << "No need to start tablet servers"; } + if (opts_.start_pgsql_proxy) { + RETURN_NOT_OK(WaitForInitDb()); + } + running_ = true; return Status::OK(); } @@ -966,9 +970,6 @@ Status ExternalMiniCluster::StartMasters() { masters_.push_back(peer); } - if (opts_.start_pgsql_proxy) { - RETURN_NOT_OK(WaitForInitDb()); - } return Status::OK(); } diff --git a/src/yb/master/catalog_manager.cc b/src/yb/master/catalog_manager.cc index 607302679..6439ca5f6 100644 --- a/src/yb/master/catalog_manager.cc +++ b/src/yb/master/catalog_manager.cc @@ -170,7 +170,7 @@ DEFINE_bool(catalog_manager_wait_for_new_tablets_to_elect_leader, true, "election."); TAG_FLAG(catalog_manager_wait_for_new_tablets_to_elect_leader, hidden); -DEFINE_int32(replication_factor, 3, +DEFINE_int32(replication_factor, 1, // TODO mbautin: revert this "Default number of replicas for tables that do not have the num_replicas set."); TAG_FLAG(replication_factor, advanced); @@ -785,6 +785,11 @@ Status CatalogManager::StartRunningInitDbIfNeeded(int64_t term) { initial_snapshot_writer_.emplace(); } + // TODO mbautin: get rid of this logic. + LOG(INFO) << "Waiting to give the tablet server a chance to come up"; + std::this_thread::sleep_for(60s); + LOG(INFO) << "Finished waiting to give the tablet server a chance to come up"; + Status status = PgWrapper::InitDbForYSQL(master_addresses_str, "/tmp"); if (FLAGS_create_initial_sys_catalog_snapshot && status.ok()) { @@ -1658,6 +1663,11 @@ Status CatalogManager::CreateTable(const CreateTableRequestPB* orig_req, } if (is_pg_catalog_table) { + // TODO: dedup this logic with the other place we're doing this below in this function. + Status s = CreateTransactionsStatusTableIfNeeded(rpc); + if (!s.ok()) { + return s.CloneAndPrepend("Error while creating transaction status table"); + } return CreatePgsqlSysTable(orig_req, resp, rpc); } @@ -1970,7 +1980,8 @@ Status CatalogManager::CheckValidPlacementInfo(const PlacementInfoPB& placement_ // Verify that the number of replicas isn't larger than the number of live tablet // servers. if (FLAGS_catalog_manager_check_ts_count_for_create_table && - num_replicas > num_live_tservers) { + num_replicas > num_live_tservers && + /* TODO mbautin: revert this */ false) { msg = Substitute("Not enough live tablet servers to create table with replication factor $0. " "$1 tablet servers are alive.", num_replicas, num_live_tservers); LOG(WARNING) << msg; @@ -2066,6 +2077,9 @@ Status CatalogManager::CreateTransactionsStatusTableIfNeeded(rpc::RpcContext *rp req.mutable_namespace_()->set_name(kSystemNamespaceName); req.set_table_type(TableType::TRANSACTION_STATUS_TABLE_TYPE); + // TODO mbautin: revert the following. + FLAGS_transaction_table_num_tablets = 1; + // Explicitly set the number tablets if the corresponding flag is set, otherwise CreateTable // will use the same defaults as for regular tables. if (FLAGS_transaction_table_num_tablets > 0) { diff --git a/src/yb/master/sys_catalog.cc b/src/yb/master/sys_catalog.cc index c2a63902a..0e299e604 100644 --- a/src/yb/master/sys_catalog.cc +++ b/src/yb/master/sys_catalog.cc @@ -493,9 +493,9 @@ Status SysCatalogTable::OpenTablet(const scoped_refptrlog_anchor_registry(), tablet_options, " P " + tablet_peer()->permanent_uuid(), - nullptr, // transaction_participant_context + tablet_peer().get(), // transaction_participant_context client::LocalTabletFilter(), - nullptr, // transaction_coordinator_context + tablet_peer().get(), // transaction_coordinator_context append_pool()}; RETURN_NOT_OK(BootstrapTablet(data, &tablet, &log, &consensus_info)); @@ -612,9 +612,11 @@ CHECKED_STATUS SysCatalogTable::SyncWrite(SysCatalogWriter* writer) { // protobuf itself. Schema SysCatalogTable::BuildTableSchema() { SchemaBuilder builder; + TableProperties table_properties; CHECK_OK(builder.AddKeyColumn(kSysCatalogTableColType, INT8)); CHECK_OK(builder.AddKeyColumn(kSysCatalogTableColId, BINARY)); CHECK_OK(builder.AddColumn(kSysCatalogTableColMetadata, BINARY)); + builder.SetTransactional(true); return builder.Build(); } diff --git a/src/yb/yql/pggate/pg_ddl.cc b/src/yb/yql/pggate/pg_ddl.cc index 2707b50fc..aadf234cc 100644 --- a/src/yb/yql/pggate/pg_ddl.cc +++ b/src/yb/yql/pggate/pg_ddl.cc @@ -133,19 +133,19 @@ Status PgCreateTable::AddColumn(const char *attr_name, Status PgCreateTable::Exec() { // Construct schema. client::YBSchema schema; - if (!is_pg_catalog_table_) { - TableProperties table_properties; - const char* pg_txn_enabled_env_var = getenv("YB_PG_TRANSACTIONS_ENABLED"); - const bool transactional = - !pg_txn_enabled_env_var || strcmp(pg_txn_enabled_env_var, "1") == 0; - LOG(INFO) << Format( - "PgCreateTable: creating a $0 table: $1", - transactional ? "transactional" : "non-transactional", table_name_.ToString()); - if (transactional) { - table_properties.SetTransactional(true); - schema_builder_.SetTableProperties(table_properties); - } + + TableProperties table_properties; + const char* pg_txn_enabled_env_var = getenv("YB_PG_TRANSACTIONS_ENABLED"); + const bool transactional = + !pg_txn_enabled_env_var || strcmp(pg_txn_enabled_env_var, "1") == 0; + LOG(INFO) << Format( + "PgCreateTable: creating a $0 table: $1", + transactional ? "transactional" : "non-transactional", table_name_.ToString()); + if (transactional) { + table_properties.SetTransactional(true); + schema_builder_.SetTableProperties(table_properties); } + RETURN_NOT_OK(schema_builder_.Build(&schema)); // Create table. diff --git a/src/yb/yql/pgwrapper/create_initial_sys_catalog_snapshot.cc b/src/yb/yql/pgwrapper/create_initial_sys_catalog_snapshot.cc index 3a450ddba..76abc2231 100644 --- a/src/yb/yql/pgwrapper/create_initial_sys_catalog_snapshot.cc +++ b/src/yb/yql/pgwrapper/create_initial_sys_catalog_snapshot.cc @@ -50,8 +50,8 @@ class CreateInitialSysCatalogSnapshotTest : public PgWrapperTestBase { } int GetNumTabletServers() const override { - // No tablet servers necessary to run initdb. - return 0; + // Needed for txn status table. + return 1; } };