8000 return error codes in case a babies remove operation fails (#6527) · CoericK/arangodb@22a527f · GitHub
[go: up one dir, main page]

Skip to content

Commit 22a527f

Browse files
authored
return error codes in case a babies remove operation fails (arangodb#6527)
1 parent 611e4a7 commit 22a527f

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

arangod/RestHandler/RestDocumentHandler.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ bool RestDocumentHandler::removeDocument() {
558558
return false;
559559
}
560560

561+
bool const isMultiple = search.isArray();
561562
OperationResult result = trx->remove(collectionName, search, opOptions);
562563

563564
res = trx->finish(result.result);
@@ -574,7 +575,8 @@ bool RestDocumentHandler::removeDocument() {
574575

575576
generateDeleted(result, collectionName,
576577
TRI_col_type_e(trx->getCollectionType(collectionName)),
577-
trx->transactionContextPtr()->getVPackOptionsForDump());
578+
trx->transactionContextPtr()->getVPackOptionsForDump(),
579+
isMultiple);
578580
return true;
579581
}
580582

arangod/RestHandler/RestVocbaseBaseHandler.cpp

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "Basics/tri-strings.h"
3232
#include "Cluster/Serv 8000 erState.h"
3333
#include "Meta/conversion.h"
34+
#include "Rest/CommonDefines.h"
3435
#include "Rest/HttpRequest.h"
3536
#include "Transaction/Methods.h"
3637
#include "Transaction/StandaloneContext.h"
@@ -258,24 +259,7 @@ std::string RestVocbaseBaseHandler::assembleDocumentId(
258259
void RestVocbaseBaseHandler::generateSaved(
259260
arangodb::OperationResult const& result, std::string const& collectionName,
260261
TRI_col_type_e type, VPackOptions const* options, bool isMultiple) {
261-
if (result._options.waitForSync) {
262-
resetResponse(rest::ResponseCode::CREATED);
263-
} else {
264-
resetResponse(rest::ResponseCode::ACCEPTED);
265-
}
266-
267-
if (isMultiple && !result.countErrorCodes.empty()) {
268-
VPackBuilder errorBuilder;
269-
errorBuilder.openObject();
270-
for (auto const& it : result.countErrorCodes) {
271-
errorBuilder.add(basics::StringUtils::itoa(it.first),
272-
VPackValue(it.second));
273-
}
274-
errorBuilder.close();
275-
_response->setHeaderNC(StaticStrings::ErrorCodes, errorBuilder.toJson());
276-
}
277-
278-
generate20x(result, collectionName, type, options);
262+
generate20x(result, collectionName, type, options, isMultiple, rest::ResponseCode::CREATED);
279263
}
280264

281265
////////////////////////////////////////////////////////////////////////////////
@@ -284,13 +268,8 @@ void RestVocbaseBaseHandler::generateSaved(
284268

285269
void RestVocbaseBaseHandler::generateDeleted(
286270
arangodb::OperationResult const& result, std::string const& collectionName,
287-
TRI_col_type_e type, VPackOptions const* options) {
288-
if (result._options.waitForSync) {
289-
resetResponse(rest::ResponseCode::OK);
290-
} else {
291-
resetResponse(rest::ResponseCode::ACCEPTED);
292-
}
293-
generate20x(result, collectionName, type, options);
271+
TRI_col_type_e type, VPackOptions const* options, bool isMultiple) {
272+
generate20x(result, collectionName, type, options, isMultiple, rest::ResponseCode::OK);
294273
}
295274

296275
////////////////////////////////////////////////////////////////////////////////
@@ -299,7 +278,27 @@ void RestVocbaseBaseHandler::generateDeleted(
299278

300279
void RestVocbaseBaseHandler::generate20x(
301280
arangodb::OperationResult const& result, std::string const& collectionName,
302-
TRI_col_type_e type, VPackOptions const* options) {
281+
TRI_col_type_e type, VPackOptions const* options, bool isMultiple,
282+
rest::ResponseCode waitForSyncResponseCode) {
283+
284+
if (result._options.waitForSync) {
285+
resetResponse(waitForSyncResponseCode);
286+
} else {
287+
resetResponse(rest::ResponseCode::ACCEPTED);
288+
}
289+
290+
291+
if (isMultiple && !result.countErrorCodes.empty()) {
292+
VPackBuilder errorBuilder;
293+
errorBuilder.openObject();
294+
for (auto const& it : result.countErrorCodes) {
295+
errorBuilder.add(basics::StringUtils::itoa(it.first),
296+
VPackValue(it.second));
297+
}
298+
errorBuilder.close();
299+
_response->setHeaderNC(StaticStrings::ErrorCodes, errorBuilder.toJson());
300+
}
301+
303302
VPackSlice slice = result.slice();
304303
if (slice.isNone()) {
305304
// will happen if silent == true

arangod/RestHandler/RestVocbaseBaseHandler.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ class RestVocbaseBaseHandler : public RestBaseHandler {
232232
//////////////////////////////////////////////////////////////////////////////
233233

234234
void generate20x(arangodb::OperationResult const&, std::string const&,
235-
TRI_col_type_e, arangodb::velocypack::Options const*);
235+
TRI_col_type_e, arangodb::velocypack::Options const*,
236+
bool isMultiple, rest::ResponseCode waitForSyncResponseCode);
236237

237238
//////////////////////////////////////////////////////////////////////////////
238239
/// @brief generates message for a saved document
@@ -248,7 +249,7 @@ class RestVocbaseBaseHandler : public RestBaseHandler {
248249

249250
void generateDeleted(arangodb::OperationResult const& result,
250251
std::string const& collectionName, TRI_col_type_e type,
251-
arangodb::velocypack::Options const*);
252+
arangodb::velocypack::Options const*, bool isMultiple);
252253

253254
//////////////////////////////////////////////////////////////////////////////
254255
/// @brief generates document not found error message, no transaction info

0 commit comments

Comments
 (0)
0