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/11/08 07:54:29 UTC

[iotdb] branch master updated: [IOTDB-4868] Drop trigger should fail when trigger.OnDrop throws an exception (#7928)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new bbc910b087 [IOTDB-4868] Drop trigger should fail when trigger.OnDrop throws an exception  (#7928)
bbc910b087 is described below

commit bbc910b0870180dcf0c2006a621e2eac6b97fc3b
Author: Liao Lanyu <14...@qq.com>
AuthorDate: Tue Nov 8 15:54:23 2022 +0800

    [IOTDB-4868] Drop trigger should fail when trigger.OnDrop throws an exception  (#7928)
---
 .../main/java/org/apache/iotdb/commons/trigger/TriggerTable.java | 4 ++--
 server/src/main/java/org/apache/iotdb/db/service/DataNode.java   | 2 +-
 .../db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java   | 9 ++++++---
 .../iotdb/db/trigger/service/TriggerManagementService.java       | 8 ++++++--
 4 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/trigger/TriggerTable.java b/node-commons/src/main/java/org/apache/iotdb/commons/trigger/TriggerTable.java
index 9962477057..ecc79c3e6d 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/trigger/TriggerTable.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/trigger/TriggerTable.java
@@ -57,8 +57,8 @@ public class TriggerTable {
     return triggerTable.get(triggerName);
   }
 
-  public TriggerInformation removeTriggerInformation(String triggerName) {
-    return triggerTable.remove(triggerName);
+  public void removeTriggerInformation(String triggerName) {
+    triggerTable.remove(triggerName);
   }
 
   public void setTriggerInformation(String triggerName, TriggerInformation triggerInformation) {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index 56981ac5ec..7ff9183f0a 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -594,7 +594,7 @@ public class DataNode implements DataNodeMBean {
       List<ByteBuffer> jarList = resp.getJarList();
       for (int i = 0; i < triggerInformationList.size(); i++) {
         TriggerExecutableManager.getInstance()
-            .saveToLibDir(jarList.get(i), triggerInformationList.get(i).getJarName());
+            .saveToInstallDir(jarList.get(i), triggerInformationList.get(i).getJarName());
       }
     } catch (IOException | TException e) {
       throw new StartupException(e);
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 4f5269e211..ecade45ea8 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1341,7 +1341,10 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
     try {
       TriggerManagementService.getInstance().inactiveTrigger(req.triggerName);
     } catch (Exception e) {
-      LOGGER.error("Error occurred during ");
+      LOGGER.error(
+          "Error occurred when try to inactive trigger instance for trigger: {}. The cause is {}. ",
+          req.triggerName,
+          e);
       return new TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())
           .setMessage(e.getMessage());
     }
@@ -1355,7 +1358,7 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
       TriggerManagementService.getInstance().dropTrigger(req.triggerName, req.needToDeleteJarFile);
     } catch (Exception e) {
       LOGGER.error(
-          "Error occurred during drop trigger instance for trigger: {}. The cause is {}.",
+          "Error occurred when dropping trigger instance for trigger: {}. The cause is {}.",
           req.triggerName,
           e);
       return new TSStatus(TSStatusCode.DROP_TRIGGER_INSTANCE_ERROR.getStatusCode())
@@ -1371,7 +1374,7 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
           .updateLocationOfStatefulTrigger(req.triggerName, req.newLocation);
     } catch (Exception e) {
       LOGGER.error(
-          "Error occurred during update Location for trigger: {}. The cause is {}.",
+          "Error occurred when updating Location for trigger: {}. The cause is {}.",
           req.triggerName,
           e);
       return new TSStatus(TSStatusCode.UPDATE_TRIGGER_LOCATION_ERROR.getStatusCode())
diff --git a/server/src/main/java/org/apache/iotdb/db/trigger/service/TriggerManagementService.java b/server/src/main/java/org/apache/iotdb/db/trigger/service/TriggerManagementService.java
index 26d4c1cb20..eff5cfc029 100644
--- a/server/src/main/java/org/apache/iotdb/db/trigger/service/TriggerManagementService.java
+++ b/server/src/main/java/org/apache/iotdb/db/trigger/service/TriggerManagementService.java
@@ -115,11 +115,15 @@ public class TriggerManagementService {
   public void dropTrigger(String triggerName, boolean needToDeleteJar) throws IOException {
     try {
       acquireLock();
-      TriggerInformation triggerInformation = triggerTable.removeTriggerInformation(triggerName);
-      TriggerExecutor executor = executorMap.remove(triggerName);
+      TriggerInformation triggerInformation = triggerTable.getTriggerInformation(triggerName);
+      TriggerExecutor executor = executorMap.get(triggerName);
       if (executor != null) {
         executor.onDrop();
       }
+      // exception could be thrown when executing executor.onDrop()
+      // we delete trigger in map after successfully executing onDrop
+      triggerTable.removeTriggerInformation(triggerName);
+      executorMap.remove(triggerName);
 
       if (triggerInformation == null) {
         return;