From d2f1c123dccaa744a107f825218d7b5471db5edb Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Fri, 16 Jan 2026 11:17:18 +0800 Subject: [PATCH 01/18] draft Signed-off-by: Weihao Li <18110526956@163.com> --- distribution/src/assembly/all.xml | 1 + distribution/src/assembly/datanode.xml | 1 + example/mqtt-customize/pom.xml | 2 +- ...tter => org.apache.iotdb.PayloadFormatter} | 0 example/pom.xml | 2 +- external-service-impl/mqtt/pom.xml | 115 ++++++++++++++++++ .../iotdb}/mqtt/BrokerAuthenticator.java | 2 +- .../iotdb}/mqtt/JSONPayloadFormatter.java | 2 +- .../iotdb}/mqtt/LinePayloadFormatter.java | 2 +- .../apache/iotdb}/mqtt/MPPPublishHandler.java | 2 +- .../org/apache/iotdb/mqtt}/MQTTService.java | 28 +---- .../java/org/apache/iotdb}/mqtt/Message.java | 2 +- .../iotdb}/mqtt/PayloadFormatManager.java | 2 +- .../apache/iotdb}/mqtt/PayloadFormatter.java | 2 +- .../org/apache/iotdb}/mqtt/TableMessage.java | 2 +- .../org/apache/iotdb}/mqtt/TreeMessage.java | 2 +- .../org.apache.iotdb.mqtt.PayloadFormatter | 4 +- .../iotdb}/mqtt/BrokerAuthenticatorTest.java | 18 +-- .../iotdb}/mqtt/JSONPayloadFormatterTest.java | 3 +- .../iotdb}/mqtt/LinePayloadFormatterTest.java | 3 +- .../iotdb}/mqtt/PayloadFormatManagerTest.java | 8 +- external-service-impl/pom.xml | 56 +++++++++ iotdb-core/datanode/pom.xml | 4 - .../org/apache/iotdb/db/service/DataNode.java | 16 ++- .../BuiltinExternalServices.java | 8 +- .../ExternalServiceManagementService.java | 54 ++++++-- .../iotdb/commons/service/ServiceType.java | 1 - pom.xml | 1 + 28 files changed, 253 insertions(+), 90 deletions(-) rename example/mqtt-customize/src/main/resources/META-INF/services/{org.apache.iotdb.db.protocol.mqtt.PayloadFormatter => org.apache.iotdb.PayloadFormatter} (100%) create mode 100644 external-service-impl/mqtt/pom.xml rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/BrokerAuthenticator.java (97%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/JSONPayloadFormatter.java (99%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/LinePayloadFormatter.java (99%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/MPPPublishHandler.java (99%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service => external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt}/MQTTService.java (84%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/Message.java (96%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/PayloadFormatManager.java (99%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/PayloadFormatter.java (97%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/TableMessage.java (98%) rename {iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/main/java/org/apache/iotdb}/mqtt/TreeMessage.java (97%) rename iotdb-core/datanode/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter => external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter (87%) rename {iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/test/java/org/apache/iotdb}/mqtt/BrokerAuthenticatorTest.java (77%) rename {iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/test/java/org/apache/iotdb}/mqtt/JSONPayloadFormatterTest.java (99%) rename {iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/test/java/org/apache/iotdb}/mqtt/LinePayloadFormatterTest.java (98%) rename {iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol => external-service-impl/mqtt/src/test/java/org/apache/iotdb}/mqtt/PayloadFormatManagerTest.java (84%) create mode 100644 external-service-impl/pom.xml diff --git a/distribution/src/assembly/all.xml b/distribution/src/assembly/all.xml index b77f71a32dcd9..e28fc04a9ee8e 100644 --- a/distribution/src/assembly/all.xml +++ b/distribution/src/assembly/all.xml @@ -32,6 +32,7 @@ *:iotdb-server:zip:* *:iotdb-cli:zip:* *:iotdb-confignode:zip:* + *:external-service-impl:zip:* ${file.separator} ${artifact.artifactId}.${artifact.extension} diff --git a/distribution/src/assembly/datanode.xml b/distribution/src/assembly/datanode.xml index 016059a903a4f..5393568e4cf43 100644 --- a/distribution/src/assembly/datanode.xml +++ b/distribution/src/assembly/datanode.xml @@ -31,6 +31,7 @@ *:iotdb-server:zip:* *:iotdb-cli:zip:* + *:external-service-impl ${file.separator} ${artifact.artifactId}.${artifact.extension} diff --git a/example/mqtt-customize/pom.xml b/example/mqtt-customize/pom.xml index 2624571f4e87d..c685748026401 100644 --- a/example/mqtt-customize/pom.xml +++ b/example/mqtt-customize/pom.xml @@ -32,7 +32,7 @@ org.apache.iotdb - iotdb-server + iotdb-mqtt ${project.version} diff --git a/example/mqtt-customize/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter b/example/mqtt-customize/src/main/resources/META-INF/services/org.apache.iotdb.PayloadFormatter similarity index 100% rename from example/mqtt-customize/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter rename to example/mqtt-customize/src/main/resources/META-INF/services/org.apache.iotdb.PayloadFormatter diff --git a/example/pom.xml b/example/pom.xml index 9af648e0d262a..5b6bac69a0e56 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -32,7 +32,7 @@ jdbc mqtt - mqtt-customize + pipe-count-point-processor pipe-opc-ua-sink rest-java-example diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml new file mode 100644 index 0000000000000..3e08d1e7ff0d9 --- /dev/null +++ b/external-service-impl/mqtt/pom.xml @@ -0,0 +1,115 @@ + + + + 4.0.0 + + org.apache.iotdb + external-service-impl + 2.0.7-SNAPSHOT + + mqtt + + 11 + 11 + UTF-8 + + + + com.github.moquette-io.moquette + moquette-broker + + + com.google.code.gson + gson + + + io.netty + netty-buffer + + + org.apache.iotdb + iotdb-thrift-commons + 2.0.7-SNAPSHOT + + + org.apache.tsfile + tsfile + ${tsfile.version} + + + com.google.guava + guava + + + org.apache.iotdb + iotdb-thrift + 2.0.7-SNAPSHOT + + + org.apache.iotdb + node-commons + 2.0.7-SNAPSHOT + + + org.slf4j + slf4j-api + + + org.apache.iotdb + service-rpc + 2.0.7-SNAPSHOT + + + io.netty + netty-codec-mqtt + + + + + get-jar-with-dependencies + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + + make-assembly + + + single + + + package + + + + + + + + diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticator.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/BrokerAuthenticator.java similarity index 97% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticator.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/BrokerAuthenticator.java index a05c8264b8225..14647a8582f04 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticator.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/BrokerAuthenticator.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import org.apache.iotdb.db.auth.AuthorityChecker; import org.apache.iotdb.rpc.TSStatusCode; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatter.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/JSONPayloadFormatter.java similarity index 99% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatter.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/JSONPayloadFormatter.java index cc857b7295cf1..7a348c850b42d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatter.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/JSONPayloadFormatter.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import com.google.common.collect.Lists; import com.google.gson.Gson; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatter.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/LinePayloadFormatter.java similarity index 99% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatter.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/LinePayloadFormatter.java index 8b596ee2c89ce..f80c3eb0b5e4f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatter.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/LinePayloadFormatter.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import io.netty.buffer.ByteBuf; import org.apache.tsfile.enums.TSDataType; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MPPPublishHandler.java similarity index 99% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MPPPublishHandler.java index a0c0e1a709bbd..37182505c5867 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/MPPPublishHandler.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MPPPublishHandler.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.conf.IoTDBConstant.ClientVersion; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/MQTTService.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MQTTService.java similarity index 84% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/MQTTService.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MQTTService.java index c6cc3fa47ee10..3b2be5ac3f4f1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/MQTTService.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/MQTTService.java @@ -16,14 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.service; -import org.apache.iotdb.commons.service.IService; -import org.apache.iotdb.commons.service.ServiceType; +package org.apache.iotdb.mqtt; + import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.protocol.mqtt.BrokerAuthenticator; -import org.apache.iotdb.db.protocol.mqtt.MPPPublishHandler; +import org.apache.iotdb.externalservice.api.IExternalService; import io.moquette.BrokerConstants; import io.moquette.broker.Server; @@ -40,12 +38,10 @@ import java.util.Properties; /** The IoTDB MQTT Service. */ -public class MQTTService implements IService { +public class MQTTService implements IExternalService { private static final Logger LOG = LoggerFactory.getLogger(MQTTService.class); private final Server server = new Server(); - private MQTTService() {} - @Override public void start() { startup(); @@ -106,20 +102,4 @@ private IConfig createBrokerConfig(IoTDBConfig iotDBConfig) { public void shutdown() { server.stopServer(); } - - @Override - public ServiceType getID() { - return ServiceType.MQTT_SERVICE; - } - - public static MQTTService getInstance() { - return MQTTServiceHolder.INSTANCE; - } - - private static class MQTTServiceHolder { - - private static final MQTTService INSTANCE = new MQTTService(); - - private MQTTServiceHolder() {} - } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/Message.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/Message.java similarity index 96% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/Message.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/Message.java index ba31d86976035..9a4311754533f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/Message.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/Message.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; /** Generic parsing of messages */ public class Message { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManager.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatManager.java similarity index 99% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManager.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatManager.java index c0b48539cd744..7bb051a852692 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManager.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatManager.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.db.conf.IoTDBDescriptor; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatter.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatter.java similarity index 97% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatter.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatter.java index c86648ac16136..672c512d54a21 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatter.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/PayloadFormatter.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import io.netty.buffer.ByteBuf; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TableMessage.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TableMessage.java similarity index 98% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TableMessage.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TableMessage.java index b8aec19da5873..5c8fcc5d708d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TableMessage.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TableMessage.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import org.apache.tsfile.enums.TSDataType; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TreeMessage.java b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TreeMessage.java similarity index 97% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TreeMessage.java rename to external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TreeMessage.java index 9416ea3c83805..07ff8ed0b3d84 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/TreeMessage.java +++ b/external-service-impl/mqtt/src/main/java/org/apache/iotdb/mqtt/TreeMessage.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; +package org.apache.iotdb.mqtt; import org.apache.tsfile.enums.TSDataType; diff --git a/iotdb-core/datanode/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter b/external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter similarity index 87% rename from iotdb-core/datanode/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter rename to external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter index 488d6d02d5039..f42aa83ff8678 100644 --- a/iotdb-core/datanode/src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter +++ b/external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter @@ -17,5 +17,5 @@ # under the License. # -org.apache.iotdb.db.protocol.mqtt.JSONPayloadFormatter -org.apache.iotdb.db.protocol.mqtt.LinePayloadFormatter +org.apache.iotdb.mqtt.JSONPayloadFormatter +org.apache.iotdb.mqtt.LinePayloadFormatter diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticatorTest.java b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/BrokerAuthenticatorTest.java similarity index 77% rename from iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticatorTest.java rename to external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/BrokerAuthenticatorTest.java index 1f66b517e9196..6884a644fedc0 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/BrokerAuthenticatorTest.java +++ b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/BrokerAuthenticatorTest.java @@ -15,29 +15,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; -import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.utils.EnvironmentUtils; +package org.apache.iotdb.mqtt; -import org.junit.After; -import org.junit.Before; import org.junit.Test; -import java.io.IOException; - public class BrokerAuthenticatorTest { - @Before - public void before() { - EnvironmentUtils.envSetUp(); - } - - @After - public void after() throws IOException, StorageEngineException { - EnvironmentUtils.cleanEnv(); - } - @Test public void checkValid() { // In the previous implementation, the datanode will init a root file, diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatterTest.java b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/JSONPayloadFormatterTest.java similarity index 99% rename from iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatterTest.java rename to external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/JSONPayloadFormatterTest.java index deecf607d8162..eab4b42243d1e 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/JSONPayloadFormatterTest.java +++ b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/JSONPayloadFormatterTest.java @@ -15,7 +15,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; + +package org.apache.iotdb.mqtt; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatterTest.java b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/LinePayloadFormatterTest.java similarity index 98% rename from iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatterTest.java rename to external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/LinePayloadFormatterTest.java index 7bf9bce0702d3..16ed807c9ae69 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatterTest.java +++ b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/LinePayloadFormatterTest.java @@ -15,7 +15,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; + +package org.apache.iotdb.mqtt; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManagerTest.java b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/PayloadFormatManagerTest.java similarity index 84% rename from iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManagerTest.java rename to external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/PayloadFormatManagerTest.java index 096f5d0d90d2e..afbe88cf047a2 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/mqtt/PayloadFormatManagerTest.java +++ b/external-service-impl/mqtt/src/test/java/org/apache/iotdb/mqtt/PayloadFormatManagerTest.java @@ -15,20 +15,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.iotdb.db.protocol.mqtt; -import org.apache.iotdb.db.utils.EnvironmentUtils; +package org.apache.iotdb.mqtt; -import org.junit.After; import org.junit.Test; import static org.junit.Assert.assertNotNull; public class PayloadFormatManagerTest { - @After - public void tearDown() throws Exception { - EnvironmentUtils.cleanAllDir(); - } @Test(expected = IllegalArgumentException.class) public void getPayloadFormat() { diff --git a/external-service-impl/pom.xml b/external-service-impl/pom.xml new file mode 100644 index 0000000000000..2eeaec2c0141d --- /dev/null +++ b/external-service-impl/pom.xml @@ -0,0 +1,56 @@ + + + + 4.0.0 + + org.apache.iotdb + iotdb-parent + 2.0.7-SNAPSHOT + + external-service-impl + pom + + mqtt + + + 11 + 11 + UTF-8 + + + + org.apache.iotdb + external-service-api + 2.0.7-SNAPSHOT + + + org.apache.iotdb + iotdb-server + 2.0.7-SNAPSHOT + + + junit + junit + test + + + diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml index 72c4acba58615..af2c714b0eaea 100644 --- a/iotdb-core/datanode/pom.xml +++ b/iotdb-core/datanode/pom.xml @@ -267,10 +267,6 @@ org.glassfish.jersey.containers jersey-container-servlet-core - - com.github.moquette-io.moquette - moquette-broker - com.google.code.gson gson diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java index 27a5ce3b7b795..d0eef468d4f94 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java @@ -1190,14 +1190,14 @@ private void getTriggerInformationList(List allTriggerInformation) { private void prepareExternalServiceResources() throws StartupException { long startTime = System.currentTimeMillis(); - if (resourcesInformationHolder.getExternalServiceEntryList() == null - || resourcesInformationHolder.getExternalServiceEntryList().isEmpty()) { - return; - } try { - ExternalServiceManagementService.getInstance() - .restoreUserDefinedServices(resourcesInformationHolder.getExternalServiceEntryList()); + if (resourcesInformationHolder.getExternalServiceEntryList() != null + && !resourcesInformationHolder.getExternalServiceEntryList().isEmpty()) { + ExternalServiceManagementService.getInstance() + .restoreUserDefinedServices(resourcesInformationHolder.getExternalServiceEntryList()); + } + ExternalServiceManagementService.getInstance().restoreRunningServiceInstance(); } catch (Exception e) { throw new StartupException(e); @@ -1290,6 +1290,7 @@ public void deleteDataNodeSystemProperties() { public void stop() { stopTriggerRelatedServices(); registerManager.deregisterAll(); + ExternalServiceManagementService.getInstance().stopRunningServices(); JMXService.deregisterMBean(mbeanName); MetricService.getInstance().stop(); if (schemaRegionConsensusStarted) { @@ -1310,9 +1311,6 @@ public void stop() { } private void initProtocols() throws StartupException { - if (config.isEnableMQTTService()) { - registerManager.register(MQTTService.getInstance()); - } if (IoTDBRestServiceDescriptor.getInstance().getConfig().isEnableRestService()) { registerManager.register(RestService.getInstance()); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java index 7bed3ffe4711d..dfe90cb3ca1b5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java @@ -22,14 +22,10 @@ import java.util.function.Supplier; public enum BuiltinExternalServices { - MQTT( - "MQTT", - "org.apache.iotdb.externalservice.Mqtt", - // IoTDBDescriptor.getInstance().getConfig()::isEnableMQTTService - () -> false), + MQTT("MQTT", "org.apache.iotdb.mqtt.MQTTService", () -> true), REST( "REST", - "org.apache.iotdb.externalservice.Rest", + "org.apache.iotdb.mqtt.RestService", // IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService () -> false); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java index 71f0df341a687..234d81d82c0e2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java @@ -25,6 +25,7 @@ import org.apache.iotdb.commons.client.exception.ClientManagerException; import org.apache.iotdb.commons.exception.IoTDBRuntimeException; import org.apache.iotdb.commons.externalservice.ServiceInfo; +import org.apache.iotdb.commons.file.SystemFileFactory; import org.apache.iotdb.confignode.rpc.thrift.TCreateExternalServiceReq; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.protocol.client.ConfigNodeClient; @@ -65,10 +66,25 @@ public class ExternalServiceManagementService { private static final Logger LOGGER = LoggerFactory.getLogger(ExternalServiceManagementService.class); + public static final String INSTANCE_NULL_ERROR_MSG = + "External Service instance is null when state is RUNNING!"; + private ExternalServiceManagementService(String libRoot) { this.serviceInfos = new HashMap<>(); restoreBuiltInServices(); this.libRoot = libRoot; + makDir(libRoot); + } + + private static void makDir(String dir) { + try { + SystemFileFactory.INSTANCE.makeDirIfNecessary(dir); + } catch (IOException e) { + LOGGER.error("Failed to make external service dir", e); + throw new ExternalServiceManagementException( + new TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode()) + .setMessage(e.getMessage())); + } } public Iterator showService(int dataNodeId) @@ -170,7 +186,8 @@ public void startService(String serviceName) throws ClientManagerException, TExc private IExternalService createExternalServiceInstance(String serviceName, String className) { // close ClassLoader automatically to release the file handle - try (ExternalServiceClassLoader classLoader = new ExternalServiceClassLoader(libRoot); ) { + try { + ExternalServiceClassLoader classLoader = new ExternalServiceClassLoader(libRoot); return (IExternalService) Class.forName(className, true, classLoader).getDeclaredConstructor().newInstance(); } catch (IOException @@ -235,7 +252,7 @@ public void stopService(String serviceName) throws ClientManagerException, TExce private void stopService(ServiceInfo serviceInfo) { checkState( serviceInfo.getServiceInstance() != null, - "External Service instance is null when state is RUNNING!", + INSTANCE_NULL_ERROR_MSG, serviceInfo.getServiceName()); serviceInfo.getServiceInstance().stop(); } @@ -311,11 +328,34 @@ public void restoreRunningServiceInstance() { serviceInfo -> { // start services with RUNNING state if (serviceInfo.getState() == RUNNING) { - IExternalService serviceInstance = - createExternalServiceInstance( - serviceInfo.getServiceName(), serviceInfo.getClassName()); - serviceInfo.setServiceInstance(serviceInstance); - serviceInstance.start(); + + try { + IExternalService serviceInstance = + createExternalServiceInstance( + serviceInfo.getServiceName(), serviceInfo.getClassName()); + serviceInfo.setServiceInstance(serviceInstance); + } finally { + // set STOPPED to avoid the case: service is RUNNING, but its instance is null + if (serviceInfo.getServiceInstance() == null) { + serviceInfo.setState(STOPPED); + } + } + + serviceInfo.getServiceInstance().start(); + } + }); + } + + public void stopRunningServices() { + serviceInfos + .values() + .forEach( + serviceInfo -> { + // start services with RUNNING state + if (serviceInfo.getState() == RUNNING) { + IExternalService serviceInstance = serviceInfo.getServiceInstance(); + checkState(serviceInstance != null, INSTANCE_NULL_ERROR_MSG); + serviceInstance.stop(); } }); } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/ServiceType.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/ServiceType.java index 7267c79a66551..55fad14e5a10f 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/ServiceType.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/ServiceType.java @@ -25,7 +25,6 @@ public enum ServiceType { METRIC_SERVICE("Metrics ServerService", "MetricService"), RPC_SERVICE("RPC ServerService", "RPCService"), INFLUX_SERVICE("InfluxDB Protocol Service", "InfluxDB Protocol"), - MQTT_SERVICE("MQTTService", "MqttService"), AIR_GAP_SERVICE("AirGapService", "AirGapService"), MONITOR_SERVICE("Monitor ServerService", "Monitor"), STAT_MONITOR_SERVICE("Statistics ServerService", "StatMonitorService"), diff --git a/pom.xml b/pom.xml index d6261e70af189..4a80bacb18890 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,7 @@ distribution example library-udf + external-service-impl From 5a883106e8195b944c5b462142b905d9d6bd652e Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 15:46:05 +0800 Subject: [PATCH 02/18] draft Signed-off-by: Weihao Li <18110526956@163.com> --- distribution/pom.xml | 7 ++ distribution/src/assembly/datanode.xml | 1 - .../src/assembly/external-service-impl.xml | 60 +++++++++ example/mqtt-customize/pom.xml | 3 +- .../CustomizedJsonPayloadFormatter.java | 6 +- example/pom.xml | 2 +- external-service-impl/mqtt/pom.xml | 117 +++++++++--------- .../src/assembly/external-service-impl.xml | 33 +++++ .../org.apache.iotdb.mqtt.PayloadFormatter | 0 external-service-impl/pom.xml | 7 +- iotdb-core/datanode/pom.xml | 8 -- 11 files changed, 167 insertions(+), 77 deletions(-) create mode 100644 distribution/src/assembly/external-service-impl.xml create mode 100644 external-service-impl/mqtt/src/assembly/external-service-impl.xml rename external-service-impl/mqtt/src/main/resources/{META-INF.services => META-INF/services}/org.apache.iotdb.mqtt.PayloadFormatter (100%) diff --git a/distribution/pom.xml b/distribution/pom.xml index 38c4602d1135b..8b13a815a5ad4 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -53,6 +53,11 @@ library-udf 2.0.7-SNAPSHOT + + org.apache.iotdb + mqtt + 2.0.7-SNAPSHOT + @@ -74,6 +79,7 @@ src/assembly/confignode.xml src/assembly/cli.xml src/assembly/library-udf.xml + src/assembly/external-service-impl.xml apache-iotdb-${project.version} @@ -107,6 +113,7 @@ apache-iotdb-${project.version}-cli-bin.zip apache-iotdb-${project.version}-confignode-bin.zip apache-iotdb-${project.version}-library-udf-bin.zip + apache-iotdb-${project.version}-external-service-impl-bin.zip diff --git a/distribution/src/assembly/datanode.xml b/distribution/src/assembly/datanode.xml index 5393568e4cf43..016059a903a4f 100644 --- a/distribution/src/assembly/datanode.xml +++ b/distribution/src/assembly/datanode.xml @@ -31,7 +31,6 @@ *:iotdb-server:zip:* *:iotdb-cli:zip:* - *:external-service-impl ${file.separator} ${artifact.artifactId}.${artifact.extension} diff --git a/distribution/src/assembly/external-service-impl.xml b/distribution/src/assembly/external-service-impl.xml new file mode 100644 index 0000000000000..b5a46fbb7cc93 --- /dev/null +++ b/distribution/src/assembly/external-service-impl.xml @@ -0,0 +1,60 @@ + + + + external-service-impl-bin + + dir + zip + + apache-iotdb-${project.version}-external-service-impl-bin + + + + org.apache.iotdb:mqtt + + + ${artifact.artifactId}.${artifact.extension} + false + true + true + runtime + + + + + ${project.basedir}/../licenses + licenses + + + + + ${project.basedir}/../LICENSE-binary + licenses + LICENSE + + + ${project.basedir}/../NOTICE-binary + licenses + NOTICE + + + diff --git a/example/mqtt-customize/pom.xml b/example/mqtt-customize/pom.xml index c685748026401..5af64dd9fc565 100644 --- a/example/mqtt-customize/pom.xml +++ b/example/mqtt-customize/pom.xml @@ -29,10 +29,9 @@ customize-mqtt-example IoTDB: Example: Customized MQTT - org.apache.iotdb - iotdb-mqtt + mqtt ${project.version} diff --git a/example/mqtt-customize/src/main/java/org/apache/iotdb/mqtt/server/CustomizedJsonPayloadFormatter.java b/example/mqtt-customize/src/main/java/org/apache/iotdb/mqtt/server/CustomizedJsonPayloadFormatter.java index 8c3a962173985..b16c4928a0b7a 100644 --- a/example/mqtt-customize/src/main/java/org/apache/iotdb/mqtt/server/CustomizedJsonPayloadFormatter.java +++ b/example/mqtt-customize/src/main/java/org/apache/iotdb/mqtt/server/CustomizedJsonPayloadFormatter.java @@ -19,9 +19,9 @@ package org.apache.iotdb.mqtt.server; -import org.apache.iotdb.db.protocol.mqtt.Message; -import org.apache.iotdb.db.protocol.mqtt.PayloadFormatter; -import org.apache.iotdb.db.protocol.mqtt.TreeMessage; +import org.apache.iotdb.mqtt.Message; +import org.apache.iotdb.mqtt.PayloadFormatter; +import org.apache.iotdb.mqtt.TreeMessage; import io.netty.buffer.ByteBuf; import org.apache.tsfile.external.commons.lang3.NotImplementedException; diff --git a/example/pom.xml b/example/pom.xml index 5b6bac69a0e56..9af648e0d262a 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -32,7 +32,7 @@ jdbc mqtt - + mqtt-customize pipe-count-point-processor pipe-opc-ua-sink rest-java-example diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 3e08d1e7ff0d9..510e7cf8bbf4f 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -27,6 +27,7 @@ 2.0.7-SNAPSHOT mqtt + IoTDB: External-Service-Impl: MQTT 11 11 @@ -36,37 +37,46 @@ com.github.moquette-io.moquette moquette-broker - - - com.google.code.gson - gson - - - io.netty - netty-buffer - - - org.apache.iotdb - iotdb-thrift-commons - 2.0.7-SNAPSHOT - - - org.apache.tsfile - tsfile - ${tsfile.version} - - - com.google.guava - guava - - - org.apache.iotdb - iotdb-thrift - 2.0.7-SNAPSHOT + + + + org.slf4j + slf4j-api + + + io.netty + netty-common + + + io.netty + netty-transport + + + io.netty + netty-resolver + + + io.netty + netty-handler + + + io.netty + netty-transport-native-unix-common + + + io.netty + netty-codec + + + io.netty + netty-codec-http + + org.apache.iotdb - node-commons + iotdb-server + provided 2.0.7-SNAPSHOT @@ -83,33 +93,26 @@ netty-codec-mqtt - - - get-jar-with-dependencies - - - - org.apache.maven.plugins - maven-assembly-plugin - - - jar-with-dependencies - - - - - make-assembly - - - single - - - package - - - - - - - + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + diff --git a/external-service-impl/mqtt/src/assembly/external-service-impl.xml b/external-service-impl/mqtt/src/assembly/external-service-impl.xml new file mode 100644 index 0000000000000..735e6ed0d7f10 --- /dev/null +++ b/external-service-impl/mqtt/src/assembly/external-service-impl.xml @@ -0,0 +1,33 @@ + + + + jar-with-dependencies + + jar + + false + + + lib + + + diff --git a/external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter b/external-service-impl/mqtt/src/main/resources/META-INF/services/org.apache.iotdb.mqtt.PayloadFormatter similarity index 100% rename from external-service-impl/mqtt/src/main/resources/META-INF.services/org.apache.iotdb.mqtt.PayloadFormatter rename to external-service-impl/mqtt/src/main/resources/META-INF/services/org.apache.iotdb.mqtt.PayloadFormatter diff --git a/external-service-impl/pom.xml b/external-service-impl/pom.xml index 2eeaec2c0141d..b2191a28d0d96 100644 --- a/external-service-impl/pom.xml +++ b/external-service-impl/pom.xml @@ -27,6 +27,7 @@ 2.0.7-SNAPSHOT external-service-impl + IoTDB: External-Service-Impl pom mqtt @@ -40,11 +41,7 @@ org.apache.iotdb external-service-api - 2.0.7-SNAPSHOT - - - org.apache.iotdb - iotdb-server + provided 2.0.7-SNAPSHOT diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml index af2c714b0eaea..b55fd8e5c6827 100644 --- a/iotdb-core/datanode/pom.xml +++ b/iotdb-core/datanode/pom.xml @@ -212,10 +212,6 @@ org.eclipse.jetty jetty-http - - io.netty - netty-codec-mqtt - org.apache.commons commons-pool2 @@ -271,10 +267,6 @@ com.google.code.gson gson - - io.netty - netty-buffer - org.eclipse.jetty jetty-servlet From 9175879393119ca79c33a6bda263fb79dbb0533d Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 17:38:06 +0800 Subject: [PATCH 03/18] add file put Signed-off-by: Weihao Li <18110526956@163.com> --- distribution/pom.xml | 5 --- distribution/src/assembly/all.xml | 5 ++- distribution/src/assembly/datanode.xml | 4 +++ .../src/assembly/external-service-impl.xml | 17 +++------- external-service-impl/mqtt/pom.xml | 11 +++++-- .../src/assembly/external-service-impl.xml | 33 ------------------- 6 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 external-service-impl/mqtt/src/assembly/external-service-impl.xml diff --git a/distribution/pom.xml b/distribution/pom.xml index 8b13a815a5ad4..9d458cf8a071b 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -53,11 +53,6 @@ library-udf 2.0.7-SNAPSHOT - - org.apache.iotdb - mqtt - 2.0.7-SNAPSHOT - diff --git a/distribution/src/assembly/all.xml b/distribution/src/assembly/all.xml index e28fc04a9ee8e..255912d75e611 100644 --- a/distribution/src/assembly/all.xml +++ b/distribution/src/assembly/all.xml @@ -32,7 +32,6 @@ *:iotdb-server:zip:* *:iotdb-cli:zip:* *:iotdb-confignode:zip:* - *:external-service-impl:zip:* ${file.separator} ${artifact.artifactId}.${artifact.extension} @@ -93,6 +92,10 @@ conf 0755 + + ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + lib + common-files.xml diff --git a/distribution/src/assembly/datanode.xml b/distribution/src/assembly/datanode.xml index 016059a903a4f..cbc2cd9617b8c 100644 --- a/distribution/src/assembly/datanode.xml +++ b/distribution/src/assembly/datanode.xml @@ -72,6 +72,10 @@ **/*ainode.* 0755 + + ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + lib + diff --git a/distribution/src/assembly/external-service-impl.xml b/distribution/src/assembly/external-service-impl.xml index b5a46fbb7cc93..273efe6eddfb5 100644 --- a/distribution/src/assembly/external-service-impl.xml +++ b/distribution/src/assembly/external-service-impl.xml @@ -26,19 +26,6 @@ zip apache-iotdb-${project.version}-external-service-impl-bin - - - - org.apache.iotdb:mqtt - - - ${artifact.artifactId}.${artifact.extension} - false - true - true - runtime - - ${project.basedir}/../licenses @@ -56,5 +43,9 @@ licenses NOTICE + + ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + / + diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 510e7cf8bbf4f..f62f7e475c256 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -96,20 +96,27 @@ - org.apache.maven.plugins maven-assembly-plugin + ${maven.assembly.version} jar-with-dependencies + + + true + + make-assembly - package + single + + package diff --git a/external-service-impl/mqtt/src/assembly/external-service-impl.xml b/external-service-impl/mqtt/src/assembly/external-service-impl.xml deleted file mode 100644 index 735e6ed0d7f10..0000000000000 --- a/external-service-impl/mqtt/src/assembly/external-service-impl.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - jar-with-dependencies - - jar - - false - - - lib - - - From a52aa8494273f7df82ef8571cf2f25973428417d Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 18:09:09 +0800 Subject: [PATCH 04/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- distribution/src/assembly/datanode.xml | 10 ++++++---- external-service-impl/mqtt/pom.xml | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/distribution/src/assembly/datanode.xml b/distribution/src/assembly/datanode.xml index cbc2cd9617b8c..8994667fb873a 100644 --- a/distribution/src/assembly/datanode.xml +++ b/distribution/src/assembly/datanode.xml @@ -72,12 +72,14 @@ **/*ainode.* 0755 - - ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar - lib - + + + ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + lib + + common-files.xml diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index f62f7e475c256..994c6917ad242 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -43,6 +43,10 @@ org.slf4j slf4j-api + + io.netty + netty-buffer + io.netty netty-common From 6f82027f6dfe909d98cba385cdd5f9a53d314596 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 19:20:18 +0800 Subject: [PATCH 05/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- example/mqtt-customize/pom.xml | 5 +++++ external-service-impl/mqtt/pom.xml | 13 ------------- integration-test/src/assembly/mpp-share.xml | 6 ++++++ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/example/mqtt-customize/pom.xml b/example/mqtt-customize/pom.xml index 5af64dd9fc565..6d0ba2d0953d5 100644 --- a/example/mqtt-customize/pom.xml +++ b/example/mqtt-customize/pom.xml @@ -34,5 +34,10 @@ mqtt ${project.version} + + org.apache.iotdb + iotdb-server + ${project.version} + diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 994c6917ad242..043f1dc1c7130 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -83,19 +83,6 @@ provided 2.0.7-SNAPSHOT - - org.slf4j - slf4j-api - - - org.apache.iotdb - service-rpc - 2.0.7-SNAPSHOT - - - io.netty - netty-codec-mqtt - diff --git a/integration-test/src/assembly/mpp-share.xml b/integration-test/src/assembly/mpp-share.xml index 01fce3555def2..ebe153e71be6f 100644 --- a/integration-test/src/assembly/mpp-share.xml +++ b/integration-test/src/assembly/mpp-share.xml @@ -30,4 +30,10 @@ lib + + + ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + lib + + From d9bd1ea62b055a63119e435ce8899a8d44fd051c Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 20:21:19 +0800 Subject: [PATCH 06/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- external-service-impl/mqtt/pom.xml | 5 ----- integration-test/pom.xml | 5 +++++ iotdb-core/datanode/pom.xml | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 043f1dc1c7130..1acd9101e2716 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -93,11 +93,6 @@ jar-with-dependencies - - - true - - diff --git a/integration-test/pom.xml b/integration-test/pom.xml index f566c8e5995b7..203ce2e11dbf9 100644 --- a/integration-test/pom.xml +++ b/integration-test/pom.xml @@ -227,6 +227,11 @@ httpcore test + + org.apache.iotdb + external-service-api + 2.0.7-SNAPSHOT + diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml index b55fd8e5c6827..56cf00595f613 100644 --- a/iotdb-core/datanode/pom.xml +++ b/iotdb-core/datanode/pom.xml @@ -267,6 +267,10 @@ com.google.code.gson gson + + io.netty + netty-buffer + org.eclipse.jetty jetty-servlet From c3216dc9ff76095df4dcd634bf43a7c04c9dfa3e Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 20:23:14 +0800 Subject: [PATCH 07/18] modify CI profile to location error Signed-off-by: Weihao Li <18110526956@163.com> --- .github/workflows/cluster-it-1c1d.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cluster-it-1c1d.yml b/.github/workflows/cluster-it-1c1d.yml index a2989a8e81c92..2425c38790737 100644 --- a/.github/workflows/cluster-it-1c1d.yml +++ b/.github/workflows/cluster-it-1c1d.yml @@ -80,6 +80,7 @@ jobs: -DintegrationTest.forkCount=2 \ -pl integration-test \ -am + -X - name: Upload Artifact if: failure() uses: actions/upload-artifact@v4 From e1b2a5144dc420b91fdd6451e0fb08a1f36d0337 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 20:42:41 +0800 Subject: [PATCH 08/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- iotdb-core/datanode/pom.xml | 4 ---- .../db/service/externalservice/BuiltinExternalServices.java | 5 +++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml index 56cf00595f613..b55fd8e5c6827 100644 --- a/iotdb-core/datanode/pom.xml +++ b/iotdb-core/datanode/pom.xml @@ -267,10 +267,6 @@ com.google.code.gson gson - - io.netty - netty-buffer - org.eclipse.jetty jetty-servlet diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java index dfe90cb3ca1b5..76940755e4a19 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.service.externalservice; +import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor; + import java.util.function.Supplier; public enum BuiltinExternalServices { @@ -26,8 +28,7 @@ public enum BuiltinExternalServices { REST( "REST", "org.apache.iotdb.mqtt.RestService", - // IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService - () -> false); + IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService); private final String serviceName; private final String className; From 2c6a20701214d726f439ec92be934364e661f18f Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 21:04:09 +0800 Subject: [PATCH 09/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- .github/workflows/cluster-it-1c1d.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cluster-it-1c1d.yml b/.github/workflows/cluster-it-1c1d.yml index 2425c38790737..42feb2f77a40e 100644 --- a/.github/workflows/cluster-it-1c1d.yml +++ b/.github/workflows/cluster-it-1c1d.yml @@ -79,7 +79,7 @@ jobs: -DskipUTs \ -DintegrationTest.forkCount=2 \ -pl integration-test \ - -am + -am \ -X - name: Upload Artifact if: failure() From 98ce9a6d34016848114e1800a6a5985fcb394e09 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 21:14:53 +0800 Subject: [PATCH 10/18] fix some Signed-off-by: Weihao Li <18110526956@163.com> --- .github/workflows/cluster-it-1c3d.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cluster-it-1c3d.yml b/.github/workflows/cluster-it-1c3d.yml index bb359626520d2..f36b5079275c1 100644 --- a/.github/workflows/cluster-it-1c3d.yml +++ b/.github/workflows/cluster-it-1c3d.yml @@ -59,6 +59,7 @@ jobs: -DskipUTs \ -DintegrationTest.forkCount=6 -DConfigNodeMaxHeapSize=1024 -DDataNodeMaxHeapSize=1024 \ -pl integration-test \ + -e \ -am -PClusterIT - name: Upload Artifact if: failure() From db24596058ca8c724adee03bb2a08e302bace1be Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 21:37:15 +0800 Subject: [PATCH 11/18] change path Signed-off-by: Weihao Li <18110526956@163.com> --- integration-test/src/assembly/mpp-share.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-test/src/assembly/mpp-share.xml b/integration-test/src/assembly/mpp-share.xml index ebe153e71be6f..599b238187871 100644 --- a/integration-test/src/assembly/mpp-share.xml +++ b/integration-test/src/assembly/mpp-share.xml @@ -32,7 +32,7 @@ - ${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + ../external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar lib From 162b47e3134bb90ccb3afed219e4de08fdcd9c88 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Mon, 19 Jan 2026 21:52:16 +0800 Subject: [PATCH 12/18] change path Signed-off-by: Weihao Li <18110526956@163.com> --- integration-test/src/assembly/mpp-share.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-test/src/assembly/mpp-share.xml b/integration-test/src/assembly/mpp-share.xml index 599b238187871..96ac13e64d179 100644 --- a/integration-test/src/assembly/mpp-share.xml +++ b/integration-test/src/assembly/mpp-share.xml @@ -32,7 +32,7 @@ - ../external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar + ${project.basedir}/../external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar lib From ab25b3ec52cedab62ebfd1e275a361eaeef53547 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 11:10:35 +0800 Subject: [PATCH 13/18] fix Signed-off-by: Weihao Li <18110526956@163.com> --- .github/workflows/cluster-it-1c1d.yml | 3 +-- .github/workflows/cluster-it-1c3d.yml | 1 - external-service-impl/mqtt/pom.xml | 4 ++-- external-service-impl/pom.xml | 4 ++-- integration-test/pom.xml | 7 +++++++ .../externalservice/BuiltinExternalServices.java | 12 ++++++++---- .../ExternalServiceManagementService.java | 4 ++-- 7 files changed, 22 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cluster-it-1c1d.yml b/.github/workflows/cluster-it-1c1d.yml index 42feb2f77a40e..a2989a8e81c92 100644 --- a/.github/workflows/cluster-it-1c1d.yml +++ b/.github/workflows/cluster-it-1c1d.yml @@ -79,8 +79,7 @@ jobs: -DskipUTs \ -DintegrationTest.forkCount=2 \ -pl integration-test \ - -am \ - -X + -am - name: Upload Artifact if: failure() uses: actions/upload-artifact@v4 diff --git a/.github/workflows/cluster-it-1c3d.yml b/.github/workflows/cluster-it-1c3d.yml index f36b5079275c1..bb359626520d2 100644 --- a/.github/workflows/cluster-it-1c3d.yml +++ b/.github/workflows/cluster-it-1c3d.yml @@ -59,7 +59,6 @@ jobs: -DskipUTs \ -DintegrationTest.forkCount=6 -DConfigNodeMaxHeapSize=1024 -DDataNodeMaxHeapSize=1024 \ -pl integration-test \ - -e \ -am -PClusterIT - name: Upload Artifact if: failure() diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 1acd9101e2716..ed9c5cb1ba7e2 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -29,8 +29,8 @@ mqtt IoTDB: External-Service-Impl: MQTT - 11 - 11 + 8 + 8 UTF-8 diff --git a/external-service-impl/pom.xml b/external-service-impl/pom.xml index b2191a28d0d96..986522e6275d2 100644 --- a/external-service-impl/pom.xml +++ b/external-service-impl/pom.xml @@ -33,8 +33,8 @@ mqtt - 11 - 11 + 8 + 8 UTF-8 diff --git a/integration-test/pom.xml b/integration-test/pom.xml index 203ce2e11dbf9..c82a63c3f3b15 100644 --- a/integration-test/pom.xml +++ b/integration-test/pom.xml @@ -232,6 +232,13 @@ external-service-api 2.0.7-SNAPSHOT + + org.apache.iotdb + mqtt + 2.0.7-SNAPSHOT + + provided + diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java index 76940755e4a19..4dee890e65fd8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java @@ -19,16 +19,20 @@ package org.apache.iotdb.db.service.externalservice; -import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor; +import org.apache.iotdb.db.conf.IoTDBDescriptor; import java.util.function.Supplier; public enum BuiltinExternalServices { - MQTT("MQTT", "org.apache.iotdb.mqtt.MQTTService", () -> true), + MQTT( + "MQTT", + "org.apache.iotdb.mqtt.MQTTService", + IoTDBDescriptor.getInstance().getConfig()::isEnableMQTTService), REST( "REST", - "org.apache.iotdb.mqtt.RestService", - IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService); + "org.apache.iotdb.rest.RestService", + // IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService + () -> false); private final String serviceName; private final String className; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java index 234d81d82c0e2..c7cb3497b4c9f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java @@ -73,10 +73,10 @@ private ExternalServiceManagementService(String libRoot) { this.serviceInfos = new HashMap<>(); restoreBuiltInServices(); this.libRoot = libRoot; - makDir(libRoot); + makeDir(libRoot); } - private static void makDir(String dir) { + private static void makeDir(String dir) { try { SystemFileFactory.INSTANCE.makeDirIfNecessary(dir); } catch (IOException e) { From cefeba4d3ba345f69cceda4db6e96ba9673bbac6 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 11:31:31 +0800 Subject: [PATCH 14/18] add transmitted dependencies declaration Signed-off-by: Weihao Li <18110526956@163.com> --- external-service-impl/mqtt/pom.xml | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index ed9c5cb1ba7e2..bc3de95ff1f92 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -77,12 +77,66 @@ + + io.netty + netty-codec-mqtt + org.apache.iotdb iotdb-server provided 2.0.7-SNAPSHOT + + com.google.code.gson + gson + provided + + + io.netty + netty-buffer + provided + + + org.apache.iotdb + iotdb-thrift-commons + 2.0.7-SNAPSHOT + provided + + + org.apache.tsfile + tsfile + ${tsfile.version} + provided + + + com.google.guava + guava + provided + + + org.apache.iotdb + iotdb-thrift + 2.0.7-SNAPSHOT + provided + + + org.apache.iotdb + node-commons + 2.0.7-SNAPSHOT + provided + + + org.slf4j + slf4j-api + provided + + + org.apache.iotdb + service-rpc + 2.0.7-SNAPSHOT + provided + From 37e5c202f5e4f7a7e409c0725edee9120a80705d Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 12:28:47 +0800 Subject: [PATCH 15/18] fix copilot Signed-off-by: Weihao Li <18110526956@163.com> --- external-service-impl/mqtt/pom.xml | 6 ++++++ .../externalservice/ExternalServiceManagementService.java | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index bc3de95ff1f92..54024c6cd486e 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -109,6 +109,12 @@ ${tsfile.version} provided + + org.apache.tsfile + common + ${tsfile.version} + provided + com.google.guava guava diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java index c7cb3497b4c9f..40859f3c7a39c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java @@ -187,6 +187,8 @@ public void startService(String serviceName) throws ClientManagerException, TExc private IExternalService createExternalServiceInstance(String serviceName, String className) { // close ClassLoader automatically to release the file handle try { + // Remind: this classLoader should be closed when service is dropped after user-defined + // service supported ExternalServiceClassLoader classLoader = new ExternalServiceClassLoader(libRoot); return (IExternalService) Class.forName(className, true, classLoader).getDeclaredConstructor().newInstance(); @@ -333,15 +335,15 @@ public void restoreRunningServiceInstance() { IExternalService serviceInstance = createExternalServiceInstance( serviceInfo.getServiceName(), serviceInfo.getClassName()); + checkState(serviceInstance != null, INSTANCE_NULL_ERROR_MSG); serviceInfo.setServiceInstance(serviceInstance); + serviceInstance.start(); } finally { // set STOPPED to avoid the case: service is RUNNING, but its instance is null if (serviceInfo.getServiceInstance() == null) { serviceInfo.setState(STOPPED); } } - - serviceInfo.getServiceInstance().start(); } }); } From 04904b16b3ca5a7739fc80f13bac0f3aeb032580 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 12:35:19 +0800 Subject: [PATCH 16/18] add dependency for Distribution Signed-off-by: Weihao Li <18110526956@163.com> --- distribution/pom.xml | 6 ++++++ .../externalservice/ExternalServiceManagementService.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/distribution/pom.xml b/distribution/pom.xml index 9d458cf8a071b..025a67b379d66 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -53,6 +53,12 @@ library-udf 2.0.7-SNAPSHOT + + org.apache.iotdb + mqtt + 2.0.7-SNAPSHOT + provided + diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java index 40859f3c7a39c..54cc576c048de 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/ExternalServiceManagementService.java @@ -353,7 +353,7 @@ public void stopRunningServices() { .values() .forEach( serviceInfo -> { - // start services with RUNNING state + // stop services with RUNNING state if (serviceInfo.getState() == RUNNING) { IExternalService serviceInstance = serviceInfo.getServiceInstance(); checkState(serviceInstance != null, INSTANCE_NULL_ERROR_MSG); From daaa07aab64196281282c312afc1cd4958da2c97 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 14:15:24 +0800 Subject: [PATCH 17/18] ignore common Signed-off-by: Weihao Li <18110526956@163.com> --- external-service-impl/mqtt/pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 54024c6cd486e..0d8913a805cab 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -166,6 +166,15 @@ + + org.apache.maven.plugins + maven-dependency-plugin + + + org.apache.tsfile:common + + + From 13bad13961c58813408be7b24a58e1ee691c8368 Mon Sep 17 00:00:00 2001 From: Weihao Li <18110526956@163.com> Date: Tue, 20 Jan 2026 17:16:53 +0800 Subject: [PATCH 18/18] undeclare netty-codec-mqtt to reduce jar size(1.6MB) Signed-off-by: Weihao Li <18110526956@163.com> --- external-service-impl/mqtt/pom.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/external-service-impl/mqtt/pom.xml b/external-service-impl/mqtt/pom.xml index 0d8913a805cab..5ec51069b212e 100644 --- a/external-service-impl/mqtt/pom.xml +++ b/external-service-impl/mqtt/pom.xml @@ -77,10 +77,6 @@ - - io.netty - netty-codec-mqtt - org.apache.iotdb iotdb-server @@ -171,6 +167,7 @@ maven-dependency-plugin + io.netty:netty-codec-mqtt org.apache.tsfile:common