Skip to content

Commit 678ffa4

Browse files
committed
Filter invalid jar reference counts in snapshots
1 parent e340b75 commit 678ffa4

2 files changed

Lines changed: 38 additions & 6 deletions

File tree

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/executable/ReferenceCountedJarMetaKeeper.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,23 @@ public synchronized void deserializeJarNameToMd5(final InputStream inputStream)
9898

9999
public synchronized void serializeJarNameToMd5AndReferenceCount(final OutputStream outputStream)
100100
throws IOException {
101-
ReadWriteIOUtils.write(jarNameToMd5Map.size(), outputStream);
102-
for (final Map.Entry<String, String> entry : jarNameToMd5Map.entrySet()) {
101+
int size = 0;
102+
for (final Map.Entry<String, Integer> entry : jarNameToReferenceCountMap.entrySet()) {
103+
if (entry.getValue() > 0 && jarNameToMd5Map.containsKey(entry.getKey())) {
104+
size++;
105+
}
106+
}
107+
108+
ReadWriteIOUtils.write(size, outputStream);
109+
for (final Map.Entry<String, Integer> entry : jarNameToReferenceCountMap.entrySet()) {
103110
final String jarName = entry.getKey();
111+
final int referenceCount = entry.getValue();
112+
if (referenceCount <= 0 || !jarNameToMd5Map.containsKey(jarName)) {
113+
continue;
114+
}
104115
ReadWriteIOUtils.write(jarName, outputStream);
105-
ReadWriteIOUtils.write(entry.getValue(), outputStream);
106-
ReadWriteIOUtils.write(jarNameToReferenceCountMap.getOrDefault(jarName, 0), outputStream);
116+
ReadWriteIOUtils.write(jarNameToMd5Map.get(jarName), outputStream);
117+
ReadWriteIOUtils.write(referenceCount, outputStream);
107118
}
108119
}
109120

@@ -114,8 +125,12 @@ public synchronized void deserializeJarNameToMd5AndReferenceCount(final InputStr
114125
final int jarSize = ReadWriteIOUtils.readInt(inputStream);
115126
for (int i = 0; i < jarSize; i++) {
116127
final String jarName = ReadWriteIOUtils.readString(inputStream);
117-
jarNameToMd5Map.put(jarName, ReadWriteIOUtils.readString(inputStream));
118-
jarNameToReferenceCountMap.put(jarName, ReadWriteIOUtils.readInt(inputStream));
128+
final String md5 = ReadWriteIOUtils.readString(inputStream);
129+
final int referenceCount = ReadWriteIOUtils.readInt(inputStream);
130+
if (referenceCount > 0) {
131+
jarNameToMd5Map.put(jarName, md5);
132+
jarNameToReferenceCountMap.put(jarName, referenceCount);
133+
}
119134
}
120135
}
121136
}

iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/executable/ReferenceCountedJarMetaKeeperTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.apache.iotdb.commons.executable;
2121

22+
import org.apache.tsfile.utils.ReadWriteIOUtils;
2223
import org.junit.Assert;
2324
import org.junit.Test;
2425

@@ -83,6 +84,22 @@ public void testJarNameToMd5AndReferenceCountSnapshot() throws IOException {
8384
Assert.assertFalse(loaded.containsJar(JAR_NAME));
8485
}
8586

87+
@Test
88+
public void testDeserializeJarNameToMd5AndReferenceCountSkipsZeroReferenceCount()
89+
throws IOException {
90+
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
91+
ReadWriteIOUtils.write(1, outputStream);
92+
ReadWriteIOUtils.write(JAR_NAME, outputStream);
93+
ReadWriteIOUtils.write(MD5, outputStream);
94+
ReadWriteIOUtils.write(0, outputStream);
95+
96+
final ReferenceCountedJarMetaKeeper loaded = new ReferenceCountedJarMetaKeeper();
97+
loaded.deserializeJarNameToMd5AndReferenceCount(
98+
new ByteArrayInputStream(outputStream.toByteArray()));
99+
100+
Assert.assertFalse(loaded.containsJar(JAR_NAME));
101+
}
102+
86103
private ByteArrayOutputStream serializeJarNameToMd5(final ReferenceCountedJarMetaKeeper keeper)
87104
throws IOException {
88105
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

0 commit comments

Comments
 (0)