Switch to exponential rate-limiting

This commit is contained in:
Sasha Krassovsky
2023-12-26 14:14:37 -08:00
committed by Sasha Krassovsky
parent 091a0cda9d
commit 4e1d16f311

View File

@@ -35,7 +35,8 @@
#define PageStoreTrace DEBUG5
#define RECONNECT_INTERVAL_USEC 1000000
#define MAX_RECONNECT_INTERVAL_USEC 100
#define MAX_RECONNECT_INTERVAL_USEC 1000000
bool connected = false;
PGconn *pageserver_conn = NULL;
@@ -134,7 +135,9 @@ pageserver_connect(int elevel)
int n;
static TimestampTz last_connect_time = 0;
static uint64_t delay_us = MIN_RECONNECT_INTERVAL_USEC;
TimestampTz now;
uint64_t us_since_last_connect;
Assert(!connected);
@@ -144,13 +147,18 @@ pageserver_connect(int elevel)
}
now = GetCurrentTimestamp();
if ((now - last_connect_time) < RECONNECT_INTERVAL_USEC)
us_since_last_connect = now - last_connect_time;
if (us_since_last_connect < delay_us)
{
pg_usleep(RECONNECT_INTERVAL_USEC);
pg_usleep(delay_us - us_since_last_connect);
delay_us *= 2;
if (delay_us > MAX_RECONNECT_INTERVAL_USEC)
delay_us = MAX_RECONNECT_INTERVAL_USEC;
last_connect_time = GetCurrentTimestamp();
}
else
{
delay_us = MIN_RECONNECT_INTERVAL_USEC;
last_connect_time = now;
}