You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/01/07 00:57:09 UTC
[iotdb] branch rel/0.12 updated: [To rel/0.12][IOTDB-2282] fix tag recover bug after tag update (#4717)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new 37b0207 [To rel/0.12][IOTDB-2282] fix tag recover bug after tag update (#4717)
37b0207 is described below
commit 37b0207b5efa5bbc6be0c30c088b23770ccb3395
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Fri Jan 7 08:55:06 2022 +0800
[To rel/0.12][IOTDB-2282] fix tag recover bug after tag update (#4717)
---
.../org/apache/iotdb/db/metadata/MManager.java | 12 ++++-
.../iotdb/db/metadata/MManagerBasicTest.java | 61 ++++++++++++++++++++++
2 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 089511d..4c66193 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -399,9 +399,17 @@ public class MManager {
plan.getAlias());
// update tag index
- if (plan.getTags() != null) {
+ Map<String, String> tagMap = null;
+ if (offset != -1) {
+ // offset != -1 means the timeseries has already been created and now system is recovering
+ tagMap = tagLogFile.readTag(config.getTagAttributeTotalSize(), offset);
+ } else if (plan.getTags() != null) {
+ // the tags only in plan means creating timeseries
+ tagMap = plan.getTags();
+ }
+ if (tagMap != null) {
// tag key, tag value
- for (Entry<String, String> entry : plan.getTags().entrySet()) {
+ for (Entry<String, String> entry : tagMap.entrySet()) {
if (entry.getKey() == null || entry.getValue() == null) {
continue;
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 4d30bab..a05b7cc 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -48,8 +48,10 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
@@ -1355,4 +1357,63 @@ public class MManagerBasicTest {
Assert.assertFalse(manager.isPathExist(new PartialPath("root.a.d")));
}
}
+
+ @Test
+ public void testTagIndexRecovery() throws Exception {
+ MManager manager = IoTDB.metaManager;
+ PartialPath path = new PartialPath("root.sg.d.s");
+ Map<String, String> tags = new HashMap<>();
+ tags.put("description", "oldValue");
+ manager.createTimeseries(
+ new CreateTimeSeriesPlan(
+ path,
+ TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"),
+ compressionType,
+ null,
+ tags,
+ null,
+ null));
+
+ ShowTimeSeriesPlan showTimeSeriesPlan =
+ new ShowTimeSeriesPlan(
+ new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false);
+ List<ShowTimeSeriesResult> results =
+ manager.showTimeseries(showTimeSeriesPlan, new QueryContext());
+
+ assertEquals(1, results.size());
+ Map<String, String> resultTag = results.get(0).getTag();
+ assertEquals("oldValue", resultTag.get("description"));
+
+ tags.put("description", "newValue");
+ manager.upsertTagsAndAttributes(null, tags, null, path);
+
+ showTimeSeriesPlan =
+ new ShowTimeSeriesPlan(
+ new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false);
+ results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext());
+
+ assertEquals(1, results.size());
+ resultTag = results.get(0).getTag();
+ assertEquals("newValue", resultTag.get("description"));
+
+ manager.clear();
+ manager.init();
+
+ showTimeSeriesPlan =
+ new ShowTimeSeriesPlan(
+ new PartialPath("root.sg.d.s"), true, "description", "oldValue", 0, 0, false);
+ results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext());
+
+ assertEquals(0, results.size());
+
+ showTimeSeriesPlan =
+ new ShowTimeSeriesPlan(
+ new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false);
+ results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext());
+
+ assertEquals(1, results.size());
+ resultTag = results.get(0).getTag();
+ assertEquals("newValue", resultTag.get("description"));
+ }
}