Skip to content

Commit 5d00114

Browse files
Abigale Kimdavisp
authored andcommitted
Integrate std::prm memory tracking for class ArraySchemaEvolution. (TileDB-Inc#4736)
All member vector variables of the ArraySchemaEvolution class have PMR tracking. --- TYPE: NO_HISTORY DESC: Integrate std::prm memory tracking for class `ArraySchemaEvolution`.
1 parent 9163a77 commit 5d00114

File tree

9 files changed

+122
-49
lines changed

9 files changed

+122
-49
lines changed

test/src/unit-cppapi-schema-evolution.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,8 @@ TEST_CASE(
797797
TEST_CASE(
798798
"SchemaEvolution Error Handling Tests",
799799
"[cppapi][schema][evolution][errors]") {
800-
auto ase = make_shared<tiledb::sm::ArraySchemaEvolution>(HERE());
800+
auto ase = make_shared<tiledb::sm::ArraySchemaEvolution>(
801+
HERE(), tiledb::test::create_test_memory_tracker());
801802
REQUIRE_THROWS(ase->evolve_schema(nullptr));
802803
REQUIRE_THROWS(ase->add_attribute(nullptr));
803804

test/src/unit-enumerations.cc

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,7 +1581,7 @@ TEST_CASE_METHOD(
15811581
array->load_all_enumerations();
15821582

15831583
auto orig_schema = array->array_schema_latest_ptr();
1584-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1584+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
15851585
auto attr3 = make_shared<Attribute>(HERE(), "attr3", Datatype::UINT32);
15861586
ase->add_attribute(attr3);
15871587
CHECK_NOTHROW(ase->evolve_schema(orig_schema));
@@ -1593,7 +1593,7 @@ TEST_CASE_METHOD(
15931593
"[enumeration][array-schema-evolution][simple]") {
15941594
create_array();
15951595
auto orig_schema = get_array_schema_latest();
1596-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1596+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
15971597

15981598
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
15991599
auto enmr = create_enumeration(values);
@@ -1614,7 +1614,7 @@ TEST_CASE_METHOD(
16141614
"[enumeration][array-schema-evolution][drop-add]") {
16151615
create_array();
16161616
auto orig_schema = get_array_schema_latest();
1617-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1617+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
16181618

16191619
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
16201620
auto enmr = create_enumeration(values);
@@ -1635,7 +1635,7 @@ TEST_CASE_METHOD(
16351635
create_array();
16361636
auto orig_schema = get_array_schema_latest();
16371637

1638-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1638+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
16391639

16401640
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
16411641
auto enmr = create_enumeration(values);
@@ -1654,7 +1654,7 @@ TEST_CASE_METHOD(
16541654
"[enumeration][array-schema-evolution][enmr-to-add]") {
16551655
create_array();
16561656
auto orig_schema = get_array_schema_latest();
1657-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1657+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
16581658

16591659
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
16601660
auto enmr1 = create_enumeration(values);
@@ -1680,7 +1680,7 @@ TEST_CASE_METHOD(
16801680
REQUIRE(old_enmr != nullptr);
16811681
auto new_enmr = extend_enumeration(old_enmr, values_to_add);
16821682

1683-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1683+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
16841684
ase->extend_enumeration(new_enmr);
16851685
CHECK_NOTHROW(ase->evolve_schema(orig_schema));
16861686
}
@@ -1689,7 +1689,7 @@ TEST_CASE_METHOD(
16891689
EnumerationFx,
16901690
"ArraySchemaEvolution - Drop Enumeration",
16911691
"[enumeration][array-schema-evolution][enmr-to-drop]") {
1692-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1692+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
16931693
CHECK_NOTHROW(ase->drop_enumeration("test_enmr"));
16941694
}
16951695

@@ -1699,15 +1699,15 @@ TEST_CASE_METHOD(
16991699
"[enumeration][array-schema-evolution][enmr-to-drop]") {
17001700
create_array();
17011701
auto orig_schema = get_array_schema_latest();
1702-
auto ase1 = make_shared<ArraySchemaEvolution>(HERE());
1702+
auto ase1 = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17031703

17041704
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
17051705
auto enmr1 = create_enumeration(values, false, Datatype::UINT64, "enmr");
17061706
ase1->add_enumeration(enmr1);
17071707

17081708
auto new_schema = ase1->evolve_schema(orig_schema);
17091709

1710-
auto ase2 = make_shared<ArraySchemaEvolution>(HERE());
1710+
auto ase2 = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17111711
ase2->drop_enumeration("enmr");
17121712

17131713
CHECK_NOTHROW(ase2->evolve_schema(new_schema));
@@ -1717,7 +1717,7 @@ TEST_CASE_METHOD(
17171717
EnumerationFx,
17181718
"ArraySchemaEvolution - Drop Enumeration Repeated",
17191719
"[enumeration][array-schema-evolution][enmr-to-drop-repeated]") {
1720-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1720+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17211721
CHECK_NOTHROW(ase->drop_enumeration("test_enmr"));
17221722
CHECK_NOTHROW(ase->drop_enumeration("test_enmr"));
17231723
}
@@ -1726,7 +1726,7 @@ TEST_CASE_METHOD(
17261726
EnumerationFx,
17271727
"ArraySchemaEvolution - Drop Enumeration After Add",
17281728
"[enumeration][array-schema-evolution][enmr-add-drop]") {
1729-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1729+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17301730

17311731
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
17321732
auto enmr = create_enumeration(values, false, Datatype::UINT64, "enmr");
@@ -1741,7 +1741,7 @@ TEST_CASE_METHOD(
17411741
"ArraySchemaEvolution - Enumeration to Add - nullptr",
17421742
"[enumeration][array-schema-evolution][enmr-nullptr]") {
17431743
create_array();
1744-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1744+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17451745
REQUIRE_THROWS(ase->add_enumeration(nullptr));
17461746
}
17471747

@@ -1750,7 +1750,7 @@ TEST_CASE_METHOD(
17501750
"ArraySchemaEvolution - Enumeration to Add - Already Added",
17511751
"[enumeration][array-schema-evolution][enmr-already-added]") {
17521752
create_array();
1753-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1753+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17541754

17551755
std::vector<uint64_t> values{0, 1, 2, 3, 4, 1000};
17561756
auto enmr1 = create_enumeration(values, false, Datatype::UINT64, "enmr");
@@ -1764,7 +1764,7 @@ TEST_CASE_METHOD(
17641764
"ArraySchemaEvolution - Enumeration to Add - Missing Name",
17651765
"[enumeration][array-schema-evolution][missing-name]") {
17661766
create_array();
1767-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1767+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17681768
REQUIRE(ase->enumeration_to_add("foo") == nullptr);
17691769
}
17701770

@@ -1774,7 +1774,7 @@ TEST_CASE_METHOD(
17741774
"[enumeration][array-schema-evolution][enmr-still-in-use]") {
17751775
create_array();
17761776
auto orig_schema = get_array_schema_latest();
1777-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1777+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17781778
ase->drop_enumeration("test_enmr");
17791779

17801780
REQUIRE_THROWS(ase->evolve_schema(orig_schema));
@@ -1789,7 +1789,7 @@ TEST_CASE_METHOD(
17891789
auto attr3 = make_shared<Attribute>(HERE(), "attr3", Datatype::UINT32);
17901790
attr3->set_enumeration_name("test_enmr");
17911791

1792-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1792+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
17931793
ase->add_attribute(attr3);
17941794

17951795
auto orig_schema = get_array_schema_latest();
@@ -1810,7 +1810,7 @@ TEST_CASE_METHOD(
18101810
auto attr3 = make_shared<Attribute>(HERE(), "attr3", Datatype::INT8);
18111811
attr3->set_enumeration_name("big_enmr");
18121812

1813-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1813+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
18141814
ase->add_enumeration(enmr);
18151815
ase->add_attribute(attr3);
18161816

@@ -1832,7 +1832,7 @@ TEST_CASE_METHOD(
18321832
auto attr3 = make_shared<Attribute>(HERE(), "attr3", Datatype::UINT8);
18331833
attr3->set_enumeration_name("big_enmr");
18341834

1835-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1835+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
18361836
ase->add_enumeration(enmr);
18371837
ase->add_attribute(attr3);
18381838

@@ -1844,7 +1844,7 @@ TEST_CASE_METHOD(
18441844
EnumerationFx,
18451845
"ArraySchemaEvolution - Extend Enumeration nullptr",
18461846
"[enumeration][array-schema-evolution][extend][error]") {
1847-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1847+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
18481848
auto matcher = Catch::Matchers::ContainsSubstring(
18491849
"Cannot extend enumeration; Input enumeration is null");
18501850
REQUIRE_THROWS_WITH(ase->extend_enumeration(nullptr), matcher);
@@ -1854,7 +1854,7 @@ TEST_CASE_METHOD(
18541854
EnumerationFx,
18551855
"ArraySchemaEvolution - Extend Enumeration Already Extended",
18561856
"[enumeration][array-schema-evolution][extend][error]") {
1857-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
1857+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
18581858
std::vector<int> values = {1, 2, 3, 4, 5};
18591859
auto enmr = create_enumeration(values);
18601860
auto matcher = Catch::Matchers::ContainsSubstring(
@@ -2007,7 +2007,7 @@ TEST_CASE_METHOD(
20072007
auto old_enmr = schema->get_enumeration("test_enmr");
20082008
auto new_enmr = extend_enumeration(old_enmr, values_to_add);
20092009

2010-
auto ase = make_shared<ArraySchemaEvolution>(HERE());
2010+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
20112011
ase->extend_enumeration(new_enmr);
20122012
auto st = ctx_.storage_manager()->array_evolve_schema(
20132013
array->array_uri(), ase.get(), array->get_encryption_key());
@@ -2261,7 +2261,7 @@ TEST_CASE_METHOD(
22612261
auto attr = make_shared<Attribute>(HERE(), "ohai", Datatype::INT64);
22622262
attr->set_enumeration_name("enmr2");
22632263

2264-
ArraySchemaEvolution ase1;
2264+
ArraySchemaEvolution ase1(memory_tracker_);
22652265
ase1.add_attribute(attr);
22662266
ase1.add_enumeration(enmr1);
22672267
ase1.add_enumeration(enmr2);
@@ -2295,7 +2295,7 @@ TEST_CASE_METHOD(
22952295
std::vector<double> values2 = {1.0, 2.0, 3.0, 4.0, 5.0};
22962296
auto enmr2 = create_enumeration(values2, true, Datatype::FLOAT64, "enmr2");
22972297

2298-
ArraySchemaEvolution ase1;
2298+
ArraySchemaEvolution ase1(memory_tracker_);
22992299
ase1.extend_enumeration(enmr1);
23002300
ase1.extend_enumeration(enmr2);
23012301

@@ -2495,6 +2495,7 @@ EnumerationFx::EnumerationFx()
24952495
, memory_tracker_(tiledb::test::create_test_memory_tracker()) {
24962496
rm_array();
24972497
throw_if_not_ok(enc_key_.set_key(EncryptionType::NO_ENCRYPTION, nullptr, 0));
2498+
memory_tracker_ = tiledb::test::create_test_memory_tracker();
24982499
}
24992500

25002501
EnumerationFx::~EnumerationFx() {
@@ -2841,8 +2842,8 @@ shared_ptr<ArraySchemaEvolution> EnumerationFx::ser_des_array_schema_evolution(
28412842
ase, stype, &buf, client_side));
28422843

28432844
ArraySchemaEvolution* ret;
2844-
throw_if_not_ok(
2845-
serialization::array_schema_evolution_deserialize(&ret, stype, buf));
2845+
throw_if_not_ok(serialization::array_schema_evolution_deserialize(
2846+
&ret, stype, buf, memory_tracker_));
28462847

28472848
return shared_ptr<ArraySchemaEvolution>(ret);
28482849
}

tiledb/common/memory_tracker.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ std::string memory_type_to_str(MemoryType type) {
6868
return "TileMinVals";
6969
case MemoryType::TILE_NULL_COUNTS:
7070
return "TileNullCounts";
71+
case MemoryType::ATTRIBUTES:
72+
return "Attributes";
73+
case MemoryType::DIMENSION_LABELS:
74+
return "DimensionLabels";
75+
case MemoryType::DIMENSIONS:
76+
return "Dimensions";
7177
case MemoryType::TILE_SUMS:
7278
return "TileSums";
7379
case MemoryType::TILE_WRITER_DATA:
@@ -82,16 +88,28 @@ std::string memory_tracker_type_to_str(MemoryTrackerType type) {
8288
switch (type) {
8389
case MemoryTrackerType::ANONYMOUS:
8490
return "Anonymous";
91+
case MemoryTrackerType::ARRAY_CREATE:
92+
return "ArrayCreate";
93+
case MemoryTrackerType::ARRAY_LOAD:
94+
return "ArrayLoad";
8595
case MemoryTrackerType::ARRAY_READ:
8696
return "ArrayRead";
8797
case MemoryTrackerType::ARRAY_WRITE:
8898
return "ArrayWrite";
99+
case MemoryTrackerType::FRAGMENT_INFO_LOAD:
100+
return "FragmentInfoLoad";
89101
case MemoryTrackerType::QUERY_READ:
90102
return "QueryRead";
91103
case MemoryTrackerType::QUERY_WRITE:
92104
return "QueryWrite";
93105
case MemoryTrackerType::CONSOLIDATOR:
94106
return "Consolidator";
107+
case MemoryTrackerType::REST_CLIENT:
108+
return "RestClient";
109+
case MemoryTrackerType::EPHEMERAL:
110+
return "Ephemeral";
111+
case MemoryTrackerType::SCHEMA_EVOLUTION:
112+
return "SchemaEvolution";
95113
default:
96114
auto val = std::to_string(static_cast<uint32_t>(type));
97115
throw std::logic_error("Invalid memory tracker type: " + val);

tiledb/common/memory_tracker.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ enum class MemoryTrackerType {
131131
QUERY_WRITE,
132132
CONSOLIDATOR,
133133
REST_CLIENT,
134-
EPHEMERAL
134+
EPHEMERAL,
135+
SCHEMA_EVOLUTION
135136
};
136137

137138
class MemoryTrackerResource : public tdb::pmr::memory_resource {

tiledb/sm/array_schema/array_schema_evolution.cc

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "tiledb/common/common.h"
3636
#include "tiledb/common/heap_memory.h"
3737
#include "tiledb/common/logger.h"
38+
#include "tiledb/common/memory_tracker.h"
3839
#include "tiledb/common/status.h"
3940
#include "tiledb/sm/array_schema/array_schema.h"
4041
#include "tiledb/sm/array_schema/attribute.h"
@@ -71,7 +72,15 @@ class ArraySchemaEvolutionException : public StatusException {
7172
/* CONSTRUCTORS & DESTRUCTORS */
7273
/* ****************************** */
7374

74-
ArraySchemaEvolution::ArraySchemaEvolution() {
75+
ArraySchemaEvolution::ArraySchemaEvolution(
76+
shared_ptr<MemoryTracker> memory_tracker)
77+
: memory_tracker_(memory_tracker)
78+
, attributes_to_add_map_(
79+
memory_tracker->get_resource(MemoryType::ATTRIBUTES))
80+
, enumerations_to_add_map_(
81+
memory_tracker_->get_resource(MemoryType::ENUMERATION))
82+
, enumerations_to_extend_map_(
83+
memory_tracker_->get_resource(MemoryType::ENUMERATION)) {
7584
}
7685

7786
ArraySchemaEvolution::ArraySchemaEvolution(
@@ -81,13 +90,29 @@ ArraySchemaEvolution::ArraySchemaEvolution(
8190
std::unordered_map<std::string, shared_ptr<const Enumeration>>
8291
enmrs_to_extend,
8392
std::unordered_set<std::string> enmrs_to_drop,
84-
std::pair<uint64_t, uint64_t> timestamp_range)
85-
: attributes_to_add_map_(attrs_to_add)
93+
std::pair<uint64_t, uint64_t> timestamp_range,
94+
shared_ptr<MemoryTracker> memory_tracker)
95+
: memory_tracker_(memory_tracker)
96+
, attributes_to_add_map_(
97+
memory_tracker->get_resource(MemoryType::ATTRIBUTES))
8698
, attributes_to_drop_(attrs_to_drop)
87-
, enumerations_to_add_map_(enmrs_to_add)
88-
, enumerations_to_extend_map_(enmrs_to_extend)
99+
, enumerations_to_add_map_(
100+
memory_tracker_->get_resource(MemoryType::ENUMERATION))
101+
, enumerations_to_extend_map_(
102+
memory_tracker_->get_resource(MemoryType::ENUMERATION))
89103
, enumerations_to_drop_(enmrs_to_drop)
90104
, timestamp_range_(timestamp_range) {
105+
for (auto& elem : attrs_to_add) {
106+
attributes_to_add_map_.insert(elem);
107+
}
108+
109+
for (auto& elem : enmrs_to_add) {
110+
enumerations_to_add_map_.insert(elem);
111+
}
112+
113+
for (auto& elem : enmrs_to_extend) {
114+
enumerations_to_extend_map_.insert(elem);
115+
}
91116
}
92117

93118
ArraySchemaEvolution::~ArraySchemaEvolution() {

0 commit comments

Comments
 (0)