mirror of https://gitee.com/bigwinds/arangodb
renamed _headersPtr to _masterPointers
This commit is contained in:
parent
045d1cd22a
commit
589dc42243
|
@ -76,7 +76,7 @@ TRI_document_collection_t::TRI_document_collection_t()
|
||||||
_lastCompactionStatus(nullptr),
|
_lastCompactionStatus(nullptr),
|
||||||
_useSecondaryIndexes(true),
|
_useSecondaryIndexes(true),
|
||||||
_ditches(this),
|
_ditches(this),
|
||||||
_headersPtr(nullptr),
|
_masterPointers(),
|
||||||
_keyGenerator(nullptr),
|
_keyGenerator(nullptr),
|
||||||
_uncollectedLogfileEntries(0),
|
_uncollectedLogfileEntries(0),
|
||||||
_cleanupIndexes(0) {
|
_cleanupIndexes(0) {
|
||||||
|
@ -495,9 +495,7 @@ TRI_doc_collection_info_t* TRI_document_collection_t::figures() {
|
||||||
info->_numberIndexes = 0;
|
info->_numberIndexes = 0;
|
||||||
info->_sizeIndexes = 0;
|
info->_sizeIndexes = 0;
|
||||||
|
|
||||||
if (_headersPtr != nullptr) {
|
info->_sizeIndexes += static_cast<int64_t>(_masterPointers.memory());
|
||||||
info->_sizeIndexes += static_cast<int64_t>(_headersPtr->memory());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto& idx : allIndexes()) {
|
for (auto& idx : allIndexes()) {
|
||||||
info->_sizeIndexes += idx->memory();
|
info->_sizeIndexes += idx->memory();
|
||||||
|
@ -817,7 +815,7 @@ static int CreateHeader(TRI_document_collection_t* document,
|
||||||
|
|
||||||
// get a new header pointer
|
// get a new header pointer
|
||||||
TRI_doc_mptr_t* header =
|
TRI_doc_mptr_t* header =
|
||||||
document->_headersPtr->request(markerSize); // ONLY IN OPENITERATOR
|
document->_masterPointers.request(markerSize); // ONLY IN OPENITERATOR
|
||||||
|
|
||||||
if (header == nullptr) {
|
if (header == nullptr) {
|
||||||
return TRI_ERROR_OUT_OF_MEMORY;
|
return TRI_ERROR_OUT_OF_MEMORY;
|
||||||
|
@ -1380,7 +1378,7 @@ static int OpenIteratorApplyInsert(open_iterator_state_t* state,
|
||||||
res = primaryIndex->insertKey(trx, header, slot);
|
res = primaryIndex->insertKey(trx, header, slot);
|
||||||
|
|
||||||
if (res == TRI_ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED) {
|
if (res == TRI_ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED) {
|
||||||
document->_headersPtr->release(header, true); // ONLY IN OPENITERATOR
|
document->_masterPointers.release(header, true); // ONLY IN OPENITERATOR
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// use regular insert method
|
// use regular insert method
|
||||||
|
@ -1388,7 +1386,7 @@ static int OpenIteratorApplyInsert(open_iterator_state_t* state,
|
||||||
|
|
||||||
if (res != TRI_ERROR_NO_ERROR) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
// insertion failed
|
// insertion failed
|
||||||
document->_headersPtr->release(header, true); // ONLY IN OPENITERATOR
|
document->_masterPointers.release(header, true); // ONLY IN OPENITERATOR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1415,8 +1413,7 @@ static int OpenIteratorApplyInsert(open_iterator_state_t* state,
|
||||||
|
|
||||||
// update the header info
|
// update the header info
|
||||||
UpdateHeader(operation->_fid, marker, newHeader, found);
|
UpdateHeader(operation->_fid, marker, newHeader, found);
|
||||||
document->_headersPtr->moveBack(newHeader,
|
document->_masterPointers.moveBack(newHeader, &oldData); // ONLY IN OPENITERATOR
|
||||||
&oldData); // ONLY IN OPENITERATOR
|
|
||||||
|
|
||||||
// update the datafile info
|
// update the datafile info
|
||||||
DatafileStatisticsContainer* dfi;
|
DatafileStatisticsContainer* dfi;
|
||||||
|
@ -1528,7 +1525,7 @@ static int OpenIteratorApplyRemove(open_iterator_state_t* state,
|
||||||
--document->_numberDocuments;
|
--document->_numberDocuments;
|
||||||
|
|
||||||
// free the header
|
// free the header
|
||||||
document->_headersPtr->release(found, true); // ONLY IN OPENITERATOR
|
document->_masterPointers.release(found, true); // ONLY IN OPENITERATOR
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_NO_ERROR;
|
||||||
|
@ -2011,11 +2008,6 @@ static void DestroyBaseDocumentCollection(TRI_document_collection_t* document) {
|
||||||
delete document->getShaper(); // PROTECTED by trx here
|
delete document->getShaper(); // PROTECTED by trx here
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document->_headersPtr != nullptr) {
|
|
||||||
delete document->_headersPtr;
|
|
||||||
document->_headersPtr = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
document->ditches()->destroy();
|
document->ditches()->destroy();
|
||||||
TRI_DestroyCollection(document);
|
TRI_DestroyCollection(document);
|
||||||
}
|
}
|
||||||
|
@ -2026,9 +2018,6 @@ static void DestroyBaseDocumentCollection(TRI_document_collection_t* document) {
|
||||||
|
|
||||||
static bool InitDocumentCollection(TRI_document_collection_t* document,
|
static bool InitDocumentCollection(TRI_document_collection_t* document,
|
||||||
VocShaper* shaper) {
|
VocShaper* shaper) {
|
||||||
// TODO: Here are leaks, in particular with _headersPtr etc., need sane
|
|
||||||
// convention of who frees what when. Do this in the context of the
|
|
||||||
// TRI_document_collection_t cleanup.
|
|
||||||
TRI_ASSERT(document != nullptr);
|
TRI_ASSERT(document != nullptr);
|
||||||
|
|
||||||
document->_cleanupIndexes = false;
|
document->_cleanupIndexes = false;
|
||||||
|
@ -2045,14 +2034,6 @@ static bool InitDocumentCollection(TRI_document_collection_t* document,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
document->_headersPtr = new TRI_headers_t; // ONLY IN CREATE COLLECTION
|
|
||||||
|
|
||||||
if (document->_headersPtr == nullptr) { // ONLY IN CREATE COLLECTION
|
|
||||||
DestroyBaseDocumentCollection(document);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create primary index
|
// create primary index
|
||||||
std::unique_ptr<arangodb::Index> primaryIndex(
|
std::unique_ptr<arangodb::Index> primaryIndex(
|
||||||
new arangodb::PrimaryIndex(document));
|
new arangodb::PrimaryIndex(document));
|
||||||
|
@ -2218,8 +2199,6 @@ TRI_document_collection_t* TRI_CreateDocumentCollection(
|
||||||
if (false == InitDocumentCollection(document, shaper)) {
|
if (false == InitDocumentCollection(document, shaper)) {
|
||||||
LOG(ERR) << "cannot initialize document collection";
|
LOG(ERR) << "cannot initialize document collection";
|
||||||
|
|
||||||
// TODO: shouldn't we free document->_headersPtr etc.?
|
|
||||||
// Yes, do this in the context of the TRI_document_collection_t cleanup.
|
|
||||||
TRI_CloseCollection(collection);
|
TRI_CloseCollection(collection);
|
||||||
TRI_DestroyCollection(collection);
|
TRI_DestroyCollection(collection);
|
||||||
delete document;
|
delete document;
|
||||||
|
@ -2233,8 +2212,6 @@ TRI_document_collection_t* TRI_CreateDocumentCollection(
|
||||||
int res = parameters.saveToFile(collection->_directory, doSync);
|
int res = parameters.saveToFile(collection->_directory, doSync);
|
||||||
|
|
||||||
if (res != TRI_ERROR_NO_ERROR) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
// TODO: shouldn't we free document->_headersPtr etc.?
|
|
||||||
// Yes, do this in the context of the TRI_document_collection_t cleanup.
|
|
||||||
LOG(ERR) << "cannot save collection parameters in directory '" << collection->_directory << "': '" << TRI_last_error() << "'";
|
LOG(ERR) << "cannot save collection parameters in directory '" << collection->_directory << "': '" << TRI_last_error() << "'";
|
||||||
|
|
||||||
TRI_CloseCollection(collection);
|
TRI_CloseCollection(collection);
|
||||||
|
@ -4624,7 +4601,7 @@ TRI_ASSERT(false);
|
||||||
|
|
||||||
operation.indexed();
|
operation.indexed();
|
||||||
|
|
||||||
document->_headersPtr->unlink(header); // PROTECTED by trx in trxCollection
|
document->_masterPointers.unlink(header); // PROTECTED by trx in trxCollection
|
||||||
document->_numberDocuments--;
|
document->_numberDocuments--;
|
||||||
|
|
||||||
TRI_IF_FAILURE("RemoveDocumentNoOperation") { return TRI_ERROR_DEBUG; }
|
TRI_IF_FAILURE("RemoveDocumentNoOperation") { return TRI_ERROR_DEBUG; }
|
||||||
|
@ -4761,7 +4738,7 @@ TRI_ASSERT(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new header
|
// create a new header
|
||||||
TRI_doc_mptr_t* header = operation.header = document->_headersPtr->request(
|
TRI_doc_mptr_t* header = operation.header = document->_masterPointers.request(
|
||||||
marker->size()); // PROTECTED by trx in trxCollection
|
marker->size()); // PROTECTED by trx in trxCollection
|
||||||
|
|
||||||
if (header == nullptr) {
|
if (header == nullptr) {
|
||||||
|
@ -4997,7 +4974,7 @@ int TRI_document_collection_t::insert(Transaction* trx, VPackSlice const* slice,
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new header
|
// create a new header
|
||||||
TRI_doc_mptr_t* header = operation.header = _headersPtr->request(
|
TRI_doc_mptr_t* header = operation.header = _masterPointers.request(
|
||||||
marker->size()); // PROTECTED by trx in trxCollection
|
marker->size()); // PROTECTED by trx in trxCollection
|
||||||
|
|
||||||
if (header == nullptr) {
|
if (header == nullptr) {
|
||||||
|
@ -5246,7 +5223,7 @@ int TRI_document_collection_t::remove(arangodb::Transaction* trx,
|
||||||
|
|
||||||
operation.indexed();
|
operation.indexed();
|
||||||
|
|
||||||
_headersPtr->unlink(header);
|
_masterPointers.unlink(header);
|
||||||
_numberDocuments--;
|
_numberDocuments--;
|
||||||
|
|
||||||
TRI_IF_FAILURE("RemoveDocumentNoOperation") { return TRI_ERROR_DEBUG; }
|
TRI_IF_FAILURE("RemoveDocumentNoOperation") { return TRI_ERROR_DEBUG; }
|
||||||
|
|
|
@ -32,13 +32,12 @@
|
||||||
#include "VocBase/collection.h"
|
#include "VocBase/collection.h"
|
||||||
#include "VocBase/DatafileStatistics.h"
|
#include "VocBase/DatafileStatistics.h"
|
||||||
#include "VocBase/Ditch.h"
|
#include "VocBase/Ditch.h"
|
||||||
|
#include "VocBase/headers.h"
|
||||||
#include "VocBase/transaction.h"
|
#include "VocBase/transaction.h"
|
||||||
#include "VocBase/update-policy.h"
|
#include "VocBase/update-policy.h"
|
||||||
#include "VocBase/voc-types.h"
|
#include "VocBase/voc-types.h"
|
||||||
#include "Wal/Marker.h"
|
#include "Wal/Marker.h"
|
||||||
|
|
||||||
class TRI_headers_t;
|
|
||||||
|
|
||||||
class VocShaper;
|
class VocShaper;
|
||||||
|
|
||||||
namespace arangodb {
|
namespace arangodb {
|
||||||
|
@ -297,7 +296,7 @@ struct TRI_document_collection_t : public TRI_collection_t {
|
||||||
|
|
||||||
mutable arangodb::Ditches _ditches;
|
mutable arangodb::Ditches _ditches;
|
||||||
|
|
||||||
class TRI_headers_t* _headersPtr;
|
TRI_headers_t _masterPointers;
|
||||||
KeyGenerator* _keyGenerator;
|
KeyGenerator* _keyGenerator;
|
||||||
|
|
||||||
std::vector<arangodb::Index*> _indexes;
|
std::vector<arangodb::Index*> _indexes;
|
||||||
|
|
|
@ -73,6 +73,14 @@ TRI_headers_t::~TRI_headers_t() {
|
||||||
delete[] it;
|
delete[] it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief returns the memory usage
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
size_t TRI_headers_t::memory() const {
|
||||||
|
return _nrAllocated * sizeof(TRI_doc_mptr_t);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief moves an existing header to the end of the list
|
/// @brief moves an existing header to the end of the list
|
||||||
|
|
|
@ -25,12 +25,16 @@
|
||||||
#define ARANGOD_VOC_BASE_HEADERS_H 1
|
#define ARANGOD_VOC_BASE_HEADERS_H 1
|
||||||
|
|
||||||
#include "Basics/Common.h"
|
#include "Basics/Common.h"
|
||||||
#include "VocBase/document-collection.h"
|
|
||||||
|
|
||||||
// turn this on to get some (slow) debugging and asserts for master pointers
|
// turn this on to get some (slow) debugging and asserts for master pointers
|
||||||
#undef VALIDATE_MASTER_POINTERS
|
#undef VALIDATE_MASTER_POINTERS
|
||||||
|
|
||||||
|
struct TRI_doc_mptr_t;
|
||||||
|
|
||||||
class TRI_headers_t {
|
class TRI_headers_t {
|
||||||
|
TRI_headers_t(TRI_headers_t const&) = delete;
|
||||||
|
TRI_headers_t& operator=(TRI_headers_t const&) = delete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief creates the headers
|
/// @brief creates the headers
|
||||||
|
@ -55,7 +59,7 @@ class TRI_headers_t {
|
||||||
/// @brief returns the memory usage
|
/// @brief returns the memory usage
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
size_t memory() const { return _nrAllocated * sizeof(TRI_doc_mptr_t); }
|
size_t memory() const;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief move an existing header to the end of the linked list
|
/// @brief move an existing header to the end of the linked list
|
||||||
|
|
|
@ -708,7 +708,7 @@ void CollectorThread::processCollectionMarker(
|
||||||
dfi.sizeDead += (int64_t)TRI_DF_ALIGN_BLOCK(datafileMarkerSize);
|
dfi.sizeDead += (int64_t)TRI_DF_ALIGN_BLOCK(datafileMarkerSize);
|
||||||
} else {
|
} else {
|
||||||
// update cap constraint info
|
// update cap constraint info
|
||||||
document->_headersPtr->adjustTotalSize(
|
document->_masterPointers.adjustTotalSize(
|
||||||
TRI_DF_ALIGN_BLOCK(walMarker->_size),
|
TRI_DF_ALIGN_BLOCK(walMarker->_size),
|
||||||
TRI_DF_ALIGN_BLOCK(datafileMarkerSize));
|
TRI_DF_ALIGN_BLOCK(datafileMarkerSize));
|
||||||
|
|
||||||
|
@ -738,7 +738,7 @@ void CollectorThread::processCollectionMarker(
|
||||||
dfi.sizeDead += (int64_t)TRI_DF_ALIGN_BLOCK(datafileMarkerSize);
|
dfi.sizeDead += (int64_t)TRI_DF_ALIGN_BLOCK(datafileMarkerSize);
|
||||||
} else {
|
} else {
|
||||||
// update cap constraint info
|
// update cap constraint info
|
||||||
document->_headersPtr->adjustTotalSize(
|
document->_masterPointers.adjustTotalSize(
|
||||||
TRI_DF_ALIGN_BLOCK(walMarker->_size),
|
TRI_DF_ALIGN_BLOCK(walMarker->_size),
|
||||||
TRI_DF_ALIGN_BLOCK(datafileMarkerSize));
|
TRI_DF_ALIGN_BLOCK(datafileMarkerSize));
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct DocumentOperation {
|
||||||
~DocumentOperation() {
|
~DocumentOperation() {
|
||||||
if (status == StatusType::HANDLED) {
|
if (status == StatusType::HANDLED) {
|
||||||
if (type == TRI_VOC_DOCUMENT_OPERATION_REMOVE) {
|
if (type == TRI_VOC_DOCUMENT_OPERATION_REMOVE) {
|
||||||
document->_headersPtr->release(header, false); // PROTECTED by trx
|
document->_masterPointers.release(header, false); // PROTECTED by trx
|
||||||
}
|
}
|
||||||
} else if (status != StatusType::REVERTED) {
|
} else if (status != StatusType::REVERTED) {
|
||||||
revert();
|
revert();
|
||||||
|
@ -88,7 +88,7 @@ struct DocumentOperation {
|
||||||
|
|
||||||
if (type == TRI_VOC_DOCUMENT_OPERATION_UPDATE) {
|
if (type == TRI_VOC_DOCUMENT_OPERATION_UPDATE) {
|
||||||
// move header to the end of the list
|
// move header to the end of the list
|
||||||
document->_headersPtr->moveBack(header, &oldHeader); // PROTECTED by trx
|
document->_masterPointers.moveBack(header, &oldHeader); // PROTECTED by trx
|
||||||
}
|
}
|
||||||
|
|
||||||
// free the local marker buffer
|
// free the local marker buffer
|
||||||
|
@ -108,15 +108,15 @@ struct DocumentOperation {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == TRI_VOC_DOCUMENT_OPERATION_INSERT) {
|
if (type == TRI_VOC_DOCUMENT_OPERATION_INSERT) {
|
||||||
document->_headersPtr->release(header, true); // PROTECTED by trx
|
document->_masterPointers.release(header, true); // PROTECTED by trx
|
||||||
} else if (type == TRI_VOC_DOCUMENT_OPERATION_UPDATE) {
|
} else if (type == TRI_VOC_DOCUMENT_OPERATION_UPDATE) {
|
||||||
if (status != StatusType::CREATED && status != StatusType::INDEXED) {
|
if (status != StatusType::CREATED && status != StatusType::INDEXED) {
|
||||||
document->_headersPtr->move(header, &oldHeader); // PROTECTED by trx in trxCollection
|
document->_masterPointers.move(header, &oldHeader); // PROTECTED by trx in trxCollection
|
||||||
}
|
}
|
||||||
header->copy(oldHeader);
|
header->copy(oldHeader);
|
||||||
} else if (type == TRI_VOC_DOCUMENT_OPERATION_REMOVE) {
|
} else if (type == TRI_VOC_DOCUMENT_OPERATION_REMOVE) {
|
||||||
if (status != StatusType::CREATED) {
|
if (status != StatusType::CREATED) {
|
||||||
document->_headersPtr->relink(header, &oldHeader); // PROTECTED by trx
|
document->_masterPointers.relink(header, &oldHeader); // PROTECTED by trx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue