Browse Source

Report errors on databases (#8766)

Alexey Efimov 6 months ago
parent
commit
fc3d2c374a
2 changed files with 13 additions and 6 deletions
  1. 3 4
      ydb/library/actors/http/http_cache.cpp
  2. 10 2
      ydb/mvp/meta/meta_cp_databases.h

+ 3 - 4
ydb/library/actors/http/http_cache.cpp

@@ -262,16 +262,15 @@ public:
     THashMap<TString, TActorId> Handlers;
 
     struct TCacheKey {
-        TString Host;
         TString URL;
         TString Headers;
 
         operator size_t() const {
-            return MultiHash(Host, URL, Headers);
+            return MultiHash(URL, Headers);
         }
 
         TString GetId() const {
-            return MD5::Calc(Host + ':' + URL + ':' + Headers);
+            return MD5::Calc(URL + ':' + Headers);
         }
     };
 
@@ -364,7 +363,7 @@ public:
     }
 
     static TCacheKey GetCacheKey(const NHttp::THttpIncomingRequest* request, const TCachePolicy& policy) {
-        return { ToString(request->Host), ToString(request->URL), GetCacheHeadersKey(request, policy) };
+        return {ToString(request->URL), GetCacheHeadersKey(request, policy)};
     }
 
     TActorId GetRequestHandler(NHttp::THttpIncomingRequestPtr request) {

+ 10 - 2
ydb/mvp/meta/meta_cp_databases.h

@@ -204,9 +204,17 @@ public:
     }
 
     void Handle(NHttp::TEvHttpProxy::TEvHttpIncomingResponse::TPtr event, const NActors::TActorContext& ctx) {
-        TStringBuf status = event->Get()->Response->Status;
-        if (event->Get()->Error.empty() && status == "200") {
+        if (event->Get()->Error.empty() && event->Get()->Response && event->Get()->Response->Status == "200") {
             NJson::ReadJsonTree(event->Get()->Response->Body, &JsonReaderConfig, &TenantInfo);
+        } else {
+            if (event->Get()->Response && event->Get()->Response->Status.size() == 3) {
+                ctx.Send(Request.Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(event->Get()->Response->Reverse(Request.Request)));
+            } else if (!event->Get()->Error.empty()) {
+                ctx.Send(Request.Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(Request.Request->CreateResponseServiceUnavailable(event->Get()->Error, "text/plain")));
+            } else {
+                ctx.Send(Request.Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(Request.Request->CreateResponseServiceUnavailable("Endpoint returned unknown status", "text/plain")));
+            }
+            return Die(ctx);
         }
         if (--Requests == 0) {
             ReplyAndDie(ctx);