GithubHelp home page GithubHelp logo

Comments (5)

git-hulk avatar git-hulk commented on April 27, 2024 1

@ajkr Thanks for your answer.

If implementing it in application code, you would probably implement an Iterator subclass that wraps a RocksDB iterator, and you can make the wrapper's Valid() == false as needed

It works well for me.

from rocksdb.

ajkr avatar ajkr commented on April 27, 2024

Do you mean Refresh()? I don't see a function on Iterator called Reset().

edit: ah sorry you are referring to the Reset() that it inherits from Cleanable. Let me rethink it.

from rocksdb.

ajkr avatar ajkr commented on April 27, 2024

Probably we should prohibit users from calling Cleanable::Reset() on an Iterator. I can't think of a reason to call it - is there one? The following patch would prevent it, though I don't really want to add four friend classes to Iterator, so would be glad to see any improvement on that -

diff --git a/include/rocksdb/iterator.h b/include/rocksdb/iterator.h
index e90b887b1..11c48e8be 100644
--- a/include/rocksdb/iterator.h
+++ b/include/rocksdb/iterator.h
@@ -27,7 +27,7 @@

 namespace ROCKSDB_NAMESPACE {

-class Iterator : public Cleanable {
+class Iterator : protected Cleanable {
  public:
   Iterator() {}
   // No copying allowed
@@ -152,6 +152,11 @@ class Iterator : public Cleanable {
     assert(false);
     return Slice();
   }
+
+  friend class WriteUnpreparedTxn;
+  friend class WriteUnpreparedTxnDB;
+  friend class WritePreparedTxn;
+  friend class WritePreparedTxnDB;
 };

 // Return an empty iterator (yields nothing).

from rocksdb.

git-hulk avatar git-hulk commented on April 27, 2024

@ajkr Thanks for your reply.

Probably we should prohibit users from calling Cleanable::Reset() on an Iterator.

In our scenario, we want to make the iterator invalid if it mismatches the prefix. But it seems there is no way to do that for now, so I tried Reset() and found it just cleans up some resources. It makes sense to me if the Reset is only used for cleaning up the iterator.

from rocksdb.

ajkr avatar ajkr commented on April 27, 2024

the iterator invalid if it mismatches the prefix

RocksDB can do it for you if you have a prefix_extractor configured, and you set ReadOptions::prefix_same_as_start. There's some read-amp optimizations too when RocksDB has awareness that scanning never needs to visit another prefix.

If implementing it in application code, you would probably implement an Iterator subclass that wraps a RocksDB iterator, and you can make the wrapper's Valid() == false as needed

from rocksdb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.