mirror of https://gitee.com/bigwinds/arangodb
Fixed startup exception
This commit is contained in:
parent
e87f4321da
commit
37cbb80d50
|
@ -71,7 +71,7 @@ static inline rocksdb::Transaction* rocksTransaction(
|
|||
return static_cast<RocksDBTransactionState*>(trx->state())
|
||||
->rocksTransaction();
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
RocksDBCollection::RocksDBCollection(LogicalCollection* collection,
|
||||
VPackSlice const& info)
|
||||
|
@ -196,8 +196,8 @@ void RocksDBCollection::open(bool ignoreErrors) {
|
|||
RocksDBEngine* engine =
|
||||
static_cast<RocksDBEngine*>(EngineSelectorFeature::ENGINE);
|
||||
auto counterValue = engine->counterManager()->loadCounter(this->objectId());
|
||||
LOG_TOPIC(ERR, Logger::DEVEL) << " number of documents: "
|
||||
<< counterValue.added();
|
||||
LOG_TOPIC(ERR, Logger::DEVEL)
|
||||
<< " number of documents: " << counterValue.added();
|
||||
_numberDocuments = counterValue.added() - counterValue.removed();
|
||||
_revisionId = counterValue.revisionId();
|
||||
//_numberDocuments = countKeyRange(db, readOptions,
|
||||
|
@ -438,9 +438,8 @@ void RocksDBCollection::truncate(transaction::Methods* trx,
|
|||
iter->Seek(documentBounds.start());
|
||||
|
||||
while (iter->Valid() && cmp->Compare(iter->key(), documentBounds.end()) < 0) {
|
||||
|
||||
TRI_voc_rid_t revisionId = RocksDBKey::revisionId(iter->key());
|
||||
|
||||
|
||||
// add possible log statement
|
||||
state->prepareOperation(cid, revisionId, TRI_VOC_DOCUMENT_OPERATION_REMOVE);
|
||||
rocksdb::Status s = rtrx->Delete(iter->key());
|
||||
|
@ -613,6 +612,11 @@ int RocksDBCollection::insert(arangodb::transaction::Methods* trx,
|
|||
RocksDBSavePoint guard(rocksTransaction(trx),
|
||||
trx->isSingleOperationTransaction());
|
||||
|
||||
RocksDBTransactionState* state =
|
||||
static_cast<RocksDBTransactionState*>(trx->state());
|
||||
state->prepareOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_INSERT);
|
||||
|
||||
res = insertDocument(trx, revisionId, newSlice, options.waitForSync);
|
||||
if (res.ok()) {
|
||||
Result lookupResult = lookupRevisionVPack(revisionId, trx, mdr);
|
||||
|
@ -622,11 +626,9 @@ int RocksDBCollection::insert(arangodb::transaction::Methods* trx,
|
|||
}
|
||||
|
||||
// report document and key size
|
||||
RocksDBOperationResult result =
|
||||
static_cast<RocksDBTransactionState*>(trx->state())
|
||||
->addOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_INSERT,
|
||||
newSlice.byteSize(), res.keySize());
|
||||
RocksDBOperationResult result = state->addOperation(
|
||||
_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_INSERT, newSlice.byteSize(), res.keySize());
|
||||
|
||||
// transaction size limit reached -- fail
|
||||
if (result.fail()) {
|
||||
|
@ -701,7 +703,8 @@ int RocksDBCollection::update(arangodb::transaction::Methods* trx,
|
|||
mergeObjectsForUpdate(trx, oldDoc, newSlice, isEdgeCollection,
|
||||
TRI_RidToString(revisionId), options.mergeObjects,
|
||||
options.keepNull, *builder.get());
|
||||
RocksDBTransactionState* state = static_cast<RocksDBTransactionState*>(trx->state());
|
||||
RocksDBTransactionState* state =
|
||||
static_cast<RocksDBTransactionState*>(trx->state());
|
||||
if (state->isDBServer()) {
|
||||
// Need to check that no sharding keys have changed:
|
||||
if (arangodb::shardKeysChanged(_logicalCollection->dbName(),
|
||||
|
@ -714,7 +717,7 @@ int RocksDBCollection::update(arangodb::transaction::Methods* trx,
|
|||
|
||||
RocksDBSavePoint guard(rocksTransaction(trx),
|
||||
trx->isSingleOperationTransaction());
|
||||
|
||||
|
||||
// add possible log statement under guard
|
||||
state->prepareOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_UPDATE);
|
||||
|
@ -731,9 +734,9 @@ int RocksDBCollection::update(arangodb::transaction::Methods* trx,
|
|||
TRI_ASSERT(!mdr.empty());
|
||||
|
||||
// report document and key size
|
||||
result = state ->addOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_UPDATE,
|
||||
newDoc.byteSize(), res.keySize());
|
||||
result = state->addOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_UPDATE,
|
||||
newDoc.byteSize(), res.keySize());
|
||||
|
||||
// transaction size limit reached -- fail
|
||||
if (result.fail()) {
|
||||
|
@ -802,7 +805,8 @@ int RocksDBCollection::replace(
|
|||
isEdgeCollection, TRI_RidToString(revisionId),
|
||||
*builder.get());
|
||||
|
||||
RocksDBTransactionState* state = static_cast<RocksDBTransactionState*>(trx->state());
|
||||
RocksDBTransactionState* state =
|
||||
static_cast<RocksDBTransactionState*>(trx->state());
|
||||
if (state->isDBServer()) {
|
||||
// Need to check that no sharding keys have changed:
|
||||
if (arangodb::shardKeysChanged(_logicalCollection->dbName(),
|
||||
|
@ -815,7 +819,7 @@ int RocksDBCollection::replace(
|
|||
|
||||
RocksDBSavePoint guard(rocksTransaction(trx),
|
||||
trx->isSingleOperationTransaction());
|
||||
|
||||
|
||||
// add possible log statement under guard
|
||||
state->prepareOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_REPLACE);
|
||||
|
@ -834,9 +838,9 @@ int RocksDBCollection::replace(
|
|||
|
||||
// report document and key size
|
||||
result = state->addOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_REPLACE,
|
||||
VPackSlice(builder->slice()).byteSize(),
|
||||
opResult.keySize());
|
||||
TRI_VOC_DOCUMENT_OPERATION_REPLACE,
|
||||
VPackSlice(builder->slice()).byteSize(),
|
||||
opResult.keySize());
|
||||
|
||||
// transaction size limit reached -- fail
|
||||
if (result.fail()) {
|
||||
|
@ -905,16 +909,18 @@ int RocksDBCollection::remove(arangodb::transaction::Methods* trx,
|
|||
trx->isSingleOperationTransaction());
|
||||
|
||||
// add possible log statement under guard
|
||||
RocksDBTransactionState* state = static_cast<RocksDBTransactionState*>(trx->state());
|
||||
RocksDBTransactionState* state =
|
||||
static_cast<RocksDBTransactionState*>(trx->state());
|
||||
state->prepareOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_REMOVE);
|
||||
//RocksDBLogValue val = RocksDBLogValue::DocumentRemove(StringRef(key));
|
||||
//state->rocksTransaction()->PutLogData(val.slice());
|
||||
// RocksDBLogValue val = RocksDBLogValue::DocumentRemove(StringRef(key));
|
||||
// state->rocksTransaction()->PutLogData(val.slice());
|
||||
res = removeDocument(trx, oldRevisionId, oldDoc, options.waitForSync);
|
||||
if (res.ok()) {
|
||||
// report key size
|
||||
res = state->addOperation(_logicalCollection->cid(), revisionId,
|
||||
TRI_VOC_DOCUMENT_OPERATION_REMOVE, 0, res.keySize());
|
||||
TRI_VOC_DOCUMENT_OPERATION_REMOVE, 0,
|
||||
res.keySize());
|
||||
// transaction size limit reached -- fail
|
||||
if (res.fail()) {
|
||||
THROW_ARANGO_EXCEPTION(res);
|
||||
|
|
|
@ -97,7 +97,8 @@ RocksDBLogValue::RocksDBLogValue(RocksDBLogType type) : _buffer() {
|
|||
RocksDBLogValue::RocksDBLogValue(RocksDBLogType type, uint64_t val) : _buffer() {
|
||||
switch (type) {
|
||||
case RocksDBLogType::DatabaseDrop:
|
||||
case RocksDBLogType::CollectionCreate: {
|
||||
case RocksDBLogType::CollectionCreate:
|
||||
case RocksDBLogType::DocumentOperationsPrologue: {
|
||||
_buffer.reserve(sizeof(RocksDBLogType) + sizeof(uint64_t));
|
||||
_buffer += static_cast<char>(type);
|
||||
uint64ToPersistent(_buffer, val);// database or collection ID
|
||||
|
|
|
@ -282,6 +282,8 @@ void RocksDBTransactionState::prepareOperation(
|
|||
TRI_voc_cid_t collectionId, TRI_voc_rid_t revisionId,
|
||||
TRI_voc_document_operation_e operationType) {
|
||||
switch (operationType) {
|
||||
case TRI_VOC_DOCUMENT_OPERATION_UNKNOWN:
|
||||
break;
|
||||
case TRI_VOC_DOCUMENT_OPERATION_INSERT:
|
||||
case TRI_VOC_DOCUMENT_OPERATION_UPDATE:
|
||||
case TRI_VOC_DOCUMENT_OPERATION_REPLACE:
|
||||
|
@ -289,13 +291,10 @@ void RocksDBTransactionState::prepareOperation(
|
|||
if (collectionId != _lastUsedCollection) {
|
||||
RocksDBLogValue logValue =
|
||||
RocksDBLogValue::DocumentOpsPrologue(collectionId);
|
||||
_rocksTransaction->PutLogData(logValue.slice());
|
||||
//_rocksTransaction->PutLogData(logValue.slice());
|
||||
_lastUsedCollection = collectionId;
|
||||
}
|
||||
} break;
|
||||
case TRI_VOC_DOCUMENT_OPERATION_UNKNOWN:
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_BAD_PARAMETER);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue