diff --git a/arangod/V8Server/v8-collection.cpp b/arangod/V8Server/v8-collection.cpp index 09d9b4b8eb..dbbec2de77 100644 --- a/arangod/V8Server/v8-collection.cpp +++ b/arangod/V8Server/v8-collection.cpp @@ -1009,177 +1009,6 @@ static void JS_FiguresVocbaseCol( TRI_V8_TRY_CATCH_END } -//////////////////////////////////////////////////////////////////////////////// -/// @brief was docuBlock assumeLeadership -//////////////////////////////////////////////////////////////////////////////// - -static void JS_SetTheLeader(v8::FunctionCallbackInfo const& args) { - TRI_V8_TRY_CATCH_BEGIN(isolate); - v8::HandleScope scope(isolate); - auto& vocbase = GetContextVocBase(isolate); - - if (vocbase.isDropped()) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATABASE_NOT_FOUND); - } - - if (ServerState::instance()->isDBServer()) { - auto* v8Collection = UnwrapCollection(args.Holder()); - - if (!v8Collection) { - TRI_V8_THROW_EXCEPTION_INTERNAL("cannot extract collection"); - } - - auto& collectionName = v8Collection->name(); - auto collection = v8Collection->vocbase().lookupCollection(collectionName); - - if (collection == nullptr) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND); - } - - std::string theLeader; - - if (args.Length() >= 1 && args[0]->IsString()) { - TRI_Utf8ValueNFC l(args[0]); - theLeader = std::string(*l, l.length()); - } - - collection->followers()->setTheLeader(theLeader); - - if (theLeader.empty()) { - collection->followers()->clear(); - } - // do not reset followers when we resign at this time...we are - // still the only source of truth to trust, in particular, in the - // planned leader resignation, we will shortly after the call to - // this function here report the controlled resignation to the - // agency. This report must still contain the correct follower list - // or else the supervision is super angry with us. - } - - TRI_V8_RETURN_UNDEFINED(); - TRI_V8_TRY_CATCH_END -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief was docuBlock getLeader -//////////////////////////////////////////////////////////////////////////////// - -static void JS_GetLeader(v8::FunctionCallbackInfo const& args) { - TRI_V8_TRY_CATCH_BEGIN(isolate); - v8::HandleScope scope(isolate); - auto& vocbase = GetContextVocBase(isolate); - - if (vocbase.isDropped()) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATABASE_NOT_FOUND); - } - - std::string theLeader; - if (ServerState::instance()->isDBServer()) { - auto* collection = UnwrapCollection(args.Holder()); - - if (!collection) { - TRI_V8_THROW_EXCEPTION_INTERNAL("cannot extract collection"); - } - - auto& collectionName = collection->name(); - auto realCollection = - collection->vocbase().lookupCollection(collectionName); - - if (realCollection == nullptr) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND); - } - - theLeader = realCollection->followers()->getLeader(); - } - - v8::Handle res = TRI_V8_STD_STRING(isolate, theLeader); - TRI_V8_RETURN(res); - TRI_V8_TRY_CATCH_END -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief was docuBlock removeFollower -//////////////////////////////////////////////////////////////////////////////// - -static void JS_RemoveFollower(v8::FunctionCallbackInfo const& args) { - TRI_V8_TRY_CATCH_BEGIN(isolate); - v8::HandleScope scope(isolate); - auto& vocbase = GetContextVocBase(isolate); - - if (vocbase.isDropped()) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATABASE_NOT_FOUND); - } - - if (args.Length() < 1) { - TRI_V8_THROW_EXCEPTION_USAGE("removeFollower()"); - } - - ServerID const serverId = TRI_ObjectToString(args[0]); - - if (ServerState::instance()->isDBServer()) { - auto* v8Collection = UnwrapCollection(args.Holder()); - - if (!v8Collection) { - TRI_V8_THROW_EXCEPTION_INTERNAL("cannot extract collection"); - } - - auto& collectionName = v8Collection->name(); - auto collection = v8Collection->vocbase().lookupCollection(collectionName); - - if (collection == nullptr) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND); - } - - collection->followers()->remove(serverId); - } - - TRI_V8_RETURN_TRUE(); - TRI_V8_TRY_CATCH_END -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief was docuBlock getFollowers -//////////////////////////////////////////////////////////////////////////////// - -static void JS_GetFollowers(v8::FunctionCallbackInfo const& args) { - TRI_V8_TRY_CATCH_BEGIN(isolate); - v8::HandleScope scope(isolate); - - auto& vocbase = GetContextVocBase(isolate); - - if (vocbase.isDropped()) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATABASE_NOT_FOUND); - } - - v8::Handle list = v8::Array::New(isolate); - - if (ServerState::instance()->isDBServer()) { - auto* v8Collection = UnwrapCollection(args.Holder()); - - if (!v8Collection) { - TRI_V8_THROW_EXCEPTION_INTERNAL("cannot extract collection"); - } - - auto& collectionName = v8Collection->name(); - auto collection = v8Collection->vocbase().lookupCollection(collectionName); - - if (collection == nullptr) { - TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND); - } - - std::unique_ptr const& followerInfo = collection->followers(); - std::shared_ptr const> followers = followerInfo->get(); - uint32_t i = 0; - - for (auto const& n : *followers) { - list->Set(i++, TRI_V8_STD_STRING(isolate, n)); - } - } - - TRI_V8_RETURN(list); - TRI_V8_TRY_CATCH_END -} - //////////////////////////////////////////////////////////////////////////////// /// @brief was docuBlock collectionLoad //////////////////////////////////////////////////////////////////////////////// @@ -2732,14 +2561,6 @@ void TRI_InitV8Collections(v8::Handle context, JS_InsertVocbaseCol); TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "_binaryInsert"), JS_BinaryInsertVocbaseCol); - TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "setTheLeader"), - JS_SetTheLeader, true); - TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "getLeader"), - JS_GetLeader, true); - TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "removeFollower"), - JS_RemoveFollower, true); - TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "getFollowers"), - JS_GetFollowers, true); TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "globallyUniqueId"), JS_GloballyUniqueIdVocbaseCol); TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING(isolate, "load"), diff --git a/js/server/modules/@arangodb/cluster.js b/js/server/modules/@arangodb/cluster.js index d440af05de..83f794c949 100644 --- a/js/server/modules/@arangodb/cluster.js +++ b/js/server/modules/@arangodb/cluster.js @@ -496,40 +496,6 @@ function queryAgencyJob(id) { return {error: true, errorMsg: "Did not find job.", id, job: null}; } -function getLocalInfo () { - var ret = {}; - var db = require('internal').db; - var database = '_system'; - ret.result = {}; - db._collections().forEach( - function(col) { - - var name = col.name(); - if (name.charAt(0)!=='_') { - var data = { - id: col._id, name, type: col.type(), status: col.status(), - planId: col.planId(), theLeader: col.getLeader() - }; - - // merge properties - var properties = col.properties(), p; - for (p in properties) { - if (properties.hasOwnProperty(p)) { - data[p] = properties[p]; - } - } - - data.indexes = []; - - col.getIndexes().forEach( function(index) { - data.indexes.push(index); - }); - ret.result[name] = data; - } - }); - return ret; -} - exports.coordinatorId = coordinatorId; exports.isCluster = isCluster; exports.isCoordinator = isCoordinator; @@ -546,4 +512,3 @@ exports.supervisionState = supervisionState; exports.waitForSyncRepl = waitForSyncRepl; exports.endpoints = endpoints; exports.queryAgencyJob = queryAgencyJob; -exports.getLocalInfo = getLocalInfo;