PokIsemaine commented on code in PR #2332:
URL: https://github.com/apache/kvrocks/pull/2332#discussion_r1673450957


##########
src/storage/storage.cc:
##########
@@ -604,16 +610,19 @@ rocksdb::Status Storage::Get(const rocksdb::ReadOptions 
&options, rocksdb::Colum
   return s;
 }
 
-rocksdb::Status Storage::Get(const rocksdb::ReadOptions &options, const 
rocksdb::Slice &key,
+rocksdb::Status Storage::Get(engine::Context &ctx, const rocksdb::ReadOptions 
&options, const rocksdb::Slice &key,
                              rocksdb::PinnableSlice *value) {
-  return Get(options, db_->DefaultColumnFamily(), key, value);
+  return Get(ctx, options, db_->DefaultColumnFamily(), key, value);
 }
 
-rocksdb::Status Storage::Get(const rocksdb::ReadOptions &options, 
rocksdb::ColumnFamilyHandle *column_family,
-                             const rocksdb::Slice &key, rocksdb::PinnableSlice 
*value) {
+rocksdb::Status Storage::Get(engine::Context &ctx, const rocksdb::ReadOptions 
&options,
+                             rocksdb::ColumnFamilyHandle *column_family, const 
rocksdb::Slice &key,
+                             rocksdb::PinnableSlice *value) {
   rocksdb::Status s;
   if (is_txn_mode_ && txn_write_batch_->GetWriteBatch()->Count() > 0) {
     s = txn_write_batch_->GetFromBatchAndDB(db_.get(), options, column_family, 
key, value);
+  } else if (ctx.batch) {
+    s = ctx.batch->GetFromBatchAndDB(db_.get(), options, column_family, key, 
value);
   } else {
     s = db_->Get(options, column_family, key, value);
   }

Review Comment:
   Recently, I reconsidered merging `Context` and `ReadOptions` and made some 
small attempts to encapsulate the complete `ReadOptions` into Context while 
removing the ReadOptions parameter from the API. I discovered another point 
that needs attention: in fact, the context we need to propagate between 
multiple API calls only includes `Batch` and `Snapshot`. For other settings of 
`ReadOptions`, they should not be propagated as context.
   
   For example: API X uses `DefaultScanOptions` to set `ReadOptions`, and at 
the same time, it calls API Y, while API Y only uses the default `ReadOptions` 
(except for `Snapshot`). One common situation is that API Y directly uses the 
settings of `DefaultScanOptions` because for default `ReadOptions`, we might 
habitually use the existing `ReadOptions` in ctx and mistakenly assume it to be 
the default `ReadOptions`. Actually, we need to reset `ReadOptions` for each 
API and use the Snapshot in Context.
   
   If not merged, it can explicitly isolate the `ReadOptions` of each API, 
forcing the creation of new `ReadOptions`.
   
   What are your thoughts and suggestions? @PragmaTwice 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to