10000 add a toVelocyPack method for vocbases · arangodb/arangodb@51a57c8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 51a57c8

Browse files
committed
add a toVelocyPack method for vocbases
1 parent b2e2f39 commit 51a57c8

File tree

6 files changed

+53
-53
lines changed

6 files changed

+53
-53
lines changed

arangod/RestHandler/RestDatabaseHandler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ RestStatus RestDatabaseHandler::getDatabases() {
8888
}
8989
builder.close();
9090
} else if (suffixes[0] == "current" || suffixes[0] == "properties") {
91-
res = methods::Databases::info(&_vocbase, builder);
91+
res = _vocbase.toVelocyPack(builder);
9292
}
9393

9494
if (res.fail()) {

arangod/V8Server/v8-vocbase.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ static void JS_DBProperties(v8::FunctionCallbackInfo<v8::Value> const& args) {
16181618
auto& vocbase = GetContextVocBase(isolate);
16191619

16201620
VPackBuilder builder;
1621-
arangodb::Result res = methods::Databases::info(&vocbase,builder);
1621+
arangodb::Result res = vocbase.toVelocyPack(builder);
16221622
if(res.fail()){
16231623
TRI_V8_THROW_EXCEPTION(res);
16241624
}

arangod/VocBase/Methods/Databases.cpp

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -82,56 +82,6 @@ std::vector<std::string> Databases::list(std::string const& user) {
8282
}
8383
}
8484

85-
arangodb::Result Databases::info(TRI_vocbase_t* vocbase, VPackBuilder& result) {
86-
if (ServerState::instance()->isCoordinator()) {
87-
AgencyComm agency;
88-
AgencyCommResult commRes = agency.getValues("Plan/Databases/" + vocbase->name());
89-
if (!commRes.successful()) {
90-
// Error in communication, note that value not found is not an error
91-
LOG_TOPIC("87642", TRACE, Logger::COMMUNICATION)
92-
<< "rest database handler: no agency communication";
93-
return Result(commRes.errorCode(), commRes.errorMessage());
94-
}
95-
96-
VPackSlice value = commRes.slice()[0].get<std::string>(
97-
{AgencyCommManager::path(), "Plan", "Databases", vocbase->name()});
98-
if (value.isObject() && value.hasKey("name")) {
99-
100-
VPackValueLength l = 0;
101-
const char* name = value.get("name").getString(l);
102-
TRI_ASSERT(l > 0);
103-
104-
VPackObjectBuilder b(&result);
105-
result.add("name", value.get("name"));
106-
if (value.get("id").isString()) {
107-
result.add("id", value.get("id"));
108-
} else if (value.get("id").isNumber()) {
109-
result.add("id", VPackValue(std::to_string(value.get("id").getUInt())));
110-
} else {
111-
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
112-
"unexpected type for 'id' attribute");
113-
}
114-
result.add("path", VPackValue("none"));
115-
result.add("isSystem", VPackValue(name[0] == '_'));
116-
117-
//copy from plan slice
118-
auto one = arangodb::getOneShardOptions(name, value);
119-
arangodb::addOneShardOptionsToOpenObject(result, one.first, one.second);
120-
121-
}
122-
} else {
123-
VPackObjectBuilder b(&result);
124-
result.add("name", VPackValue(vocbase->name()));
125-
result.add("id", VPackValue(std::to_string(vocbase->id())));
126-
result.add("path", VPackValue(vocbase->path()));
127-
result.add("isSystem", VPackValue(vocbase->isSystem()));
128-
arangodb::addOneShardOptionsToOpenObject(result, vocbase->sharding(), vocbase->replicationFactor());
129-
130-
result.close();
131-
}
132-
return Result();
133-
}
134-
13585
arangodb::Result Databases::create(std::string const& dbName, VPackSlice const& inUsers,
13686
VPackSlice const& inOptions) {
13787
auth::UserManager* um = AuthenticationFeature::instance()->userManager();

arangod/VocBase/Methods/Databases.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ struct Databases {
3838
static TRI_vocbase_t* lookup(std::string const& dbname);
3939
static TRI_vocbase_t* lookup(TRI_voc_tick_t);
4040
static std::vector<std::string> list(std::string const& user = "");
41-
static arangodb::Result info(TRI_vocbase_t* vocbase, arangodb::velocypack::Builder& result);
4241
static arangodb::Result create(std::string const& dbName,
4342
arangodb::velocypack::Slice const& users,
4443
arangodb::velocypack::Slice const& options);

arangod/VocBase/vocbase.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,6 +1791,56 @@ void TRI_vocbase_t::addReplicationApplier() {
17911791
_replicationApplier.reset(applier);
17921792
}
17931793

1794+
arangodb::Result TRI_vocbase_t::toVelocyPack(VPackBuilder& result) const {
1795+
if (ServerState::instance()->isCoordinator()) {
1796+
AgencyComm agency;
1797+
AgencyCommResult commRes = agency.getValues("Plan/Databases/" + _name);
1798+
if (!commRes.successful()) {
1799+
// Error in communication, note that value not found is not an error
1800+
LOG_TOPIC("87642", TRACE, Logger::COMMUNICATION)
1801+
<< "rest database handler: no agency communication";
1802+
return Result(commRes.errorCode(), commRes.errorMessage());
1803+
}
1804+
1805+
VPackSlice value = commRes.slice()[0].get<std::string>(
1806+
{AgencyCommManager::path(), "Plan", "Databases", _name});
1807+
if (value.isObject() && value.hasKey("name")) {
1808+
1809+
VPackValueLength l = 0;
1810+
const char* name = value.get("name").getString(l);
1811+
TRI_ASSERT(l > 0);
1812+
1813+
VPackObjectBuilder b(&result);
1814+
result.add("name", value.get("name"));
1815+
if (value.get("id").isString()) {
1816+
result.add("id", value.get("id"));
1817+
} else if (value.get("id").isNumber()) {
1818+
result.add("id", VPackValue(std::to_string(value.get("id").getUInt())));
1819+
} else {
1820+
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
1821+
"unexpected type for 'id' attribute");
1822+
}
1823+
result.add("path", VPackValue("none"));
1824+
result.add("isSystem&qu 802E ot;, VPackValue(name[0] == '_'));
1825+
1826+
//copy from plan slice
1827+
auto one = arangodb::getOneShardOptions(name, value);
1828+
arangodb::addOneShardOptionsToOpenObject(result, one.first, one.second);
1829+
1830+
}
1831+
} else {
1832+
VPackObjectBuilder b(&result);
1833+
result.add("name", VPackValue(_name));
1834+
result.add("id", VPackValue(std::to_string(_id)));
1835+
result.add("path", VPackValue(path()));
1836+
result.add("isSystem", VPackValue(isSystem()));
1837+
arangodb::addOneShardOptionsToOpenObject(result, _sharding, _replicationFactor);
1838+
1839+
result.close();
1840+
}
1841+
return Result();
1842+
}
1843+
17941844
std::vector<std::shared_ptr<arangodb::LogicalView>> TRI_vocbase_t::views() {
17951845
TRI_ASSERT(!ServerState::instance()->isCoordinator());
17961846
std::vector<std::shared_ptr<arangodb::LogicalView>> views;

arangod/VocBase/vocbase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ struct TRI_vocbase_t {
205205
State state() const { return _state; }
206206
void setState(State state) { _state = state; }
207207

208+
arangodb::Result toVelocyPack(arangodb::velocypack::Builder& result) const;
208209
arangodb::ReplicationClientsProgressTracker& replicationClients() {
209210
return _replicationClients;
210211
}

0 commit comments

Comments
 (0)
0