This is an automated email from the ASF dual-hosted git repository. hxd pushed a commit to branch ut_close_socket in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 4c81b0c930cedbdd8b11730b245983072fb62ba2 Author: xiangdong huang <[email protected]> AuthorDate: Tue Feb 18 13:56:52 2020 +0800 fix activeTimeseries null pointer --- .../db/conf/adapter/ActiveTimeSeriesCounter.java | 19 ++++++++++++++++--- .../db/writelog/recover/SeqTsFileRecoverTest.java | 5 +++-- .../java/org/apache/iotdb/session/IoTDBSessionIT.java | 12 +++++++----- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/conf/adapter/ActiveTimeSeriesCounter.java b/server/src/main/java/org/apache/iotdb/db/conf/adapter/ActiveTimeSeriesCounter.java index 9ed72ce..7251924 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/adapter/ActiveTimeSeriesCounter.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/adapter/ActiveTimeSeriesCounter.java @@ -62,10 +62,16 @@ public class ActiveTimeSeriesCounter implements IActiveTimeSeriesCounter { public void offer(String storageGroup, String device, String measurement) { String path = device + IoTDBConstant.PATH_SEPARATOR + measurement; try { - storageGroupHllMap.get(storageGroup).offer(path); + HyperLogLog log = storageGroupHllMap.get(storageGroup); + if (log != null) { + log.offer(path); + } else { + LOGGER.warn( + "Unknown SG {} is calling HyperLogLog.offer(). It can be ignored the sg is deleted recently", + storageGroup); + } } catch (Exception e) { - storageGroupHllMap.putIfAbsent(storageGroup, new HyperLogLog(LOG2M)); - storageGroupHllMap.get(storageGroup).offer(path); + //we do not register it if there is no the storage group. LOGGER.error("Storage group {} registers active time series {} failed", storageGroup, path, e); } @@ -75,6 +81,13 @@ public class ActiveTimeSeriesCounter implements IActiveTimeSeriesCounter { public void updateActiveRatio(String storageGroup) { lock.writeLock().lock(); try { + HyperLogLog log = storageGroupHllMap.get(storageGroup); + if (log == null) { + LOGGER.warn( + "Unknown SG {} is calling updateActiveRatio. It can be ignored the sg is deleted recently", + storageGroup); + return; + } long activeTimeSeriesNum = storageGroupHllMap.get(storageGroup).cardinality(); if (activeTimeSeriesNum != activeTimeSeriesNumMap.get(storageGroup)) { // update the active time series number in the newest memtable to be flushed diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java index eb6906c..95413d4 100644 --- a/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java +++ b/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java @@ -64,6 +64,7 @@ public class SeqTsFileRecoverTest { private TsFileWriter writer; private WriteLogNode node; private String logNodePrefix = "testNode/0"; + private String storageGroup = "testNode"; private Schema schema; private TsFileResource resource; private VersionController versionController = new VersionController() { @@ -142,7 +143,7 @@ public class SeqTsFileRecoverTest { public void testNonLastRecovery() throws StorageGroupProcessorException, IOException { TsFileRecoverPerformer performer = new TsFileRecoverPerformer(logNodePrefix, schema, versionController, resource, true, false); - ActiveTimeSeriesCounter.getInstance().init(logNodePrefix); + ActiveTimeSeriesCounter.getInstance().init(storageGroup); RestorableTsFileIOWriter writer = performer.recover(); assertFalse(writer.canWrite()); @@ -191,7 +192,7 @@ public class SeqTsFileRecoverTest { public void testLastRecovery() throws StorageGroupProcessorException, IOException { TsFileRecoverPerformer performer = new TsFileRecoverPerformer(logNodePrefix, schema, versionController, resource, true, true); - ActiveTimeSeriesCounter.getInstance().init(logNodePrefix); + ActiveTimeSeriesCounter.getInstance().init(storageGroup); RestorableTsFileIOWriter writer = performer.recover(); assertTrue(writer.canWrite()); writer.endFile(schema); diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java index acc936b..b1aef0d 100644 --- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java +++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java @@ -43,6 +43,8 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class IoTDBSessionIT { @@ -203,10 +205,12 @@ public class IoTDBSessionIT { session.setStorageGroup("root.sg1"); createTimeseries(); + insert(); // sql test insert_via_sql(); + query3(); // insertRowBatchTest1(); @@ -221,7 +225,6 @@ public class IoTDBSessionIT { insertInBatch(); query4(); - // Add another storage group to test the deletion of storage group session.setStorageGroup("root.sg2"); session.createTimeseries("root.sg2.d1.s1", TSDataType.INT64, TSEncoding.RLE, @@ -764,7 +767,6 @@ public class IoTDBSessionIT { int errorCount = 0; while (resultSet.next()) { long curTime = resultSet.getLong(1); - System.out.println(curTime); if (beforeTime < curTime) { beforeTime = curTime; } else { @@ -804,9 +806,9 @@ public class IoTDBSessionIT { int count = 0; while (resultSet.next()) { for (int i = 1; i <= colCount; i++) { - if (i == 1) { - System.out.println(resultSet.getString("Time")); - } +// if (i == 1) { +// System.out.println(resultSet.getString("Time")); +// } count++; } }
