Skip to content
This repository was archived by the owner on Sep 27, 2019. It is now read-only.

Commit f3eb826

Browse files
committed
Add catalog oid reset
1 parent 6591523 commit f3eb826

12 files changed

+46
-7
lines changed

src/catalog/catalog.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ void Catalog::BootstrapSystemCatalogs(storage::Database *database,
184184
system_catalogs->GetTableCatalog()->InsertTable(
185185
LAYOUT_CATALOG_OID, LAYOUT_CATALOG_NAME, CATALOG_SCHEMA_NAME,
186186
database_oid, pool_.get(), txn);
187+
188+
// Reset oid of each system catalog
189+
system_catalogs->ResetOidForUserSpace();
187190
}
188191

189192
void Catalog::Bootstrap() {
@@ -207,6 +210,11 @@ void Catalog::Bootstrap() {
207210

208211
InitializeLanguages();
209212
InitializeFunctions();
213+
214+
// Reset oid of each catalog
215+
DatabaseCatalog::GetInstance()->UpdateOid(OID_FOR_USER_OFFSET);
216+
LanguageCatalog::GetInstance().UpdateOid(OID_FOR_USER_OFFSET);
217+
ProcCatalog::GetInstance().UpdateOid(OID_FOR_USER_OFFSET);
210218
}
211219

212220
//===----------------------------------------------------------------------===//

src/catalog/system_catalogs.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,18 @@ void SystemCatalogs::Bootstrap(const std::string &database_name,
108108
}
109109
}
110110

111+
/*@brief Reset oid of each catalog to avoid collisions between catalog
112+
* values added by system and users when checkpoint recovery.
113+
*/
114+
void SystemCatalogs::ResetOidForUserSpace() {
115+
pg_attribute_->UpdateOid(OID_FOR_USER_OFFSET);
116+
pg_namespace_->UpdateOid(OID_FOR_USER_OFFSET);
117+
pg_table_->UpdateOid(OID_FOR_USER_OFFSET);
118+
pg_index_->UpdateOid(OID_FOR_USER_OFFSET);
119+
// pg_layout_->UpdateOid(OID_FOR_USER_OFFSET);
120+
pg_trigger_->UpdateOid(OID_FOR_USER_OFFSET);
121+
// pg_proc->UpdateOid(OID_FOR_USER_OFFSET);
122+
}
123+
111124
} // namespace catalog
112125
} // namespace peloton

src/include/catalog/catalog_defaults.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ namespace catalog {
3636

3737
// Local oids from START_OID = 0 to START_OID + OID_OFFSET are reserved
3838
#define OID_OFFSET 100
39+
#define OID_FOR_USER_OFFSET 100
3940
#define CATALOG_TABLES_COUNT 9
4041

4142
// Oid mask for each type

src/include/catalog/column_catalog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class ColumnCatalog : public AbstractCatalog {
7777
// No use
7878
inline oid_t GetNextOid() { return INVALID_OID; }
7979

80+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
81+
8082
//===--------------------------------------------------------------------===//
8183
// write Related API
8284
//===--------------------------------------------------------------------===//

src/include/catalog/database_catalog.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ class DatabaseCatalog : public AbstractCatalog {
111111

112112
inline oid_t GetNextOid() { return oid_++ | DATABASE_OID_MASK; }
113113

114+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
115+
114116
//===--------------------------------------------------------------------===//
115117
// write Related API
116118
//===--------------------------------------------------------------------===//
@@ -128,7 +130,6 @@ class DatabaseCatalog : public AbstractCatalog {
128130
std::shared_ptr<DatabaseCatalogObject> GetDatabaseObject(
129131
const std::string &database_name, concurrency::TransactionContext *txn);
130132

131-
private:
132133
DatabaseCatalog(storage::Database *pg_catalog, type::AbstractPool *pool,
133134
concurrency::TransactionContext *txn);
134135

src/include/catalog/index_catalog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ class IndexCatalog : public AbstractCatalog {
8080

8181
inline oid_t GetNextOid() { return oid_++ | INDEX_OID_MASK; }
8282

83+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
84+
8385
/** Write Related API */
8486
bool InsertIndex(oid_t index_oid, const std::string &index_name,
8587
oid_t table_oid, const std::string &schema_name,

src/include/catalog/language_catalog.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ class LanguageCatalog : public AbstractCatalog {
5656
// Global Singleton
5757
static LanguageCatalog &GetInstance(concurrency::TransactionContext *txn = nullptr);
5858

59+
oid_t GetNextOid() { return oid_++ | LANGUAGE_OID_MASK; }
60+
61+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
62+
5963
//===--------------------------------------------------------------------===//
6064
// write Related API
6165
//===--------------------------------------------------------------------===//
@@ -85,8 +89,6 @@ class LanguageCatalog : public AbstractCatalog {
8589
private:
8690
LanguageCatalog(concurrency::TransactionContext *txn);
8791

88-
oid_t GetNextOid() { return oid_++ | LANGUAGE_OID_MASK; }
89-
9092
enum IndexId {
9193
PRIMARY_KEY = 0,
9294
SECONDARY_KEY_0 = 1,

src/include/catalog/proc_catalog.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ class ProcCatalog : public AbstractCatalog {
8282
// Global Singleton
8383
static ProcCatalog &GetInstance(concurrency::TransactionContext *txn = nullptr);
8484

85+
oid_t GetNextOid() { return oid_++ | PROC_OID_MASK; }
86+
87+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
88+
8589
//===--------------------------------------------------------------------===//
8690
// write Related API
8791
//===--------------------------------------------------------------------===//
@@ -116,8 +120,6 @@ class ProcCatalog : public AbstractCatalog {
116120
private:
117121
ProcCatalog(concurrency::TransactionContext *txn);
118122

119-
oid_t GetNextOid() { return oid_++ | PROC_OID_MASK; }
120-
121123
enum IndexId {
122124
PRIMARY_KEY = 0,
123125
SECONDARY_KEY_0 = 1,

src/include/catalog/schema_catalog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class SchemaCatalog : public AbstractCatalog {
6262

6363
inline oid_t GetNextOid() { return oid_++ | SCHEMA_OID_MASK; }
6464

65+
void UpdateOid(oid_t add_value) { oid_ += add_value; }
66+
6567
//===--------------------------------------------------------------------===//
6668
// write Related API
6769
//===--------------------------------------------------------------------===//

src/include/catalog/system_catalogs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class SystemCatalogs {
115115
return pg_query_metrics_;
116116
}
117117

118+
void ResetOidForUserSpace();
119+
118120
private:
119121
ColumnCatalog *pg_attribute_;
120122
SchemaCatalog *pg_namespace_;

0 commit comments

Comments
 (0)