This is an automated email from the ASF dual-hosted git repository.
davidzollo pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 95c4ea206a [Fix][Core] Extend serialVersionUID checker coverage
(#11257)
95c4ea206a is described below
commit 95c4ea206a903797293a2b5caf84917081e2d18a
Author: Jast <[email protected]>
AuthorDate: Tue Jul 7 21:28:58 2026 +0800
[Fix][Core] Extend serialVersionUID checker coverage (#11257)
---
.../seatunnel/api/SerialVersionUIDCheckerTest.java | 211 +++++++++++++++++++--
.../cdc/base/config/JdbcSourceTableConfig.java | 2 +
.../config/MongodbSourceConfigProvider.java | 2 +
.../cdc/mysql/config/MySqlSourceConfigFactory.java | 2 +
.../config/PostgresSourceConfigFactory.java | 2 +
.../config/SqlServerSourceConfigFactory.java | 2 +
.../cdc/tidb/source/config/TiDBSourceConfig.java | 2 +
.../jdbc/config/JdbcSourceTableConfig.java | 2 +
.../seatunnel/engine/common/job/JobResult.java | 1 +
.../seatunnel/engine/common/job/JobStateEvent.java | 1 +
.../seatunnel/engine/common/job/JobStatusData.java | 2 +
.../engine/core/job/ConnectorJarIdentifier.java | 1 +
.../org/apache/seatunnel/engine/core/job/Edge.java | 1 +
.../engine/core/job/ExecutionAddress.java | 2 +
.../seatunnel/engine/core/job/JobDAGInfo.java | 2 +
.../engine/core/job/JobPipelineCheckpointData.java | 6 +
.../engine/core/job/PipelineExecutionState.java | 1 +
.../seatunnel/engine/core/job/VertexInfo.java | 1 +
18 files changed, 231 insertions(+), 12 deletions(-)
diff --git
a/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/SerialVersionUIDCheckerTest.java
b/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/SerialVersionUIDCheckerTest.java
index 65eb39f4b3..dc13a1d9b6 100644
---
a/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/SerialVersionUIDCheckerTest.java
+++
b/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/SerialVersionUIDCheckerTest.java
@@ -45,6 +45,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -53,6 +54,7 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@ExtendWith(SerialVersionUIDCheckerTest.TestResultLogger.class)
@@ -62,6 +64,66 @@ public class SerialVersionUIDCheckerTest {
private static final String CONNECTOR_DIR = "seatunnel-connectors-v2";
private static final String JAVA_PATH_FRAGMENT =
"src" + File.separator + "main" + File.separator + "java";
+ private static final String CONNECTOR_CDC_DIR =
+ CONNECTOR_DIR + File.separator + "connector-cdc";
+ private static final String CONNECTOR_JDBC_CONFIG_DIR =
+ CONNECTOR_DIR
+ + File.separator
+ + "connector-jdbc"
+ + File.separator
+ + JAVA_PATH_FRAGMENT
+ + File.separator
+ + "org"
+ + File.separator
+ + "apache"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "connectors"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "jdbc"
+ + File.separator
+ + "config";
+ private static final List<String> CHECKED_PATHS =
+ Arrays.asList(
+ CONNECTOR_CDC_DIR,
+ CONNECTOR_JDBC_CONFIG_DIR,
+ "seatunnel-engine"
+ + File.separator
+ + "seatunnel-engine-core"
+ + File.separator
+ + JAVA_PATH_FRAGMENT
+ + File.separator
+ + "org"
+ + File.separator
+ + "apache"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "engine"
+ + File.separator
+ + "core"
+ + File.separator
+ + "job",
+ "seatunnel-engine"
+ + File.separator
+ + "seatunnel-engine-common"
+ + File.separator
+ + JAVA_PATH_FRAGMENT
+ + File.separator
+ + "org"
+ + File.separator
+ + "apache"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "engine"
+ + File.separator
+ + "common"
+ + File.separator
+ + "job");
private static final JavaParser JAVA_PARSER;
private static final Set<String> checkedClasses = new HashSet<>();
private static final Map<String, ClassOrInterfaceDeclaration>
classDeclarationMap =
@@ -95,21 +157,21 @@ public class SerialVersionUIDCheckerTest {
@Test
public void checkSerialVersionUID() {
List<String> missingSerialVersionUID = new ArrayList<>();
- List<Path> connectorClassPaths = findConnectorClassPaths();
- LOG.info("Found {} connector class files to check",
connectorClassPaths.size());
+ List<Path> classPaths = findClassPaths();
+ LOG.info("Found {} class files to check", classPaths.size());
// First, populate the classDeclarationMap with all classes
- for (Path path : connectorClassPaths) {
+ for (Path path : classPaths) {
populateClassDeclarationMap(path);
}
LOG.info("Populated class declaration map with {} classes",
classDeclarationMap.size());
// Then check each class path for serialVersionUID
- for (Path path : connectorClassPaths) {
+ for (Path path : classPaths) {
checkClassPath(path, missingSerialVersionUID);
}
- LOG.info("Check completed. Checked {} connector classes.",
connectorClassPaths.size());
+ LOG.info("Check completed. Checked {} class files.",
classPaths.size());
if (!missingSerialVersionUID.isEmpty()) {
String errorMessage =
generateErrorMessage(missingSerialVersionUID);
LOG.error("Test failed: {}", errorMessage);
@@ -118,18 +180,34 @@ public class SerialVersionUIDCheckerTest {
LOG.info("All checked classes have correct serialVersionUID.");
}
- private List<Path> findConnectorClassPaths() {
+ @Test
+ public void checkJdbcConfigPathIsCovered() {
+ List<Path> classPaths = findClassPaths();
+
+ assertTrue(
+ classPaths.stream()
+ .anyMatch(
+ path ->
+ path.endsWith(
+ Paths.get(
+ "jdbc",
+ "config",
+
"JdbcConnectionConfig.java"))),
+ "JDBC config classes should be covered by serialVersionUID
checker.");
+ }
+
+ private List<Path> findClassPaths() {
try (Stream<Path> paths = Files.walk(Paths.get(".."),
FileVisitOption.FOLLOW_LINKS)) {
return paths.filter(
path -> {
String pathString = path.toString();
return pathString.endsWith(JAVA_FILE_EXTENSION)
- && pathString.contains(CONNECTOR_DIR)
- &&
pathString.contains(JAVA_PATH_FRAGMENT);
+ &&
pathString.contains(JAVA_PATH_FRAGMENT)
+ &&
CHECKED_PATHS.stream().anyMatch(pathString::contains);
})
.collect(Collectors.toList());
} catch (IOException e) {
- throw new RuntimeException("Failed to walk through connector
directories", e);
+ throw new RuntimeException("Failed to walk through class
directories", e);
}
}
@@ -158,8 +236,9 @@ public class SerialVersionUIDCheckerTest {
}
/**
- * Check the class path for classes that implement SeaTunnelSource or
SeaTunnelSink and verify
- * they have serialVersionUID.
+ * Check classes that are serialized in job graphs and state restore
paths. Source/sink generic
+ * state remains checked, and concrete connector config/config-factory
classes plus engine job
+ * graph classes are checked directly.
*/
private void checkClassPath(Path path, List<String>
missingSerialVersionUID) {
try {
@@ -172,6 +251,10 @@ public class SerialVersionUIDCheckerTest {
List<ClassOrInterfaceDeclaration> classes =
compilationUnit.findAll(ClassOrInterfaceDeclaration.class);
for (ClassOrInterfaceDeclaration
classDeclaration : classes) {
+ if (shouldCheckClass(path,
classDeclaration)) {
+ checkClassDeclaration(
+ classDeclaration,
missingSerialVersionUID);
+ }
if
(implementsSeaTunnelSourceOrSink(classDeclaration)) {
checkImplementedTypes(
classDeclaration,
missingSerialVersionUID);
@@ -183,6 +266,81 @@ public class SerialVersionUIDCheckerTest {
}
}
+ private boolean shouldCheckClass(Path path, ClassOrInterfaceDeclaration
classDeclaration) {
+ try {
+ if (classDeclaration.isInterface()) {
+ return false;
+ }
+ ResolvedReferenceTypeDeclaration typeDeclaration =
classDeclaration.resolve();
+ if (isAbstractClass(typeDeclaration) ||
!isSerializable(typeDeclaration)) {
+ return false;
+ }
+ if (isEngineJobClass(path)) {
+ return true;
+ }
+ return isConnectorConfigOrFactory(typeDeclaration);
+ } catch (Exception e) {
+ LOG.warn(
+ "Could not resolve class: {} in file: {}",
+ classDeclaration.getNameAsString(),
+ path,
+ e);
+ return false;
+ }
+ }
+
+ private boolean isEngineJobClass(Path path) {
+ String pathString = path.toString();
+ return pathString.contains(
+ "seatunnel-engine"
+ + File.separator
+ + "seatunnel-engine-core"
+ + File.separator
+ + JAVA_PATH_FRAGMENT
+ + File.separator
+ + "org"
+ + File.separator
+ + "apache"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "engine"
+ + File.separator
+ + "core"
+ + File.separator
+ + "job")
+ || pathString.contains(
+ "seatunnel-engine"
+ + File.separator
+ + "seatunnel-engine-common"
+ + File.separator
+ + JAVA_PATH_FRAGMENT
+ + File.separator
+ + "org"
+ + File.separator
+ + "apache"
+ + File.separator
+ + "seatunnel"
+ + File.separator
+ + "engine"
+ + File.separator
+ + "common"
+ + File.separator
+ + "job");
+ }
+
+ private boolean
isConnectorConfigOrFactory(ResolvedReferenceTypeDeclaration typeDeclaration) {
+ String className = typeDeclaration.getClassName();
+ return className.endsWith("Config")
+ || className.endsWith("ConfigFactory")
+ || hasAncestor(
+ typeDeclaration,
+
"org.apache.seatunnel.connectors.cdc.base.config.SourceConfig")
+ || hasAncestor(
+ typeDeclaration,
+
"org.apache.seatunnel.connectors.cdc.base.config.SourceConfig.Factory");
+ }
+
private boolean
implementsSeaTunnelSourceOrSink(ClassOrInterfaceDeclaration classDeclaration) {
return classDeclaration.getImplementedTypes().stream()
.anyMatch(
@@ -248,6 +406,24 @@ public class SerialVersionUIDCheckerTest {
}
}
+ private void checkClassDeclaration(
+ ClassOrInterfaceDeclaration classDeclaration, List<String>
missingSerialVersionUID) {
+ try {
+ ResolvedReferenceTypeDeclaration typeDeclaration =
classDeclaration.resolve();
+ String className = typeDeclaration.getQualifiedName();
+ if (!checkedClasses.contains(className)) {
+ if (!hasSerialVersionUID(typeDeclaration)) {
+ missingSerialVersionUID.add(className);
+ LOG.warn("Class {} is missing serialVersionUID field",
className);
+ }
+ checkedClasses.add(className);
+ }
+ } catch (Exception e) {
+ LOG.warn(
+ "Could not check class declaration: {}",
classDeclaration.getNameAsString(), e);
+ }
+ }
+
private boolean isSerializable(ResolvedReferenceType resolvedType) {
return resolvedType.getQualifiedName().equals("java.io.Serializable")
|| resolvedType.getAllAncestors().stream()
@@ -256,9 +432,20 @@ public class SerialVersionUIDCheckerTest {
ancestor.getQualifiedName().equals("java.io.Serializable"));
}
+ private boolean isSerializable(ResolvedReferenceTypeDeclaration
typeDeclaration) {
+ return
typeDeclaration.getQualifiedName().equals("java.io.Serializable")
+ || hasAncestor(typeDeclaration, "java.io.Serializable");
+ }
+
+ private boolean hasAncestor(
+ ResolvedReferenceTypeDeclaration typeDeclaration, String
ancestorClassName) {
+ return typeDeclaration.getAllAncestors().stream()
+ .anyMatch(ancestor ->
ancestor.getQualifiedName().equals(ancestorClassName));
+ }
+
private boolean hasSerialVersionUID(ResolvedReferenceTypeDeclaration
typeDeclaration) {
return typeDeclaration.isInterface()
- || typeDeclaration.getAllFields().stream()
+ || typeDeclaration.getDeclaredFields().stream()
.anyMatch(field ->
field.getName().equals("serialVersionUID"));
}
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/config/JdbcSourceTableConfig.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/config/JdbcSourceTableConfig.java
index 2c55270bd4..fc0b390399 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/config/JdbcSourceTableConfig.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/config/JdbcSourceTableConfig.java
@@ -24,6 +24,8 @@ import java.util.List;
@Data
public class JdbcSourceTableConfig implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private String table;
private List<String> primaryKeys;
private String snapshotSplitColumn;
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-mongodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mongodb/config/MongodbSourceConfigProvider.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-mongodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mongodb/config/MongodbSourceConfigProvider.java
index e7a69c5e0b..7226bd2f26 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-mongodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mongodb/config/MongodbSourceConfigProvider.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-mongodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mongodb/config/MongodbSourceConfigProvider.java
@@ -40,6 +40,8 @@ public class MongodbSourceConfigProvider {
}
public static class Builder implements
SourceConfig.Factory<MongodbSourceConfig> {
+ private static final long serialVersionUID = 1L;
+
private String hosts;
private String username;
private String password;
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/config/MySqlSourceConfigFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/config/MySqlSourceConfigFactory.java
index b9aa542f1e..64f01a2251 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/config/MySqlSourceConfigFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/config/MySqlSourceConfigFactory.java
@@ -30,6 +30,8 @@ import static
org.apache.seatunnel.shade.com.google.common.base.Preconditions.ch
/** A factory to initialize {@link MySqlSourceConfig}. */
public class MySqlSourceConfigFactory extends JdbcSourceConfigFactory {
+ private static final long serialVersionUID = -6578851046816898665L;
+
public static final String SCHEMA_CHANGE_KEY = "include.schema.changes";
private ServerIdRange serverIdRange;
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-postgres/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/postgres/config/PostgresSourceConfigFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-postgres/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/postgres/config/PostgresSourceConfigFactory.java
index 9838f5a955..99d293e327 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-postgres/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/postgres/config/PostgresSourceConfigFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-postgres/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/postgres/config/PostgresSourceConfigFactory.java
@@ -32,6 +32,8 @@ import static
org.apache.seatunnel.shade.com.google.common.base.Preconditions.ch
public class PostgresSourceConfigFactory extends JdbcSourceConfigFactory {
+ private static final long serialVersionUID = 1L;
+
private static final String DATABASE_SERVER_NAME = "postgres_cdc_source";
private static final String DRIVER_CLASS_NAME = "org.postgresql.Driver";
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/config/SqlServerSourceConfigFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/config/SqlServerSourceConfigFactory.java
index 9de44488cc..8b932bbc82 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/config/SqlServerSourceConfigFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/config/SqlServerSourceConfigFactory.java
@@ -31,6 +31,8 @@ import static
org.apache.seatunnel.shade.com.google.common.base.Preconditions.ch
/** Factory for creating {@link SqlServerSourceConfig}. */
public class SqlServerSourceConfigFactory extends JdbcSourceConfigFactory {
+ private static final long serialVersionUID = 1L;
+
private static final String DATABASE_SERVER_NAME =
"sqlserver_transaction_log_source";
private static final String DRIVER_CLASS_NAME =
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static final String SCHEMA_CHANGE_KEY = "include.schema.changes";
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-tidb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/tidb/source/config/TiDBSourceConfig.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-tidb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/tidb/source/config/TiDBSourceConfig.java
index 26904f277a..ecd1e3b7f7 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-tidb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/tidb/source/config/TiDBSourceConfig.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-tidb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/tidb/source/config/TiDBSourceConfig.java
@@ -35,6 +35,8 @@ import java.io.Serializable;
@NoArgsConstructor
@EqualsAndHashCode
public class TiDBSourceConfig implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private String databaseName;
private String tableName;
private StartupMode startupMode;
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java
index e080135618..fccd3a1117 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java
@@ -37,6 +37,8 @@ import java.util.stream.Collectors;
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class JdbcSourceTableConfig implements Serializable {
+ private static final long serialVersionUID = 2L;
+
private static final int DEFAULT_PARTITION_NUMBER = 10;
@JsonProperty("table_path")
diff --git
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobResult.java
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobResult.java
index 34dc18830c..224fdd2475 100644
---
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobResult.java
+++
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobResult.java
@@ -26,6 +26,7 @@ import java.io.Serializable;
@Data
@AllArgsConstructor
public class JobResult implements Serializable {
+ private static final long serialVersionUID = 1L;
@NonNull private JobStatus status;
diff --git
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStateEvent.java
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStateEvent.java
index fdb90b577f..ae658022d4 100644
---
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStateEvent.java
+++
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStateEvent.java
@@ -28,6 +28,7 @@ import lombok.ToString;
@Setter
@ToString
public class JobStateEvent implements Event {
+ private static final long serialVersionUID = 1L;
private String jobId;
private String jobName;
diff --git
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStatusData.java
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStatusData.java
index f88c4fb779..d275aca763 100644
---
a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStatusData.java
+++
b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/job/JobStatusData.java
@@ -27,6 +27,8 @@ import java.io.Serializable;
@Data
@NoArgsConstructor
public final class JobStatusData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private Long jobId;
private String jobName;
private JobStatus jobStatus;
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ConnectorJarIdentifier.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ConnectorJarIdentifier.java
index 13ffcabf88..f20d2c7aa6 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ConnectorJarIdentifier.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ConnectorJarIdentifier.java
@@ -27,6 +27,7 @@ import java.io.Serializable;
@Setter
@EqualsAndHashCode
public class ConnectorJarIdentifier implements Serializable {
+ private static final long serialVersionUID = 1L;
private byte[] connectorJarID;
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/Edge.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/Edge.java
index 5c9af71bfc..ddf52bc96b 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/Edge.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/Edge.java
@@ -25,6 +25,7 @@ import java.io.Serializable;
@Data
@AllArgsConstructor
public class Edge implements Serializable {
+ private static final long serialVersionUID = 1L;
private Long inputVertexId;
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ExecutionAddress.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ExecutionAddress.java
index 605890c518..1762e14c41 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ExecutionAddress.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/ExecutionAddress.java
@@ -22,6 +22,8 @@ import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
public class ExecutionAddress implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private String hostname;
private int port;
}
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobDAGInfo.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobDAGInfo.java
index 9790f48e39..a1c5c60c8e 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobDAGInfo.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobDAGInfo.java
@@ -35,6 +35,8 @@ import java.util.Set;
@NoArgsConstructor
@Data
public class JobDAGInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
Long jobId;
Map<String, Object> envOptions;
Map<Integer, List<Edge>> pipelineEdges;
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobPipelineCheckpointData.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobPipelineCheckpointData.java
index a9901dd337..1b2723c0af 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobPipelineCheckpointData.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/JobPipelineCheckpointData.java
@@ -38,6 +38,8 @@ import java.util.Map;
@Builder
@AllArgsConstructor
public class JobPipelineCheckpointData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private long jobId;
private int pipelineId;
private long checkpointId;
@@ -52,6 +54,8 @@ public class JobPipelineCheckpointData implements
Serializable {
@Data
@AllArgsConstructor
public static class ActionState implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private List<byte[]> coordinatorState;
private List<ActionSubtaskState> subtaskState;
}
@@ -59,6 +63,8 @@ public class JobPipelineCheckpointData implements
Serializable {
@Data
@AllArgsConstructor
public static class ActionSubtaskState implements Serializable {
+ private static final long serialVersionUID = 1L;
+
private final int index;
private final List<byte[]> state;
}
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/PipelineExecutionState.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/PipelineExecutionState.java
index a470196ed5..239b6db966 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/PipelineExecutionState.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/PipelineExecutionState.java
@@ -23,6 +23,7 @@ import java.io.Serializable;
@Getter
public class PipelineExecutionState implements Serializable {
+ private static final long serialVersionUID = 1L;
private final int pipelineId;
diff --git
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/VertexInfo.java
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/VertexInfo.java
index e7e00e9ef6..d1bd0293c7 100644
---
a/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/VertexInfo.java
+++
b/seatunnel-engine/seatunnel-engine-core/src/main/java/org/apache/seatunnel/engine/core/job/VertexInfo.java
@@ -31,6 +31,7 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
public class VertexInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
private long vertexId;