diff --git a/arangod/CMakeLists.txt b/arangod/CMakeLists.txt index 99bd611615..c16ab98e0b 100644 --- a/arangod/CMakeLists.txt +++ b/arangod/CMakeLists.txt @@ -113,6 +113,7 @@ add_executable( SkipLists/skiplistIndex.cpp Transaction/IdGenerator.cpp Transaction/Manager.cpp + Transaction/Operations.cpp Transaction/Transaction.cpp Utils/DocumentHelper.cpp V8Server/ApplicationV8.cpp diff --git a/arangod/Makefile.files b/arangod/Makefile.files index 069bfa5af7..811e69e90c 100644 --- a/arangod/Makefile.files +++ b/arangod/Makefile.files @@ -79,6 +79,7 @@ bin_arangod_SOURCES = \ arangod/SkipLists/skiplistIndex.cpp \ arangod/Transaction/IdGenerator.cpp \ arangod/Transaction/Manager.cpp \ + arangod/Transaction/Operations.cpp \ arangod/Transaction/Transaction.cpp \ arangod/Utils/DocumentHelper.cpp \ arangod/V8Server/ApplicationV8.cpp \ diff --git a/arangod/Transaction/Manager.cpp b/arangod/Transaction/Manager.cpp index a96d8e8a83..d2d71784b7 100644 --- a/arangod/Transaction/Manager.cpp +++ b/arangod/Transaction/Manager.cpp @@ -111,6 +111,7 @@ Transaction* Manager::createTransaction (TRI_vocbase_t* vocbase) { //////////////////////////////////////////////////////////////////////////////// int Manager::beginTransaction (Transaction* transaction) { + double startTime = TRI_microtime(); Transaction::IdType id = transaction->id(); WRITE_LOCKER(_lock); @@ -120,6 +121,8 @@ int Manager::beginTransaction (Transaction* transaction) { return TRI_ERROR_INTERNAL; } + transaction->setStartTime(startTime); + return TRI_ERROR_NO_ERROR; } diff --git a/arangod/Transaction/Operations.cpp b/arangod/Transaction/Operations.cpp new file mode 100644 index 0000000000..8c242ff775 --- /dev/null +++ b/arangod/Transaction/Operations.cpp @@ -0,0 +1,61 @@ +//////////////////////////////////////////////////////////////////////////////// +/// @brief transaction operations +/// +/// @file +/// +/// DISCLAIMER +/// +/// Copyright 2004-2013 triAGENS GmbH, Cologne, Germany +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// +/// Copyright holder is triAGENS GmbH, Cologne, Germany +/// +/// @author Jan Steemann +/// @author Copyright 2011-2013, triAGENS GmbH, Cologne, Germany +//////////////////////////////////////////////////////////////////////////////// + +#include "Operations.h" + +using namespace triagens::transaction; + +// ----------------------------------------------------------------------------- +// --SECTION-- constructors and destructors +// ----------------------------------------------------------------------------- + +//////////////////////////////////////////////////////////////////////////////// +/// @brief create the operations +//////////////////////////////////////////////////////////////////////////////// + +Operations::Operations (TRI_voc_cid_t id) + : _id(id), + _numInserts(0), + _numUpdates(0), + _numDeletes(0) { +} + +//////////////////////////////////////////////////////////////////////////////// +/// @brief destroy the operations +//////////////////////////////////////////////////////////////////////////////// + +Operations::~Operations () { +} + +// ----------------------------------------------------------------------------- +// --SECTION-- public methods +// ----------------------------------------------------------------------------- + +// Local Variables: +// mode: outline-minor +// outline-regexp: "/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|/// @page\\|// --SECTION--\\|/// @\\}" +// End: diff --git a/arangod/Transaction/Operations.h b/arangod/Transaction/Operations.h new file mode 100644 index 0000000000..30cdd0e91c --- /dev/null +++ b/arangod/Transaction/Operations.h @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////////////////////////////////// +/// @brief transaction operations +/// +/// @file +/// +/// DISCLAIMER +/// +/// Copyright 2004-2013 triAGENS GmbH, Cologne, Germany +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// +/// Copyright holder is triAGENS GmbH, Cologne, Germany +/// +/// @author Jan Steemann +/// @author Copyright 2011-2013, triAGENS GmbH, Cologne, Germany +//////////////////////////////////////////////////////////////////////////////// + +#ifndef TRIAGENS_TRANSACTION_OPERATIONS_H +#define TRIAGENS_TRANSACTION_OPERATIONS_H 1 + +#include "Basics/Common.h" +#include "VocBase/vocbase.h" + +namespace triagens { + namespace transaction { + +// ----------------------------------------------------------------------------- +// --SECTION-- class Operations +// ----------------------------------------------------------------------------- + + class Operations { + +//////////////////////////////////////////////////////////////////////////////// +/// @brief Operations +//////////////////////////////////////////////////////////////////////////////// + + private: + Operations (Operations const&); + Operations& operator= (Operations const&); + +// ----------------------------------------------------------------------------- +// --SECTION-- constructors and destructors +// ----------------------------------------------------------------------------- + + public: + +//////////////////////////////////////////////////////////////////////////////// +/// @brief create an operations collection +//////////////////////////////////////////////////////////////////////////////// + + explicit Operations (TRI_voc_cid_t); + +//////////////////////////////////////////////////////////////////////////////// +/// @brief destroy an operations collection +//////////////////////////////////////////////////////////////////////////////// + + ~Operations (); + +// ----------------------------------------------------------------------------- +// --SECTION-- public methods +// ----------------------------------------------------------------------------- + + public: + +// ----------------------------------------------------------------------------- +// --SECTION-- private methods +// ----------------------------------------------------------------------------- + + private: + +// ----------------------------------------------------------------------------- +// --SECTION-- private variables +// ----------------------------------------------------------------------------- + + private: + +//////////////////////////////////////////////////////////////////////////////// +/// @brief collection id +//////////////////////////////////////////////////////////////////////////////// + + TRI_voc_cid_t const _id; + +//////////////////////////////////////////////////////////////////////////////// +/// @brief number of inserts into this collection +//////////////////////////////////////////////////////////////////////////////// + + uint64_t _numInserts; + +//////////////////////////////////////////////////////////////////////////////// +/// @brief number of updates in this collection +//////////////////////////////////////////////////////////////////////////////// + + uint64_t _numUpdates; + +//////////////////////////////////////////////////////////////////////////////// +/// @brief number of deletes in this collection +//////////////////////////////////////////////////////////////////////////////// + + uint64_t _numDeletes; + + }; + + } +} + +#endif + +// Local Variables: +// mode: outline-minor +// outline-regexp: "/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|/// @page\\|// --SECTION--\\|/// @\\}" +// End: diff --git a/arangod/Transaction/Transaction.cpp b/arangod/Transaction/Transaction.cpp index 15d9adad35..16caf72604 100644 --- a/arangod/Transaction/Transaction.cpp +++ b/arangod/Transaction/Transaction.cpp @@ -45,7 +45,9 @@ Transaction::Transaction (Manager* manager, : _manager(manager), _id(id), _state(StateType::STATE_UNINITIALISED), - _vocbase(vocbase) { + _vocbase(vocbase), + _operations(), + _startTime() { } //////////////////////////////////////////////////////////////////////////////// @@ -53,7 +55,8 @@ Transaction::Transaction (Manager* manager, //////////////////////////////////////////////////////////////////////////////// Transaction::~Transaction () { - if (state() != StateType::STATE_COMMITTED && state() != StateType::STATE_ABORTED) { + if (state() != StateType::STATE_COMMITTED && + state() != StateType::STATE_ABORTED) { this->abort(); } } diff --git a/arangod/Transaction/Transaction.h b/arangod/Transaction/Transaction.h index 9ac82956a0..0ada2907cf 100644 --- a/arangod/Transaction/Transaction.h +++ b/arangod/Transaction/Transaction.h @@ -29,10 +29,9 @@ #define TRIAGENS_TRANSACTION_TRANSACTION_H 1 #include "Basics/Common.h" - -extern "C" { - struct TRI_vocbase_s; -} +#include "Transaction/Operations.h" +#include "VocBase/vocbase.h" +#include namespace triagens { namespace transaction { @@ -118,6 +117,14 @@ namespace triagens { return _state; } +//////////////////////////////////////////////////////////////////////////////// +/// @brief set the transaction start time stamp +//////////////////////////////////////////////////////////////////////////////// + + inline void setStartTime (double s) { + _startTime = s; + } + //////////////////////////////////////////////////////////////////////////////// /// @brief begin a transaction //////////////////////////////////////////////////////////////////////////////// @@ -172,6 +179,18 @@ namespace triagens { struct TRI_vocbase_s* _vocbase; +//////////////////////////////////////////////////////////////////////////////// +/// @brief transaction operations, per collection +//////////////////////////////////////////////////////////////////////////////// + + std::unordered_map _operations; + +//////////////////////////////////////////////////////////////////////////////// +/// @brief timestamp of transaction start +//////////////////////////////////////////////////////////////////////////////// + + double _startTime; + }; }