From 4307b927754cce7b683da24920ca1d459453d412 Mon Sep 17 00:00:00 2001 From: youjin Date: Thu, 25 Dec 2025 16:42:24 +0800 Subject: [PATCH 1/5] [build] Use Unified Jackson in Flink Agents --- api/pom.xml | 1 - .../org/apache/flink/agents/api/Event.java | 7 +++-- .../apache/flink/agents/api/EventContext.java | 4 +-- .../apache/flink/agents/api/InputEvent.java | 4 +-- .../apache/flink/agents/api/OutputEvent.java | 4 +-- .../flink/agents/api/agents/ReActAgent.java | 26 +++++++++---------- .../agents/api/chat/messages/ChatMessage.java | 2 +- .../agents/api/context/MemoryUpdate.java | 4 +-- .../flink/agents/api/prompt/Prompt.java | 8 +++--- .../api/resource/ResourceDescriptor.java | 4 +-- .../flink/agents/api/tools/ToolMetadata.java | 6 ++--- .../agents/api/agents/ReActAgentTest.java | 4 +-- .../flink/agents/api/prompt/PromptTest.java | 4 +-- .../api/resource/ResourceDescriptorTest.java | 4 +-- plan/pom.xml | 5 ---- .../apache/flink/agents/plan/AgentPlan.java | 6 ++--- .../flink/agents/plan/JavaFunction.java | 4 +-- .../flink/agents/plan/actions/Action.java | 4 +-- .../plan/resource/python/PythonTool.java | 4 +-- .../JavaSerializableResourceProvider.java | 6 ++--- .../resourceprovider/ResourceProvider.java | 4 +-- .../serializer/ActionJsonDeserializer.java | 12 ++++----- .../plan/serializer/ActionJsonSerializer.java | 6 ++--- .../serializer/AgentPlanJsonDeserializer.java | 18 ++++++------- .../serializer/AgentPlanJsonSerializer.java | 6 ++--- .../ResourceProviderJsonDeserializer.java | 12 ++++----- .../ResourceProviderJsonSerializer.java | 6 ++--- .../flink/agents/plan/tools/FunctionTool.java | 4 +-- .../flink/agents/plan/tools/SchemaUtils.java | 4 +-- .../plan/tools/ToolMetadataFactory.java | 2 +- .../FunctionToolJsonDeserializer.java | 10 +++---- .../FunctionToolJsonSerializer.java | 6 ++--- .../flink/agents/plan/utils/JsonUtils.java | 4 +-- .../plan/AgentPlanDeclareChatModelTest.java | 2 +- .../plan/AgentPlanDeclareToolMethodTest.java | 2 +- .../agents/plan/FunctionToolPlanTest.java | 4 +-- .../agents/plan/TestEventSerializable.java | 2 +- .../flink/agents/plan/TestFunction.java | 2 +- .../CreateJavaAgentPlanFromJson.java | 2 +- .../compatibility/GenerateAgentPlanJson.java | 2 +- .../plan/resource/python/PythonToolTest.java | 2 +- .../ActionJsonDeserializerTest.java | 2 +- .../serializer/ActionJsonSerializerTest.java | 2 +- .../AgentPlanJsonDeserializerTest.java | 2 +- .../AgentPlanJsonSerializerTest.java | 2 +- .../ResourceProviderDeserializerTest.java | 2 +- .../ResourceProviderSerializerTest.java | 4 +-- .../agents/plan/tools/FunctionToolTest.java | 2 +- pom.xml | 16 ++++++++++-- .../flink/agents/runtime/CompileUtils.java | 4 +-- .../ActionStateKafkaDeserializer.java | 12 ++++----- .../actionstate/ActionStateKafkaSeder.java | 12 ++++----- .../ActionStateKafkaSerializer.java | 12 ++++----- .../runtime/actionstate/ActionStateUtil.java | 2 +- .../runtime/context/RunnerContextImpl.java | 2 +- .../runtime/eventlog/EventLogRecord.java | 4 +-- .../EventLogRecordJsonDeserializer.java | 10 +++---- .../EventLogRecordJsonSerializer.java | 6 ++--- .../runtime/eventlog/FileEventLogger.java | 2 +- .../operator/ActionExecutionOperator.java | 2 +- .../runtime/python/event/PythonEvent.java | 6 ++--- .../eventlog/EventLogRecordJsonSerdeTest.java | 4 +-- .../runtime/eventlog/FileEventLoggerTest.java | 4 +-- .../runtime/python/event/PythonEventTest.java | 4 +-- 64 files changed, 175 insertions(+), 166 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index a540361f..8cf08d0a 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -37,7 +37,6 @@ under the License. com.fasterxml.jackson.core jackson-databind - 2.15.2 org.apache.flink diff --git a/api/src/main/java/org/apache/flink/agents/api/Event.java b/api/src/main/java/org/apache/flink/agents/api/Event.java index 868447ae..5bb80439 100644 --- a/api/src/main/java/org/apache/flink/agents/api/Event.java +++ b/api/src/main/java/org/apache/flink/agents/api/Event.java @@ -18,7 +18,8 @@ package org.apache.flink.agents.api; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; @@ -37,7 +38,9 @@ public Event() { } @JsonCreator - public Event(UUID id, Map attributes) { + public Event( + @JsonProperty("id") UUID id, + @JsonProperty("attributes") Map attributes) { this.id = id; this.attributes = attributes; } diff --git a/api/src/main/java/org/apache/flink/agents/api/EventContext.java b/api/src/main/java/org/apache/flink/agents/api/EventContext.java index 9e7b8195..a49e736a 100644 --- a/api/src/main/java/org/apache/flink/agents/api/EventContext.java +++ b/api/src/main/java/org/apache/flink/agents/api/EventContext.java @@ -18,8 +18,8 @@ package org.apache.flink.agents.api; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.time.Instant; diff --git a/api/src/main/java/org/apache/flink/agents/api/InputEvent.java b/api/src/main/java/org/apache/flink/agents/api/InputEvent.java index 0a627f87..92dc0f77 100644 --- a/api/src/main/java/org/apache/flink/agents/api/InputEvent.java +++ b/api/src/main/java/org/apache/flink/agents/api/InputEvent.java @@ -18,8 +18,8 @@ package org.apache.flink.agents.api; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import java.util.UUID; diff --git a/api/src/main/java/org/apache/flink/agents/api/OutputEvent.java b/api/src/main/java/org/apache/flink/agents/api/OutputEvent.java index d9c116c7..96ac3c51 100644 --- a/api/src/main/java/org/apache/flink/agents/api/OutputEvent.java +++ b/api/src/main/java/org/apache/flink/agents/api/OutputEvent.java @@ -18,8 +18,8 @@ package org.apache.flink.agents.api; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import java.util.UUID; diff --git a/api/src/main/java/org/apache/flink/agents/api/agents/ReActAgent.java b/api/src/main/java/org/apache/flink/agents/api/agents/ReActAgent.java index 37a5d532..e307456f 100644 --- a/api/src/main/java/org/apache/flink/agents/api/agents/ReActAgent.java +++ b/api/src/main/java/org/apache/flink/agents/api/agents/ReActAgent.java @@ -18,6 +18,19 @@ package org.apache.flink.agents.api.agents; +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.commons.lang3.ClassUtils; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.InputEvent; @@ -35,19 +48,6 @@ import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.common.typeinfo.TypeInformation; import org.apache.flink.api.java.typeutils.RowTypeInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JacksonException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonMappingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.flink.types.Row; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/api/src/main/java/org/apache/flink/agents/api/chat/messages/ChatMessage.java b/api/src/main/java/org/apache/flink/agents/api/chat/messages/ChatMessage.java index 6e844e74..ef12dd29 100644 --- a/api/src/main/java/org/apache/flink/agents/api/chat/messages/ChatMessage.java +++ b/api/src/main/java/org/apache/flink/agents/api/chat/messages/ChatMessage.java @@ -18,7 +18,7 @@ package org.apache.flink.agents.api.chat.messages; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.ArrayList; import java.util.HashMap; diff --git a/api/src/main/java/org/apache/flink/agents/api/context/MemoryUpdate.java b/api/src/main/java/org/apache/flink/agents/api/context/MemoryUpdate.java index f150c9d6..e3c5582c 100644 --- a/api/src/main/java/org/apache/flink/agents/api/context/MemoryUpdate.java +++ b/api/src/main/java/org/apache/flink/agents/api/context/MemoryUpdate.java @@ -17,10 +17,10 @@ */ package org.apache.flink.agents.api.context; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; import java.util.Objects; diff --git a/api/src/main/java/org/apache/flink/agents/api/prompt/Prompt.java b/api/src/main/java/org/apache/flink/agents/api/prompt/Prompt.java index bb0be8bb..95c1406e 100644 --- a/api/src/main/java/org/apache/flink/agents/api/prompt/Prompt.java +++ b/api/src/main/java/org/apache/flink/agents/api/prompt/Prompt.java @@ -18,14 +18,14 @@ package org.apache.flink.agents.api.prompt; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import org.apache.flink.agents.api.chat.messages.ChatMessage; import org.apache.flink.agents.api.chat.messages.MessageRole; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.api.resource.SerializableResource; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonTypeInfo; import java.util.ArrayList; import java.util.Collections; diff --git a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java index 1de89552..140fee4a 100644 --- a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java +++ b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java @@ -18,8 +18,8 @@ package org.apache.flink.agents.api.resource; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; diff --git a/api/src/main/java/org/apache/flink/agents/api/tools/ToolMetadata.java b/api/src/main/java/org/apache/flink/agents/api/tools/ToolMetadata.java index 343c25fe..6505bd21 100644 --- a/api/src/main/java/org/apache/flink/agents/api/tools/ToolMetadata.java +++ b/api/src/main/java/org/apache/flink/agents/api/tools/ToolMetadata.java @@ -18,9 +18,9 @@ package org.apache.flink.agents.api.tools; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Objects; diff --git a/api/src/test/java/org/apache/flink/agents/api/agents/ReActAgentTest.java b/api/src/test/java/org/apache/flink/agents/api/agents/ReActAgentTest.java index d559a9c7..f5851e1a 100644 --- a/api/src/test/java/org/apache/flink/agents/api/agents/ReActAgentTest.java +++ b/api/src/test/java/org/apache/flink/agents/api/agents/ReActAgentTest.java @@ -18,11 +18,11 @@ package org.apache.flink.agents.api.agents; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.common.typeinfo.TypeInformation; import org.apache.flink.api.java.typeutils.RowTypeInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/api/src/test/java/org/apache/flink/agents/api/prompt/PromptTest.java b/api/src/test/java/org/apache/flink/agents/api/prompt/PromptTest.java index 454c496f..b97b6913 100644 --- a/api/src/test/java/org/apache/flink/agents/api/prompt/PromptTest.java +++ b/api/src/test/java/org/apache/flink/agents/api/prompt/PromptTest.java @@ -20,11 +20,11 @@ package org.apache.flink.agents.api.prompt; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.chat.messages.ChatMessage; import org.apache.flink.agents.api.chat.messages.MessageRole; import org.apache.flink.agents.api.resource.ResourceType; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/api/src/test/java/org/apache/flink/agents/api/resource/ResourceDescriptorTest.java b/api/src/test/java/org/apache/flink/agents/api/resource/ResourceDescriptorTest.java index e8fe3acd..85a54731 100644 --- a/api/src/test/java/org/apache/flink/agents/api/resource/ResourceDescriptorTest.java +++ b/api/src/test/java/org/apache/flink/agents/api/resource/ResourceDescriptorTest.java @@ -18,10 +18,10 @@ package org.apache.flink.agents.api.resource; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.InputEvent; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/plan/pom.xml b/plan/pom.xml index 917a3585..56e4af9c 100644 --- a/plan/pom.xml +++ b/plan/pom.xml @@ -40,11 +40,6 @@ under the License. flink-agents-api ${project.version} - - org.apache.flink - flink-shaded-jackson - ${flink.shaded.jackson.version}-${flink.shaded.version} - com.alibaba pemja diff --git a/plan/src/main/java/org/apache/flink/agents/plan/AgentPlan.java b/plan/src/main/java/org/apache/flink/agents/plan/AgentPlan.java index 88ec9bdc..49d8a6bc 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/AgentPlan.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/AgentPlan.java @@ -18,6 +18,9 @@ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.annotation.*; @@ -41,9 +44,6 @@ import org.apache.flink.agents.plan.tools.FunctionTool; import org.apache.flink.agents.plan.tools.ToolMetadataFactory; import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.IOException; import java.io.ObjectInputStream; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/JavaFunction.java b/plan/src/main/java/org/apache/flink/agents/plan/JavaFunction.java index ad5279c8..b99e4328 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/JavaFunction.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/JavaFunction.java @@ -17,8 +17,8 @@ */ package org.apache.flink.agents.plan; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.lang.reflect.Method; import java.util.Arrays; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/actions/Action.java b/plan/src/main/java/org/apache/flink/agents/plan/actions/Action.java index 771e278f..859795a6 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/actions/Action.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/actions/Action.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.plan.actions; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.context.RunnerContext; import org.apache.flink.agents.plan.Function; import org.apache.flink.agents.plan.serializer.ActionJsonDeserializer; import org.apache.flink.agents.plan.serializer.ActionJsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; import javax.annotation.Nullable; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/resource/python/PythonTool.java b/plan/src/main/java/org/apache/flink/agents/plan/resource/python/PythonTool.java index 64eea7ee..de2eeeba 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/resource/python/PythonTool.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/resource/python/PythonTool.java @@ -17,13 +17,13 @@ */ package org.apache.flink.agents.plan.resource.python; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.tools.Tool; import org.apache.flink.agents.api.tools.ToolMetadata; import org.apache.flink.agents.api.tools.ToolParameters; import org.apache.flink.agents.api.tools.ToolResponse; import org.apache.flink.agents.api.tools.ToolType; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/JavaSerializableResourceProvider.java b/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/JavaSerializableResourceProvider.java index 9200cfe9..7ebc6567 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/JavaSerializableResourceProvider.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/JavaSerializableResourceProvider.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.resourceprovider; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.resource.Resource; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.api.resource.SerializableResource; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.util.function.BiFunction; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/ResourceProvider.java b/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/ResourceProvider.java index 2e819d27..e574444b 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/ResourceProvider.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/resourceprovider/ResourceProvider.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.resourceprovider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.flink.agents.api.resource.Resource; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.serializer.ResourceProviderJsonDeserializer; import org.apache.flink.agents.plan.serializer.ResourceProviderJsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.function.BiFunction; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializer.java index 0ae8b8a4..974dc9ef 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializer.java @@ -18,16 +18,16 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.NullNode; import org.apache.flink.agents.plan.Function; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.node.NullNode; import java.io.IOException; import java.util.ArrayList; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java index defdf696..837be924 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; import java.util.Map; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializer.java index a45ed3ef..a39503ec 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializer.java @@ -18,20 +18,20 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.AgentConfiguration; import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.plan.actions.Action; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JacksonException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.ObjectCodec; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JavaType; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonDeserializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; import java.util.ArrayList; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializer.java index 6fe55848..6b887f0c 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializer.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.plan.actions.Action; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; import java.util.Map; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java index 2caf154b..c64f8607 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java @@ -18,6 +18,12 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import org.apache.flink.agents.api.resource.ResourceDescriptor; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.resourceprovider.JavaResourceProvider; @@ -25,12 +31,6 @@ import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonSerializableResourceProvider; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; import java.util.HashMap; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonSerializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonSerializer.java index e876f37b..fe04d5d1 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonSerializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonSerializer.java @@ -18,14 +18,14 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.flink.agents.plan.resourceprovider.JavaResourceProvider; import org.apache.flink.agents.plan.resourceprovider.JavaSerializableResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonSerializableResourceProvider; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/tools/FunctionTool.java b/plan/src/main/java/org/apache/flink/agents/plan/tools/FunctionTool.java index d6bec602..66ef21a9 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/tools/FunctionTool.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/tools/FunctionTool.java @@ -20,6 +20,8 @@ package org.apache.flink.agents.plan.tools; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.flink.agents.api.annotation.ToolParam; import org.apache.flink.agents.api.tools.Tool; import org.apache.flink.agents.api.tools.ToolMetadata; @@ -30,8 +32,6 @@ import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.tools.serializer.FunctionToolJsonDeserializer; import org.apache.flink.agents.plan.tools.serializer.FunctionToolJsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.lang.reflect.Method; import java.lang.reflect.Modifier; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/tools/SchemaUtils.java b/plan/src/main/java/org/apache/flink/agents/plan/tools/SchemaUtils.java index 6829dfa7..95394a55 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/tools/SchemaUtils.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/tools/SchemaUtils.java @@ -20,9 +20,9 @@ package org.apache.flink.agents.plan.tools; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.annotation.ToolParam; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.lang.reflect.Method; import java.lang.reflect.Parameter; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/tools/ToolMetadataFactory.java b/plan/src/main/java/org/apache/flink/agents/plan/tools/ToolMetadataFactory.java index 0b3e8da6..24cfbcfa 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/tools/ToolMetadataFactory.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/tools/ToolMetadataFactory.java @@ -20,9 +20,9 @@ package org.apache.flink.agents.plan.tools; +import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.flink.agents.api.annotation.Tool; import org.apache.flink.agents.api.tools.ToolMetadata; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonDeserializer.java b/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonDeserializer.java index c75b1630..c8b3282d 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonDeserializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonDeserializer.java @@ -18,16 +18,16 @@ package org.apache.flink.agents.plan.tools.serializer; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import org.apache.flink.agents.api.tools.ToolMetadata; import org.apache.flink.agents.plan.Function; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.tools.FunctionTool; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonSerializer.java b/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonSerializer.java index ad6461d0..4d2d6e8d 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonSerializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/tools/serializer/FunctionToolJsonSerializer.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.tools.serializer; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.tools.FunctionTool; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; diff --git a/plan/src/main/java/org/apache/flink/agents/plan/utils/JsonUtils.java b/plan/src/main/java/org/apache/flink/agents/plan/utils/JsonUtils.java index e46e9e40..0229b5e5 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/utils/JsonUtils.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/utils/JsonUtils.java @@ -18,8 +18,8 @@ package org.apache.flink.agents.plan.utils; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; /** Util class for json. */ public final class JsonUtils { diff --git a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java index c8c22b9e..79ef866b 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java @@ -20,6 +20,7 @@ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; @@ -34,7 +35,6 @@ import org.apache.flink.agents.api.resource.ResourceDescriptor; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java index d74d3ce9..b9cf4811 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java @@ -20,6 +20,7 @@ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; @@ -32,7 +33,6 @@ import org.apache.flink.agents.api.tools.ToolParameters; import org.apache.flink.agents.api.tools.ToolResponse; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java b/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java index 5b0b3ff6..9d78a58b 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java @@ -20,6 +20,8 @@ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.annotation.Tool; import org.apache.flink.agents.api.annotation.ToolParam; @@ -28,8 +30,6 @@ import org.apache.flink.agents.api.tools.ToolParameters; import org.apache.flink.agents.api.tools.ToolResponse; import org.apache.flink.agents.plan.tools.FunctionTool; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/TestEventSerializable.java b/plan/src/test/java/org/apache/flink/agents/plan/TestEventSerializable.java index 39154b1e..4d5ea512 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/TestEventSerializable.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/TestEventSerializable.java @@ -18,10 +18,10 @@ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.plan.utils.JsonUtils; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/TestFunction.java b/plan/src/test/java/org/apache/flink/agents/plan/TestFunction.java index f173b226..578d5b61 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/TestFunction.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/TestFunction.java @@ -17,10 +17,10 @@ */ package org.apache.flink.agents.plan; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/compatibility/CreateJavaAgentPlanFromJson.java b/plan/src/test/java/org/apache/flink/agents/plan/compatibility/CreateJavaAgentPlanFromJson.java index e0e576e1..229c60e9 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/compatibility/CreateJavaAgentPlanFromJson.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/compatibility/CreateJavaAgentPlanFromJson.java @@ -18,6 +18,7 @@ package org.apache.flink.agents.plan.compatibility; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.resource.ResourceDescriptor; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.AgentPlan; @@ -26,7 +27,6 @@ import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonSerializableResourceProvider; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.nio.file.Files; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/compatibility/GenerateAgentPlanJson.java b/plan/src/test/java/org/apache/flink/agents/plan/compatibility/GenerateAgentPlanJson.java index fa93bc1a..a8d4b632 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/compatibility/GenerateAgentPlanJson.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/compatibility/GenerateAgentPlanJson.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.plan.compatibility; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.annotation.Action; import org.apache.flink.agents.api.context.RunnerContext; import org.apache.flink.agents.plan.AgentPlan; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedWriter; import java.io.FileWriter; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/resource/python/PythonToolTest.java b/plan/src/test/java/org/apache/flink/agents/plan/resource/python/PythonToolTest.java index fe8cd91b..23ca7216 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/resource/python/PythonToolTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/resource/python/PythonToolTest.java @@ -18,9 +18,9 @@ package org.apache.flink.agents.plan.resource.python; +import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.flink.agents.api.tools.ToolParameters; import org.apache.flink.agents.api.tools.ToolType; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; import org.junit.jupiter.api.Test; import java.util.HashMap; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializerTest.java index 94f903b8..e38948c9 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonDeserializerTest.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.context.RunnerContext; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializerTest.java index 56fe2dd2..7f7c62e3 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializerTest.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; import org.apache.flink.agents.api.context.RunnerContext; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.PythonFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java index 492575f7..af2b99e3 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.context.RunnerContext; import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializerTest.java index ced31d65..f928173c 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonSerializerTest.java @@ -18,6 +18,7 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Agent; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; @@ -27,7 +28,6 @@ import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.plan.JavaFunction; import org.apache.flink.agents.plan.actions.Action; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.HashMap; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderDeserializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderDeserializerTest.java index 30bfbaaa..ed2291a7 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderDeserializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderDeserializerTest.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.resource.ResourceDescriptor; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonSerializableResourceProvider; import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.HashMap; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderSerializerTest.java b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderSerializerTest.java index c7424c94..28515804 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderSerializerTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/serializer/ResourceProviderSerializerTest.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.plan.serializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import org.apache.flink.agents.api.resource.ResourceDescriptor; import org.apache.flink.agents.api.resource.ResourceType; import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; import org.apache.flink.agents.plan.resourceprovider.PythonSerializableResourceProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializationFeature; import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/plan/src/test/java/org/apache/flink/agents/plan/tools/FunctionToolTest.java b/plan/src/test/java/org/apache/flink/agents/plan/tools/FunctionToolTest.java index 0b3e9d59..1b336010 100644 --- a/plan/src/test/java/org/apache/flink/agents/plan/tools/FunctionToolTest.java +++ b/plan/src/test/java/org/apache/flink/agents/plan/tools/FunctionToolTest.java @@ -18,11 +18,11 @@ package org.apache.flink.agents.plan.tools; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.annotation.Tool; import org.apache.flink.agents.api.annotation.ToolParam; import org.apache.flink.agents.api.tools.ToolMetadata; import org.apache.flink.agents.plan.JavaFunction; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/pom.xml b/pom.xml index baa903dc..b8b4225b 100644 --- a/pom.xml +++ b/pom.xml @@ -44,8 +44,7 @@ under the License. 1.20.3 4.0.0 5.10.1 - 17.0 - 2.14.2 + 2.18.2 0.5.5 2.23.1 1.7.36 @@ -65,6 +64,19 @@ under the License. dist + + + + + com.fasterxml.jackson + jackson-bom + ${jackson.version} + pom + import + + + + org.junit.jupiter diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/CompileUtils.java b/runtime/src/main/java/org/apache/flink/agents/runtime/CompileUtils.java index 5914a8a6..753fd7ea 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/CompileUtils.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/CompileUtils.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.runtime; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.runtime.operator.ActionExecutionOperatorFactory; import org.apache.flink.api.common.typeinfo.TypeInformation; import org.apache.flink.api.java.functions.KeySelector; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.KeyedStream; import org.apache.flink.types.Row; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaDeserializer.java b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaDeserializer.java index a70e2a3f..38e7b6ad 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaDeserializer.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaDeserializer.java @@ -17,16 +17,16 @@ */ package org.apache.flink.agents.runtime.actionstate; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; import org.apache.flink.agents.runtime.operator.ActionTask; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonTypeInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonDeserializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.kafka.common.serialization.Deserializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSeder.java b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSeder.java index 25977281..b225eb09 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSeder.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSeder.java @@ -17,16 +17,16 @@ */ package org.apache.flink.agents.runtime.actionstate; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; import org.apache.flink.agents.runtime.operator.ActionTask; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonTypeInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.kafka.common.serialization.Deserializer; import org.apache.kafka.common.serialization.Serializer; import org.slf4j.Logger; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSerializer.java b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSerializer.java index f2581576..881c5293 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSerializer.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateKafkaSerializer.java @@ -17,16 +17,16 @@ */ package org.apache.flink.agents.runtime.actionstate; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; import org.apache.flink.agents.runtime.operator.ActionTask; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonTypeInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.kafka.common.serialization.Serializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java index bd9429ad..fc3f2597 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java @@ -17,12 +17,12 @@ */ package org.apache.flink.agents.runtime.actionstate; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.plan.actions.Action; import org.apache.flink.agents.runtime.python.event.PythonEvent; import org.apache.flink.shaded.guava31.com.google.common.base.Preconditions; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import javax.annotation.Nonnull; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/context/RunnerContextImpl.java b/runtime/src/main/java/org/apache/flink/agents/runtime/context/RunnerContextImpl.java index 4d534bd5..33673984 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/context/RunnerContextImpl.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/context/RunnerContextImpl.java @@ -17,6 +17,7 @@ */ package org.apache.flink.agents.runtime.context; +import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.configuration.ReadableConfiguration; import org.apache.flink.agents.api.context.MemoryObject; @@ -29,7 +30,6 @@ import org.apache.flink.agents.runtime.memory.CachedMemoryStore; import org.apache.flink.agents.runtime.memory.MemoryObjectImpl; import org.apache.flink.agents.runtime.metrics.FlinkAgentsMetricGroupImpl; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; import org.apache.flink.util.Preconditions; import java.util.ArrayList; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecord.java b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecord.java index 149c02ce..5b83452d 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecord.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecord.java @@ -18,10 +18,10 @@ package org.apache.flink.agents.runtime.eventlog; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Represents a record in the event log, containing the event context and the event itself. diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonDeserializer.java b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonDeserializer.java index 1e9ca887..f2b89d3a 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonDeserializer.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonDeserializer.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.runtime.eventlog; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.DeserializationContext; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonDeserializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerializer.java b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerializer.java index 22c370b0..89a4e0f7 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerializer.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerializer.java @@ -18,9 +18,9 @@ package org.apache.flink.agents.runtime.eventlog; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/FileEventLogger.java b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/FileEventLogger.java index 07be819b..a4d0ed6b 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/FileEventLogger.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/eventlog/FileEventLogger.java @@ -18,13 +18,13 @@ package org.apache.flink.agents.runtime.eventlog; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; import org.apache.flink.agents.api.EventFilter; import org.apache.flink.agents.api.logger.EventLogger; import org.apache.flink.agents.api.logger.EventLoggerConfig; import org.apache.flink.agents.api.logger.EventLoggerOpenParams; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedWriter; import java.io.FileWriter; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java index d827eb60..d69808f8 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java @@ -17,6 +17,7 @@ */ package org.apache.flink.agents.runtime.operator; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; import org.apache.flink.agents.api.InputEvent; @@ -65,7 +66,6 @@ import org.apache.flink.runtime.state.StateSnapshotContext; import org.apache.flink.runtime.state.VoidNamespace; import org.apache.flink.runtime.state.VoidNamespaceSerializer; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.streaming.api.operators.AbstractStreamOperator; import org.apache.flink.streaming.api.operators.BoundedOneInput; import org.apache.flink.streaming.api.operators.ChainingStrategy; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/python/event/PythonEvent.java b/runtime/src/main/java/org/apache/flink/agents/runtime/python/event/PythonEvent.java index 225e3e93..8f5248d1 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/python/event/PythonEvent.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/python/event/PythonEvent.java @@ -19,10 +19,10 @@ package org.apache.flink.agents.runtime.python.event; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.flink.agents.api.Event; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; import java.util.Arrays; import java.util.Map; diff --git a/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerdeTest.java b/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerdeTest.java index 93e2d742..6f695bd6 100644 --- a/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerdeTest.java +++ b/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/EventLogRecordJsonSerdeTest.java @@ -18,12 +18,12 @@ package org.apache.flink.agents.runtime.eventlog; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.api.OutputEvent; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/FileEventLoggerTest.java b/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/FileEventLoggerTest.java index 048883d0..1a77ccf0 100644 --- a/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/FileEventLoggerTest.java +++ b/runtime/src/test/java/org/apache/flink/agents/runtime/eventlog/FileEventLoggerTest.java @@ -18,6 +18,8 @@ package org.apache.flink.agents.runtime.eventlog; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.Event; import org.apache.flink.agents.api.EventContext; import org.apache.flink.agents.api.EventFilter; @@ -28,8 +30,6 @@ import org.apache.flink.api.common.JobID; import org.apache.flink.api.common.JobInfo; import org.apache.flink.api.common.TaskInfo; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.streaming.api.operators.StreamingRuntimeContext; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/runtime/src/test/java/org/apache/flink/agents/runtime/python/event/PythonEventTest.java b/runtime/src/test/java/org/apache/flink/agents/runtime/python/event/PythonEventTest.java index 600583e2..e3a21c57 100644 --- a/runtime/src/test/java/org/apache/flink/agents/runtime/python/event/PythonEventTest.java +++ b/runtime/src/test/java/org/apache/flink/agents/runtime/python/event/PythonEventTest.java @@ -19,10 +19,10 @@ package org.apache.flink.agents.runtime.python.event; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.flink.agents.api.EventContext; import org.apache.flink.agents.runtime.eventlog.EventLogRecord; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode; -import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; From 1f1729322575b52f1d8fad68534d166f226b703c Mon Sep 17 00:00:00 2001 From: youjin Date: Thu, 25 Dec 2025 17:21:56 +0800 Subject: [PATCH 2/5] [build] Update default flink to 2.2.0 --- .../agents/examples/ReActAgentExample.java | 4 +- .../WorkflowMultipleAgentExample.java | 4 +- .../plan/serializer/ActionJsonSerializer.java | 20 +++-- pom.xml | 15 +++- python/pyproject.toml | 2 +- .../runtime/actionstate/ActionStateUtil.java | 2 +- .../message/MessageTypeInformation.java | 86 ------------------- .../operator/ActionExecutionOperator.java | 12 ++- .../ActionExecutionOperatorFactory.java | 4 +- .../agents/runtime/operator/StateUtils.java | 5 +- .../flink/agents/runtime/RescalingTest.java | 4 +- 11 files changed, 49 insertions(+), 109 deletions(-) delete mode 100644 runtime/src/main/java/org/apache/flink/agents/runtime/message/MessageTypeInformation.java diff --git a/examples/src/main/java/org/apache/flink/agents/examples/ReActAgentExample.java b/examples/src/main/java/org/apache/flink/agents/examples/ReActAgentExample.java index e2d6a3c0..23af1bbe 100644 --- a/examples/src/main/java/org/apache/flink/agents/examples/ReActAgentExample.java +++ b/examples/src/main/java/org/apache/flink/agents/examples/ReActAgentExample.java @@ -29,7 +29,7 @@ import org.apache.flink.agents.integrations.chatmodels.ollama.OllamaChatModelSetup; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.file.src.FileSource; -import org.apache.flink.connector.file.src.reader.TextLineFormat; +import org.apache.flink.connector.file.src.reader.TextLineInputFormat; import org.apache.flink.core.fs.Path; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; @@ -105,7 +105,7 @@ public static void main(String[] args) throws Exception { DataStream productReviewStream = env.fromSource( FileSource.forRecordStreamFormat( - new TextLineFormat(), + new TextLineInputFormat(), new Path(inputDataFile.getAbsolutePath())) .monitorContinuously(Duration.ofMinutes(1)) .build(), diff --git a/examples/src/main/java/org/apache/flink/agents/examples/WorkflowMultipleAgentExample.java b/examples/src/main/java/org/apache/flink/agents/examples/WorkflowMultipleAgentExample.java index 8703e9e1..fe91c581 100644 --- a/examples/src/main/java/org/apache/flink/agents/examples/WorkflowMultipleAgentExample.java +++ b/examples/src/main/java/org/apache/flink/agents/examples/WorkflowMultipleAgentExample.java @@ -37,13 +37,13 @@ import org.apache.flink.util.Collector; import java.io.File; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import static org.apache.flink.agents.examples.WorkflowSingleAgentExample.copyResource; import static org.apache.flink.agents.examples.agents.CustomTypesAndResources.ProductReviewAnalysisRes; import static org.apache.flink.agents.examples.agents.CustomTypesAndResources.ProductReviewSummary; -import static org.apache.flink.streaming.api.windowing.time.Time.minutes; /** * Java example demonstrating multiple workflow agents for product improvement suggestion. @@ -164,7 +164,7 @@ public static void main(String[] args) throws Exception { reviewAnalysisResStream .map(element -> (ProductReviewAnalysisRes) element) .keyBy(ProductReviewAnalysisRes::getId) - .window(TumblingProcessingTimeWindows.of(minutes(1))) + .window(TumblingProcessingTimeWindows.of(Duration.ofMinutes(1))) .process(new AggregateScoreDistributionAndDislikeReasons()); // Use the ProductSuggestionAgent (LLM) to generate product improvement diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java index 837be924..77581dad 100644 --- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java +++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ActionJsonSerializer.java @@ -80,21 +80,23 @@ public void serialize( String configType = (String) config.get(CONFIG_TYPE); if (configType == null) { configType = "java"; - } else { - config.remove(CONFIG_TYPE); + config.put(CONFIG_TYPE, configType); } - jsonGenerator.writeStringField(CONFIG_TYPE, configType); if (configType.equals("java")) { action.getConfig() .forEach( (name, value) -> { try { - jsonGenerator.writeFieldName(name); - jsonGenerator.writeStartObject(); - jsonGenerator.writeStringField( - "@class", value.getClass().getName()); - jsonGenerator.writeObjectField("value", value); - jsonGenerator.writeEndObject(); + if (CONFIG_TYPE.equals(name)) { + jsonGenerator.writeStringField(name, (String) value); + } else { + jsonGenerator.writeFieldName(name); + jsonGenerator.writeStartObject(); + jsonGenerator.writeStringField( + "@class", value.getClass().getName()); + jsonGenerator.writeObjectField("value", value); + jsonGenerator.writeEndObject(); + } } catch (IOException e) { throw new RuntimeException( "Error writing action: " + name, e); diff --git a/pom.xml b/pom.xml index b8b4225b..954cae72 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,20 @@ under the License. ${target.java.version} 2.27.1 false - 1.20.3 + + + + + + 1.20.3 + 2.0.1 + 2.1.1 + 2.2.0 + + + ${flink.2.2.version} + + 4.0.0 5.10.1 2.18.2 diff --git a/python/pyproject.toml b/python/pyproject.toml index ee282d66..c9c12af8 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -42,7 +42,7 @@ classifiers = [ ] dependencies = [ - "apache-flink==1.20.3", + "apache-flink==2.2.0", "pydantic==2.11.4", "docstring-parser==0.16", "pyyaml==6.0.2", diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java index fc3f2597..dac2d5d2 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/actionstate/ActionStateUtil.java @@ -22,7 +22,7 @@ import org.apache.flink.agents.api.InputEvent; import org.apache.flink.agents.plan.actions.Action; import org.apache.flink.agents.runtime.python.event.PythonEvent; -import org.apache.flink.shaded.guava31.com.google.common.base.Preconditions; +import org.apache.flink.util.Preconditions; import javax.annotation.Nonnull; diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/message/MessageTypeInformation.java b/runtime/src/main/java/org/apache/flink/agents/runtime/message/MessageTypeInformation.java deleted file mode 100644 index 4c753f18..00000000 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/message/MessageTypeInformation.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.flink.agents.runtime.message; - -import org.apache.flink.api.common.ExecutionConfig; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.common.typeutils.TypeSerializer; -import org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer; - -/** TypeInformation for {@link Message}. */ -public class MessageTypeInformation extends TypeInformation { - - private MessageTypeInformation() {} - - public static final MessageTypeInformation INSTANCE = new MessageTypeInformation(); - - @Override - public boolean isBasicType() { - return false; - } - - @Override - public boolean isTupleType() { - return false; - } - - @Override - public int getArity() { - return 0; - } - - @Override - public int getTotalFields() { - return 0; - } - - @Override - public Class getTypeClass() { - return Message.class; - } - - @Override - public boolean isKeyType() { - return false; - } - - @Override - public TypeSerializer createSerializer(ExecutionConfig executionConfig) { - return new KryoSerializer<>(Message.class, executionConfig); - } - - @Override - public String toString() { - return "MessageTypeInformation"; - } - - @Override - public boolean equals(Object o) { - return o instanceof MessageTypeInformation; - } - - @Override - public int hashCode() { - return getTypeClass().hashCode(); - } - - @Override - public boolean canEqual(Object o) { - return o instanceof MessageTypeInformation; - } -} diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java index d69808f8..544f24b8 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java @@ -66,14 +66,16 @@ import org.apache.flink.runtime.state.StateSnapshotContext; import org.apache.flink.runtime.state.VoidNamespace; import org.apache.flink.runtime.state.VoidNamespaceSerializer; +import org.apache.flink.streaming.api.graph.StreamConfig; import org.apache.flink.streaming.api.operators.AbstractStreamOperator; import org.apache.flink.streaming.api.operators.BoundedOneInput; -import org.apache.flink.streaming.api.operators.ChainingStrategy; import org.apache.flink.streaming.api.operators.OneInputStreamOperator; +import org.apache.flink.streaming.api.operators.Output; import org.apache.flink.streaming.api.operators.StreamingRuntimeContext; import org.apache.flink.streaming.api.watermark.Watermark; import org.apache.flink.streaming.runtime.streamrecord.StreamRecord; import org.apache.flink.streaming.runtime.tasks.ProcessingTimeService; +import org.apache.flink.streaming.runtime.tasks.StreamTask; import org.apache.flink.streaming.runtime.tasks.mailbox.MailboxExecutorImpl; import org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor; import org.apache.flink.types.Row; @@ -199,7 +201,6 @@ public ActionExecutionOperator( this.agentPlan = agentPlan; this.inputIsJava = inputIsJava; this.processingTimeService = processingTimeService; - this.chainingStrategy = ChainingStrategy.ALWAYS; this.mailboxExecutor = mailboxExecutor; this.eventLogger = EventLoggerFactory.createLogger(EventLoggerConfig.builder().build()); this.eventListeners = new ArrayList<>(); @@ -208,6 +209,13 @@ public ActionExecutionOperator( this.actionTaskMemoryContexts = new HashMap<>(); } + protected void setup( + StreamTask containingTask, + StreamConfig config, + Output> output) { + super.setup(containingTask, config, output); + } + @Override public void open() throws Exception { super.open(); diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperatorFactory.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperatorFactory.java index 1b863ff3..e6a0e213 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperatorFactory.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperatorFactory.java @@ -20,13 +20,14 @@ import org.apache.flink.agents.plan.AgentPlan; import org.apache.flink.agents.runtime.actionstate.ActionStateStore; import org.apache.flink.annotation.VisibleForTesting; +import org.apache.flink.streaming.api.operators.AbstractStreamOperatorFactory; import org.apache.flink.streaming.api.operators.ChainingStrategy; import org.apache.flink.streaming.api.operators.OneInputStreamOperatorFactory; import org.apache.flink.streaming.api.operators.StreamOperator; import org.apache.flink.streaming.api.operators.StreamOperatorParameters; /** Operator factory for {@link ActionExecutionOperator}. */ -public class ActionExecutionOperatorFactory +public class ActionExecutionOperatorFactory extends AbstractStreamOperatorFactory implements OneInputStreamOperatorFactory { private final AgentPlan agentPlan; @@ -45,6 +46,7 @@ protected ActionExecutionOperatorFactory( this.agentPlan = agentPlan; this.inputIsJava = inputIsJava; this.actionStateStore = actionStateStore; + this.chainingStrategy = ChainingStrategy.ALWAYS; } @Override diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/StateUtils.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/StateUtils.java index 55a9d701..6266ced8 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/StateUtils.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/StateUtils.java @@ -21,7 +21,6 @@ import org.apache.flink.api.common.state.ListState; import org.apache.flink.api.common.state.ListStateDescriptor; import org.apache.flink.runtime.state.StateInitializationContext; -import org.apache.flink.shaded.guava31.com.google.common.collect.Lists; import org.apache.flink.util.Preconditions; import javax.annotation.Nullable; @@ -67,7 +66,9 @@ public class StateUtils { } T value = values.get(0); - state.update(Lists.newArrayList(value)); + List newList = new ArrayList<>(); + newList.add(value); + state.update(newList); return value; } diff --git a/runtime/src/test/java/org/apache/flink/agents/runtime/RescalingTest.java b/runtime/src/test/java/org/apache/flink/agents/runtime/RescalingTest.java index dca3ed22..c3c376f1 100644 --- a/runtime/src/test/java/org/apache/flink/agents/runtime/RescalingTest.java +++ b/runtime/src/test/java/org/apache/flink/agents/runtime/RescalingTest.java @@ -51,8 +51,8 @@ import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.KeyedStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.functions.sink.SinkFunction; -import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction; +import org.apache.flink.streaming.api.functions.sink.legacy.SinkFunction; +import org.apache.flink.streaming.api.functions.source.legacy.RichParallelSourceFunction; import org.apache.flink.test.util.MiniClusterWithClientResource; import org.apache.flink.testutils.TestingUtils; import org.apache.flink.testutils.executor.TestExecutorResource; From 1fc18a4ec3f52b8aab518b87b903aa3501c43487 Mon Sep 17 00:00:00 2001 From: youjin Date: Thu, 25 Dec 2025 18:01:18 +0800 Subject: [PATCH 3/5] [build] Support Multi-Version Flink in Java --- dist/flink-1.20/pom.xml | 179 ++++++++++++++++++ .../runtime/operator/OperatorUtils.java | 28 +++ .../runtime/operator/OperatorUtilsTest.java | 87 +++++++++ dist/flink-2.0/pom.xml | 91 +++++++++ dist/flink-2.1/pom.xml | 91 +++++++++ dist/flink-2.2/pom.xml | 59 ++++++ dist/pom.xml | 27 ++- pom.xml | 15 +- runtime/pom.xml | 9 + .../operator/ActionExecutionOperator.java | 5 +- .../runtime/operator/OperatorUtils.java | 26 +++ 11 files changed, 601 insertions(+), 16 deletions(-) create mode 100644 dist/flink-1.20/pom.xml create mode 100644 dist/flink-1.20/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java create mode 100644 dist/flink-1.20/src/test/java/org/apache/flink/agents/runtime/operator/OperatorUtilsTest.java create mode 100644 dist/flink-2.0/pom.xml create mode 100644 dist/flink-2.1/pom.xml create mode 100644 dist/flink-2.2/pom.xml create mode 100644 runtime/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java diff --git a/dist/flink-1.20/pom.xml b/dist/flink-1.20/pom.xml new file mode 100644 index 00000000..bf465a52 --- /dev/null +++ b/dist/flink-1.20/pom.xml @@ -0,0 +1,179 @@ + + + + 4.0.0 + + org.apache.flink + flink-agents-dist + 0.2-SNAPSHOT + + + flink-agents-dist-flink-1.20 + Flink Agents : Dist : Flink 1.20 + + + ${flink.1.20.version} + + + + + + org.apache.flink + flink-streaming-java + ${flink.version} + provided + + + org.apache.flink + flink-runtime + ${flink.version} + provided + + + org.apache.flink + flink-clients + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java-bridge + ${flink.version} + provided + + + org.apache.flink + flink-test-utils-junit + ${flink.version} + test + + + org.apache.logging.log4j + log4j-api + + + + + org.apache.flink + flink-python + ${flink.version} + provided + + + + + org.slf4j + slf4j-api + ${slf4j.version} + test + + + org.apache.logging.log4j + log4j-api + ${log4j2.version} + test + + + org.apache.logging.log4j + log4j-core + ${log4j2.version} + test + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j2.version} + test + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-shared-resources + generate-resources + + copy-resources + + + ${project.build.outputDirectory} + + + ${project.parent.basedir}/src/main/resources + + META-INF/** + + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + shade-flink-agents + package + + shade + + + false + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + org.apache.flink:flink-agents-runtime + + org/apache/flink/agents/runtime/operator/OperatorUtils.class + + + + false + + + + + + + + diff --git a/dist/flink-1.20/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java b/dist/flink-1.20/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java new file mode 100644 index 00000000..f8effac2 --- /dev/null +++ b/dist/flink-1.20/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java @@ -0,0 +1,28 @@ +/* + * 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.flink.agents.runtime.operator; + +import org.apache.flink.streaming.api.operators.AbstractStreamOperator; +import org.apache.flink.streaming.api.operators.ChainingStrategy; + +public class OperatorUtils { + public static void setChainStrategy( + AbstractStreamOperator operator, ChainingStrategy strategy) { + operator.setChainingStrategy(strategy); + } +} diff --git a/dist/flink-1.20/src/test/java/org/apache/flink/agents/runtime/operator/OperatorUtilsTest.java b/dist/flink-1.20/src/test/java/org/apache/flink/agents/runtime/operator/OperatorUtilsTest.java new file mode 100644 index 00000000..5b70ba68 --- /dev/null +++ b/dist/flink-1.20/src/test/java/org/apache/flink/agents/runtime/operator/OperatorUtilsTest.java @@ -0,0 +1,87 @@ +/* + * 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.flink.agents.runtime.operator; + +import org.apache.flink.streaming.api.operators.AbstractStreamOperator; +import org.apache.flink.streaming.api.operators.ChainingStrategy; +import org.apache.flink.streaming.api.operators.StreamMap; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** Test for {@link OperatorUtils}. */ +public class OperatorUtilsTest { + + @Test + void testSetChainStrategyAlways() { + // Create a test operator + TestOperator operator = new TestOperator(); + + // Initially, the chaining strategy should be HEAD (default) + assertThat(operator.getChainingStrategy()).isEqualTo(ChainingStrategy.HEAD); + + // Set chaining strategy to ALWAYS + OperatorUtils.setChainStrategy(operator, ChainingStrategy.ALWAYS); + + // Verify the strategy was set correctly + assertThat(operator.getChainingStrategy()).isEqualTo(ChainingStrategy.ALWAYS); + } + + @Test + void testSetChainStrategyNever() { + // Create a test operator + TestOperator operator = new TestOperator(); + + // Set chaining strategy to NEVER + OperatorUtils.setChainStrategy(operator, ChainingStrategy.NEVER); + + // Verify the strategy was set correctly + assertThat(operator.getChainingStrategy()).isEqualTo(ChainingStrategy.NEVER); + } + + @Test + void testSetChainStrategyHead() { + // Create a test operator + TestOperator operator = new TestOperator(); + + // First set to ALWAYS + OperatorUtils.setChainStrategy(operator, ChainingStrategy.ALWAYS); + assertThat(operator.getChainingStrategy()).isEqualTo(ChainingStrategy.ALWAYS); + + // Then change back to HEAD + OperatorUtils.setChainStrategy(operator, ChainingStrategy.HEAD); + + // Verify the strategy was updated correctly + assertThat(operator.getChainingStrategy()).isEqualTo(ChainingStrategy.HEAD); + } + + @Test + void testSetChainStrategyWithDifferentOperators() { + // Test with StreamMap operator + StreamMap mapOperator = new StreamMap<>(value -> value.toUpperCase()); + + // Set chaining strategy + OperatorUtils.setChainStrategy(mapOperator, ChainingStrategy.ALWAYS); + + // Verify the strategy was set correctly + assertThat(mapOperator.getChainingStrategy()).isEqualTo(ChainingStrategy.ALWAYS); + } + + /** Simple test operator for testing purposes. */ + private static class TestOperator extends AbstractStreamOperator {} +} diff --git a/dist/flink-2.0/pom.xml b/dist/flink-2.0/pom.xml new file mode 100644 index 00000000..2b306ffd --- /dev/null +++ b/dist/flink-2.0/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.apache.flink + flink-agents-dist + 0.2-SNAPSHOT + + + flink-agents-dist-flink-2.0 + Flink Agents : Dist : Flink 2.0 + + + ${flink.2.0.version} + + + + + + org.apache.flink + flink-streaming-java + ${flink.version} + provided + + + org.apache.flink + flink-runtime + ${flink.version} + provided + + + org.apache.flink + flink-clients + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java-bridge + ${flink.version} + provided + + + org.apache.flink + flink-python + ${flink.version} + provided + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-shared-resources + generate-resources + + copy-resources + + + ${project.build.outputDirectory} + + + ${project.parent.basedir}/src/main/resources + + META-INF/** + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/flink-2.1/pom.xml b/dist/flink-2.1/pom.xml new file mode 100644 index 00000000..da903424 --- /dev/null +++ b/dist/flink-2.1/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.apache.flink + flink-agents-dist + 0.2-SNAPSHOT + + + flink-agents-dist-flink-2.1 + Flink Agents : Dist : Flink 2.1 + + + ${flink.2.1.version} + + + + + + org.apache.flink + flink-streaming-java + ${flink.version} + provided + + + org.apache.flink + flink-runtime + ${flink.version} + provided + + + org.apache.flink + flink-clients + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java + ${flink.version} + provided + + + org.apache.flink + flink-table-api-java-bridge + ${flink.version} + provided + + + org.apache.flink + flink-python + ${flink.version} + provided + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-shared-resources + generate-resources + + copy-resources + + + ${project.build.outputDirectory} + + + ${project.parent.basedir}/src/main/resources + + META-INF/** + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/flink-2.2/pom.xml b/dist/flink-2.2/pom.xml new file mode 100644 index 00000000..a328c69f --- /dev/null +++ b/dist/flink-2.2/pom.xml @@ -0,0 +1,59 @@ + + + + 4.0.0 + + org.apache.flink + flink-agents-dist + 0.2-SNAPSHOT + + + flink-agents-dist-flink-2.2 + Flink Agents : Dist : Flink 2.2 + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-shared-resources + generate-resources + + copy-resources + + + ${project.build.outputDirectory} + + + ${project.parent.basedir}/src/main/resources + + META-INF/** + + + + + + + + + + diff --git a/dist/pom.xml b/dist/pom.xml index b12ce6b7..225c3685 100644 --- a/dist/pom.xml +++ b/dist/pom.xml @@ -27,6 +27,21 @@ under the License. flink-agents-dist Flink Agents : Dist + pom + + + 1.20.3 + 2.0.1 + 2.1.1 + 2.2.0 + + + + flink-1.20 + flink-2.0 + flink-2.1 + flink-2.2 + @@ -66,7 +81,17 @@ under the License. false - ${project.artifactId}-${project.version} + false + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + diff --git a/pom.xml b/pom.xml index 954cae72..00ecbd93 100644 --- a/pom.xml +++ b/pom.xml @@ -41,20 +41,7 @@ under the License. ${target.java.version} 2.27.1 false - - - - - - 1.20.3 - 2.0.1 - 2.1.1 - 2.2.0 - - - ${flink.2.2.version} - - + 2.2.0 4.0.0 5.10.1 2.18.2 diff --git a/runtime/pom.xml b/runtime/pom.xml index 4a210c50..0dcafb80 100644 --- a/runtime/pom.xml +++ b/runtime/pom.xml @@ -121,16 +121,25 @@ under the License. org.slf4j slf4j-api ${slf4j.version} + provided + + + org.apache.logging.log4j + log4j-api + ${log4j2.version} + provided org.apache.logging.log4j log4j-core ${log4j2.version} + provided org.apache.logging.log4j log4j-slf4j-impl ${log4j2.version} + provided diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java index 544f24b8..d44d0b81 100644 --- a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/ActionExecutionOperator.java @@ -69,6 +69,7 @@ import org.apache.flink.streaming.api.graph.StreamConfig; import org.apache.flink.streaming.api.operators.AbstractStreamOperator; import org.apache.flink.streaming.api.operators.BoundedOneInput; +import org.apache.flink.streaming.api.operators.ChainingStrategy; import org.apache.flink.streaming.api.operators.OneInputStreamOperator; import org.apache.flink.streaming.api.operators.Output; import org.apache.flink.streaming.api.operators.StreamingRuntimeContext; @@ -207,9 +208,11 @@ public ActionExecutionOperator( this.actionStateStore = actionStateStore; this.checkpointIdToSeqNums = new HashMap<>(); this.actionTaskMemoryContexts = new HashMap<>(); + OperatorUtils.setChainStrategy(this, ChainingStrategy.ALWAYS); } - protected void setup( + @Override + public void setup( StreamTask containingTask, StreamConfig config, Output> output) { diff --git a/runtime/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java new file mode 100644 index 00000000..4f4f0470 --- /dev/null +++ b/runtime/src/main/java/org/apache/flink/agents/runtime/operator/OperatorUtils.java @@ -0,0 +1,26 @@ +/* + * 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.flink.agents.runtime.operator; + +import org.apache.flink.streaming.api.operators.AbstractStreamOperator; +import org.apache.flink.streaming.api.operators.ChainingStrategy; + +public class OperatorUtils { + public static void setChainStrategy( + AbstractStreamOperator operator, ChainingStrategy strategy) {} +} From 13a7009ae2b30b74d303c604c15a7c71a28ec17f Mon Sep 17 00:00:00 2001 From: youjin Date: Thu, 25 Dec 2025 18:59:53 +0800 Subject: [PATCH 4/5] [build] Support Multi-Version Flink in Python --- .../flink_agents/api/execution_environment.py | 30 +++- .../api/tests/test_version_compatibility.py | 169 +++++++++++++++++ .../flink_agents/api/version_compatibility.py | 170 ++++++++++++++++++ python/pyproject.toml | 3 +- tools/build.sh | 24 ++- tools/e2e.sh | 6 + 6 files changed, 393 insertions(+), 9 deletions(-) create mode 100644 python/flink_agents/api/tests/test_version_compatibility.py create mode 100644 python/flink_agents/api/version_compatibility.py diff --git a/python/flink_agents/api/execution_environment.py b/python/flink_agents/api/execution_environment.py index a198e6c9..e632de34 100644 --- a/python/flink_agents/api/execution_environment.py +++ b/python/flink_agents/api/execution_environment.py @@ -31,6 +31,7 @@ ResourceType, SerializableResource, ) +from flink_agents.api.version_compatibility import flink_version_manager class AgentBuilder(ABC): @@ -127,11 +128,30 @@ def get_execution_environment( "flink_agents.runtime.local_execution_environment" ).create_instance(env=env, t_env=t_env, **kwargs) else: - for path in files("flink_agents.lib").iterdir(): - env.add_jars(f"file://{path}") - return importlib.import_module( - "flink_agents.runtime.remote_execution_environment" - ).create_instance(env=env, t_env=t_env, **kwargs) + major_version = flink_version_manager.major_version + if major_version: + # Determine the version-specific lib directory + version_dir = f"flink-{major_version}" + lib_base = files("flink_agents.lib") + version_lib = lib_base / version_dir + + # Check if version-specific directory exists + if version_lib.is_dir(): + for jar_file in version_lib.iterdir(): + if jar_file.is_file() and str(jar_file).endswith(".jar"): + env.add_jars(f"file://{jar_file}") + else: + err_msg = ( + f"Flink Agents dist JAR for Flink {major_version} not found." + ) + raise FileNotFoundError(err_msg) + + return importlib.import_module( + "flink_agents.runtime.remote_execution_environment" + ).create_instance(env=env, t_env=t_env, **kwargs) + else: + err_msg = "Apache Flink is not installed." + raise ModuleNotFoundError(err_msg) @abstractmethod def get_config(self, path: str | None = None) -> Configuration: diff --git a/python/flink_agents/api/tests/test_version_compatibility.py b/python/flink_agents/api/tests/test_version_compatibility.py new file mode 100644 index 00000000..95839704 --- /dev/null +++ b/python/flink_agents/api/tests/test_version_compatibility.py @@ -0,0 +1,169 @@ +################################################################################ +# 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. +################################################################################# +from unittest.mock import patch + +from flink_agents.api.version_compatibility import ( + FlinkVersionManager, + _normalize_version, +) + + +# Tests for _normalize_version function +def test_normalize_three_part_version() -> None: # noqa: D103 + assert _normalize_version("1.20.3") == "1.20.3" + assert _normalize_version("2.2.0") == "2.2.0" + + +def test_normalize_two_part_version() -> None: # noqa: D103 + assert _normalize_version("2.2") == "2.2.0" + assert _normalize_version("1.20") == "1.20.0" + + +def test_normalize_version_with_suffix() -> None: # noqa: D103 + assert _normalize_version("2.2-SNAPSHOT") == "2.2.0" + assert _normalize_version("1.20.dev0") == "1.20.0" + assert _normalize_version("2.0.rc1") == "2.0.0" + + +def test_normalize_long_version() -> None: # noqa: D103 + assert _normalize_version("1.20.3.4") == "1.20.3" + assert _normalize_version("2.2.0.1.5") == "2.2.0" + + +# Tests for FlinkVersionManager class +def test_version_property_with_flink_installed() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="1.20.3"): + manager = FlinkVersionManager() + assert manager.version == "1.20.3" + + +def test_version_property_without_flink_installed() -> None: # noqa: D103 + with patch( + "importlib.metadata.version", side_effect=Exception("Package not found") + ): + manager = FlinkVersionManager() + assert manager.version is None + + +def test_major_version_property() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="1.20.3"): + manager = FlinkVersionManager() + assert manager.major_version == "1.20" + + with patch("importlib.metadata.version", return_value="2.2.0"): + manager = FlinkVersionManager() + assert manager.major_version == "2.2" + + +def test_major_version_with_snapshot() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="2.2.0-SNAPSHOT"): + manager = FlinkVersionManager() + assert manager.major_version == "2.2" + + +def test_major_version_without_flink() -> None: # noqa: D103 + with patch( + "importlib.metadata.version", side_effect=Exception("Package not found") + ): + manager = FlinkVersionManager() + assert manager.major_version is None + + +def test_ge_method() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="1.20.3"): + manager = FlinkVersionManager() + assert manager.ge("1.20.0") is True + assert manager.ge("1.20.3") is True + assert manager.ge("1.21.0") is False + + +def test_ge_with_two_part_version() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="2.2"): + manager = FlinkVersionManager() + assert manager.ge("2.0.0") is True + assert manager.ge("2.2") is True + assert manager.ge("2.3") is False + + +def test_ge_without_flink_installed() -> None: # noqa: D103 + with patch( + "importlib.metadata.version", side_effect=Exception("Package not found") + ): + manager = FlinkVersionManager() + assert manager.ge("1.20.0") is False + + +def test_lt_method() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="1.20.3"): + manager = FlinkVersionManager() + assert manager.lt("1.21.0") is True + assert manager.lt("1.20.3") is False + assert manager.lt("1.20.0") is False + + +def test_lt_with_two_part_version() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="2.2"): + manager = FlinkVersionManager() + assert manager.lt("2.3") is True + assert manager.lt("2.2") is False + assert manager.lt("2.0") is False + + +def test_lt_without_flink_installed() -> None: # noqa: D103 + with patch( + "importlib.metadata.version", side_effect=Exception("Package not found") + ): + manager = FlinkVersionManager() + assert manager.lt("2.0.0") is False + + +def test_lazy_initialization() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="1.20.3") as mock_version: + manager = FlinkVersionManager() + # Version should not be fetched yet + assert not manager._initialized + mock_version.assert_not_called() + + # First access triggers initialization + _ = manager.version + assert manager._initialized + mock_version.assert_called_once() + + # Second access should use cached value + _ = manager.version + mock_version.assert_called_once() # Still called only once + + +def test_version_comparison_with_snapshot_versions() -> None: # noqa: D103 + with patch("importlib.metadata.version", return_value="2.2-SNAPSHOT"): + manager = FlinkVersionManager() + assert manager.ge("2.2.0") is True + assert manager.ge("2.1.0") is True + assert manager.lt("2.3.0") is True + + +def test_version_comparison_edge_cases() -> None: # noqa: D103 + # Test boundary versions + with patch("importlib.metadata.version", return_value="1.20.3"): + manager = FlinkVersionManager() + assert manager.ge("1.20.2") is True + assert manager.ge("1.20.3") is True + assert manager.ge("1.20.4") is False + assert manager.lt("1.20.4") is True + assert manager.lt("1.20.3") is False + assert manager.ge("2.0.0") is False diff --git a/python/flink_agents/api/version_compatibility.py b/python/flink_agents/api/version_compatibility.py new file mode 100644 index 00000000..4060c409 --- /dev/null +++ b/python/flink_agents/api/version_compatibility.py @@ -0,0 +1,170 @@ +################################################################################ +# 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. +################################################################################# + +from packaging import version + + +def _normalize_version(version_str: str) -> str: + """Normalize version string to standard format. + + Handles various version formats and normalizes them to a three-part version + string (major.minor.patch). If only two parts are provided, appends '.0' as + the patch version. + + Args: + version_str: The version string to normalize (e.g., "2.2", "1.20.3", + "2.2.0-SNAPSHOT", "1.20.dev0", "2.0.rc1") + + Returns: + str: Normalized version string in format "major.minor.patch" + """ + # Remove any version suffix with hyphen (e.g., -SNAPSHOT, -dev) + base_version = version_str.split('-')[0] + + # Split by dot and keep only numeric parts + parts = [] + for part in base_version.split('.'): + # Only keep parts that are purely numeric + if part.isdigit(): + parts.append(part) + # Stop if we encounter a non-numeric part (e.g., 'dev0', 'rc1') + else: + break + + # Ensure we have at least three parts (major.minor.patch) + while len(parts) < 3: + parts.append('0') + + return '.'.join(parts[:3]) + + +class FlinkVersionManager: + """Manager for Apache Flink version compatibility checks. + + This class provides lazy initialization and caching of the installed Flink + version, along with utility methods for version comparison. It uses a singleton + pattern through the global flink_version_manager instance. + + The version information is fetched only once when first accessed, improving + startup performance and avoiding repeated package queries. + + Attributes: + _flink_version: Cached version string of the installed apache-flink package + _initialized: Flag indicating whether version has been fetched + """ + + def __init__(self) -> None: + """Initialize the FlinkVersionManager with uninitialized state.""" + self._flink_version = None + self._initialized = False + + def _initialize(self) -> None: + """Perform lazy initialization of the Flink version. + + This method is called automatically when version information is first + accessed. It fetches the version once and caches it for subsequent calls. + """ + if self._initialized: + return + + # Attempt to retrieve the version from installed packages + self._flink_version = self._get_pyflink_version() + self._initialized = True + + def _get_pyflink_version(self) -> str | None: + """Retrieve the version of the installed apache-flink package. + + Uses importlib.metadata to query the package version. This method handles + cases where the package is not installed or cannot be queried. + + Returns: + Optional[str]: The version string if apache-flink is installed, + None otherwise + """ + try: + from importlib.metadata import version as get_version + return get_version("apache-flink") + except Exception: + return None + + @property + def version(self) -> str | None: + """Get the full version string of the installed Flink. + + Returns: + Optional[str]: Full version string (e.g., "1.20.3", "2.2.0") or None + if apache-flink is not installed + """ + self._initialize() + return self._flink_version + + @property + def major_version(self) -> str | None: + """Get the major version number (major.minor) of the installed Flink. + + Extracts the first two version components from the full version string, + which is useful for feature compatibility checks between major releases. + + Returns: + Optional[str]: Major version string (e.g., "2.2", "1.20") or None + if apache-flink is not installed + """ + if not self.version: + return None + + # Extract major.minor from full version string + # Examples: "2.2.0" -> "2.2", "1.20.3" -> "1.20", "2.2.0-SNAPSHOT" -> "2.2" + version_parts = self.version.split('-')[0].split('.') + if len(version_parts) >= 2: + return f"{version_parts[0]}.{version_parts[1]}" + return self.version + + def ge(self, target_version: str) -> bool: + """Check if the installed Flink version is greater than or equal to the target. + + Args: + target_version: The minimum version to compare against (e.g., "1.20.0") + + Returns: + bool: True if installed version >= target version, False otherwise + (including when Flink is not installed) + """ + if not self.version: + return False + + current = _normalize_version(self.version) + target = _normalize_version(target_version) + return version.parse(current) >= version.parse(target) + + def lt(self, target_version: str) -> bool: + """Check if the installed Flink version is less than the target. + + Args: + target_version: The version threshold to compare against (e.g., "2.0.0") + + Returns: + bool: True if installed version < target version, False otherwise + (including when Flink is not installed) + """ + if not self.version: + return False + return not self.ge(target_version) + + +# Global singleton instance for Flink version management +flink_version_manager = FlinkVersionManager() diff --git a/python/pyproject.toml b/python/pyproject.toml index c9c12af8..a4a17a90 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -42,7 +42,6 @@ classifiers = [ ] dependencies = [ - "apache-flink==2.2.0", "pydantic==2.11.4", "docstring-parser==0.16", "pyyaml==6.0.2", @@ -64,7 +63,7 @@ include-package-data = true where = [""] [tool.setuptools.package-data] -"flink_agents.lib" = ["*.jar"] +"flink_agents.lib" = ["**/*.jar"] # Optional dependencies (dependency groups) [project.optional-dependencies] diff --git a/tools/build.sh b/tools/build.sh index 435ce56e..63f3ecdc 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -46,13 +46,33 @@ if $build_java; then fi if $build_python; then - # copy flink-agents-dist jar to python lib + # copy flink-agents-dist jars to python lib with version subdirectories PYTHON_LIB_DIR=${PROJECT_ROOT}/python/flink_agents/lib rm -rf ${PYTHON_LIB_DIR} mkdir -p ${PYTHON_LIB_DIR} PROJECT_VERSION=$(sed -n 's/.*\(.*\)<\/version>.*/\1/p' pom.xml | head -n 2 | tail -n 1) - cp "${PROJECT_ROOT}/dist/target/flink-agents-dist-${PROJECT_VERSION}.jar" ${PYTHON_LIB_DIR} + + # Automatically detect and copy all Flink version JARs from dist subdirectories + DIST_DIR="${PROJECT_ROOT}/dist" + for version_dir in "${DIST_DIR}"/flink-*; do + if [ -d "$version_dir" ]; then + version_name=$(basename "$version_dir") + echo "Processing $version_name..." + + # Create corresponding lib subdirectory + mkdir -p "${PYTHON_LIB_DIR}/${version_name}" + + # Find and copy the JAR file + jar_file="${version_dir}/target/flink-agents-dist-${version_name}-${PROJECT_VERSION}.jar" + if [ -f "$jar_file" ]; then + cp "$jar_file" "${PYTHON_LIB_DIR}/${version_name}/" + echo " Copied: flink-agents-dist-${version_name}-${PROJECT_VERSION}.jar" + else + echo " Warning: JAR file not found at $jar_file" + fi + fi + done # build python cd python diff --git a/tools/e2e.sh b/tools/e2e.sh index d48f18ed..8e29aa2d 100755 --- a/tools/e2e.sh +++ b/tools/e2e.sh @@ -14,6 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # + +DEFAULT_FLINK_VERSION="2.2" + function run_test { local description="$1" local command="$2" @@ -140,6 +143,9 @@ if [[ ! -d "$python_dir" ]]; then exit 1 fi +cd "$python_dir" +uv pip install apache-flink~=${DEFAULT_FLINK_VERSION}.0 + run_test "Resource Cross-Language end-to-end test in Java" "run_resource_cross_language_test_in_java" run_test "Resource Cross-Language end-to-end test in Python" "run_resource_cross_language_test_in_python" run_test "Agent plan compatibility end-to-end test" "run_agent_plan_compatibility_test" From 9a19eb58df4e49062c63f1d9dbeed54606c92ffd Mon Sep 17 00:00:00 2001 From: youjin Date: Thu, 25 Dec 2025 19:08:11 +0800 Subject: [PATCH 5/5] [ci] Enable testing for all Flink versions in CI --- .github/workflows/ci.yml | 10 +- .../pom.xml | 55 ++++- tools/ut.sh | 215 ++++++++++++------ 3 files changed, 202 insertions(+), 78 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f9260c5..f21d34ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,13 +93,14 @@ jobs: run: tools/ut.sh -p python_it_tests: - name: it-python [${{ matrix.os }}] [python-${{ matrix.python-version}}] + name: it-python [${{ matrix.os }}] [python-${{ matrix.python-version}}] [flink-${{ matrix.flink-version}}] runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ 'ubuntu-latest' ] python-version: [ '3.11' ] + flink-version: [ "1.20", "2.0", "2.1", "2.2" ] steps: - uses: actions/checkout@v4 - name: Install java @@ -120,16 +121,17 @@ jobs: - name: Install ollama run: bash tools/start_ollama_server.sh - name: Run Python IT - run: tools/ut.sh -p -e + run: tools/ut.sh -p -e -f ${{ matrix.flink-version }} java_it_tests: - name: it-java [${{ matrix.os }}] [java-${{ matrix.java-version}}] + name: it-java [${{ matrix.os }}] [java-${{ matrix.java-version}}] [flink-${{ matrix.flink-version}}] runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ 'ubuntu-latest' ] java-version: [ "17" ] + flink-version: [ "1.20", "2.0", "2.1", "2.2" ] steps: - uses: actions/checkout@v4 - name: Install java @@ -142,7 +144,7 @@ jobs: - name: Install ollama run: bash tools/start_ollama_server.sh - name: Run Java IT - run: tools/ut.sh -j -e + run: tools/ut.sh -j -e -f ${{ matrix.flink-version }} cross_language_tests: name: cross-language [${{ matrix.os }}] [python-${{ matrix.python-version}}] [java-${{ matrix.java-version}}] diff --git a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml index 66f1766a..2adf2752 100644 --- a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml +++ b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml @@ -28,15 +28,17 @@ under the License. flink-agents-end-to-end-tests-integration Flink Agents : E2E Tests: Integration + + 1.20.3 + 2.0.1 + 2.1.1 + 2.2.0 + + org.apache.flink - flink-agents-api - ${project.version} - - - org.apache.flink - flink-agents-runtime + ${flink.agents.dist.artifactId} ${project.version} @@ -91,4 +93,45 @@ under the License. + + + + flink-2.2 + + true + + + ${flink.2.2.version} + flink-agents-dist-flink-2.2 + + + + + + flink-1.20 + + ${flink.1.20.version} + flink-agents-dist-flink-1.20 + + + + + + flink-2.0 + + ${flink.2.0.version} + flink-agents-dist-flink-2.0 + + + + + + flink-2.1 + + ${flink.2.1.version} + flink-agents-dist-flink-2.1 + + + + diff --git a/tools/ut.sh b/tools/ut.sh index ee430372..134493b3 100755 --- a/tools/ut.sh +++ b/tools/ut.sh @@ -20,11 +20,15 @@ set -e ROOT="$(cd "$( dirname "$0" )" && pwd)/.." +# Default Flink version +DEFAULT_FLINK_VERSION="2.2" + # Default values run_java=true run_python=true run_e2e=false verbose=false +flink_versions=() # Help information show_help() { @@ -38,12 +42,18 @@ Options: -p, --python Run only Python tests -e, --e2e Run e2e tests -b, --both Run both Java and Python tests (default) + -f, --flink Specify Flink version to test (can be used multiple times) + Supported versions: 2.2, 1.20 + Examples: -f 2.2, -f 1.20, -f 2.2 -f 1.20 + Default: run all versions if not specified -v, --verbose Show verbose output -h, --help Display this help message Examples: - $0 --java # Run only Java tests + $0 --java # Run only Java tests (all Flink versions) $0 -p # Run only Python tests + $0 -f 2.2 # Run tests only for Flink 2.2 + $0 -f 1.20 # Run tests only for Flink 1.20 $0 -v # Run all tests with verbose output Exit codes: @@ -72,6 +82,15 @@ while [[ "$#" -gt 0 ]]; do -e|--e2e) run_e2e=true ;; + -f|--flink) + if [[ -z "$2" || "$2" == -* ]]; then + echo "Error: -f requires a version argument (e.g., -f 1.20)" >&2 + show_help + exit 1 + fi + flink_versions+=("$2") + shift + ;; -v|--verbose) verbose=true ;; @@ -88,6 +107,18 @@ while [[ "$#" -gt 0 ]]; do shift done +# If no version is specified, the default version will be run by default. +if [ ${#flink_versions[@]} -eq 0 ]; then + flink_versions=("${DEFAULT_FLINK_VERSION}") +fi + +# Remove duplicates and sort version numbers +flink_versions=($(echo "${flink_versions[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) + +if $verbose; then + echo "Will run tests for Flink versions: ${flink_versions[*]}" +fi + java_tests() { if $verbose; then echo "Running Java tests..." @@ -96,11 +127,52 @@ java_tests() { echo "Executing Java test suite..." pushd "${ROOT}" if $run_e2e; then - mvn -T16 --batch-mode --no-transfer-progress test -pl 'e2e-test/flink-agents-end-to-end-tests-integration' + echo "Installing dist packages to local repository..." + + dist_modules="" + for version in "${flink_versions[@]}"; do + dist_modules="${dist_modules},dist/flink-${version}" + done + dist_modules="${dist_modules#,}" + + mvn --batch-mode --no-transfer-progress install -pl "$dist_modules" -DskipTests + install_code=$? + if [ $install_code -ne 0 ]; then + echo "Failed to install dist packages" >&2 + return 1 + fi + + local all_passed=true + for version in "${flink_versions[@]}"; do + echo "Running E2E tests for Flink ${version}..." + mvn --batch-mode --no-transfer-progress test -pl 'e2e-test/flink-agents-end-to-end-tests-integration' -Pflink-${version} + + if [ $? -ne 0 ]; then + echo "E2E tests failed for Flink ${version}" >&2 + all_passed=false + fi + done + + if [ "$all_passed" = false ]; then + return 1 + fi + testcode=0 else - mvn -T16 --batch-mode --no-transfer-progress test -pl '!e2e-test/flink-agents-end-to-end-tests-integration,!e2e-test/flink-agents-end-to-end-tests-resource-cross-language' + echo "Installing all modules (including test-jars) to local repository..." + mvn --batch-mode --no-transfer-progress test-compile jar:test-jar install -DskipTests + install_code=$? + if [ $install_code -ne 0 ]; then + echo "Failed to install modules to local repository" >&2 + return 1 + fi + + local all_passed=true + + exclude_list="!e2e-test/flink-agents-end-to-end-tests-integration,!e2e-test/flink-agents-end-to-end-tests-resource-cross-language" + + mvn -T16 --batch-mode --no-transfer-progress test -pl "${exclude_list}" + testcode=$? fi - testcode=$? case $testcode in 0) # All tests passed if $verbose; then @@ -130,78 +202,85 @@ python_tests() { set +e pushd "${ROOT}"/python - - # Install dependencies and run tests - echo "Installing Python test dependencies..." - if command -v uv >/dev/null 2>&1; then - if $verbose; then - echo "Using uv for dependency management" - fi - if $verbose; then - echo "Running tests with uv..." - fi - if $run_e2e; then - # There will be an individual build step before run e2e test for including java dist - uv run --no-sync pytest flink_agents -s -k "e2e_tests_integration" - else - uv sync --extra test - uv run pytest flink_agents -k "not e2e_tests" - fi - testcode=$? - else - if $verbose; then - echo "uv not found, falling back to pip" - fi - # Try modern pyproject.toml first, then fallback to requirements.txt - if [ -f "pyproject.toml" ]; then + + # Run tests for each Flink version + local all_passed=true + for version in "${flink_versions[@]}"; do + echo "Running Python tests for Flink ${version}..." + + # Install dependencies and run tests + if command -v uv >/dev/null 2>&1; then if $verbose; then - echo "Using pyproject.toml dependency groups" + echo "Using uv for dependency management" fi - pip install -e ".[test]" - else if $verbose; then - echo "Using legacy requirements.txt" + echo "Running tests with uv for Flink ${version}..." fi - pip install -r requirements/test_requirements.txt - fi - if $verbose; then - echo "Running tests with pytest..." - fi - if $run_e2e; then - pytest flink_agents -k "e2e_tests_integration" + if $run_e2e; then + # There will be an individual build step before run e2e test for including java dist + uv pip install apache-flink~=${version}.0 + uv run --no-sync pytest flink_agents -s -k "e2e_tests_integration" + else + uv sync --extra test + uv pip install apache-flink~=${version}.0 + uv run --no-sync pytest flink_agents -k "not e2e_tests" + fi + testcode=$? else - pytest flink_agents -k "not e2e_tests" + if $verbose; then + echo "uv not found, falling back to pip" + fi + # Try modern pyproject.toml first, then fallback to requirements.txt + if [ -f "pyproject.toml" ]; then + if $verbose; then + echo "Using pyproject.toml dependency groups" + fi + pip install -e ".[test]" + pip install apache-flink~=${version}.0 + fi + if $verbose; then + echo "Running tests with pytest..." + fi + if $run_e2e; then + pytest flink_agents -k "e2e_tests_integration" + else + pytest flink_agents -k "not e2e_tests" + fi + testcode=$? fi - testcode=$? - fi - + + # Handle pytest exit codes + case $testcode in + 0) # All tests passed + if $verbose; then + echo "Python tests passed for Flink ${version}" + fi + ;; + 1) # Tests failed + echo "Python tests failed for Flink ${version}" >&2 + all_passed=false + ;; + 2) # Test execution interrupted + echo "Python tests interrupted for Flink ${version}" >&2 + all_passed=false + ;; + 5) # No tests collected + echo "Warning: No Python tests collected for Flink ${version}" >&2 + ;; + *) # Unknown error + echo "Python tests encountered unknown error for Flink ${version} (exit code: $testcode)" >&2 + all_passed=false + ;; + esac + done + popd - # Handle pytest exit codes - case $testcode in - 0) # All tests passed - if $verbose; then - echo "All Python tests passed" - fi - return 0 - ;; - 1) # Tests failed - echo "Python tests failed" >&2 - return 2 - ;; - 2) # Test execution interrupted - echo "Python tests interrupted" >&2 - return 2 - ;; - 5) # No tests collected - echo "Warning: No Python tests collected" >&2 - return 0 # Treat as success - ;; - *) # Unknown error - echo "Python tests encountered unknown error (exit code: $testcode)" >&2 - return 2 - ;; - esac + if [ "$all_passed" = false ]; then + return 2 + else + return 0 + fi } main() {