You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2020/02/18 05:57:31 UTC
[incubator-iotdb] 01/02: fix activeTimeseries null pointer
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 <sa...@gmail.com>
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++;
}
}