From 1af2c37f44a2fc7555716604e5e4c4616c3fc39b Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Fri, 1 Oct 2021 15:27:01 +0200 Subject: [PATCH] use service unavailable error --- authorizer/src/asapo_authorizer/server/authorize_test.go | 2 +- authorizer/src/asapo_authorizer/server/server_nottested.go | 2 +- broker/src/asapo_broker/server/authorizer.go | 2 ++ broker/src/asapo_broker/server/process_request_test.go | 4 ++-- broker/src/asapo_broker/server/request_common.go | 2 +- broker/src/asapo_broker/server/server_nottested.go | 2 +- common/go/src/asapo_common/utils/status_codes.go | 2 +- consumer/api/cpp/include/asapo/consumer/consumer_error.h | 4 ---- consumer/api/cpp/src/consumer_impl.cpp | 2 ++ consumer/api/cpp/unittests/test_consumer_impl.cpp | 6 +++--- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/authorizer/src/asapo_authorizer/server/authorize_test.go b/authorizer/src/asapo_authorizer/server/authorize_test.go index 3f7781e04..1c6e64005 100644 --- a/authorizer/src/asapo_authorizer/server/authorize_test.go +++ b/authorizer/src/asapo_authorizer/server/authorize_test.go @@ -225,7 +225,7 @@ var authTests = []struct { `{"beamtimeId":"test_online","beamline":"bl1","dataSource":"dataSource","corePath":"./tf/gpfs/bl1/2019/data/test_online","beamline-path":"./bl1/current","source-type":"raw","access-types":["read","write","writeraw"]}`, 0}, {"raw", "auto", "p07", "dataSource", "", "127.0.0.1", http.StatusOK, "raw type, auto beamtime", `{"beamtimeId":"11111111","beamline":"p07","dataSource":"dataSource","corePath":"asap3/petra3/gpfs/p07/2020/data/11111111","beamline-path":"./p07/current","source-type":"raw","access-types":["read","write","writeraw"]}`, 0}, - {"raw", "auto", "p07", "noldap", "", "127.0.0.1", http.StatusNotFound, "no conection to ldap", + {"raw", "auto", "p07", "noldap", "", "127.0.0.1", http.StatusServiceUnavailable, "no conection to ldap", "", 0}, {"raw", "auto", "p07", "dataSource", prepareAsapoToken("bl_p07", []string{"read", "writeraw"}), "127.0.0.2", http.StatusOK, "raw type with token", diff --git a/authorizer/src/asapo_authorizer/server/server_nottested.go b/authorizer/src/asapo_authorizer/server/server_nottested.go index 320e47a85..6841cf5f3 100644 --- a/authorizer/src/asapo_authorizer/server/server_nottested.go +++ b/authorizer/src/asapo_authorizer/server/server_nottested.go @@ -12,8 +12,8 @@ import ( "asapo_common/version" "errors" "net/http" - "strconv" _ "net/http/pprof" + "strconv" ) func Start() { diff --git a/broker/src/asapo_broker/server/authorizer.go b/broker/src/asapo_broker/server/authorizer.go index b5b51ff33..cac330d1b 100644 --- a/broker/src/asapo_broker/server/authorizer.go +++ b/broker/src/asapo_broker/server/authorizer.go @@ -87,6 +87,8 @@ func (a *AsapoAuthorizer) doRequest(req *http.Request) (token Token, err error) //do nothing case http.StatusUnauthorized: return token, &AuthorizationError{errors.New("authorizer rejected to authorize: " + string(body)), http.StatusUnauthorized} + case http.StatusServiceUnavailable: + return token, &AuthorizationError{errors.New("authorizer service unavailable: " + string(body)), http.StatusServiceUnavailable} default: return token, errors.New("authorizer returned " + resp.Status + ": " + string(body)) } diff --git a/broker/src/asapo_broker/server/process_request_test.go b/broker/src/asapo_broker/server/process_request_test.go index 781a7f16b..cf0d41626 100644 --- a/broker/src/asapo_broker/server/process_request_test.go +++ b/broker/src/asapo_broker/server/process_request_test.go @@ -176,7 +176,7 @@ func (suite *ProcessRequestTestSuite) TestProcessRequestWithConnectionError() { w := doRequest("/beamtime/" + expectedBeamtimeId + "/" + expectedSource + "/" + expectedStream + "/" + expectedGroupID + "/next" + correctTokenSuffix) time.Sleep(time.Second) - suite.Equal(http.StatusNotFound, w.Code, "data not found") + suite.Equal(http.StatusServiceUnavailable, w.Code, "data not found") } func (suite *ProcessRequestTestSuite) TestProcessRequestWithInternalDBError() { @@ -191,7 +191,7 @@ func (suite *ProcessRequestTestSuite) TestProcessRequestWithInternalDBError() { w := doRequest("/beamtime/" + expectedBeamtimeId + "/" + expectedSource + "/" + expectedStream + "/" + expectedGroupID + "/next" + correctTokenSuffix) time.Sleep(time.Second) - suite.Equal(http.StatusNotFound, w.Code, "internal error") + suite.Equal(http.StatusServiceUnavailable, w.Code, "internal error") } func (suite *ProcessRequestTestSuite) TestProcessRequestAddsCounter() { diff --git a/broker/src/asapo_broker/server/request_common.go b/broker/src/asapo_broker/server/request_common.go index 17a4b30ae..1a0d5e875 100644 --- a/broker/src/asapo_broker/server/request_common.go +++ b/broker/src/asapo_broker/server/request_common.go @@ -16,7 +16,7 @@ func writeAuthAnswer(w http.ResponseWriter, requestName string, db_name string, case AuthorizationError: w.WriteHeader(er.statusCode) default: - w.WriteHeader(http.StatusInternalServerError) + w.WriteHeader(http.StatusServiceUnavailable) } w.Write([]byte(err.Error())) } diff --git a/broker/src/asapo_broker/server/server_nottested.go b/broker/src/asapo_broker/server/server_nottested.go index a4ec18874..ec512247a 100644 --- a/broker/src/asapo_broker/server/server_nottested.go +++ b/broker/src/asapo_broker/server/server_nottested.go @@ -7,8 +7,8 @@ import ( "asapo_common/utils" "errors" "net/http" - "strconv" _ "net/http/pprof" + "strconv" ) func StartStatistics() { diff --git a/common/go/src/asapo_common/utils/status_codes.go b/common/go/src/asapo_common/utils/status_codes.go index 7002a963e..fdd205418 100644 --- a/common/go/src/asapo_common/utils/status_codes.go +++ b/common/go/src/asapo_common/utils/status_codes.go @@ -9,7 +9,7 @@ const ( const ( //error codes StatusTransactionInterrupted = http.StatusInternalServerError - StatusServiceUnavailable = http.StatusNotFound + StatusServiceUnavailable = http.StatusServiceUnavailable StatusWrongInput = http.StatusBadRequest StatusNoData = http.StatusConflict StatusPartialData = http.StatusPartialContent diff --git a/consumer/api/cpp/include/asapo/consumer/consumer_error.h b/consumer/api/cpp/include/asapo/consumer/consumer_error.h index 55618fddc..efa0631da 100644 --- a/consumer/api/cpp/include/asapo/consumer/consumer_error.h +++ b/consumer/api/cpp/include/asapo/consumer/consumer_error.h @@ -41,8 +41,6 @@ auto const kPartialData = ConsumerErrorTemplate { "partial data", ConsumerErrorType::kPartialData }; - - auto const kLocalIOError = ConsumerErrorTemplate { "local i/o error", ConsumerErrorType::kLocalIOError }; @@ -76,8 +74,6 @@ auto const kUnavailableService = ConsumerErrorTemplate { "service unavailable", ConsumerErrorType::kUnavailableService }; - - } } diff --git a/consumer/api/cpp/src/consumer_impl.cpp b/consumer/api/cpp/src/consumer_impl.cpp index 973e6a98a..659ad07a2 100644 --- a/consumer/api/cpp/src/consumer_impl.cpp +++ b/consumer/api/cpp/src/consumer_impl.cpp @@ -91,6 +91,8 @@ Error ConsumerErrorFromHttpCode(const RequestOutput* response, const HttpCode& c return ConsumerErrorTemplates::kWrongInput.Generate(response->to_string()); case HttpCode::InternalServerError: return ConsumerErrorTemplates::kInterruptedTransaction.Generate(response->to_string()); + case HttpCode::ServiceUnavailable: + return ConsumerErrorTemplates::kUnavailableService.Generate(response->to_string()); case HttpCode::NotFound: return ConsumerErrorTemplates::kUnavailableService.Generate(response->to_string()); case HttpCode::Conflict: diff --git a/consumer/api/cpp/unittests/test_consumer_impl.cpp b/consumer/api/cpp/unittests/test_consumer_impl.cpp index ae11c5592..0b783b42b 100644 --- a/consumer/api/cpp/unittests/test_consumer_impl.cpp +++ b/consumer/api/cpp/unittests/test_consumer_impl.cpp @@ -146,7 +146,7 @@ class ConsumerImplTests : public Test { void MockGetError() { EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_broker_api), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<1>(HttpCode::ServiceUnavailable), SetArgPointee<2>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()), Return("") )); @@ -442,7 +442,7 @@ TEST_F(ConsumerImplTests, GetMessageReturnsNoDataAfterTimeoutEvenIfOtherErrorOcc "/stream/0/" + std::to_string(expected_dataset_id) + "?token=" + expected_token, _, _)).Times(AtLeast(1)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<1>(HttpCode::ServiceUnavailable), SetArgPointee<2>(nullptr), Return(""))); @@ -1400,7 +1400,7 @@ TEST_F(ConsumerImplTests, NegativeAcknowledgeUsesCorrectUri) { TEST_F(ConsumerImplTests, CanInterruptOperation) { EXPECT_CALL(mock_http_client, Get_t(_, _, _)).Times(AtLeast(1)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<1>(HttpCode::ServiceUnavailable), SetArgPointee<2>(nullptr), Return(""))); -- GitLab