Status RocksSortedDataImpl::insert(OperationContext* txn, const BSONObj& key, const DiskLoc& loc, bool dupsAllowed) { if (key.objsize() >= kTempKeyMaxSize) { string msg = mongoutils::str::stream() << "RocksSortedDataImpl::insert: key too large to index, failing " << ' ' << key.objsize() << ' ' << key; return Status(ErrorCodes::KeyTooLong, msg); } RocksRecoveryUnit* ru = RocksRecoveryUnit::getRocksRecoveryUnit(txn); if ( !dupsAllowed ) { // TODO need key locking to support unique indexes. Status status = dupKeyCheck( txn, key, loc ); if ( !status.isOK() ) { return status; } } ru->registerChange(new ChangeNumEntries(&_numEntries, true)); ru->writeBatch()->Put(_columnFamily.get(), makeString(key, loc), emptyByteSlice); return Status::OK(); }
bool RocksSortedDataImpl::unindex(OperationContext* txn, const BSONObj& key, const DiskLoc& loc) { RocksRecoveryUnit* ru = RocksRecoveryUnit::getRocksRecoveryUnit(txn); const string keyData = makeString( key, loc ); string dummy; if (ru->Get(_columnFamily.get(), keyData, &dummy).IsNotFound()) { return false; } ru->registerChange(new ChangeNumEntries(&_numEntries, false)); ru->writeBatch()->Delete(_columnFamily.get(), keyData); return true; }