Skip to content

Commit 6c8aba3

Browse files
committed
Fix PBTree schema statistics release race
1 parent 48cb670 commit 6c8aba3

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/memory/ReleaseFlushMonitor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public List<Integer> getRegionsToFlush(long windowsEndTime) {
230230
public void forceFlushAndRelease() {
231231
boolean needFlush;
232232
while (true) {
233+
waitUntilWorkerTasksDone();
233234
needFlush = false;
234235
for (CachedMTreeStore store : regionToStoreMap.values()) {
235236
if (store.getMemoryManager().getBufferNodeNum() > 0) {
@@ -239,15 +240,29 @@ public void forceFlushAndRelease() {
239240
}
240241
if (needFlush) {
241242
scheduler.scheduleFlushAll().join();
243+
waitUntilWorkerTasksDone();
242244
scheduler.scheduleRelease(true);
243245
} else {
244246
// No volatile nodes left, but clean unpinned cache may still remain after previous flushes.
245247
scheduler.scheduleRelease(true);
248+
waitUntilWorkerTasksDone();
246249
break;
247250
}
248251
}
249252
}
250253

254+
@TestOnly
255+
private void waitUntilWorkerTasksDone() {
256+
while (scheduler.getActiveWorkerNum() > 0 || !flushingRegionSet.isEmpty()) {
257+
try {
258+
Thread.sleep(10);
259+
} catch (InterruptedException e) {
260+
Thread.currentThread().interrupt();
261+
return;
262+
}
263+
}
264+
}
265+
251266
public void clear() {
252267
if (releaseMonitor != null) {
253268
releaseMonitor.shutdownNow();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/traverser/Traverser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ private N getChild(N parent, String childName, boolean skipTemplateChildren)
184184
&& skipPreDeletedSchema
185185
&& child.isMeasurement()
186186
&& child.getAsMeasurementMNode().isPreDeleted()) {
187+
releaseNode(child);
187188
child = null;
188189
}
189190
}

0 commit comments

Comments
 (0)