From 394918f9d09164c9254c4f62f09d230b8dad9f5a Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Mon, 2 Oct 2017 18:14:29 +0200 Subject: [PATCH] Invalidate worker and group ID cache in maintenance daemon --- src/backend/distributed/utils/maintenanced.c | 2 +- src/backend/distributed/utils/metadata_cache.c | 9 ++++++--- src/include/distributed/metadata_cache.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/distributed/utils/maintenanced.c b/src/backend/distributed/utils/maintenanced.c index 4e86661aa..a3580428d 100644 --- a/src/backend/distributed/utils/maintenanced.c +++ b/src/backend/distributed/utils/maintenanced.c @@ -281,7 +281,7 @@ CitusMaintenanceDaemonMain(Datum main_arg) * this causes us to cache a stale pg_dist_node OID. We'd actually expect * all invalidations to arrive after obtaining a lock in LockCitusExtension. */ - ClearMetadataOIDCache(); + InvalidateMetadataSystemCache(); /* * Perform Work. If a specific task needs to be called sooner than diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index e11025c02..a8c622bb8 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -2713,18 +2713,21 @@ InvalidateDistRelationCacheCallback(Datum argument, Oid relationId) */ if (relationId != InvalidOid && relationId == MetadataCache.distPartitionRelationId) { - ClearMetadataOIDCache(); + InvalidateMetadataSystemCache(); } } /* - * ClearMetadataOIDCache resets all the cached OIDs and the extensionLoaded flag. + * InvalidateMetadataSystemCache resets all the cached OIDs and the extensionLoaded flag, + * and invalidates the worker node and local group ID caches. */ void -ClearMetadataOIDCache(void) +InvalidateMetadataSystemCache(void) { memset(&MetadataCache, 0, sizeof(MetadataCache)); + workerNodeHashValid = false; + LocalGroupId = -1; } diff --git a/src/include/distributed/metadata_cache.h b/src/include/distributed/metadata_cache.h index 3caa73edb..c71828ca1 100644 --- a/src/include/distributed/metadata_cache.h +++ b/src/include/distributed/metadata_cache.h @@ -86,7 +86,7 @@ extern List * DistTableOidList(void); extern List * ShardPlacementList(uint64 shardId); extern void CitusInvalidateRelcacheByRelid(Oid relationId); extern void CitusInvalidateRelcacheByShardId(int64 shardId); -extern void ClearMetadataOIDCache(void); +extern void InvalidateMetadataSystemCache(void); extern bool CitusHasBeenLoaded(void); extern bool CheckCitusVersion(int elevel);