This is an automated email from the ASF dual-hosted git repository.
HTHou pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 2162b8d7bec [To dev/1.3] Update thrift to 0.23.0 (#18446)
2162b8d7bec is described below
commit 2162b8d7becb33eb9faab023509b82651fd41954
Author: Haonan <[email protected]>
AuthorDate: Wed Aug 12 11:08:41 2026 +0800
[To dev/1.3] Update thrift to 0.23.0 (#18446)
---
LICENSE-binary | 2 +-
integration-test/pom.xml | 10 +++++
iotdb-client/jdbc/src/main/feature/feature.xml | 2 +-
.../iotdb/rpc/TNonblockingSocketWrapper.java | 4 +-
.../java/org/apache/iotdb/rpc/TSocketWrapper.java | 4 +-
.../thrift/ConfigNodeRPCServiceHandler.java | 3 +-
.../iot/service/IoTConsensusRPCServiceHandler.java | 4 +-
.../service/PipeConsensusRPCServiceHandler.java | 4 +-
.../thrift/handler/BaseServerContextHandler.java | 8 ++--
.../handler/InternalServiceThriftHandler.java | 3 +-
.../MPPDataExchangeServiceThriftHandler.java | 3 +-
.../iotdb/commons/service/NoopServerContext.java | 48 ++++++++++++++++++++++
.../client/mock/MockInternalRPCService.java | 7 +++-
.../commons/service/NoopServerContextTest.java} | 44 ++++++++------------
pom.xml | 45 +++++++++++++-------
15 files changed, 136 insertions(+), 55 deletions(-)
diff --git a/LICENSE-binary b/LICENSE-binary
index e64118ab439..3f412a0fc6b 100644
--- a/LICENSE-binary
+++ b/LICENSE-binary
@@ -236,7 +236,7 @@ org.eclipse.jetty:jetty-servlet:9.4.58.v20250814
org.eclipse.jetty:jetty-util:9.4.58.v20250814
com.google.code.findbugs:jsr305:3.0.2
com.librato.metrics:librato-java:2.1.0
-org.apache.thrift:libthrift:0.14.1
+org.apache.thrift:libthrift:0.23.0
io.dropwizard.metrics:metrics-core:4.2.19
io.dropwizard.metrics:metrics-jvm:3.2.2
com.librato.metrics:metrics-librato:5.1.0
diff --git a/integration-test/pom.xml b/integration-test/pom.xml
index 620df0857a2..d0c648ebddb 100644
--- a/integration-test/pom.xml
+++ b/integration-test/pom.xml
@@ -214,6 +214,16 @@
<artifactId>jcip-annotations</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
diff --git a/iotdb-client/jdbc/src/main/feature/feature.xml
b/iotdb-client/jdbc/src/main/feature/feature.xml
index 033fe46d47c..b77e2690148 100644
--- a/iotdb-client/jdbc/src/main/feature/feature.xml
+++ b/iotdb-client/jdbc/src/main/feature/feature.xml
@@ -27,7 +27,7 @@
<bundle>mvn:org.apache.iotdb/service-rpc/${project.version}</bundle>
<bundle>mvn:org.apache.iotdb/iotdb-thrift/${project.version}</bundle>
<bundle>mvn:org.apache.iotdb/hadoop-tsfile/${project.version}</bundle>
- <bundle>mvn:org.apache.thrift/libthrift/0.14.1</bundle>
+ <bundle>mvn:org.apache.thrift/libthrift/0.23.0</bundle>
<bundle>mvn:org.xerial.snappy/snappy-java/1.1.8.4</bundle>
<bundle>mvn:commons-io/commons-io/2.5</bundle>
<bundle>wrap:mvn:org.apache.hadoop/hadoop-core/1.2.1</bundle>
diff --git
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TNonblockingSocketWrapper.java
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TNonblockingSocketWrapper.java
index 5f2b6cde2f4..a0e57a6e306 100644
---
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TNonblockingSocketWrapper.java
+++
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TNonblockingSocketWrapper.java
@@ -26,8 +26,8 @@ import java.io.IOException;
import java.nio.channels.SocketChannel;
/**
- * In Thrift 0.14.1, TNonblockingSocket's constructor throws a never-happened
exception. So, we
- * screen the exception https://issues.apache.org/jira/browse/THRIFT-5412
+ * TNonblockingSocket's constructor declares a TTransportException for
compatibility, but this code
+ * path is not expected to throw one. See
https://issues.apache.org/jira/browse/THRIFT-5412.
*/
public class TNonblockingSocketWrapper {
diff --git
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSocketWrapper.java
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSocketWrapper.java
index df25d503e43..42a4e87b004 100644
---
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSocketWrapper.java
+++
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSocketWrapper.java
@@ -24,8 +24,8 @@ import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransportException;
/**
- * In Thrift 0.14.1, TSocket's constructor throws a never-happened exception.
So, we screen the
- * exception https://issues.apache.org/jira/browse/THRIFT-5412
+ * TSocket's constructor declares a TTransportException for compatibility, but
this code path is not
+ * expected to throw one. See
https://issues.apache.org/jira/browse/THRIFT-5412.
*/
public class TSocketWrapper {
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
index abe4c03f861..c373dba5a3f 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
@@ -17,6 +17,7 @@
package org.apache.iotdb.confignode.service.thrift;
+import org.apache.iotdb.commons.service.NoopServerContext;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.thrift.protocol.TProtocol;
@@ -37,7 +38,7 @@ public class ConfigNodeRPCServiceHandler implements
TServerEventHandler {
@Override
public ServerContext createContext(TProtocol input, TProtocol output) {
thriftConnectionNumber.incrementAndGet();
- return null;
+ return NoopServerContext.INSTANCE;
}
@Override
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceHandler.java
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceHandler.java
index 621f887de3b..5e9f5c1b2bb 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceHandler.java
+++
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceHandler.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.consensus.iot.service;
+import org.apache.iotdb.commons.service.NoopServerContext;
+
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.server.ServerContext;
import org.apache.thrift.server.TServerEventHandler;
@@ -37,7 +39,7 @@ public class IoTConsensusRPCServiceHandler implements
TServerEventHandler {
@Override
public ServerContext createContext(TProtocol input, TProtocol output) {
- return null;
+ return NoopServerContext.INSTANCE;
}
@Override
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
index fd6a6426979..666f9100157 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
+++
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.consensus.pipe.service;
+import org.apache.iotdb.commons.service.NoopServerContext;
+
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.server.ServerContext;
import org.apache.thrift.server.TServerEventHandler;
@@ -37,7 +39,7 @@ public class PipeConsensusRPCServiceHandler implements
TServerEventHandler {
@Override
public ServerContext createContext(TProtocol input, TProtocol output) {
- return null;
+ return NoopServerContext.INSTANCE;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/BaseServerContextHandler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/BaseServerContextHandler.java
index e633caa45f6..e1bca279c5c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/BaseServerContextHandler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/BaseServerContextHandler.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.protocol.thrift.handler;
+import org.apache.iotdb.commons.service.NoopServerContext;
import org.apache.iotdb.db.protocol.session.ClientSession;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.external.api.thrift.JudgableServerContext;
@@ -62,16 +63,17 @@ public class BaseServerContextHandler {
getSessionManager().registerSession(new ClientSession(socket));
if (factory != null) {
context = factory.newServerContext(out, socket);
- if (!context.whenConnect()) {
+ if (context != null && !context.whenConnect()) {
return context;
}
}
- return context;
+ return context == null ? NoopServerContext.INSTANCE : context;
}
public void deleteContext(ServerContext context, TProtocol in, TProtocol
out) {
getSessionManager().removeCurrSession();
- if (context != null && factory != null) {
+
+ if (context instanceof JudgableServerContext) {
((JudgableServerContext) context).whenDisconnect();
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/InternalServiceThriftHandler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/InternalServiceThriftHandler.java
index d53d3126502..58130eb91cc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/InternalServiceThriftHandler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/handler/InternalServiceThriftHandler.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.protocol.thrift.handler;
+import org.apache.iotdb.commons.service.NoopServerContext;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.thrift.protocol.TProtocol;
@@ -45,7 +46,7 @@ public class InternalServiceThriftHandler implements
TServerEventHandler {
@Override
public ServerContext createContext(TProtocol tProtocol, TProtocol
tProtocol1) {
thriftConnectionNumber.incrementAndGet();
- return null;
+ return NoopServerContext.INSTANCE;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/MPPDataExchangeServiceThriftHandler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/MPPDataExchangeServiceThriftHandler.java
index 2c3d358759a..999ad37d7ae 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/MPPDataExchangeServiceThriftHandler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/MPPDataExchangeServiceThriftHandler.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.queryengine.execution.exchange;
+import org.apache.iotdb.commons.service.NoopServerContext;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.thrift.protocol.TProtocol;
@@ -44,7 +45,7 @@ public class MPPDataExchangeServiceThriftHandler implements
TServerEventHandler
@Override
public ServerContext createContext(TProtocol input, TProtocol output) {
thriftConnectionNumber.incrementAndGet();
- return null;
+ return NoopServerContext.INSTANCE;
}
@Override
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/NoopServerContext.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/NoopServerContext.java
new file mode 100644
index 00000000000..70ea8afef03
--- /dev/null
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/NoopServerContext.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.commons.service;
+
+import org.apache.thrift.server.ServerContext;
+
+/**
+ * Shared {@link ServerContext} implementation for Thrift handlers that do not
need per-connection
+ * state.
+ *
+ * <p>Thrift 0.23 server implementations expect {@code createContext} to
return a non-null context,
+ * even when the event handler only uses connection lifecycle callbacks. This
no-op implementation
+ * keeps those handlers explicit without adding a custom context object for
each connection.
+ */
+public final class NoopServerContext implements ServerContext {
+
+ /** Singleton instance reused by handlers that do not attach state to the
connection. */
+ public static final NoopServerContext INSTANCE = new NoopServerContext();
+
+ private NoopServerContext() {}
+
+ @Override
+ public <T> T unwrap(Class<T> iface) {
+ return iface.isInstance(this) ? iface.cast(this) : null;
+ }
+
+ @Override
+ public boolean isWrapperFor(Class<?> iface) {
+ return iface.isInstance(this);
+ }
+}
diff --git
a/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/client/mock/MockInternalRPCService.java
b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/client/mock/MockInternalRPCService.java
index 386a212436f..0b5b57c4930 100644
---
a/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/client/mock/MockInternalRPCService.java
+++
b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/client/mock/MockInternalRPCService.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.commons.client.mock;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.concurrent.ThreadName;
import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
+import org.apache.iotdb.commons.service.NoopServerContext;
import org.apache.iotdb.commons.service.ServiceType;
import org.apache.iotdb.commons.service.ThriftService;
import org.apache.iotdb.commons.service.ThriftServiceThread;
@@ -30,7 +31,9 @@ import org.apache.iotdb.rpc.DeepCopyRpcTransportFactory;
import org.apache.thrift.server.TServerEventHandler;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class MockInternalRPCService extends ThriftService implements
MockInternalRPCServiceMBean {
@@ -60,6 +63,8 @@ public class MockInternalRPCService extends ThriftService
implements MockInterna
@Override
public void initThriftServiceThread() throws IllegalAccessException {
try {
+ TServerEventHandler serverEventHandler = mock(TServerEventHandler.class);
+ when(serverEventHandler.createContext(any(),
any())).thenReturn(NoopServerContext.INSTANCE);
thriftServiceThread =
new ThriftServiceThread(
processor,
@@ -69,7 +74,7 @@ public class MockInternalRPCService extends ThriftService
implements MockInterna
getBindPort(),
65535,
60,
- mock(TServerEventHandler.class),
+ serverEventHandler,
false,
DeepCopyRpcTransportFactory.INSTANCE);
} catch (RPCServiceException e) {
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/service/NoopServerContextTest.java
similarity index 50%
copy from
iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
copy to
iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/service/NoopServerContextTest.java
index fd6a6426979..b8a7555c14f 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/pipe/service/PipeConsensusRPCServiceHandler.java
+++
b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/service/NoopServerContextTest.java
@@ -17,35 +17,27 @@
* under the License.
*/
-package org.apache.iotdb.consensus.pipe.service;
+package org.apache.iotdb.commons.service;
-import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.server.ServerContext;
-import org.apache.thrift.server.TServerEventHandler;
-import org.apache.thrift.transport.TTransport;
-
-public class PipeConsensusRPCServiceHandler implements TServerEventHandler {
-
- private final PipeConsensusRPCServiceProcessor processor;
-
- public PipeConsensusRPCServiceHandler(PipeConsensusRPCServiceProcessor
processor) {
- this.processor = processor;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class NoopServerContextTest {
+
+ @Test
+ public void testUnwrap() {
+ Assert.assertSame(
+ NoopServerContext.INSTANCE,
NoopServerContext.INSTANCE.unwrap(NoopServerContext.class));
+ Assert.assertSame(
+ NoopServerContext.INSTANCE,
NoopServerContext.INSTANCE.unwrap(ServerContext.class));
+ Assert.assertNull(NoopServerContext.INSTANCE.unwrap(String.class));
}
- @Override
- public void preServe() {}
-
- @Override
- public ServerContext createContext(TProtocol input, TProtocol output) {
- return null;
+ @Test
+ public void testIsWrapperFor() {
+
Assert.assertTrue(NoopServerContext.INSTANCE.isWrapperFor(NoopServerContext.class));
+
Assert.assertTrue(NoopServerContext.INSTANCE.isWrapperFor(ServerContext.class));
+ Assert.assertFalse(NoopServerContext.INSTANCE.isWrapperFor(String.class));
}
-
- @Override
- public void deleteContext(ServerContext serverContext, TProtocol input,
TProtocol output) {
- processor.handleExit();
- }
-
- @Override
- public void processContext(
- ServerContext serverContext, TTransport inputTransport, TTransport
outputTransport) {}
}
diff --git a/pom.xml b/pom.xml
index 11ffc5335b2..c073263bdba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
This is the version of the thrift binary, that we release separately
from here:
https://github.com/apache/iotdb-bin-resources/tree/main/iotdb-tools-thrift
-->
- <iotdb-tools-thrift.version>0.14.1.0</iotdb-tools-thrift.version>
+ <iotdb-tools-thrift.version>0.23.0.0</iotdb-tools-thrift.version>
<jackson.version>2.16.2</jackson.version>
<!-- This is the last version to support the javax namespace -->
<jakarta.servlet-api.version>4.0.4</jakarta.servlet-api.version>
@@ -162,13 +162,7 @@
<swagger.version>1.6.14</swagger.version>
<thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
<thrift.exec.absolute.path/>
- <!--
- Thrift 0.17.0 was the last version that could be used in Java 8
applications,
- However Thrift 0.17.0 has an invalid entry in the META-INF/MANIFEST.mf
file.
- All versions between 0.17.0 and 0.14.1 have know vulnerabilities, so for
now
- we'll stay at 0.14.1.
- -->
- <thrift.version>0.14.1</thrift.version>
+ <thrift.version>0.23.0</thrift.version>
<xz.version>1.9</xz.version>
<zstd-jni.version>1.5.6-3</zstd-jni.version>
<tsfile.version>1.1.4-260130-SNAPSHOT</tsfile.version>
@@ -197,15 +191,38 @@
<artifactId>libthrift</artifactId>
<version>${thrift.version}</version>
<exclusions>
- <!-- Seemed suspicious to have this dependency in -->
+ <!-- We don't use thrift HTTP client or servlet
transports. -->
+ <exclusion>
+ <groupId>org.apache.httpcomponents.client5</groupId>
+ <artifactId>httpclient5</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.httpcomponents.core5</groupId>
+ <artifactId>httpcore5</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.httpcomponents.core5</groupId>
+ <artifactId>httpcore5-h2</artifactId>
+ </exclusion>
<exclusion>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-core</artifactId>
+ <groupId>jakarta.servlet</groupId>
+ <artifactId>jakarta.servlet-api</artifactId>
</exclusion>
- <!-- We don't want the old javax packages -->
+ <!--
+ Thrift generated Java sources suppress @Generated
annotations.
+ IoTDB does not use libthrift APIs that require Jakarta
annotations.
+ -->
+ <exclusion>
+ <groupId>jakarta.annotation</groupId>
+ <artifactId>jakarta.annotation-api</artifactId>
+ </exclusion>
+ <!--
+ commons-lang3 is only used by Thrift's partial
deserialization runtime.
+ IoTDB does not use org.apache.thrift.partial APIs.
+ -->
<exclusion>
- <groupId>javax.annotation</groupId>
- <artifactId>javax.annotation-api</artifactId>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>