mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
address comments
This commit is contained in:
parent
894fd4f395
commit
aa41ad12f6
@ -70,7 +70,7 @@ public:
|
||||
void setRocksDBDisk(DiskPtr disk);
|
||||
DiskPtr getTemporaryRocksDBDisk() const;
|
||||
|
||||
void setRocksDBOptions(std::shared_ptr<rocksdb::Options> rocksdb_options_);
|
||||
void setRocksDBOptions(std::shared_ptr<rocksdb::Options> rocksdb_options_ = nullptr);
|
||||
std::shared_ptr<rocksdb::Options> getRocksDBOptions() const { return rocksdb_options; }
|
||||
|
||||
UInt64 getKeeperMemorySoftLimit() const { return memory_soft_limit; }
|
||||
|
@ -1745,63 +1745,53 @@ struct KeeperStorageListRequestProcessor final : public KeeperStorageRequestProc
|
||||
if (path_prefix.empty())
|
||||
throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Path cannot be empty");
|
||||
|
||||
if constexpr (Storage::use_rocksdb)
|
||||
const auto & get_children = [&]()
|
||||
{
|
||||
const auto & children = container.getChildren(request.path);
|
||||
response.names.reserve(children.size());
|
||||
const auto add_child = [&](const auto & child)
|
||||
if constexpr (Storage::use_rocksdb)
|
||||
return container.getChildren(request.path);
|
||||
else
|
||||
return node_it->value.getChildren();
|
||||
};
|
||||
const auto & children = get_children();
|
||||
response.names.reserve(children.size());
|
||||
|
||||
const auto add_child = [&](const auto & child)
|
||||
{
|
||||
using enum Coordination::ListRequestType;
|
||||
|
||||
auto list_request_type = ALL;
|
||||
if (auto * filtered_list = dynamic_cast<Coordination::ZooKeeperFilteredListRequest *>(&request))
|
||||
{
|
||||
using enum Coordination::ListRequestType;
|
||||
|
||||
auto list_request_type = ALL;
|
||||
if (auto * filtered_list = dynamic_cast<Coordination::ZooKeeperFilteredListRequest *>(&request))
|
||||
{
|
||||
list_request_type = filtered_list->list_request_type;
|
||||
}
|
||||
|
||||
if (list_request_type == ALL)
|
||||
return true;
|
||||
|
||||
const auto is_ephemeral = child.second.isEphemeral();
|
||||
return (is_ephemeral && list_request_type == EPHEMERAL_ONLY) || (!is_ephemeral && list_request_type == PERSISTENT_ONLY);
|
||||
};
|
||||
|
||||
for (const auto & child : children)
|
||||
{
|
||||
if (add_child(child))
|
||||
response.names.push_back(child.first);
|
||||
list_request_type = filtered_list->list_request_type;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto & children = node_it->value.getChildren();
|
||||
response.names.reserve(children.size());
|
||||
|
||||
const auto add_child = [&](const auto child)
|
||||
if (list_request_type == ALL)
|
||||
return true;
|
||||
|
||||
bool is_ephemeral;
|
||||
if constexpr (!Storage::use_rocksdb)
|
||||
{
|
||||
using enum Coordination::ListRequestType;
|
||||
|
||||
auto list_request_type = ALL;
|
||||
if (auto * filtered_list = dynamic_cast<Coordination::ZooKeeperFilteredListRequest *>(&request))
|
||||
{
|
||||
list_request_type = filtered_list->list_request_type;
|
||||
}
|
||||
|
||||
if (list_request_type == ALL)
|
||||
return true;
|
||||
|
||||
auto child_path = (std::filesystem::path(request.path) / child.toView()).generic_string();
|
||||
auto child_it = container.find(child_path);
|
||||
if (child_it == container.end())
|
||||
onStorageInconsistency();
|
||||
|
||||
const auto is_ephemeral = child_it->value.isEphemeral();
|
||||
return (is_ephemeral && list_request_type == EPHEMERAL_ONLY) || (!is_ephemeral && list_request_type == PERSISTENT_ONLY);
|
||||
};
|
||||
|
||||
for (const auto child : children)
|
||||
is_ephemeral = child_it->value.isEphemeral();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (add_child(child))
|
||||
is_ephemeral = child.second.isEphemeral();
|
||||
}
|
||||
|
||||
return (is_ephemeral && list_request_type == EPHEMERAL_ONLY) || (!is_ephemeral && list_request_type == PERSISTENT_ONLY);
|
||||
};
|
||||
|
||||
for (const auto & child : children)
|
||||
{
|
||||
if (add_child(child))
|
||||
{
|
||||
if constexpr (Storage::use_rocksdb)
|
||||
response.names.push_back(child.first);
|
||||
else
|
||||
response.names.push_back(child.toString());
|
||||
}
|
||||
}
|
||||
|
@ -93,6 +93,13 @@ struct KeeperRocksNodeInfo
|
||||
ephemeral_or_children_data.children_info.num_children = num_children;
|
||||
}
|
||||
|
||||
/// dummy interface for test
|
||||
void addChild(StringRef) {}
|
||||
auto getChildren() const
|
||||
{
|
||||
return std::vector<int>(numChildren());
|
||||
}
|
||||
|
||||
void increaseNumChildren()
|
||||
{
|
||||
chassert(!isEphemeral());
|
||||
|
@ -31,6 +31,20 @@ struct RocksDBContainer
|
||||
using Node = Node_;
|
||||
|
||||
private:
|
||||
/// MockNode is only use in test to mock `getChildren()` and `getData()`
|
||||
struct MockNode
|
||||
{
|
||||
std::vector<int> children;
|
||||
std::string data;
|
||||
MockNode(size_t children_num, std::string_view data_)
|
||||
: children(std::vector<int>(children_num)),
|
||||
data(data_)
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<int> getChildren() { return children; }
|
||||
std::string getData() { return data; }
|
||||
};
|
||||
|
||||
UInt16 getKeyDepth(const std::string & key)
|
||||
{
|
||||
@ -262,6 +276,13 @@ public:
|
||||
return const_iterator(kv);
|
||||
}
|
||||
|
||||
MockNode getValue(StringRef key)
|
||||
{
|
||||
auto it = find(key);
|
||||
chassert(it != end());
|
||||
return MockNode(it->value.numChildren(), it->value.getData());
|
||||
}
|
||||
|
||||
const_iterator updateValue(StringRef key_, ValueUpdater updater)
|
||||
{
|
||||
/// rocksdb::PinnableSlice slice;
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user