mirror of https://gitee.com/bigwinds/arangodb
added timers
This commit is contained in:
parent
244050d975
commit
139c91d4c2
|
@ -1058,6 +1058,8 @@ OperationResult Transaction::documentCoordinator(std::string const& collectionNa
|
|||
OperationResult Transaction::documentLocal(std::string const& collectionName,
|
||||
VPackSlice const value,
|
||||
OperationOptions& options) {
|
||||
TIMER_START(TRANSACTION_DOCUMENT_LOCAL);
|
||||
|
||||
TRI_voc_cid_t cid = addCollectionAtRuntime(collectionName);
|
||||
TRI_document_collection_t* document = documentCollection(trxCollection(cid));
|
||||
|
||||
|
@ -1066,6 +1068,8 @@ OperationResult Transaction::documentLocal(std::string const& collectionName,
|
|||
VPackBuilder resultBuilder;
|
||||
|
||||
auto workOnOneDocument = [&](VPackSlice const value, bool isMultiple) -> int {
|
||||
TIMER_START(TRANSACTION_DOCUMENT_EXTRACT);
|
||||
|
||||
std::string key(Transaction::extractKey(value));
|
||||
if (key.empty()) {
|
||||
return TRI_ERROR_ARANGO_DOCUMENT_HANDLE_BAD;
|
||||
|
@ -1075,9 +1079,13 @@ OperationResult Transaction::documentLocal(std::string const& collectionName,
|
|||
if (!options.ignoreRevs) {
|
||||
expectedRevision = TRI_ExtractRevisionIdAsSlice(value);
|
||||
}
|
||||
|
||||
TIMER_STOP(TRANSACTION_DOCUMENT_EXTRACT);
|
||||
|
||||
TRI_doc_mptr_t mptr;
|
||||
TIMER_START(TRANSACTION_DOCUMENT_DOCUMENT_DOCUMENT);
|
||||
int res = document->read(this, key, &mptr, !isLocked(document, TRI_TRANSACTION_READ));
|
||||
TIMER_STOP(TRANSACTION_DOCUMENT_DOCUMENT_DOCUMENT);
|
||||
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
return res;
|
||||
|
@ -1101,12 +1109,14 @@ OperationResult Transaction::documentLocal(std::string const& collectionName,
|
|||
// This is the future, for now, we have to do this:
|
||||
resultBuilder.add(VPackSlice(mptr.vpack()));
|
||||
} else if (isMultiple) {
|
||||
resultBuilder.add(VPackValue(VPackValueType::Null));
|
||||
resultBuilder.add(VPackSlice::nullSlice());
|
||||
}
|
||||
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
};
|
||||
|
||||
TIMER_START(TRANSACTION_DOCUMENT_WORK_FOR_ONE);
|
||||
|
||||
int res = TRI_ERROR_NO_ERROR;
|
||||
std::unordered_map<int, size_t> countErrorCodes;
|
||||
if (!value.isArray()) {
|
||||
|
@ -1121,6 +1131,10 @@ OperationResult Transaction::documentLocal(std::string const& collectionName,
|
|||
}
|
||||
res = TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
TIMER_STOP(TRANSACTION_DOCUMENT_WORK_FOR_ONE);
|
||||
|
||||
TIMER_STOP(TRANSACTION_DOCUMENT_LOCAL);
|
||||
|
||||
return OperationResult(resultBuilder.steal(),
|
||||
transactionContext()->orderCustomTypeHandler(), "",
|
||||
|
|
|
@ -405,6 +405,8 @@ static void DocumentVocbaseCol(
|
|||
v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
v8::Isolate* isolate = args.GetIsolate();
|
||||
v8::HandleScope scope(isolate);
|
||||
|
||||
TIMER_START(JS_DOCUMENT_ALL);
|
||||
|
||||
// first and only argument should be a document handle or key or an object
|
||||
if (args.Length() != 1) {
|
||||
|
@ -426,22 +428,9 @@ static void DocumentVocbaseCol(
|
|||
if (vocbase == nullptr) {
|
||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_ARANGO_DATABASE_NOT_FOUND);
|
||||
}
|
||||
|
||||
auto transactionContext = std::make_shared<V8TransactionContext>(vocbase, true);
|
||||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
TRI_TRANSACTION_READ);
|
||||
if (!args[0]->IsArray()) {
|
||||
trx.addHint(TRI_TRANSACTION_HINT_SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
TRI_V8_THROW_EXCEPTION(res);
|
||||
}
|
||||
|
||||
|
||||
VPackBuilder searchBuilder;
|
||||
|
||||
|
||||
auto workOnOneDocument = [&](v8::Local<v8::Value> const searchValue, bool isBabies) {
|
||||
std::string collName;
|
||||
if (!ExtractDocumentHandle(isolate, searchValue, collName, searchBuilder,
|
||||
|
@ -469,8 +458,26 @@ static void DocumentVocbaseCol(
|
|||
|
||||
VPackSlice search = searchBuilder.slice();
|
||||
|
||||
// No options here
|
||||
|
||||
TIMER_START(JS_DOCUMENT_CREATE_TRX);
|
||||
auto transactionContext = std::make_shared<V8TransactionContext>(vocbase, true);
|
||||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
TRI_TRANSACTION_READ);
|
||||
if (!args[0]->IsArray()) {
|
||||
trx.addHint(TRI_TRANSACTION_HINT_SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
TIMER_STOP(JS_DOCUMENT_CREATE_TRX);
|
||||
|
||||
int res = trx.begin();
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
TRI_V8_THROW_EXCEPTION(res);
|
||||
}
|
||||
|
||||
TIMER_START(JS_DOCUMENT_DOCUMENT);
|
||||
OperationResult opResult = trx.document(collectionName, search, options);
|
||||
TIMER_STOP(JS_DOCUMENT_DOCUMENT);
|
||||
|
||||
res = trx.finish(opResult.code);
|
||||
|
||||
|
@ -481,9 +488,15 @@ static void DocumentVocbaseCol(
|
|||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
TRI_V8_THROW_EXCEPTION(res);
|
||||
}
|
||||
|
||||
TIMER_START(JS_DOCUMENT_VPACK_TO_V8);
|
||||
|
||||
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, opResult.slice(),
|
||||
transactionContext->getVPackOptions());
|
||||
|
||||
TIMER_STOP(JS_DOCUMENT_VPACK_TO_V8);
|
||||
|
||||
TIMER_STOP(JS_DOCUMENT_ALL);
|
||||
|
||||
TRI_V8_RETURN(result);
|
||||
}
|
||||
|
|
|
@ -60,8 +60,18 @@ class Timers {
|
|||
JS_INSERT_V8_TO_VPACK2,
|
||||
JS_INSERT_CREATE_TRX,
|
||||
JS_INSERT_INSERT,
|
||||
TRANSACTION_INSERT_DOCUMENT_INSERT,
|
||||
|
||||
JS_DOCUMENT_ALL,
|
||||
JS_DOCUMENT_CREATE_TRX,
|
||||
JS_DOCUMENT_DOCUMENT,
|
||||
JS_DOCUMENT_VPACK_TO_V8,
|
||||
|
||||
TRANSACTION_DOCUMENT_LOCAL,
|
||||
TRANSACTION_DOCUMENT_DOCUMENT_DOCUMENT,
|
||||
TRANSACTION_DOCUMENT_WORK_FOR_ONE,
|
||||
TRANSACTION_DOCUMENT_EXTRACT,
|
||||
|
||||
TRANSACTION_INSERT_DOCUMENT_INSERT,
|
||||
TRANSACTION_INSERT_LOCAL,
|
||||
TRANSACTION_INSERT_BUILD_DOCUMENT_IDENTITY,
|
||||
TRANSACTION_INSERT_WORK_FOR_ONE,
|
||||
|
@ -87,6 +97,24 @@ class Timers {
|
|||
return "JS_INSERT_CREATE_TRX";
|
||||
case JS_INSERT_INSERT:
|
||||
return "JS_INSERT_INSERT";
|
||||
|
||||
case JS_DOCUMENT_ALL:
|
||||
return "JS_DOCUMENT_ALL";
|
||||
case JS_DOCUMENT_CREATE_TRX:
|
||||
return "JS_DOCUMENT_CREATE_TRX";
|
||||
case JS_DOCUMENT_DOCUMENT:
|
||||
return "JS_DOCUMENT_DOCUMENT";
|
||||
case JS_DOCUMENT_VPACK_TO_V8:
|
||||
return "JS_DOCUMENT_VPACK_TO_V8";
|
||||
|
||||
case TRANSACTION_DOCUMENT_LOCAL:
|
||||
return "TRANSACTION_DOCUMENT_LOCAL";
|
||||
case TRANSACTION_DOCUMENT_DOCUMENT_DOCUMENT:
|
||||
return "TRANSACTION_DOCUMENT_DOCUMENT_DOCUMENT";
|
||||
case TRANSACTION_DOCUMENT_WORK_FOR_ONE:
|
||||
return "TRANSACTION_DOCUMENT_WORK_FOR_ONE";
|
||||
case TRANSACTION_DOCUMENT_EXTRACT:
|
||||
return "TRANSACTION_DOCUMENT_EXTRACT";
|
||||
|
||||
case TRANSACTION_INSERT_LOCAL:
|
||||
return "TRANSACTION_INSERT_LOCAL";
|
||||
|
|
Loading…
Reference in New Issue