Skip to content

Commit d0040af

Browse files
committed
core/server(JSON): Use stateless allocator
Signed-off-by: Abhijat Malviya <[email protected]>
1 parent df45ce6 commit d0040af

File tree

10 files changed

+21
-23
lines changed

10 files changed

+21
-23
lines changed

src/core/compact_object.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,7 @@ MemoryResource* CompactObj::memory_resource() {
16241624

16251625
bool CompactObj::JsonConsT::DefragIfNeeded(PageUsage* page_usage) {
16261626
if (JsonType* old = json_ptr; ShouldDefragment(page_usage)) {
1627-
json_ptr = AllocateMR<JsonType>(DeepCopyJSON(old, memory_resource()));
1627+
json_ptr = AllocateMR<JsonType>(DeepCopyJSON(old));
16281628
DeleteMR<JsonType>(old);
16291629
return true;
16301630
}

src/core/compact_object_test.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -455,14 +455,14 @@ TEST_F(CompactObjectTest, JsonTypeTest) {
455455
"children":[],"spouse":null}
456456
)";
457457
std::optional<JsonType> json_option2 =
458-
JsonFromString(R"({"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}})", CompactObj::memory_resource());
458+
JsonFromString(R"({"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}})");
459459

460460
cobj_.SetString(json_str, false);
461461
ASSERT_TRUE(cobj_.ObjType() == OBJ_STRING); // we set this as a string
462462
JsonType* failed_json = cobj_.GetJson();
463463
ASSERT_TRUE(failed_json == nullptr);
464464
ASSERT_TRUE(cobj_.ObjType() == OBJ_STRING);
465-
std::optional<JsonType> json_option = JsonFromString(json_str, CompactObj::memory_resource());
465+
std::optional<JsonType> json_option = JsonFromString(json_str);
466466
ASSERT_TRUE(json_option.has_value());
467467
cobj_.SetJson(std::move(json_option.value()));
468468
ASSERT_TRUE(cobj_.ObjType() == OBJ_JSON); // and now this is a JSON type
@@ -477,7 +477,7 @@ TEST_F(CompactObjectTest, JsonTypeTest) {
477477
ASSERT_TRUE(json != nullptr);
478478
ASSERT_TRUE(json->contains("b"));
479479
ASSERT_FALSE(json->contains("firstName"));
480-
std::optional<JsonType> set_array = JsonFromString("", CompactObj::memory_resource());
480+
std::optional<JsonType> set_array = JsonFromString("");
481481
// now set it to string again
482482
cobj_.SetString(R"({"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}})", false);
483483
ASSERT_TRUE(cobj_.ObjType() == OBJ_STRING); // we set this as a string
@@ -504,7 +504,7 @@ TEST_F(CompactObjectTest, JsonTypeWithPathTest) {
504504
"title" : "The Night Watch",
505505
"author" : "Phillips, David Atlee"
506506
}]})";
507-
std::optional<JsonType> json_array = JsonFromString(books_json, CompactObj::memory_resource());
507+
std::optional<JsonType> json_array = JsonFromString(books_json);
508508
ASSERT_TRUE(json_array.has_value());
509509
cobj_.SetJson(std::move(json_array.value()));
510510
ASSERT_TRUE(cobj_.ObjType() == OBJ_JSON); // and now this is a JSON type

src/core/json/json_object.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ void InitJSONTLHeap(PMR_NS::memory_resource* mr) {
1515
detail::tl_mr = mr;
1616
}
1717

