1
0
Fork 0

added timers

This commit is contained in:
jsteemann 2016-04-28 12:48:02 +02:00
parent 244050d975
commit 139c91d4c2
3 changed files with 73 additions and 18 deletions

View File

@ -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(), "",

View File

@ -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);
}

View File

@ -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";