From 8f683eb72bc17efefb24c354b4ff7c00a2b5f924 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 12 Feb 2014 21:19:59 +0100 Subject: [PATCH] Retry sending "DID BACKUP" message --- urbackupserver/server_get.cpp | 30 +++++++++++++++++++++++++++++- urbackupserver/server_get.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/urbackupserver/server_get.cpp b/urbackupserver/server_get.cpp index ff1a9d83..ac7b9501 100644 --- a/urbackupserver/server_get.cpp +++ b/urbackupserver/server_get.cpp @@ -2854,6 +2854,34 @@ std::string BackupServerGet::sendClientMessage(const std::string &msg, const std return ""; } +bool BackupServerGet::sendClientMessageRetry(const std::string &msg, const std::string &retok, const std::wstring &errmsg, unsigned int timeout, size_t retry, bool logerr, int max_loglevel, bool *retok_err) +{ + bool res; + do + { + unsigned int starttime=Server->getTimeMS(); + res = sendClientMessage(msg, retok, errmsg, timeout, logerr, max_loglevel, retok_err); + + if(retry>0) + { + --retry; + unsigned int passed_time=timeout; + unsigned int currtime = Server->getTimeMS(); + if(currtime>starttime) + passed_time=currtime-starttime; + + Server->wait(timeout-passed_time); + } + else + { + return res; + } + } + while(!res); + + return res; +} + bool BackupServerGet::sendClientMessage(const std::string &msg, const std::string &retok, const std::wstring &errmsg, unsigned int timeout, bool logerr, int max_loglevel, bool *retok_err) { CTCPStack tcpstack(internet_connection); @@ -2936,7 +2964,7 @@ void BackupServerGet::stop_shadowcopy(const std::string &path) void BackupServerGet::notifyClientBackupSuccessfull(void) { - sendClientMessage("DID BACKUP", "OK", L"Sending status (DID BACKUP) to client failed", 10000); + sendClientMessageRetry("DID BACKUP", "OK", L"Sending status (DID BACKUP) to client failed", 10000, 5); } void BackupServerGet::sendClientBackupIncrIntervall(void) diff --git a/urbackupserver/server_get.h b/urbackupserver/server_get.h index 08d45b7d..18465b98 100644 --- a/urbackupserver/server_get.h +++ b/urbackupserver/server_get.h @@ -41,6 +41,7 @@ public: void operator()(void); bool sendClientMessage(const std::string &msg, const std::string &retok, const std::wstring &errmsg, unsigned int timeout, bool logerr=true, int max_loglevel=LL_ERROR, bool *retok_err=NULL); + bool sendClientMessageRetry(const std::string &msg, const std::string &retok, const std::wstring &errmsg, unsigned int timeout, size_t retry=0, bool logerr=true, int max_loglevel=LL_ERROR, bool *retok_err=NULL); std::string sendClientMessage(const std::string &msg, const std::wstring &errmsg, unsigned int timeout, bool logerr=true, int max_loglevel=LL_ERROR); void sendToPipe(const std::string &msg); int getPCDone(void);