diff --git a/arangod/V8Server/v8-dispatcher.cpp b/arangod/V8Server/v8-dispatcher.cpp index 4a677b6953..5cca7c865f 100644 --- a/arangod/V8Server/v8-dispatcher.cpp +++ b/arangod/V8Server/v8-dispatcher.cpp @@ -357,7 +357,7 @@ static void JS_CreateQueue(v8::FunctionCallbackInfo const& args) { LOG_TOPIC(TRACE, Logger::FIXME) << "Adding queue " << key; ExecContextScope exscope(ExecContext::superuser()); - auto ctx = transaction::V8Context::Create(*vocbase, false); + auto ctx = transaction::V8Context::Create(*vocbase, true); SingleCollectionTransaction trx(ctx, "_queues", AccessMode::Type::EXCLUSIVE); Result res = trx.begin(); @@ -410,7 +410,7 @@ static void JS_DeleteQueue(v8::FunctionCallbackInfo const& args) { LOG_TOPIC(TRACE, Logger::FIXME) << "Removing queue " << key; ExecContextScope exscope(ExecContext::superuser()); - auto ctx = transaction::V8Context::Create(*vocbase, false); + auto ctx = transaction::V8Context::Create(*vocbase, true); SingleCollectionTransaction trx(ctx, "_queues", AccessMode::Type::WRITE); trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION); Result res = trx.begin(); diff --git a/arangod/V8Server/v8-replication.cpp b/arangod/V8Server/v8-replication.cpp index ddbba0e8ff..f4e4f440c5 100644 --- a/arangod/V8Server/v8-replication.cpp +++ b/arangod/V8Server/v8-replication.cpp @@ -147,7 +147,7 @@ static void JS_LastLoggerReplication(v8::FunctionCallbackInfo const& TRI_V8_THROW_EXCEPTION_USAGE("tickStart < tickEnd"); } - auto transactionContext = transaction::V8Context::Create(vocbase, false); + auto transactionContext = transaction::V8Context::Create(vocbase, true); auto builderSPtr = std::make_shared(); Result res = EngineSelectorFeature::ENGINE->lastLogger(vocbase, transactionContext, tickStart, tickEnd, builderSPtr); diff --git a/tests/js/server/shell/shell-foxx-queues.js b/tests/js/server/shell/shell-foxx-queues.js index 907866ebd3..06eaf1adac 100644 --- a/tests/js/server/shell/shell-foxx-queues.js +++ b/tests/js/server/shell/shell-foxx-queues.js @@ -53,6 +53,30 @@ function foxxQueuesSuite () { db._drop(cn); queues.delete(qn); }, + + testCreateQueueInsideTransactionNoCollectionDeclaration : function () { + try { + db._executeTransaction({ + collections: {}, + action: function() { + queues.create(qn); + } + }); + fail(); + } catch (err) { + assertEqual(internal.errors.ERROR_TRANSACTION_UNREGISTERED_COLLECTION.code, err.errorNum); + } + }, + + testCreateQueueInsideTransactionWithCollectionDeclaration : function () { + db._executeTransaction({ + collections: { write: ["_queues"] }, + action: function() { + queues.create(qn); + } + }); + assertEqual([], queues.get(qn).all()); + }, testCreateEmptyQueue : function () { var queue = queues.create(qn);