Page MenuHomePhabricator

D3582.id10878.diff
No OneTemporary

D3582.id10878.diff

diff --git a/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerBidiReactorBase.h b/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
--- a/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
+++ b/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
@@ -78,8 +78,12 @@
void ServerBidiReactorBase<Request, Response>::OnReadDone(bool ok) {
if (!ok) {
this->readingAborted = true;
- this->terminate(ServerBidiReactorStatus(
- grpc::Status(grpc::StatusCode::ABORTED, "no more reads")));
+ // we should suppress this as we want to have an ability to gracefully end a
+ // connection on the other side. This will result in `!ok` here. I think it
+ // is somehow broken and simple bool flag doesn't give us enough information
+ // on what happened.
+ // We should manually check if the data we received is valid
+ this->terminate(grpc::Status::OK);
return;
}
try {
diff --git a/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerReadReactorBase.h b/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerReadReactorBase.h
--- a/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerReadReactorBase.h
+++ b/services/backup/docker-server/contents/server/src/Reactors/server/base-reactors/ServerReadReactorBase.h
@@ -35,10 +35,10 @@
template <class Request, class Response>
void ServerReadReactorBase<Request, Response>::terminate(grpc::Status status) {
this->terminateCallback();
+ this->status = status;
if (!this->status.ok()) {
std::cout << "error: " << this->status.error_message() << std::endl;
}
- this->status = status;
this->Finish(status);
}
@@ -59,7 +59,12 @@
template <class Request, class Response>
void ServerReadReactorBase<Request, Response>::OnReadDone(bool ok) {
if (!ok) {
- this->terminate(grpc::Status(grpc::StatusCode::INTERNAL, "reading error"));
+ // we should suppress this as we want to have an ability to gracefully end a
+ // connection on the other side. This will result in `!ok` here. I think it
+ // is somehow broken and simple bool flag doesn't give us enough information
+ // on what happened.
+ // We should manually check if the data we received is valid
+ this->terminate(grpc::Status::OK);
return;
}
try {
diff --git a/services/blob/src/Reactors/server/base-reactors/ServerBidiReactorBase.h b/services/blob/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
--- a/services/blob/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
+++ b/services/blob/src/Reactors/server/base-reactors/ServerBidiReactorBase.h
@@ -11,8 +11,8 @@
namespace reactor {
struct ServerBidiReactorStatus {
- grpc::Status status = grpc::Status::OK;
- bool sendLastResponse = false;
+ grpc::Status status;
+ bool sendLastResponse;
ServerBidiReactorStatus(
grpc::Status status = grpc::Status::OK,
bool sendLastResponse = false)
@@ -78,8 +78,12 @@
void ServerBidiReactorBase<Request, Response>::OnReadDone(bool ok) {
if (!ok) {
this->readingAborted = true;
- this->terminate(ServerBidiReactorStatus(
- grpc::Status(grpc::StatusCode::ABORTED, "no more reads")));
+ // we should suppress this as we want to have an ability to gracefully end a
+ // connection on the other side. This will result in `!ok` here. I think it
+ // is somehow broken and simple bool flag doesn't give us enough information
+ // on what happened.
+ // We should manually check if the data we received is valid
+ this->terminate(grpc::Status::OK);
return;
}
try {
diff --git a/services/blob/src/Reactors/server/base-reactors/ServerReadReactorBase.h b/services/blob/src/Reactors/server/base-reactors/ServerReadReactorBase.h
--- a/services/blob/src/Reactors/server/base-reactors/ServerReadReactorBase.h
+++ b/services/blob/src/Reactors/server/base-reactors/ServerReadReactorBase.h
@@ -35,10 +35,10 @@
template <class Request, class Response>
void ServerReadReactorBase<Request, Response>::terminate(grpc::Status status) {
this->terminateCallback();
+ this->status = status;
if (!this->status.ok()) {
std::cout << "error: " << this->status.error_message() << std::endl;
}
- this->status = status;
this->Finish(status);
}
@@ -59,7 +59,12 @@
template <class Request, class Response>
void ServerReadReactorBase<Request, Response>::OnReadDone(bool ok) {
if (!ok) {
- this->terminate(grpc::Status(grpc::StatusCode::INTERNAL, "reading error"));
+ // we should suppress this as we want to have an ability to gracefully end a
+ // connection on the other side. This will result in `!ok` here. I think it
+ // is somehow broken and simple bool flag doesn't give us enough information
+ // on what happened.
+ // We should manually check if the data we received is valid
+ this->terminate(grpc::Status::OK);
return;
}
try {

File Metadata

Mime Type
text/plain
Expires
Mon, Oct 7, 10:37 AM (21 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2253866
Default Alt Text
D3582.id10878.diff (5 KB)

Event Timeline