Add TransactionDB::SingleDelete()

Summary:
Looks like the API is simply missing. Adding it.
Closes https://github.com/facebook/rocksdb/pull/2937

Differential Revision: D5919955

Pulled By: yiwu-arbug

fbshipit-source-id: 6e2e9c96c29882b0bb4113d1f8efb72bffc57878
main
Yi Wu 7 years ago committed by Facebook Github Bot
parent 0806801dc8
commit ec48e5c77f
  1. 4
      include/rocksdb/utilities/transaction.h
  2. 22
      utilities/transactions/pessimistic_transaction_db.cc
  3. 5
      utilities/transactions/pessimistic_transaction_db.h
  4. 15
      utilities/transactions/transaction_base.cc
  5. 6
      utilities/transactions/transaction_base.h

@ -344,6 +344,10 @@ class Transaction {
virtual Status DeleteUntracked(ColumnFamilyHandle* column_family, virtual Status DeleteUntracked(ColumnFamilyHandle* column_family,
const SliceParts& key) = 0; const SliceParts& key) = 0;
virtual Status DeleteUntracked(const SliceParts& key) = 0; virtual Status DeleteUntracked(const SliceParts& key) = 0;
virtual Status SingleDeleteUntracked(ColumnFamilyHandle* column_family,
const Slice& key) = 0;
virtual Status SingleDeleteUntracked(const Slice& key) = 0;
// Similar to WriteBatch::PutLogData // Similar to WriteBatch::PutLogData
virtual void PutLogData(const Slice& blob) = 0; virtual void PutLogData(const Slice& blob) = 0;

@ -396,6 +396,28 @@ Status PessimisticTransactionDB::Delete(const WriteOptions& wopts,
return s; return s;
} }
Status PessimisticTransactionDB::SingleDelete(const WriteOptions& wopts,
ColumnFamilyHandle* column_family,
const Slice& key) {
Status s;
Transaction* txn = BeginInternalTransaction(wopts);
txn->DisableIndexing();
// Since the client didn't create a transaction, they don't care about
// conflict checking for this write. So we just need to do
// SingleDeleteUntracked().
s = txn->SingleDeleteUntracked(column_family, key);
if (s.ok()) {
s = txn->Commit();
}
delete txn;
return s;
}
Status PessimisticTransactionDB::Merge(const WriteOptions& options, Status PessimisticTransactionDB::Merge(const WriteOptions& options,
ColumnFamilyHandle* column_family, ColumnFamilyHandle* column_family,
const Slice& key, const Slice& value) { const Slice& key, const Slice& value) {

@ -50,6 +50,11 @@ class PessimisticTransactionDB : public TransactionDB {
ColumnFamilyHandle* column_family, ColumnFamilyHandle* column_family,
const Slice& key) override; const Slice& key) override;
using StackableDB::SingleDelete;
virtual Status SingleDelete(const WriteOptions& wopts,
ColumnFamilyHandle* column_family,
const Slice& key) override;
using StackableDB::Merge; using StackableDB::Merge;
virtual Status Merge(const WriteOptions& options, virtual Status Merge(const WriteOptions& options,
ColumnFamilyHandle* column_family, const Slice& key, ColumnFamilyHandle* column_family, const Slice& key,

@ -471,6 +471,21 @@ Status TransactionBaseImpl::DeleteUntracked(ColumnFamilyHandle* column_family,
return s; return s;
} }
Status TransactionBaseImpl::SingleDeleteUntracked(
ColumnFamilyHandle* column_family, const Slice& key) {
Status s = TryLock(column_family, key, false /* read_only */,
true /* exclusive */, true /* untracked */);
if (s.ok()) {
s = GetBatchForWrite()->SingleDelete(column_family, key);
if (s.ok()) {
num_deletes_++;
}
}
return s;
}
void TransactionBaseImpl::PutLogData(const Slice& blob) { void TransactionBaseImpl::PutLogData(const Slice& blob) {
write_batch_.PutLogData(blob); write_batch_.PutLogData(blob);
} }

@ -170,6 +170,12 @@ class TransactionBaseImpl : public Transaction {
return DeleteUntracked(nullptr, key); return DeleteUntracked(nullptr, key);
} }
Status SingleDeleteUntracked(ColumnFamilyHandle* column_family,
const Slice& key) override;
Status SingleDeleteUntracked(const Slice& key) override {
return SingleDeleteUntracked(nullptr, key);
}
void PutLogData(const Slice& blob) override; void PutLogData(const Slice& blob) override;
WriteBatchWithIndex* GetWriteBatch() override; WriteBatchWithIndex* GetWriteBatch() override;

Loading…
Cancel
Save