You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/03/18 04:00:47 UTC

[incubator-iotdb] branch master updated: Fix bugs of deleting sg and initing from mlog (#921)

This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new f94d326  Fix bugs of deleting sg and initing from mlog (#921)
f94d326 is described below

commit f94d326fe62ec7f8ac8ee6121df25009b104b762
Author: Tianan Li <li...@163.com>
AuthorDate: Wed Mar 18 12:00:37 2020 +0800

    Fix bugs of deleting sg and initing from mlog (#921)
    
    * catch each mlog when redo, record mlog after execution
---
 .../org/apache/iotdb/db/metadata/MManager.java     | 46 ++++++++++------------
 1 file changed, 20 insertions(+), 26 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 94a382f..85f83c2 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
@@ -40,6 +40,7 @@ import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.adapter.ActiveTimeSeriesCounter;
 import org.apache.iotdb.db.conf.adapter.IoTDBConfigDynamicAdapter;
+import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.exception.ConfigAdjusterException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
@@ -160,7 +161,7 @@ public class MManager {
     initialized = true;
   }
 
-  private void initFromLog(File logFile) throws IOException, MetadataException {
+  private void initFromLog(File logFile) throws IOException {
     // init the metadata from the operation log
     mtree = new MTree();
     if (logFile.exists()) {
@@ -168,7 +169,11 @@ public class MManager {
           BufferedReader br = new BufferedReader(fr)) {
         String cmd;
         while ((cmd = br.readLine()) != null) {
-          operation(cmd);
+          try {
+            operation(cmd);
+          } catch (Exception e) {
+            logger.error("Can not operate cmd {}", cmd, e);
+          }
         }
       }
     }
@@ -216,7 +221,9 @@ public class MManager {
             props);
         break;
       case MetadataOperationType.DELETE_TIMESERIES:
-        deleteTimeseries(args[1]);
+        for (String deleteStorageGroup : deleteTimeseries(args[1])) {
+          StorageEngine.getInstance().deleteAllDataFilesInOneStorageGroup(deleteStorageGroup);
+        }
         break;
       case MetadataOperationType.SET_STORAGE_GROUP:
         setStorageGroup(args[1]);
@@ -381,12 +388,6 @@ public class MManager {
         seriesNumberInStorageGroups.values().stream().max(Integer::compareTo)
             .ifPresent(val -> maxSeriesNumberAmongStorageGroup = val);
       }
-      try {
-        IoTDBConfigDynamicAdapter.getInstance()
-            .addOrDeleteTimeSeries(seriesNumberInStorageGroups.remove(prefixPath) * (-1));
-      } catch (ConfigAdjusterException e) {
-        throw new MetadataException(e.getMessage());
-      }
       mNodeCache.clear();
     }
     try {
@@ -418,13 +419,13 @@ public class MManager {
       throws MetadataException, IOException {
     lock.writeLock().lock();
     try {
+      String storageGroupName = mtree.deleteTimeseriesAndReturnEmptyStorageGroup(path);
       if (writeToLog) {
         BufferedWriter writer = getLogWriter();
         writer.write(MetadataOperationType.DELETE_TIMESERIES + "," + path);
         writer.newLine();
         writer.flush();
       }
-      String storageGroupName = mtree.deleteTimeseriesAndReturnEmptyStorageGroup(path);
       // TODO: delete the path node and all its ancestors
       mNodeCache.clear();
       try {
@@ -481,23 +482,16 @@ public class MManager {
   public void deleteStorageGroups(List<String> storageGroups) throws MetadataException {
     lock.writeLock().lock();
     try {
-      if (writeToLog) {
-        StringBuilder jointPath = new StringBuilder();
-        for (String storagePath : storageGroups) {
-          jointPath.append(",").append(storagePath);
-        }
-        BufferedWriter writer = getLogWriter();
-        writer.write(MetadataOperationType.DELETE_STORAGE_GROUP + jointPath);
-        writer.newLine();
-        writer.flush();
-      }
+      BufferedWriter writer = getLogWriter();
       for (String storageGroup : storageGroups) {
-        try {
-          // try to delete storage group
-          mtree.deleteStorageGroup(storageGroup);
-        } catch (MetadataException e) {
-          IoTDBConfigDynamicAdapter.getInstance().addOrDeleteStorageGroup(1);
-          throw new MetadataException(e);
+        // try to delete storage group
+        mtree.deleteStorageGroup(storageGroup);
+
+        // if success
+        if (writeToLog) {
+          writer.write(MetadataOperationType.DELETE_STORAGE_GROUP + storageGroup);
+          writer.newLine();
+          writer.flush();
         }
         mNodeCache.clear();
         IoTDBConfigDynamicAdapter.getInstance().addOrDeleteStorageGroup(-1);