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);