From eb2c0ae9723427040706227695c23154d0263572 Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Fri, 17 Jun 2022 16:15:59 +0800 Subject: [PATCH] fix cmake bug && handle empty result set in libpqrcv_exec --- src/common/backend/utils/time/snapmgr.cpp | 4 ++-- src/gausskernel/storage/lmgr/predicate.cpp | 8 ++++---- src/gausskernel/storage/replication/libpqwalreceiver.cpp | 8 ++++---- src/include/miscadmin.h | 2 +- src/include/storage/predicate.h | 2 +- src/include/utils/snapmgr.h | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/common/backend/utils/time/snapmgr.cpp b/src/common/backend/utils/time/snapmgr.cpp index e9dec7c01..118d9c02f 100644 --- a/src/common/backend/utils/time/snapmgr.cpp +++ b/src/common/backend/utils/time/snapmgr.cpp @@ -613,7 +613,7 @@ void SnapshotSetCommandId(CommandId curcid) * must take care of all the same considerations as the first-snapshot case * in GetTransactionSnapshot. */ -void SetTransactionSnapshot(Snapshot sourcesnap, VirtualTransactionId *sourcevxid, int sourcepid) +void SetTransactionSnapshot(Snapshot sourcesnap, VirtualTransactionId *sourcevxid, ThreadId sourcepid) { /* Caller should have checked this already */ Assert(!u_sess->utils_cxt.FirstSnapshotSet); @@ -1498,7 +1498,7 @@ void ImportSnapshot(const char* idstr) struct stat stat_buf; char* filebuf = NULL; VirtualTransactionId src_vxid; - int src_pid; + ThreadId src_pid; Oid src_dbid; int src_isolevel; bool src_readonly = false; diff --git a/src/gausskernel/storage/lmgr/predicate.cpp b/src/gausskernel/storage/lmgr/predicate.cpp index 823ff45e0..63e5e56fc 100644 --- a/src/gausskernel/storage/lmgr/predicate.cpp +++ b/src/gausskernel/storage/lmgr/predicate.cpp @@ -354,7 +354,7 @@ static uint32 predicatelock_hash(const void *key, Size keysize); static void SummarizeOldestCommittedSxact(void); static Snapshot GetSafeSnapshot(Snapshot snapshot); static Snapshot GetSerializableTransactionSnapshotInt(Snapshot snapshot, VirtualTransactionId *sourcevxid, - int sourcepid); + ThreadId sourcepid); static bool PredicateLockExists(const PREDICATELOCKTARGETTAG *targettag); static bool GetParentPredicateLockTag(const PREDICATELOCKTARGETTAG* tag, PREDICATELOCKTARGETTAG* parent); static bool CoarserLockCovers(const PREDICATELOCKTARGETTAG* newtargettag); @@ -1404,7 +1404,7 @@ Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot) * transaction; and if we're read-write, the source transaction must not be * read-only. */ -void SetSerializableTransactionSnapshot(Snapshot snapshot, VirtualTransactionId *sourcevxid, int sourcepid) +void SetSerializableTransactionSnapshot(Snapshot snapshot, VirtualTransactionId *sourcevxid, ThreadId sourcepid) { Assert(IsolationIsSerializable()); @@ -1431,7 +1431,7 @@ void SetSerializableTransactionSnapshot(Snapshot snapshot, VirtualTransactionId * We do that by calling ProcArrayInstallImportedXmin. */ static Snapshot GetSerializableTransactionSnapshotInt(Snapshot snapshot, VirtualTransactionId *sourcevxid, - int sourcepid) + ThreadId sourcepid) { PGPROC *proc = NULL; VirtualTransactionId vxid; @@ -1482,7 +1482,7 @@ static Snapshot GetSerializableTransactionSnapshotInt(Snapshot snapshot, Virtual LWLockRelease(SerializableXactHashLock); ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("could not import the requested snapshot"), - errdetail("The source process with pid %d is not running anymore.", sourcepid))); + errdetail("The source process with pid %lu is not running anymore.", sourcepid))); } /* diff --git a/src/gausskernel/storage/replication/libpqwalreceiver.cpp b/src/gausskernel/storage/replication/libpqwalreceiver.cpp index bd6c1e8bd..52a62f621 100755 --- a/src/gausskernel/storage/replication/libpqwalreceiver.cpp +++ b/src/gausskernel/storage/replication/libpqwalreceiver.cpp @@ -1395,10 +1395,6 @@ static void libpqrcv_processTuples(PGresult *pgres, WalRcvExecResult *walres, co MemoryContext rowcontext; MemoryContext oldcontext; - /* No point in doing anything here if there were no tuples returned. */ - if (PQntuples(pgres) == 0) - return; - /* Make sure we got expected number of fields. */ if (nfields != nRetTypes) ereport(ERROR, @@ -1412,6 +1408,10 @@ static void libpqrcv_processTuples(PGresult *pgres, WalRcvExecResult *walres, co TupleDescInitEntry(walres->tupledesc, (AttrNumber)coln + 1, PQfname(pgres, coln), retTypes[coln], -1, 0); attinmeta = TupleDescGetAttInMetadata(walres->tupledesc); + /* No point in doing anything here if there were no tuples returned. */ + if (PQntuples(pgres) == 0) + return; + /* Create temporary context for local allocations. */ rowcontext = AllocSetContextCreate(CurrentMemoryContext, "libpqrcv query result context", ALLOCSET_DEFAULT_SIZES); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 2d102a53a..88a6bb4c9 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -32,7 +32,7 @@ #include "pgtime.h" /* for pg_time_t */ #include "libpq/libpq-be.h" -#define InvalidPid (-1) +#define InvalidPid ((ThreadId)(-1)) #define PG_BACKEND_VERSIONSTR "gaussdb " DEF_GS_VERSION "\n" diff --git a/src/include/storage/predicate.h b/src/include/storage/predicate.h index eac253a2b..9e72a43c3 100644 --- a/src/include/storage/predicate.h +++ b/src/include/storage/predicate.h @@ -35,7 +35,7 @@ extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno); /* predicate lock maintenance */ extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot); -extern void SetSerializableTransactionSnapshot(Snapshot snapshot, VirtualTransactionId *sourcevxid, int sourcepid); +extern void SetSerializableTransactionSnapshot(Snapshot snapshot, VirtualTransactionId *sourcevxid, ThreadId sourcepid); extern void RegisterPredicateLockingXid(TransactionId xid); extern void PredicateLockRelation(Relation relation, Snapshot snapshot); extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot); diff --git a/src/include/utils/snapmgr.h b/src/include/utils/snapmgr.h index 7405b0c81..3b9e26b8f 100644 --- a/src/include/utils/snapmgr.h +++ b/src/include/utils/snapmgr.h @@ -116,5 +116,5 @@ extern void SetupHistoricSnapshot(Snapshot snapshot_now, struct HTAB* tuplecids) extern void TeardownHistoricSnapshot(bool is_error); extern bool HistoricSnapshotActive(void); -extern void SetTransactionSnapshot(Snapshot sourcesnap, VirtualTransactionId *sourcevxid, int sourcepid); +extern void SetTransactionSnapshot(Snapshot sourcesnap, VirtualTransactionId *sourcevxid, ThreadId sourcepid); #endif /* SNAPMGR_H */