diff --git a/services/backup/docker-server/contents/server/src/Reactors/server/CreateNewBackupReactor.h b/services/backup/docker-server/contents/server/src/Reactors/server/CreateNewBackupReactor.h
--- a/services/backup/docker-server/contents/server/src/Reactors/server/CreateNewBackupReactor.h
+++ b/services/backup/docker-server/contents/server/src/Reactors/server/CreateNewBackupReactor.h
@@ -45,7 +45,7 @@
   std::unique_ptr<ServerBidiReactorStatus> handleRequest(
       backup::CreateNewBackupRequest request,
       backup::CreateNewBackupResponse *response) override;
-  void terminateCallback();
+  void terminateCallback() override;
 };
 
 std::string CreateNewBackupReactor::generateBackupID() {
@@ -109,7 +109,11 @@
   }
   this->putReactor->scheduleSendingDataChunk(std::make_unique<std::string>(""));
   std::unique_lock<std::mutex> lock2(this->blobDoneCVMutex);
-  this->blobDoneCV.wait(lock2);
+  if (!this->putReactor->isDone()) {
+    this->blobDoneCV.wait(lock2);
+  } else if (!this->putReactor->getStatus().ok()) {
+    throw std::runtime_error(this->putReactor->getStatus().error_message());
+  }
   try {
     // TODO add recovery data
     // TODO handle attachments holders
diff --git a/services/backup/docker-server/contents/server/src/Reactors/server/PullBackupReactor.h b/services/backup/docker-server/contents/server/src/Reactors/server/PullBackupReactor.h
--- a/services/backup/docker-server/contents/server/src/Reactors/server/PullBackupReactor.h
+++ b/services/backup/docker-server/contents/server/src/Reactors/server/PullBackupReactor.h
@@ -48,6 +48,7 @@
 
   std::unique_ptr<grpc::Status>
   writeResponse(backup::PullBackupResponse *response) override;
+  void terminateCallback() override;
 };
 
 PullBackupReactor::PullBackupReactor(const backup::PullBackupRequest *request)
@@ -147,6 +148,12 @@
   throw std::runtime_error("unhandled state");
 }
 
+void PullBackupReactor::terminateCallback() {
+  if (!this->getReactor->getStatus().ok()) {
+    throw std::runtime_error(this->getReactor->getStatus().error_message());
+  }
+}
+
 } // namespace reactor
 } // namespace network
 } // namespace comm
diff --git a/services/backup/docker-server/contents/server/src/Reactors/server/SendLogReactor.h b/services/backup/docker-server/contents/server/src/Reactors/server/SendLogReactor.h
--- a/services/backup/docker-server/contents/server/src/Reactors/server/SendLogReactor.h
+++ b/services/backup/docker-server/contents/server/src/Reactors/server/SendLogReactor.h
@@ -189,7 +189,11 @@
   }
   this->putReactor->scheduleSendingDataChunk(std::make_unique<std::string>(""));
   std::unique_lock<std::mutex> lock2(this->blobDoneCVMutex);
-  this->blobDoneCV.wait(lock2);
+  if (!this->putReactor->isDone()) {
+    this->blobDoneCV.wait(lock2);
+  } else if (!this->putReactor->getStatus().ok()) {
+    throw std::runtime_error(this->putReactor->getStatus().error_message());
+  }
   // store in db only when we successfully upload chunks
   this->storeInDatabase();
 }