You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by hu...@apache.org on 2022/09/27 01:41:19 UTC
[incubator-kvrocks] branch unstable updated: Return from HRANGE if key wasn't found (#923)
This is an automated email from the ASF dual-hosted git repository.
hulk pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/incubator-kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new 31ded36 Return from HRANGE if key wasn't found (#923)
31ded36 is described below
commit 31ded36ad97ca3ca4e3d1a33b2dd4cde0990817e
Author: Yaroslav <to...@gmail.com>
AuthorDate: Tue Sep 27 04:41:14 2022 +0300
Return from HRANGE if key wasn't found (#923)
---
src/redis_hash.cc | 4 +++-
tests/cppunit/t_hash_test.cc | 9 ++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/redis_hash.cc b/src/redis_hash.cc
index 7faadbc..968eed1 100644
--- a/src/redis_hash.cc
+++ b/src/redis_hash.cc
@@ -286,6 +286,7 @@ rocksdb::Status Hash::Range(const Slice &user_key, const Slice &start, const Sli
AppendNamespacePrefix(user_key, &ns_key);
HashMetadata metadata(false);
rocksdb::Status s = GetMetadata(ns_key, &metadata);
+ if (!s.ok()) return s.IsNotFound() ? rocksdb::Status::OK() : s;
limit = std::min(static_cast<int64_t>(metadata.size), limit);
std::string start_key, stop_key;
InternalKey(ns_key, start, metadata.version, storage_->IsSlotIdEncoded()).Encode(&start_key);
@@ -299,7 +300,7 @@ rocksdb::Status Hash::Range(const Slice &user_key, const Slice &start, const Sli
auto iter = DBUtil::UniqueIterator(db_, read_options);
iter->Seek(start_key);
- for (int i = 0; iter->Valid() && i <= limit - 1; i++) {
+ for (int64_t i = 0; iter->Valid() && i <= limit - 1; ++i) {
FieldValue tmp_field_value;
InternalKey ikey(iter->key(), storage_->IsSlotIdEncoded());
tmp_field_value.field = ikey.GetSubKey().ToString();
@@ -309,6 +310,7 @@ rocksdb::Status Hash::Range(const Slice &user_key, const Slice &start, const Sli
}
return rocksdb::Status::OK();
}
+
rocksdb::Status Hash::GetAll(const Slice &user_key, std::vector<FieldValue> *field_values, HashFetchType type) {
field_values->clear();
diff --git a/tests/cppunit/t_hash_test.cc b/tests/cppunit/t_hash_test.cc
index 9ff9b9f..33deda7 100644
--- a/tests/cppunit/t_hash_test.cc
+++ b/tests/cppunit/t_hash_test.cc
@@ -190,4 +190,11 @@ TEST_F(RedisHashTest, HRange) {
EXPECT_EQ("key2", result[2].field);
hash->Del(key_);
}
-}
\ No newline at end of file
+}
+
+TEST_F(RedisHashTest, HRangeNonExistingKey) {
+ std::vector<FieldValue> result;
+ auto s = hash->Range("non-existing-key", "any-start-key", "any-end-key", 10, &result);
+ EXPECT_TRUE(s.ok());
+ EXPECT_EQ(result.size(), 0);
+}