Skip to content

Commit a77527f

Browse files
committed
Add ReadOptions to TransactionLogIterator.
Summary: Add an optional input parameter ReadOptions to DB::GetUpdateSince(), which allows the verification of checksums to be disabled by setting ReadOptions::verify_checksums to false. Test Plan: Tests are done off-line and will not be included in the regular unit test. Reviewers: igor Reviewed By: igor CC: leveldb, xjin, dhruba Differential Revision: https://reviews.facebook.net/D16305
1 parent 6ba1084 commit a77527f

8 files changed

+59
-45
lines changed

db/db_impl.cc

+6-9
Original file line numberDiff line numberDiff line change
@@ -1490,8 +1490,9 @@ SequenceNumber DBImpl::GetLatestSequenceNumber() const {
14901490
return versions_->LastSequence();
14911491
}
14921492

1493-
Status DBImpl::GetUpdatesSince(SequenceNumber seq,
1494-
unique_ptr<TransactionLogIterator>* iter) {
1493+
Status DBImpl::GetUpdatesSince(
1494+
SequenceNumber seq, unique_ptr<TransactionLogIterator>* iter,
1495+
const TransactionLogIterator::ReadOptions& read_options) {
14951496

14961497
RecordTick(options_.statistics.get(), GET_UPDATES_SINCE_CALLS);
14971498
if (seq > versions_->LastSequence()) {
@@ -1511,13 +1512,9 @@ Status DBImpl::GetUpdatesSince(SequenceNumber seq,
15111512
if (!s.ok()) {
15121513
return s;
15131514
}
1514-
iter->reset(
1515-
new TransactionLogIteratorImpl(options_.wal_dir,
1516-
&options_,
1517-
storage_options_,
1518-
seq,
1519-
std::move(wal_files),
1520-
this));
1515+
iter->reset(new TransactionLogIteratorImpl(options_.wal_dir, &options_,
1516+
read_options, storage_options_,
1517+
seq, std::move(wal_files), this));
15211518
return (*iter)->status();
15221519
}
15231520

db/db_impl.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,10 @@ class DBImpl : public DB {
8585
bool flush_memtable = true);
8686
virtual Status GetSortedWalFiles(VectorLogPtr& files);
8787
virtual SequenceNumber GetLatestSequenceNumber() const;
88-
virtual Status GetUpdatesSince(SequenceNumber seq_number,
89-
unique_ptr<TransactionLogIterator>* iter);
88+
virtual Status GetUpdatesSince(
89+
SequenceNumber seq_number, unique_ptr<TransactionLogIterator>* iter,
90+
const TransactionLogIterator::ReadOptions&
91+
read_options = TransactionLogIterator::ReadOptions());
9092
virtual Status DeleteFile(std::string name);
9193

9294
virtual void GetLiveFilesMetaData(

db/db_test.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -5005,8 +5005,10 @@ class ModelDB: public DB {
50055005
virtual SequenceNumber GetLatestSequenceNumber() const {
50065006
return 0;
50075007
}
5008-
virtual Status GetUpdatesSince(rocksdb::SequenceNumber,
5009-
unique_ptr<rocksdb::TransactionLogIterator>*) {
5008+
virtual Status GetUpdatesSince(
5009+
rocksdb::SequenceNumber, unique_ptr<rocksdb::TransactionLogIterator>*,
5010+
const TransactionLogIterator::ReadOptions&
5011+
read_options = TransactionLogIterator::ReadOptions()) {
50105012
return Status::NotSupported("Not supported in Model DB");
50115013
}
50125014

db/transaction_log_impl.cc

+18-20
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,22 @@
99
namespace rocksdb {
1010

1111
TransactionLogIteratorImpl::TransactionLogIteratorImpl(
12-
const std::string& dir,
13-
const Options* options,
14-
const EnvOptions& soptions,
15-
const SequenceNumber seq,
16-
std::unique_ptr<VectorLogPtr> files,
17-
DBImpl const * const dbimpl) :
18-
dir_(dir),
19-
options_(options),
20-
soptions_(soptions),
21-
startingSequenceNumber_(seq),
22-
files_(std::move(files)),
23-
started_(false),
24-
isValid_(false),
25-
currentFileIndex_(0),
26-
currentBatchSeq_(0),
27-
currentLastSeq_(0),
28-
dbimpl_(dbimpl) {
12+
const std::string& dir, const Options* options,
13+
const TransactionLogIterator::ReadOptions& read_options,
14+
const EnvOptions& soptions, const SequenceNumber seq,
15+
std::unique_ptr<VectorLogPtr> files, DBImpl const* const dbimpl)
16+
: dir_(dir),
17+
options_(options),
18+
read_options_(read_options),
19+
soptions_(soptions),
20+
startingSequenceNumber_(seq),
21+
files_(std::move(files)),
22+
started_(false),
23+
isValid_(false),
24+
currentFileIndex_(0),
25+
currentBatchSeq_(0),
26+
currentLastSeq_(0),
27+
dbimpl_(dbimpl) {
2928
assert(files_ != nullptr);
3029
assert(dbimpl_ != nullptr);
3130

@@ -253,9 +252,8 @@ Status TransactionLogIteratorImpl::OpenLogReader(const LogFile* logFile) {
253252
return status;
254253
}
255254
assert(file);
256-
currentLogReader_.reset(
257-
new log::Reader(std::move(file), &reporter_, true, 0)
258-
);
255+
currentLogReader_.reset(new log::Reader(std::move(file), &reporter_,
256+
read_options_.verify_checksums_, 0));
259257
return Status::OK();
260258
}
261259
} // namespace rocksdb

db/transaction_log_impl.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,11 @@ class LogFileImpl : public LogFile {
6666

6767
class TransactionLogIteratorImpl : public TransactionLogIterator {
6868
public:
69-
TransactionLogIteratorImpl(const std::string& dir,
70-
const Options* options,
71-
const EnvOptions& soptions,
72-
const SequenceNumber seqNum,
73-
std::unique_ptr<VectorLogPtr> files,
74-
DBImpl const * const dbimpl);
69+
TransactionLogIteratorImpl(
70+
const std::string& dir, const Options* options,
71+
const TransactionLogIterator::ReadOptions& read_options,
72+
const EnvOptions& soptions, const SequenceNumber seqNum,
73+
std::unique_ptr<VectorLogPtr> files, DBImpl const* const dbimpl);
7574

7675
virtual bool Valid();
7776

@@ -84,6 +83,7 @@ class TransactionLogIteratorImpl : public TransactionLogIterator {
8483
private:
8584
const std::string& dir_;
8685
const Options* options_;
86+
const TransactionLogIterator::ReadOptions read_options_;
8787
const EnvOptions& soptions_;
8888
SequenceNumber startingSequenceNumber_;
8989
std::unique_ptr<VectorLogPtr> files_;

include/rocksdb/db.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,10 @@ class DB {
300300
// use this api, else the WAL files will get
301301
// cleared aggressively and the iterator might keep getting invalid before
302302
// an update is read.
303-
virtual Status GetUpdatesSince(SequenceNumber seq_number,
304-
unique_ptr<TransactionLogIterator>* iter) = 0;
303+
virtual Status GetUpdatesSince(
304+
SequenceNumber seq_number, unique_ptr<TransactionLogIterator>* iter,
305+
const TransactionLogIterator::ReadOptions&
306+
read_options = TransactionLogIterator::ReadOptions()) = 0;
305307

306308
// Delete the file name from the db directory and update the internal state to
307309
// reflect that. Supports deletion of sst and log files only. 'name' must be

include/rocksdb/transaction_log.h

+13
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,19 @@ class TransactionLogIterator {
8585
// earliest transaction contained in the batch.
8686
// ONLY use if Valid() is true and status() is OK.
8787
virtual BatchResult GetBatch() = 0;
88+
89+
// The read options for TransactionLogIterator.
90+
struct ReadOptions {
91+
// If true, all data read from underlying storage will be
92+
// verified against corresponding checksums.
93+
// Default: true
94+
bool verify_checksums_;
95+
96+
ReadOptions() : verify_checksums_(true) {}
97+
98+
explicit ReadOptions(bool verify_checksums)
99+
: verify_checksums_(verify_checksums) {}
100+
};
88101
};
89102
} // namespace rocksdb
90103

include/utilities/stackable_db.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ class StackableDB : public DB {
152152
return db_->GetPropertiesOfAllTables(props);
153153
}
154154

155-
virtual Status GetUpdatesSince(SequenceNumber seq_number,
156-
unique_ptr<TransactionLogIterator>* iter)
157-
override {
158-
return db_->GetUpdatesSince(seq_number, iter);
155+
virtual Status GetUpdatesSince(
156+
SequenceNumber seq_number, unique_ptr<TransactionLogIterator>* iter,
157+
const TransactionLogIterator::ReadOptions& read_options) override {
158+
return db_->GetUpdatesSince(seq_number, iter, read_options);
159159
}
160160

161161
protected:

0 commit comments

Comments
 (0)