diff --git a/arangod/Cluster/ClusterInfo.cpp b/arangod/Cluster/ClusterInfo.cpp index aabfa2f25b..644b817191 100644 --- a/arangod/Cluster/ClusterInfo.cpp +++ b/arangod/Cluster/ClusterInfo.cpp @@ -2637,3 +2637,13 @@ std::shared_ptr ClusterInfo::getCurrent() { READ_LOCKER(readLocker, _currentProt.lock); return _current; } + + +std::unordered_map ClusterInfo::getServerAliases() { + READ_LOCKER(readLocker, _serversProt.lock); + std::unordered_map ret; + for (const auto& i : _serverAliases) { + ret.emplace(i.second,i.first); + } + return ret; +} diff --git a/arangod/Cluster/ClusterInfo.h b/arangod/Cluster/ClusterInfo.h index 0660db6011..ef8e33dc62 100644 --- a/arangod/Cluster/ClusterInfo.h +++ b/arangod/Cluster/ClusterInfo.h @@ -499,6 +499,8 @@ class ClusterInfo { std::vector const& getFailedServers() { MUTEX_LOCKER(guard, _failedServersMutex); return _failedServers; } void setFailedServers(std::vector const& failedServers) { MUTEX_LOCKER(guard, _failedServersMutex); _failedServers = failedServers; } + std::unordered_map getServerAliases(); + private: ////////////////////////////////////////////////////////////////////////////// diff --git a/arangod/Cluster/v8-cluster.cpp b/arangod/Cluster/v8-cluster.cpp index f8fe5d2617..8d3e40e59e 100644 --- a/arangod/Cluster/v8-cluster.cpp +++ b/arangod/Cluster/v8-cluster.cpp @@ -745,16 +745,24 @@ static void JS_GetCollectionInfoClusterInfo( result->Set(TRI_V8_ASCII_STRING("shardKeys"), shardKeys); auto shardMap = ci->shardIds(); + auto serverAliases = ClusterInfo::instance()->getServerAliases(); v8::Handle shardIds = v8::Object::New(isolate); + v8::Handle shardShorts = v8::Object::New(isolate); for (auto const& p : *shardMap) { v8::Handle list = v8::Array::New(isolate, (int)p.second.size()); + v8::Handle shorts = v8::Array::New(isolate, (int)p.second.size()); uint32_t pos = 0; for (auto const& s : p.second) { + try{ + shorts->Set(pos, TRI_V8_STD_STRING(serverAliases.at(s))); + } catch (...) {} list->Set(pos++, TRI_V8_STD_STRING(s)); } shardIds->Set(TRI_V8_STD_STRING(p.first), list); + shardShorts->Set(TRI_V8_STD_STRING(p.first), shorts); } result->Set(TRI_V8_ASCII_STRING("shards"), shardIds); + result->Set(TRI_V8_ASCII_STRING("shardShorts"), shardShorts); VPackBuilder tmp; ci->getIndexesVPack(tmp, false); v8::Handle indexes = TRI_VPackToV8(isolate, tmp.slice()); @@ -816,11 +824,18 @@ static void JS_GetCollectionInfoCurrentClusterInfo( auto servers = cic->servers(shardID); v8::Handle list = v8::Array::New(isolate, static_cast(servers.size())); + v8::Handle shorts = + v8::Array::New(isolate, static_cast(servers.size())); + auto serverAliases = ClusterInfo::instance()->getServerAliases(); uint32_t pos = 0; for (auto const& s : servers) { + try { + shorts->Set(pos, TRI_V8_STD_STRING(serverAliases.at(s))); + } catch (...) {} list->Set(pos++, TRI_V8_STD_STRING(s)); } result->Set(TRI_V8_ASCII_STRING("servers"), list); + result->Set(TRI_V8_ASCII_STRING("shorts"), shorts); TRI_V8_RETURN(result); TRI_V8_TRY_CATCH_END diff --git a/js/server/modules/@arangodb/cluster.js b/js/server/modules/@arangodb/cluster.js index 9c169e54ea..c5e15126b0 100644 --- a/js/server/modules/@arangodb/cluster.js +++ b/js/server/modules/@arangodb/cluster.js @@ -1772,9 +1772,9 @@ function shardDistribution () { for (var j = 0; j < shardNames.length; ++j) { collInfoCurrent[shardNames[j]] = global.ArangoClusterInfo.getCollectionInfoCurrent( - dbName, collName, shardNames[j]).servers; + dbName, collName, shardNames[j]).shorts; } - result[collName] = {Plan: format(collInfo.shards), + result[collName] = {Plan: format(collInfo.shardShorts), Current: format(collInfoCurrent)}; }