summaryrefslogtreecommitdiff
path: root/api/leveldb/leveldb_wt.h
diff options
context:
space:
mode:
Diffstat (limited to 'api/leveldb/leveldb_wt.h')
-rw-r--r--api/leveldb/leveldb_wt.h35
1 files changed, 22 insertions, 13 deletions
diff --git a/api/leveldb/leveldb_wt.h b/api/leveldb/leveldb_wt.h
index 768f3854caf..462b1fcc865 100644
--- a/api/leveldb/leveldb_wt.h
+++ b/api/leveldb/leveldb_wt.h
@@ -126,7 +126,7 @@ class DbImpl;
/* Context for operations (including snapshots, write batches, transactions) */
class OperationContext {
public:
- OperationContext(WT_CONNECTION *conn) : conn_(conn), in_use_(false) {
+ OperationContext(WT_CONNECTION *conn) {
int ret = conn->open_session(conn, NULL, "isolation=snapshot", &session_);
assert(ret == 0);
ret = session_->open_cursor(
@@ -136,12 +136,20 @@ public:
~OperationContext() {
#ifdef WANT_SHUTDOWN_RACES
- int ret = session_->close(session_, NULL);
+ int ret = Close();
assert(ret == 0);
#endif
}
- WT_CURSOR *GetCursor();
+ int Close() {
+ int ret = 0;
+ if (session_ != NULL)
+ ret = session_->close(session_, NULL);
+ session_ = NULL;
+ return (ret);
+ }
+
+ WT_CURSOR *GetCursor() { return cursor_; }
#ifdef HAVE_ROCKSDB
WT_CURSOR *GetCursor(int i) {
return (i < cursors_.size()) ? cursors_[i] : NULL;
@@ -153,21 +161,17 @@ public:
}
#endif
WT_SESSION *GetSession() { return session_; }
- void ReleaseCursor(WT_CURSOR *cursor);
private:
- WT_CONNECTION *conn_;
WT_SESSION *session_;
WT_CURSOR *cursor_;
#ifdef HAVE_ROCKSDB
std::vector<WT_CURSOR *> cursors_;
#endif
- bool in_use_;
};
class IteratorImpl : public Iterator {
public:
- IteratorImpl(DbImpl *db, const ReadOptions &options);
IteratorImpl(DbImpl *db, WT_CURSOR *cursor) : db_(db), cursor_(cursor), own_cursor_(true) {}
virtual ~IteratorImpl();
@@ -223,10 +227,8 @@ public:
virtual ~SnapshotImpl() { delete context_; }
protected:
OperationContext *GetContext() const { return context_; }
- WT_CURSOR *GetCursor() const { return context_->GetCursor(); }
Status GetStatus() const { return status_; }
Status SetupTransaction();
- Status ReleaseTransaction();
private:
DbImpl *db_;
OperationContext *context_;
@@ -375,13 +377,20 @@ private:
return (ctx);
}
+ OperationContext *GetContext(const ReadOptions &options) {
+ if (options.snapshot == NULL)
+ return GetContext();
+ else {
+ const SnapshotImpl *si =
+ static_cast<const SnapshotImpl *>(options.snapshot);
+ assert(si->GetStatus().ok());
+ return si->GetContext();
+ }
+ }
+
// No copying allowed
DbImpl(const DbImpl&);
void operator=(const DbImpl&);
-
-protected:
- WT_CURSOR *GetCursor() { return GetContext()->GetCursor(); }
- void ReleaseCursor(WT_CURSOR *cursor) { GetContext()->ReleaseCursor(cursor); }
};
#ifdef HAVE_ROCKSDB