Skip to content

Commit c4904c7

Browse files
committed
fix: Refines memory computation of AbstractTraverseDevice and its subclasses
1 parent a6554c9 commit c4904c7

File tree

22 files changed

+248
-26
lines changed

22 files changed

+248
-26
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
3232

3333
import org.apache.tsfile.read.common.block.TsBlock;
34+
import org.apache.tsfile.utils.RamUsageEstimator;
3435

3536
import java.util.ArrayList;
3637
import java.util.HashMap;
@@ -42,6 +43,9 @@
4243

4344
public abstract class AbstractQueryDeviceWithCache extends AbstractTraverseDevice {
4445

46+
private static final long INSTANCE_SIZE =
47+
RamUsageEstimator.shallowSizeOfInstance(AbstractQueryDeviceWithCache.class);
48+
4549
// For query devices fully in cache
4650
protected List<ShowDevicesResult> results = new ArrayList<>();
4751

@@ -111,4 +115,21 @@ public static List<ColumnHeader> getDeviceColumnHeaderList(
111115
public abstract DatasetHeader getDataSetHeader();
112116

113117
public abstract TsBlock getTsBlock(final Analysis analysis);
118+
119+
@Override
120+
public long ramBytesUsed() {
121+
return INSTANCE_SIZE + ramBytesUsedForCommonFields();
122+
}
123+
124+
@Override
125+
protected long ramBytesUsedForCommonFields() {
126+
long size = super.ramBytesUsedForCommonFields();
127+
if (results != null) {
128+
size += RamUsageEstimator.shallowSizeOf(results);
129+
for (ShowDevicesResult result : results) {
130+
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(result);
131+
}
132+
}
133+
return size;
134+
}
114135
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@
4747
// Show, Count, Update, Delete Devices
4848
public abstract class AbstractTraverseDevice extends Statement {
4949

50+
private static final long INSTANCE_SIZE =
51+
RamUsageEstimator.shallowSizeOfInstance(AbstractTraverseDevice.class);
52+
5053
protected String database;
5154

5255
protected String tableName;
@@ -247,6 +250,11 @@ protected String toStringContent() {
247250
+ '}';
248251
}
249252

253+
@Override
254+
public long ramBytesUsed() {
255+
return INSTANCE_SIZE + ramBytesUsedForCommonFields();
256+
}
257+
250258
protected long ramBytesUsedForCommonFields() {
251259
long size = 0;
252260
size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal());
@@ -255,6 +263,30 @@ protected long ramBytesUsedForCommonFields() {
255263
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(tagFuzzyPredicate);
256264
size += RamUsageEstimator.sizeOf(database);
257265
size += RamUsageEstimator.sizeOf(tableName);
266+
if (tagDeterminedFilterList != null) {
267+
size += RamUsageEstimator.shallowSizeOf(tagDeterminedFilterList);
268+
for (List<SchemaFilter> filters : tagDeterminedFilterList) {
269+
if (filters != null) {
270+
size += RamUsageEstimator.shallowSizeOf(filters);
271+
for (SchemaFilter filter : filters) {
272+
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(filter);
273+
}
274+
}
275+
}
276+
}
277+
if (columnHeaderList != null) {
278+
size += RamUsageEstimator.shallowSizeOf(columnHeaderList);
279+
for (ColumnHeader header : columnHeaderList) {
280+
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(header);
281+
}
282+
}
283+
size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(attributeColumns);
284+
if (partitionKeyList != null) {
285+
size += RamUsageEstimator.shallowSizeOf(partitionKeyList);
286+
for (IDeviceID deviceID : partitionKeyList) {
287+
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(deviceID);
288+
}
289+
}
258290
return size;
259291
}
260292
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -256,15 +256,7 @@ public String toString() {
256256
@Override
257257
public long ramBytesUsed() {
258258
long size = INSTANCE_SIZE;
259-
size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal());
260-
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(table);
261-
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where);
262-
size += RamUsageEstimator.sizeOf(database);
263-
size += RamUsageEstimator.sizeOf(tableName);
264-
size += RamUsageEstimator.shallowSizeOf(tagDeterminedFilterList);
265-
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(tagFuzzyPredicate);
266-
size += RamUsageEstimator.shallowSizeOf(columnHeaderList);
267-
size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(getAttributeColumns());
259+
size += ramBytesUsedForCommonFields();
268260
if (modEntries != null) {
269261
size += RamUsageEstimator.shallowSizeOf(modEntries);
270262
for (TableDeletionEntry entry : modEntries) {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
2626
import org.apache.iotdb.db.queryengine.execution.operator.schema.source.TableDeviceQuerySource;
2727
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
28-
import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.impl.ShowDevicesResult;
2928
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
3029

3130
import org.apache.tsfile.enums.TSDataType;
@@ -147,19 +146,9 @@ public String toString() {
147146

148147
@Override
149148
public long ramBytesUsed() {
150-
long size = INSTANCE_SIZE;
151-
size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal());
152-
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset);
153-
size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit);
154-
// AbstractQueryDeviceWithCache fields
155-
if (results != null) {
156-
size += RamUsageEstimator.shallowSizeOf(results);
157-
for (ShowDevicesResult result : results) {
158-
if (result != null) {
159-
size += result.ramBytesUsed();
160-
}
161-
}
162-
}
163-
return size;
149+
return INSTANCE_SIZE
150+
+ ramBytesUsedForCommonFields()
151+
+ AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset)
152+
+ AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit);
164153
}
165154
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeader.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,18 @@
2020
package org.apache.iotdb.commons.schema.column;
2121

2222
import org.apache.tsfile.enums.TSDataType;
23+
import org.apache.tsfile.utils.Accountable;
24+
import org.apache.tsfile.utils.RamUsageEstimator;
2325
import org.apache.tsfile.utils.ReadWriteIOUtils;
2426

2527
import java.io.DataOutputStream;
2628
import java.io.IOException;
2729
import java.nio.ByteBuffer;
2830
import java.util.Objects;
2931

30-
public class ColumnHeader {
32+
public class ColumnHeader implements Accountable {
33+
private static final long INSTANCE_SIZE =
34+
RamUsageEstimator.shallowSizeOfInstance(ColumnHeader.class);
3135

3236
private final String columnName;
3337
private final TSDataType dataType;
@@ -119,4 +123,12 @@ public boolean equals(Object o) {
119123
public int hashCode() {
120124
return Objects.hash(columnName, dataType, alias);
121125
}
126+
127+
@Override
128+
public long ramBytesUsed() {
129+
long size = INSTANCE_SIZE;
130+
size += RamUsageEstimator.sizeOf(columnName);
131+
size += RamUsageEstimator.sizeOf(alias);
132+
return size;
133+
}
122134
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.iotdb.commons.schema.filter.impl.values.LikeFilter;
3434
import org.apache.iotdb.commons.schema.filter.impl.values.PreciseFilter;
3535

36+
import org.apache.tsfile.utils.Accountable;
3637
import org.apache.tsfile.utils.ReadWriteIOUtils;
3738

3839
import java.io.DataOutputStream;
@@ -41,7 +42,7 @@
4142
import java.util.ArrayList;
4243
import java.util.List;
4344

44-
public abstract class SchemaFilter {
45+
public abstract class SchemaFilter implements Accountable {
4546

4647
public static void serialize(final SchemaFilter schemaFilter, final ByteBuffer byteBuffer) {
4748
if (schemaFilter == null) {

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/DataTypeFilter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor;
2525

2626
import org.apache.tsfile.enums.TSDataType;
27+
import org.apache.tsfile.utils.RamUsageEstimator;
2728

2829
import java.io.DataOutputStream;
2930
import java.io.IOException;
@@ -32,6 +33,9 @@
3233

3334
public class DataTypeFilter extends SchemaFilter {
3435

36+
private static final long INSTANCE_SIZE =
37+
RamUsageEstimator.shallowSizeOfInstance(DataTypeFilter.class);
38+
3539
private final TSDataType dataType;
3640

3741
public DataTypeFilter(final TSDataType dataType) {
@@ -82,4 +86,9 @@ public boolean equals(final Object o) {
8286
public int hashCode() {
8387
return Objects.hash(dataType);
8488
}
89+
90+
@Override
91+
public long ramBytesUsed() {
92+
return INSTANCE_SIZE;
93+
}
8594
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/PathContainsFilter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.iotdb.commons.schema.filter.SchemaFilterType;
2424
import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor;
2525

26+
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.ReadWriteIOUtils;
2728

2829
import java.io.DataOutputStream;
@@ -31,6 +32,10 @@
3132
import java.util.Objects;
3233

3334
public class PathContainsFilter extends SchemaFilter {
35+
36+
private static final long INSTANCE_SIZE =
37+
RamUsageEstimator.shallowSizeOfInstance(PathContainsFilter.class);
38+
3439
private final String containString;
3540

3641
public PathContainsFilter(final String containString) {
@@ -81,4 +86,9 @@ public boolean equals(final Object o) {
8186
public int hashCode() {
8287
return Objects.hash(containString);
8388
}
89+
90+
@Override
91+
public long ramBytesUsed() {
92+
return INSTANCE_SIZE + RamUsageEstimator.sizeOf(containString);
93+
}
8494
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TagFilter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.iotdb.commons.schema.filter.SchemaFilterType;
2424
import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor;
2525

26+
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.ReadWriteIOUtils;
2728

2829
import java.io.DataOutputStream;
@@ -32,6 +33,9 @@
3233

3334
public class TagFilter extends SchemaFilter {
3435

36+
private static final long INSTANCE_SIZE =
37+
RamUsageEstimator.shallowSizeOfInstance(TagFilter.class);
38+
3539
private final String key;
3640
private final String value;
3741
private final boolean isContains;
@@ -102,4 +106,9 @@ public boolean equals(final Object o) {
102106
public int hashCode() {
103107
return Objects.hash(key, value, isContains);
104108
}
109+
110+
@Override
111+
public long ramBytesUsed() {
112+
return INSTANCE_SIZE + RamUsageEstimator.sizeOf(key) + RamUsageEstimator.sizeOf(value);
113+
}
105114
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TemplateFilter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.iotdb.commons.schema.filter.SchemaFilterType;
2323
import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor;
2424

25+
import org.apache.tsfile.utils.RamUsageEstimator;
2526
import org.apache.tsfile.utils.ReadWriteIOUtils;
2627

2728
import java.io.DataOutputStream;
@@ -30,6 +31,10 @@
3031
import java.util.Objects;
3132

3233
public class TemplateFilter extends SchemaFilter {
34+
35+
private static final long INSTANCE_SIZE =
36+
RamUsageEstimator.shallowSizeOfInstance(TemplateFilter.class);
37+
3338
private final String templateName;
3439
private final boolean isEqual;
3540

@@ -89,4 +94,9 @@ public boolean equals(final Object o) {
8994
public int hashCode() {
9095
return Objects.hash(templateName, isEqual);
9196
}
97+
98+
@Override
99+
public long ramBytesUsed() {
100+
return INSTANCE_SIZE + RamUsageEstimator.sizeOf(templateName);
101+
}
92102
}

0 commit comments

Comments
 (0)