diff --git a/pgxn/neon/control_plane_connector.c b/pgxn/neon/control_plane_connector.c index 45054859e1..99d7656dba 100644 --- a/pgxn/neon/control_plane_connector.c +++ b/pgxn/neon/control_plane_connector.c @@ -307,7 +307,7 @@ RequestShardMapFromControlPlane(ShardMap* shard_map) continue; if (shard_map->n_shards >= MAX_SHARDS) - elog(ERROR, "Too manuy shards"); + elog(ERROR, "Too many shards"); if (v.type != jbvString) elog(ERROR, "Connection string expected"); diff --git a/pgxn/neon/libpagestore.c b/pgxn/neon/libpagestore.c index 8c913ee90f..d876214236 100644 --- a/pgxn/neon/libpagestore.c +++ b/pgxn/neon/libpagestore.c @@ -143,12 +143,12 @@ get_shard_number(BufferTag* tag) hash = murmurhash32(tag->rnode.spcNode); hash_combine(hash, murmurhash32(tag->rnode.dbNode)); hash_combine(hash, murmurhash32(tag->rnode.relNode)); - hash_combine(hash, murmurhash32(tag->blockNum)); + hash_combine(hash, murmurhash32(tag->blockNum/STRIPE_SIZE)); #else hash = murmurhash32(tag->spcOid); hash_combine(hash, murmurhash32(tag->dbOid)); hash_combine(hash, murmurhash32(tag->relNumber)); - hash_combine(hash, murmurhash32(tag->blockNum)); + hash_combine(hash, murmurhash32(tag->blockNum/STRIPE_SIZE)); #endif LWLockAcquire(shard_map_lock, LW_SHARED); @@ -185,6 +185,20 @@ get_shard_number(BufferTag* tag) return shard_no; } +static void +pageserver_sighup_handler(SIGNAL_ARGS) +{ + if (prev_signal_handler) + { + prev_signal_handler(postgres_signal_arg); + } + neon_log(LOG, "Received SIGHUP, disconnecting pageserver. New pageserver connstring is %s", page_server_connstring); + + /* force refetching shard map */ + LWLockAcquire(shard_map_lock, LW_EXCLUSIVE); + shard_map->n_shards = 0; + LWLockRelease(shard_map_lock); +} static bool pageserver_connect(shardno_t shard_no, int elevel) diff --git a/pgxn/neon/pagestore_client.h b/pgxn/neon/pagestore_client.h index 98887d4112..f7ec50f0b8 100644 --- a/pgxn/neon/pagestore_client.h +++ b/pgxn/neon/pagestore_client.h @@ -28,6 +28,7 @@ #include "pg_config.h" #define MAX_SHARDS 128 +#define STRIPE_SIZE (256 * 1024 / 8) /* TODO: should in betaken from control plane? */ #define MAX_PS_CONNSTR_LEN 128 typedef struct