Files
openGauss-server/src/include/utils/knl_localpartdefcache.h
openGaussDev 0c08e764e0 Global SysCache
Offering: openGaussDev

More detail:
修复闪回功能未适配GSC导致DDL数据无法丢弃问题

# Conflicts:
#	src/gausskernel/storage/tcap/tcap_truncate.cpp

Match-id-e09ce9c267ac9ae227186b0e7cbc9377b1cfb06a
2022-03-14 19:34:44 +08:00

79 lines
2.5 KiB
C++

/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ---------------------------------------------------------------------------------------
*
* knl_localpartdefcache.h
*
*
*
* IDENTIFICATION
* src/include/utils/knl_localpartdefcache.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef KNL_LOCALPARTDEFCACHE_H
#define KNL_LOCALPARTDEFCACHE_H
#include "utils/knl_localbasedefcache.h"
#include "utils/knl_globalpartdefcache.h"
#include "utils/relcache.h"
class LocalPartDefCache : public LocalBaseDefCache {
public:
LocalPartDefCache();
void ResetInitFlag()
{
m_bucket_list.ResetContent();
invalid_entries.ResetInitFlag();
m_global_partdefcache = NULL;
PartCacheNeedEOXActWork = false;
m_is_inited = false;
m_db_id = InvalidOid;
}
void Init();
void CreateDefBucket()
{
LocalBaseDefCache::CreateDefBucket(LOCAL_INIT_PARTCACHE_SIZE);
}
Partition SearchPartition(Oid part_id);
Partition SearchPartitionFromLocal(Oid part_id);
template <bool insert_into_local>
Partition SearchPartitionFromGlobalCopy(Oid part_id);
void InsertPartitionIntoLocal(Partition part);
void RemovePartition(Partition part);
void InvalidateGlobalPartition(Oid db_oid, Oid part_oid, bool is_commit);
void InvalidateAll();
void AtEOXact_PartitionCache(bool isCommit);
void AtEOSubXact_PartitionCache(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid);
Partition PartitionIdGetPartition(Oid part_oid, StorageType storage_type);
public:
bool PartCacheNeedEOXActWork;
private:
void InsertPartitionIntoGlobal(Partition part, uint32 hash_value);
void CreateLocalPartEntry(Partition part, Index hash_index);
void CopyLocalPartition(Partition dest, Partition src);
Partition RemovePartitionByOid(Oid part_id, Index hash_index);
LocalPartitionEntry *FindPartitionFromLocal(Oid part_id);
GlobalPartDefCache *m_global_partdefcache;
bool m_is_inited;
};
#endif