1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-02 04:21:28 +03:00

Add new GUC reserved_connections.

This provides a way to reserve connection slots for non-superusers.
The slots reserved via the new GUC are available only to users who
have the new predefined role pg_use_reserved_connections.
superuser_reserved_connections remains as a final reserve in case
reserved_connections has been exhausted.

Patch by Nathan Bossart. Reviewed by Tushar Ahuja and by me.

Discussion: http://postgr.es/m/20230119194601.GA4105788@nathanxps13
This commit is contained in:
Robert Haas
2023-01-20 15:36:36 -05:00
parent fe00fec1f5
commit 6e2775e4d4
10 changed files with 115 additions and 25 deletions

View File

@@ -645,27 +645,33 @@ GetStartupBufferPinWaitBufId(void)
}
/*
* Check whether there are at least N free PGPROC objects.
* Check whether there are at least N free PGPROC objects. If false is
* returned, *nfree will be set to the number of free PGPROC objects.
* Otherwise, *nfree will be set to n.
*
* Note: this is designed on the assumption that N will generally be small.
*/
bool
HaveNFreeProcs(int n)
HaveNFreeProcs(int n, int *nfree)
{
dlist_iter iter;
Assert(n > 0);
Assert(nfree);
SpinLockAcquire(ProcStructLock);
*nfree = 0;
dlist_foreach(iter, &ProcGlobal->freeProcs)
{
n--;
if (n == 0)
(*nfree)++;
if (*nfree == n)
break;
}
SpinLockRelease(ProcStructLock);
return (n <= 0);
return (*nfree == n);
}
/*