diff --git a/src/context/QueryContext.h b/src/context/QueryContext.h
index 21f61dfd487f6c051442b4f17c148b7771de097b..a5cd1b5f56c20b1a9742ef86edd183ea46b0bb7d 100644
--- a/src/context/QueryContext.h
+++ b/src/context/QueryContext.h
@@ -125,6 +125,11 @@ public:
         return symTable_.get();
     }
 
+    void setPartialSuccess() {
+        DCHECK(rctx_ != nullptr);
+        rctx_->resp().errorCode = ErrorCode::E_PARTIAL_SUCCEEDED;
+    }
+
 private:
     void init();
 
diff --git a/src/executor/StorageAccessExecutor.h b/src/executor/StorageAccessExecutor.h
index 687fdb46897f36c3c90b856e56f10415e3a647e1..5cd1ccd37c6bbfb24972822d28e2ac68ddc8c85a 100644
--- a/src/executor/StorageAccessExecutor.h
+++ b/src/executor/StorageAccessExecutor.h
@@ -7,8 +7,9 @@
 #ifndef EXECUTOR_STORAGEACCESSEXECUTOR_H_
 #define EXECUTOR_STORAGEACCESSEXECUTOR_H_
 
-#include "executor/Executor.h"
 #include "common/clients/storage/StorageClientBase.h"
+#include "context/QueryContext.h"
+#include "executor/Executor.h"
 
 namespace nebula {
 namespace graph {
@@ -44,6 +45,7 @@ protected:
                 return Status::Error("Request to storage failed, without failedCodes.");
             }
             // partial success is accepted
+            qctx()->setPartialSuccess();
             return Result::State::kPartialSuccess;
         }
         return Result::State::kSuccess;
diff --git a/src/service/GraphService.cpp b/src/service/GraphService.cpp
index 99b93c388f718ad0def0ae390a0a7796bd8c8405..f1259de9bc8de8b5bcac6238fe48897f98575d8c 100644
--- a/src/service/GraphService.cpp
+++ b/src/service/GraphService.cpp
@@ -125,6 +125,8 @@ const char* GraphService::getErrorStr(ErrorCode result) {
             return "User not found";
         case ErrorCode::E_TOO_MANY_CONNECTIONS:
             return "Too many connections";
+        case ErrorCode::E_PARTIAL_SUCCEEDED:
+            return "Partial results";
     }
     /**********************
      * Unknown error