1
0
Fork 0

fix db._engineStats()

This commit is contained in:
jsteemann 2017-05-04 00:33:36 +02:00
parent e40d191434
commit f1763e491d
9 changed files with 60 additions and 62 deletions

View File

@ -22,6 +22,7 @@
////////////////////////////////////////////////////////////////////////////////
#include "MMFilesV8Functions.h"
#include "Aql/Functions.h"
#include "Basics/Exceptions.h"
#include "Cluster/ClusterMethods.h"
#include "Cluster/ServerState.h"

View File

@ -24,7 +24,7 @@
#ifndef ARANGOD_MMFILES_MMFILES_V8_FUNCTIONS_H
#define ARANGOD_MMFILES_MMFILES_V8_FUNCTIONS_H 1
#include "Aql/Functions.h"
#include "Basics/Common.h"
namespace arangodb {

View File

@ -1212,7 +1212,7 @@ RocksDBReplicationManager* RocksDBEngine::replicationManager() const {
return _replicationManager.get();
}
void RocksDBEngine::rocksdbProperties(VPackBuilder &builder) {
void RocksDBEngine::getStatistics(VPackBuilder& builder) const {
builder.openObject();
// add int properties
auto c1 = [&](std::string const& s) {

View File

@ -89,6 +89,8 @@ class RocksDBEngine final : public StorageEngine {
// create storage-engine specific view
PhysicalView* createPhysicalView(LogicalView*, VPackSlice const&) override;
void getStatistics(VPackBuilder& builder) const override;
// inventory functionality
// -----------------------
@ -270,8 +272,6 @@ class RocksDBEngine final : public StorageEngine {
RocksDBCounterManager* counterManager() const;
RocksDBReplicationManager* replicationManager() const;
void rocksdbProperties(VPackBuilder &builder);
private:
/// single rocksdb database used in this storage engine
rocksdb::TransactionDB* _db;

View File

@ -22,6 +22,7 @@
////////////////////////////////////////////////////////////////////////////////
#include "RocksDBV8Functions.h"
#include "Aql/Functions.h"
#include "Basics/Exceptions.h"
#include "Basics/Result.h"
#include "Cluster/ServerState.h"
@ -103,28 +104,6 @@ static void JS_PropertiesWal(v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_END
}
/// return rocksdb properties
static void JS_EngineStats(v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_BEGIN(isolate);
v8::HandleScope scope(isolate);
if (ServerState::instance()->isCoordinator()) {
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
}
RocksDBEngine* engine =
dynamic_cast<RocksDBEngine*>(EngineSelectorFeature::ENGINE);
if (engine == nullptr) {
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
}
VPackBuilder builder;
engine->rocksdbProperties(builder);
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, builder.slice());
TRI_V8_RETURN(result);
TRI_V8_TRY_CATCH_END
}
static void JS_RecalculateCounts(
v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_BEGIN(isolate);
@ -140,8 +119,8 @@ static void JS_RecalculateCounts(
auto physical = toRocksDBCollection(collection);
v8::Handle<v8::Value> result = v8::Integer::New(
isolate, static_cast<uint32_t>(physical->recalculateCounts()));
v8::Handle<v8::Value> result = v8::Number::New(
isolate, static_cast<double>(physical->recalculateCounts()));
TRI_V8_RETURN(result);
TRI_V8_TRY_CATCH_END
@ -158,22 +137,16 @@ void RocksDBV8Functions::registerResources() {
v8::Handle<v8::ObjectTemplate>::New(isolate, v8g->VocbaseColTempl);
TRI_ASSERT(!rt.IsEmpty());
v8::Handle<v8::ObjectTemplate> db =
v8::Handle<v8::ObjectTemplate>::New(isolate, v8g->VocbaseTempl);
TRI_ASSERT(!db.IsEmpty());
TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING("recalculateCount"),
JS_RecalculateCounts, true);
// add global WAL handling functions
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_FLUSH"),
JS_FlushWal, true);
TRI_AddGlobalFunctionVocbase(isolate,
TRI_V8_ASCII_STRING("WAL_WAITCOLLECTOR"),
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_WAITCOLLECTOR"),
JS_WaitCollectorWal, true);
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_PROPERTIES"),
JS_PropertiesWal, true);
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_TRANSACTIONS"),
JS_TransactionsWal, true);
TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING("recalculateCount"),
JS_RecalculateCounts);
TRI_AddMethodVocbase(isolate, db, TRI_V8_ASCII_STRING("_engineStats"),
JS_EngineStats);
}

View File

@ -24,7 +24,7 @@
#ifndef ARANGOD_ROCKSDB_ROCKSDB_V8_FUNCTIONS_H
#define ARANGOD_ROCKSDB_ROCKSDB_V8_FUNCTIONS_H 1
#include "Aql/Functions.h"
#include "Basics/Common.h"
namespace arangodb {

View File

@ -430,6 +430,11 @@ class StorageEngine : public application_features::ApplicationFeature {
builder.close(); // supports
builder.close(); // object
}
virtual void getStatistics(VPackBuilder& builder) const {
builder.openObject();
builder.close();
}
protected:
void registerCollection(TRI_vocbase_t* vocbase,

View File

@ -2887,6 +2887,7 @@ static void JS_CompletionsVocbase(
result->Set(j++, TRI_V8_ASCII_STRING("_dropDatabase()"));
result->Set(j++, TRI_V8_ASCII_STRING("_dropView()"));
result->Set(j++, TRI_V8_ASCII_STRING("_engine()"));
result->Set(j++, TRI_V8_ASCII_STRING("_engineStats()"));
result->Set(j++, TRI_V8_ASCII_STRING("_executeTransaction()"));
result->Set(j++, TRI_V8_ASCII_STRING("_exists()"));
result->Set(j++, TRI_V8_ASCII_STRING("_id"));

View File

@ -1517,12 +1517,11 @@ static void JS_ObjectHash(v8::FunctionCallbackInfo<v8::Value> const& args) {
////////////////////////////////////////////////////////////////////////////////
static v8::Handle<v8::Object> WrapVocBase(v8::Isolate* isolate,
TRI_vocbase_t const* database) {
TRI_vocbase_t* database) {
TRI_GET_GLOBALS();
v8::Handle<v8::Object> result =
WrapClass(isolate, v8g->VocbaseTempl, WRP_VOCBASE_TYPE,
const_cast<TRI_vocbase_t*>(database));
WrapClass(isolate, v8g->VocbaseTempl, WRP_VOCBASE_TYPE, database);
return result;
}
@ -1687,10 +1686,10 @@ static void MapGetVocBase(v8::Local<v8::String> const name,
}
////////////////////////////////////////////////////////////////////////////////
/// @brief return the name of the storage engine
/// @brief return the name and capabilities of the storage engine
////////////////////////////////////////////////////////////////////////////////
static void JS_EngineServer(v8::FunctionCallbackInfo<v8::Value> const& args) {
static void JS_Engine(v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_BEGIN(isolate);
v8::HandleScope scope(isolate);
@ -1704,6 +1703,28 @@ static void JS_EngineServer(v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_END
}
////////////////////////////////////////////////////////////////////////////////
/// @brief return statistics for the storage engine
////////////////////////////////////////////////////////////////////////////////
static void JS_EngineStats(v8::FunctionCallbackInfo<v8::Value> const& args) {
TRI_V8_TRY_CATCH_BEGIN(isolate);
v8::HandleScope scope(isolate);
if (ServerState::instance()->isCoordinator()) {
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
}
// return engine data
StorageEngine* engine = EngineSelectorFeature::ENGINE;
VPackBuilder builder;
engine->getStatistics(builder);
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, builder.slice());
TRI_V8_RETURN(result);
TRI_V8_TRY_CATCH_END
}
////////////////////////////////////////////////////////////////////////////////
/// @brief was docuBlock databaseVersion
////////////////////////////////////////////////////////////////////////////////
@ -2607,19 +2628,14 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
// register the database
v8g->_vocbase = vocbase;
v8::Handle<v8::ObjectTemplate> ArangoNS;
v8::Handle<v8::ObjectTemplate> rt;
v8::Handle<v8::FunctionTemplate> ft;
v8::Handle<v8::Template> pt;
// .............................................................................
// generate the TRI_vocbase_t template
// .............................................................................
ft = v8::FunctionTemplate::New(isolate);
v8::Handle<v8::FunctionTemplate> ft = v8::FunctionTemplate::New(isolate);
ft->SetClassName(TRI_V8_ASCII_STRING("ArangoDatabase"));
ArangoNS = ft->InstanceTemplate();
v8::Handle<v8::ObjectTemplate> ArangoNS = ft->InstanceTemplate();
ArangoNS->SetInternalFieldCount(2);
ArangoNS->SetNamedPropertyHandler(MapGetVocBase);
@ -2627,7 +2643,9 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
// JS_CompletionsVocbase, too for the auto-completion
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_engine"),
JS_EngineServer);
JS_Engine);
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_engineStats"),
JS_EngineStats);
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_version"),
JS_VersionServer);
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_id"),
@ -2651,6 +2669,11 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
JS_UseDatabase);
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_flushCache"),
JS_FakeFlushCache, true);
v8g->VocbaseTempl.Reset(isolate, ArangoNS);
TRI_AddGlobalFunctionVocbase(isolate,
TRI_V8_ASCII_STRING("ArangoDatabase"),
ft->GetFunction());
TRI_InitV8Statistics(isolate, context);
@ -2659,11 +2682,6 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
TRI_InitV8Collections(context, vocbase, v8g, isolate, ArangoNS);
TRI_InitV8Views(context, vocbase, v8g, isolate, ArangoNS);
v8g->VocbaseTempl.Reset(isolate, ArangoNS);
TRI_AddGlobalFunctionVocbase(isolate,
TRI_V8_ASCII_STRING("ArangoDatabase"),
ft->GetFunction());
TRI_InitV8cursor(context, v8g);
// .............................................................................
@ -2767,7 +2785,7 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
TRI_AddGlobalFunctionVocbase(isolate,
TRI_V8_ASCII_STRING("DECODE_REV"),
JS_DecodeRev);
JS_DecodeRev, true);
TRI_AddGlobalFunctionVocbase(isolate,
TRI_V8_ASCII_STRING("ARANGODB_CONTEXT"),
@ -2780,12 +2798,12 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
v8::Handle<v8::Object> v = WrapVocBase(isolate, vocbase);
if (v.IsEmpty()) {
LOG_TOPIC(ERR, arangodb::Logger::FIXME) << "out of memory when initializing VocBase";
} else {
TRI_AddGlobalVariableVocbase(isolate, TRI_V8_ASCII_STRING("db"),
v);
LOG_TOPIC(FATAL, arangodb::Logger::FIXME) << "out of memory when initializing VocBase";
FATAL_ERROR_ABORT();
}
TRI_AddGlobalVariableVocbase(isolate, TRI_V8_ASCII_STRING("db"), v);
// add collections cache object
context->Global()->ForceSet(TRI_V8_ASCII_STRING("__dbcache__"),
v8::Object::New(isolate), v8::DontEnum);