1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-03-03 14:52:21 +02:00

Add protocolRemoteFree() to shutdown a specific remote.

Sometimes it is useful to shutdown remotes that are no longer needed instead of waiting for them to be shutdown at program exit.
This commit is contained in:
David Steele 2019-12-07 17:48:53 -05:00
parent 5175d52e94
commit 8766326da8
3 changed files with 36 additions and 13 deletions

View File

@ -412,6 +412,33 @@ protocolRemoteGet(ProtocolStorageType protocolStorageType, unsigned int hostId)
FUNCTION_LOG_RETURN(PROTOCOL_CLIENT, protocolHelperClient->client);
}
/**********************************************************************************************************************************/
void
protocolRemoteFree(unsigned int hostId)
{
FUNCTION_LOG_BEGIN(logLevelDebug);
FUNCTION_LOG_PARAM(UINT, hostId);
FUNCTION_LOG_END();
ASSERT(hostId > 0);
if (protocolHelper.clientRemote != NULL)
{
ProtocolHelperClient *protocolHelperClient = &protocolHelper.clientRemote[hostId - 1];
if (protocolHelperClient->client != NULL)
{
protocolClientFree(protocolHelperClient->client);
execFree(protocolHelperClient->exec);
protocolHelperClient->client = NULL;
protocolHelperClient->exec = NULL;
}
}
FUNCTION_LOG_RETURN_VOID();
}
/***********************************************************************************************************************************
Send keepalives to all remotes
***********************************************************************************************************************************/
@ -482,19 +509,8 @@ protocolFree(void)
if (protocolHelper.memContext != NULL)
{
// Free remotes
for (unsigned int clientIdx = 0; clientIdx < protocolHelper.clientRemoteSize; clientIdx++)
{
ProtocolHelperClient *protocolHelperClient = &protocolHelper.clientRemote[clientIdx];
if (protocolHelperClient->client != NULL)
{
protocolClientFree(protocolHelperClient->client);
execFree(protocolHelperClient->exec);
protocolHelperClient->client = NULL;
protocolHelperClient->exec = NULL;
}
}
for (unsigned int clientIdx = 0; clientIdx < protocolHelper.clientRemoteSize; clientIdx++)
protocolRemoteFree(clientIdx + 1);
// Free locals
for (unsigned int clientIdx = 0; clientIdx < protocolHelper.clientLocalSize; clientIdx++)

View File

@ -30,6 +30,9 @@ void protocolKeepAlive(void);
ProtocolClient *protocolLocalGet(ProtocolStorageType protocolStorageType, unsigned int hostId, unsigned int protocolId);
ProtocolClient *protocolRemoteGet(ProtocolStorageType protocolStorageType, unsigned int hostId);
// Free (shutdown) a remote
void protocolRemoteFree(unsigned int hostId);
/***********************************************************************************************************************************
Getters
***********************************************************************************************************************************/

View File

@ -845,6 +845,10 @@ testRun(void)
// *****************************************************************************************************************************
if (testBegin("protocolGet()"))
{
// Call remote free before any remotes exist
// -------------------------------------------------------------------------------------------------------------------------
TEST_RESULT_VOID(protocolRemoteFree(1), "free remote (non exist)");
// Call keep alive before any remotes exist
// -------------------------------------------------------------------------------------------------------------------------
TEST_RESULT_VOID(protocolKeepAlive(), "keep alive");