diff --git a/src/gausskernel/optimizer/commands/tablecmds.cpp b/src/gausskernel/optimizer/commands/tablecmds.cpp index b8f881729939d6dc358e06ead10b34524ec77fea..5bc6a10e62b43067a3f09fadabf623e7fd318790 100755 --- a/src/gausskernel/optimizer/commands/tablecmds.cpp +++ b/src/gausskernel/optimizer/commands/tablecmds.cpp @@ -2185,7 +2185,7 @@ ObjectAddress DefineRelation(CreateStmt* stmt, char relkind, Oid ownerId, Object bool isalter = false; bool hashbucket = false; int bucketcnt = 0; - StorageType storage_type = HEAP_DISK; + StorageType storage_type = (u_sess->attr.attr_storage.enable_segment == true) ? SEGMENT_PAGE : HEAP_DISK; bool relisshared = u_sess->attr.attr_common.IsInplaceUpgrade && u_sess->upg_cxt.new_catalog_isshared; errno_t rc; @@ -2963,7 +2963,9 @@ ObjectAddress DefineRelation(CreateStmt* stmt, char relkind, Oid ownerId, Object if (!IsInitdb && (relkind == RELKIND_RELATION) && !IsSystemNamespace(namespaceId) && !IsCStoreNamespace(namespaceId) && (pg_strcasecmp(storeChar, ORIENTATION_ROW) == 0) && (stmt->relation->relpersistence == RELPERSISTENCE_PERMANENT) && !u_sess->attr.attr_storage.enable_recyclebin) { - bool isSegmentType = (storage_type == SEGMENT_PAGE); + if (storage_type == SEGMENT_PAGE) { + reloptions = transformRelOptions((Datum)0, stmt->options, NULL, validnsps, true, false); + } } else if (storage_type == SEGMENT_PAGE) { if (u_sess->attr.attr_storage.enable_recyclebin) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmodule(MOD_SEGMENT_PAGE), diff --git a/src/gausskernel/storage/buffer/bufmgr.cpp b/src/gausskernel/storage/buffer/bufmgr.cpp index f69c4da0d03af93c996ff670a6e371d3332e2c54..01a3c9d73c8db2ed11acd47bcdccb1749fccd360 100644 --- a/src/gausskernel/storage/buffer/bufmgr.cpp +++ b/src/gausskernel/storage/buffer/bufmgr.cpp @@ -7264,6 +7264,7 @@ uint64 LockBufHdr(BufferDesc *desc) /* ENABLE_THREAD_CHECK only, acquire semantic */ TsAnnotateHappensAfter(&desc->state); + t_thrd.storage_cxt.BufferHeaderLockId = desc->buf_id; return old_buf_state | BM_LOCKED; } @@ -7282,7 +7283,7 @@ bool retryLockBufHdr(BufferDesc *desc, uint64 *buf_state) /* ENABLE_THREAD_CHECK only, acquire semantic */ TsAnnotateHappensAfter(&desc->state); - + t_thrd.storage_cxt.BufferHeaderLockId = desc->buf_id; return true; } /* CPU-specific delay each time through the loop */ diff --git a/src/include/knl/knl_thread.h b/src/include/knl/knl_thread.h index 0321b039d6633188c95c355e25000f00621765d3..f4f8b6e303b7a8ac4193f8a493397fdacccd3bbe 100755 --- a/src/include/knl/knl_thread.h +++ b/src/include/knl/knl_thread.h @@ -2695,6 +2695,8 @@ typedef struct knl_t_storage_context { int32 PrivateRefCountOverflowed; uint32 PrivateRefCountClock; PrivateRefCountEntry* ReservedRefCountEntry; + int BufferHeaderLockId; + /* * Information saved between calls so we can determine the strategy * point's advance rate and avoid scanning already-cleaned buffers.