18-
optional<JsonType> JsonFromString(string_view input, PMR_NS::memory_resource* mr) {
18+
optional<JsonType> JsonFromString(string_view input) {
1919
error_code ec;
2020
auto JsonErrorHandler = [](json_errc ec, const ser_context&) {
2121
VLOG(1) << "Error while decode JSON: " << make_error_code(ec).message();
@@ -35,7 +35,7 @@ optional<JsonType> JsonFromString(string_view input, PMR_NS::memory_resource* mr
3535
auto parser_options = jsoncons::json_options{}.max_nesting_depth(
3636
std::min(json_nesting_depth_limit, uint32_t(input.size() / 2)));
3737

38-
json_decoder<JsonType> decoder(std::pmr::polymorphic_allocator<char>{mr});
38+
json_decoder<JsonType> decoder;
3939
json_parser parser(parser_options, JsonErrorHandler);
4040

4141
parser.update(input);
@@ -47,10 +47,10 @@ optional<JsonType> JsonFromString(string_view input, PMR_NS::memory_resource* mr
4747
return nullopt;
4848
}
4949

50-
JsonType DeepCopyJSON(const JsonType* j, PMR_NS::memory_resource* mr) {
50+
JsonType DeepCopyJSON(const JsonType* j) {
5151
std::string serialized;
5252
j->dump(serialized);
53-
auto deserialized = JsonFromString(serialized, mr);
53+
auto deserialized = JsonFromString(serialized);
5454
DCHECK(deserialized.has_value());
5555
return std::move(deserialized.value());
5656
}

src/core/json/json_object.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ bool operator!=(const JSONConsAllocator<T>&, const JSONConsAllocator<U>&) noexce
6565
return false;
6666
}
6767

68-
using JsonType = jsoncons::pmr::json;
68+
using JsonType = jsoncons::basic_json<char, jsoncons::sorted_policy, JSONConsAllocator<char>>;
6969

7070
// Build a json object from string. If the string is not legal json, will return nullopt
71-
std::optional<JsonType> JsonFromString(std::string_view input, PMR_NS::memory_resource* mr);
71+
std::optional<JsonType> JsonFromString(std::string_view input);
7272

7373
// Deep copy a JSON object, by first serializing it to a string and then deserializing the string.
7474
// The operation is intended to help during defragmentation, by copying into a page reserved for
7575
// malloc.
76-
JsonType DeepCopyJSON(const JsonType* j, PMR_NS::memory_resource* mr);
76+
JsonType DeepCopyJSON(const JsonType* j);
7777

7878
inline auto MakeJsonPathExpr(std::string_view path, std::error_code& ec)
7979
-> jsoncons::jsonpath::jsonpath_expression<JsonType> {

src/core/json/jsonpath_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class TestDriver : public Driver {
3939
template <typename JSON> JSON ValidJson(string_view str);
4040

4141
template <> JsonType ValidJson<JsonType>(string_view str) {
42-
auto res = ::dfly::JsonFromString(str, pmr::get_default_resource());
42+
auto res = ::dfly::JsonFromString(str);
4343
CHECK(res) << "Failed to parse json: " << str;
4444
return *res;
4545
}

src/core/page_usage_stats_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ TEST_F(PageUsageStatsTest, JSONCons) {
191191
// encoding.
192192
std::string_view data{R"#({"data": "some", "count": 1, "checked": false})#"};
193193

194-
auto parsed = JsonFromString(data, &m_);
194+
auto parsed = JsonFromString(data);
195195
EXPECT_TRUE(parsed.has_value());
196196

197197
c_obj_.SetJson(std::move(parsed.value()));

src/server/cluster/cluster_config.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ optional<ClusterShardInfos> BuildClusterConfigFromJson(const JsonType& json) {
309309
/* static */
310310
shared_ptr<ClusterConfig> ClusterConfig::CreateFromConfig(string_view my_id,
311311
std::string_view json_str) {
312-
optional<JsonType> json_config = JsonFromString(json_str, PMR_NS::get_default_resource());
312+
optional<JsonType> json_config = JsonFromString(json_str);
313313
if (!json_config.has_value()) {
314314
LOG(ERROR) << "Can't parse JSON for ClusterConfig " << json_str;
315315
return nullptr;

src/server/json_family.cc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,7 @@ void SendJsonString(const OpResult<string>& result, RedisReplyBuilder* rb) {
341341
if (result) {
342342
const string& json_str = result.value();
343343
if (rb->IsResp3()) {
344-
std::optional<JsonType> parsed_json =
345-
JsonFromString(json_str, PMR_NS::get_default_resource());
344+
std::optional<JsonType> parsed_json = JsonFromString(json_str);
346345
if (parsed_json) {
347346
Send(parsed_json.value(), rb);
348347
return;
@@ -476,7 +475,7 @@ std::optional<std::string> ConvertJsonPathToJsonPointer(string_view json_path) {
476475
result before invoking SetJsonSize. Note that even after calling std::move on an optional, it may
477476
still hold the JSON value, which can lead to incorrect memory tracking. */
478477
std::optional<JsonType> ParseJSONFromString(std::string_view input) {
479-
return dfly::JsonFromString(input, CompactObj::memory_resource());
478+
return dfly::JsonFromString(input);
480479
}
481480

482481
OpStatus SetFullJson(const OpArgs& op_args, string_view key, string_view json_str) {
@@ -557,8 +556,7 @@ OpResult<bool> SetPartialJson(const OpArgs& op_args, string_view key,
557556
path_exists = true;
558557
if (!is_nx_condition) {
559558
value_was_set = true;
560-
*val = JsonType(parsed_json.value(),
561-
std::pmr::polymorphic_allocator<char>{CompactObj::memory_resource()});
559+
*val = JsonType(parsed_json.value(), JSONConsAllocator<char>{});
562560
}
563561
return {};
564562
};

src/server/json_family_memory_test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ size_t GetMemoryUsage() {
3737

3838
size_t GetJsonMemoryUsageFromString(std::string_view json_str) {
3939
size_t start = GetMemoryUsage();
40-
auto json = dfly::JsonFromString(json_str, JsonFamilyMemoryTest::GetMemoryResource());
40+
auto json = dfly::JsonFromString(json_str);
4141
if (!json) {
4242
return 0;
4343
}
@@ -111,7 +111,7 @@ TEST_F(JsonFamilyMemoryTest, JsonConsDelTest) {
111111

112112
size_t start = GetMemoryUsage();
113113

114-
auto json = dfly::JsonFromString(start_json, JsonFamilyMemoryTest::GetMemoryResource());
114+
auto json = dfly::JsonFromString(start_json);
115115
void* ptr =
116116
JsonFamilyMemoryTest::GetMemoryResource()->allocate(sizeof(JsonType), alignof(JsonType));
117117
JsonType* json_on_heap = new (ptr) JsonType(std::move(json).value());

src/server/rdb_load.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ void RdbLoaderBase::OpaqueObjLoader::HandleBlob(string_view blob) {
984984
} else if (rdb_type_ == RDB_TYPE_JSON) {
985985
size_t start_size = static_cast<MiMemoryResource*>(CompactObj::memory_resource())->used();
986986
{
987-
auto json = JsonFromString(blob, CompactObj::memory_resource());
987+
auto json = JsonFromString(blob);
988988
if (json) {
989989
pv_->SetJson(std::move(*json));
990990
} else {

0 commit comments

Comments
 (0)