From 06a575b94f08f0da72da519f433ee8430861ad45 Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Sun, 15 Mar 2026 17:33:26 +0800
Subject: [PATCH 1/9] [Fix-4530-1.2] Fix resolve pagination error when changing
pages on the Registry
---
.../main/resources/mapper/DocumentMapper.xml | 7 ++++
dinky-web/pom.xml | 40 +++++++++----------
.../components/DocumentProTable/index.tsx | 14 ++-----
3 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/dinky-admin/src/main/resources/mapper/DocumentMapper.xml b/dinky-admin/src/main/resources/mapper/DocumentMapper.xml
index 604c8fe14e..a3a3cd95dd 100644
--- a/dinky-admin/src/main/resources/mapper/DocumentMapper.xml
+++ b/dinky-admin/src/main/resources/mapper/DocumentMapper.xml
@@ -46,6 +46,13 @@
and a.subtype = #{param.subtype}
+
+ and a.enabled =
+
+ 1
+ 0
+
+
and a.version = #{param.version}
diff --git a/dinky-web/pom.xml b/dinky-web/pom.xml
index e81a054878..6635b17191 100644
--- a/dinky-web/pom.xml
+++ b/dinky-web/pom.xml
@@ -51,8 +51,8 @@
10.5.0
9.15.4
-
-
+
+
@@ -61,24 +61,24 @@
install-node-and-pnpm
-
- install
-
- pnpm
-
-
- install --registry ${npm-registry-repo}
-
-
-
- build
-
- pnpm
-
-
- run build
-
-
+
+ install
+
+ pnpm
+
+
+ install --registry ${npm-registry-repo}
+
+
+
+ build
+
+ pnpm
+
+
+ run build
+
+
diff --git a/dinky-web/src/pages/RegCenter/Document/components/DocumentProTable/index.tsx b/dinky-web/src/pages/RegCenter/Document/components/DocumentProTable/index.tsx
index a5ebecbbad..ec0491d3e8 100644
--- a/dinky-web/src/pages/RegCenter/Document/components/DocumentProTable/index.tsx
+++ b/dinky-web/src/pages/RegCenter/Document/components/DocumentProTable/index.tsx
@@ -117,16 +117,12 @@ const DocumentTableList: React.FC = () => {
title: l('rc.doc.functionType'),
sorter: true,
dataIndex: 'type',
- filterMultiple: true,
- filters: true,
valueEnum: DOCUMENT_TYPE_ENUMS
},
{
title: l('rc.doc.subFunctionType'),
sorter: true,
dataIndex: 'subtype',
- filters: true,
- filterMultiple: true,
renderFormItem: (item, { type }, form) => {
const currentType = form.getFieldValue('type');
let options = currentType === DOCUMENT_TYPE_ENUMS.FUN_UDF.value ? FUNCTION_TYPES : JOB_TYPE;
@@ -139,8 +135,6 @@ const DocumentTableList: React.FC = () => {
title: l('rc.doc.category'),
sorter: true,
dataIndex: 'category',
- filterMultiple: true,
- filters: true,
valueEnum: DOCUMENT_CATEGORY_ENUMS
},
{
@@ -172,11 +166,11 @@ const DocumentTableList: React.FC = () => {
{
title: l('global.table.isEnable'),
dataIndex: 'enabled',
- hideInSearch: true,
- filters: STATUS_MAPPING(),
- filterMultiple: false,
hideInDescriptions: true,
- valueEnum: STATUS_ENUM(),
+ valueType: 'select',
+ valueEnum: Object.fromEntries(
+ STATUS_MAPPING().map(item => [item.value, { text: item.text, status: item.value === 1 ? 'Success' : 'Error' }])
+ ),
render: (_, record) => {
return (
Date: Sun, 15 Mar 2026 18:24:12 +0800
Subject: [PATCH 2/9] upgrade k3s
---
.github/workflows/backend.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/backend.yaml b/.github/workflows/backend.yaml
index dcd0f4f2bd..17d22feaba 100644
--- a/.github/workflows/backend.yaml
+++ b/.github/workflows/backend.yaml
@@ -244,7 +244,7 @@ jobs:
- name: Init k3s
uses: nolar/setup-k3d-k3s@v1
with:
- version: v1.27.16+k3s1
+ version: v1.35.2+k3s1
k3d-args: -s 1 --network dinky_net --api-port 172.28.0.1:6550
k3d-tag: v5.7.5
- name: Get k3s kube config
From 8ab9ea06e27e5b71b030994f9eb486981487abbd Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Mon, 16 Mar 2026 23:42:19 +0800
Subject: [PATCH 3/9] Fix NPE
---
.../java/org/dinky/gateway/kubernetes/KubernetesGateway.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
index ae9bd7236d..187dac6aea 100644
--- a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
+++ b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
@@ -237,8 +237,10 @@ public TestResult test() {
return TestResult.success();
} catch (Exception e) {
logger.error(Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), e);
+ String errorDetail =
+ e.getMessage() != null ? e.getMessage() : e.toString();
return TestResult.fail(
- StrFormatter.format("{}:{}", Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), e.getMessage()));
+ StrFormatter.format("{} {}", Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), errorDetail));
} finally {
close();
}
From 4d9443e1ec683122e38de00faf241728f5a91ea4 Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Tue, 17 Mar 2026 00:47:58 +0800
Subject: [PATCH 4/9] spotless
---
.../java/org/dinky/gateway/kubernetes/KubernetesGateway.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
index 187dac6aea..43cc82be14 100644
--- a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
+++ b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
@@ -237,8 +237,7 @@ public TestResult test() {
return TestResult.success();
} catch (Exception e) {
logger.error(Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), e);
- String errorDetail =
- e.getMessage() != null ? e.getMessage() : e.toString();
+ String errorDetail = e.getMessage() != null ? e.getMessage() : e.toString();
return TestResult.fail(
StrFormatter.format("{} {}", Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), errorDetail));
} finally {
From 4c02d0bb5abf93510b5e3ad7528552eb941c971e Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Fri, 20 Mar 2026 21:35:41 +0800
Subject: [PATCH 5/9] fix e2e
---
.../gateway/kubernetes/KubernetesGateway.java | 20 +++++++-
.../kubernetes/KubernetesGatewayTest.java | 48 +++++++++++++++++++
e2e_test/tools/env.py | 11 +++--
3 files changed, 73 insertions(+), 6 deletions(-)
create mode 100644 dinky-gateway/src/test/java/org/dinky/gateway/kubernetes/KubernetesGatewayTest.java
diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
index 43cc82be14..c6adad48f0 100644
--- a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
+++ b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
@@ -45,6 +45,7 @@
import org.apache.flink.kubernetes.kubeclient.FlinkKubeClient;
import org.apache.flink.python.PythonOptions;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Map;
@@ -237,7 +238,7 @@ public TestResult test() {
return TestResult.success();
} catch (Exception e) {
logger.error(Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), e);
- String errorDetail = e.getMessage() != null ? e.getMessage() : e.toString();
+ String errorDetail = extractTestErrorDetail(e);
return TestResult.fail(
StrFormatter.format("{} {}", Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), errorDetail));
} finally {
@@ -245,6 +246,23 @@ public TestResult test() {
}
}
+ static String extractTestErrorDetail(Throwable throwable) {
+ Throwable rootCause = throwable;
+ while (rootCause instanceof InvocationTargetException
+ && ((InvocationTargetException) rootCause).getTargetException() != null) {
+ rootCause = ((InvocationTargetException) rootCause).getTargetException();
+ }
+ while (rootCause.getCause() != null && rootCause.getCause() != rootCause) {
+ rootCause = rootCause.getCause();
+ }
+
+ String message = rootCause.getMessage();
+ if (StringUtils.isBlank(message)) {
+ return rootCause.getClass().getName();
+ }
+ return StrFormatter.format("{}: {}", rootCause.getClass().getName(), message);
+ }
+
@Override
public void killCluster() {
log.info("Start kill cluster: " + config.getFlinkConfig().getJobName());
diff --git a/dinky-gateway/src/test/java/org/dinky/gateway/kubernetes/KubernetesGatewayTest.java b/dinky-gateway/src/test/java/org/dinky/gateway/kubernetes/KubernetesGatewayTest.java
new file mode 100644
index 0000000000..a8f3e88dcb
--- /dev/null
+++ b/dinky-gateway/src/test/java/org/dinky/gateway/kubernetes/KubernetesGatewayTest.java
@@ -0,0 +1,48 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.dinky.gateway.kubernetes;
+
+import static org.junit.Assert.assertEquals;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.junit.Test;
+
+public class KubernetesGatewayTest {
+
+ @Test
+ public void testExtractTestErrorDetailUnwrapsInvocationTargetException() {
+ IllegalStateException rootCause = new IllegalStateException("connection refused");
+ InvocationTargetException invocationTargetException = new InvocationTargetException(rootCause);
+
+ String errorDetail = KubernetesGateway.extractTestErrorDetail(invocationTargetException);
+
+ assertEquals("java.lang.IllegalStateException: connection refused", errorDetail);
+ }
+
+ @Test
+ public void testExtractTestErrorDetailFallsBackToClassName() {
+ NullPointerException rootCause = new NullPointerException();
+
+ String errorDetail = KubernetesGateway.extractTestErrorDetail(rootCause);
+
+ assertEquals("java.lang.NullPointerException", errorDetail);
+ }
+}
diff --git a/e2e_test/tools/env.py b/e2e_test/tools/env.py
index 0ce58b4f6c..ebff3d564b 100644
--- a/e2e_test/tools/env.py
+++ b/e2e_test/tools/env.py
@@ -33,12 +33,13 @@ def addStandaloneCluster(session: Session) -> int:
def addApplicationCluster(session: Session, params: dict) -> Optional[int]:
name = params['name']
- test_connection_yarn_resp = session.post(url("api/clusterConfiguration/testConnect"), json=params)
- assertRespOk(test_connection_yarn_resp, "Test yarn connectivity")
- test_connection_yarn_resp = session.put(url("api/clusterConfiguration/saveOrUpdate"), json=params)
- assertRespOk(test_connection_yarn_resp, "Add Yarn Application Cluster")
+ cluster_type = params["type"]
+ test_connection_resp = session.post(url("api/clusterConfiguration/testConnect"), json=params)
+ assertRespOk(test_connection_resp, f"Test {cluster_type} connectivity")
+ save_cluster_resp = session.put(url("api/clusterConfiguration/saveOrUpdate"), json=params)
+ assertRespOk(save_cluster_resp, f"Add {cluster_type} cluster")
get_app_list = session.get(url(f"api/clusterConfiguration/list?keyword={name}"), json=params)
- assertRespOk(get_app_list, "Get Yarn Application Cluster")
+ assertRespOk(get_app_list, f"Get {cluster_type} cluster")
for data in get_app_list.json()["data"]:
if data["name"] == name:
return data['id']
From 0108ce0f6f5ee3819db478a90ad55dda8e436831 Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Fri, 20 Mar 2026 21:49:05 +0800
Subject: [PATCH 6/9] test e2e
---
.../gateway/kubernetes/KubernetesGateway.java | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
index c6adad48f0..019cd63f86 100644
--- a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
+++ b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
@@ -41,12 +41,9 @@
import org.apache.flink.kubernetes.KubernetesClusterClientFactory;
import org.apache.flink.kubernetes.KubernetesClusterDescriptor;
import org.apache.flink.kubernetes.configuration.KubernetesConfigOptions;
-import org.apache.flink.kubernetes.kubeclient.Fabric8FlinkKubeClient;
-import org.apache.flink.kubernetes.kubeclient.FlinkKubeClient;
import org.apache.flink.python.PythonOptions;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Map;
import java.util.UUID;
@@ -225,16 +222,9 @@ public TestResult test() {
// Test mode no jobName, use uuid .
addConfigParas(KubernetesConfigOptions.CLUSTER_ID, UUID.randomUUID().toString());
initConfig();
- FlinkKubeClient client = k8sClientHelper.getClient();
- if (client instanceof Fabric8FlinkKubeClient) {
- Object internalClient = ReflectUtil.getFieldValue(client, "internalClient");
- Method method = ReflectUtil.getMethod(internalClient.getClass(), "getVersion");
- Object versionInfo = method.invoke(internalClient);
- logger.info(
- "k8s cluster link successful ; k8s version: {} ; platform: {}",
- ReflectUtil.getFieldValue(versionInfo, "gitVersion"),
- ReflectUtil.getFieldValue(versionInfo, "platform"));
- }
+ String namespace = configuration.get(KubernetesConfigOptions.NAMESPACE);
+ k8sClientHelper.getKubernetesClient().pods().inNamespace(namespace).list();
+ logger.info("k8s cluster link successful ; namespace: {}", namespace);
return TestResult.success();
} catch (Exception e) {
logger.error(Status.GATEWAY_KUBERNETES_TEST_FAILED.getMessage(), e);
From 271f46d9c27ffbe8e2e98c87e854213acf7c260d Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Fri, 20 Mar 2026 21:52:56 +0800
Subject: [PATCH 7/9] spotless
---
.../java/org/dinky/gateway/kubernetes/KubernetesGateway.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
index 019cd63f86..803036096a 100644
--- a/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
+++ b/dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/KubernetesGateway.java
@@ -53,7 +53,6 @@
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.text.StrFormatter;
-import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import io.fabric8.kubernetes.api.model.Pod;
import lombok.Data;
From 9733d6ba302c3b14cbedc788253f5808d78e2fb4 Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Fri, 20 Mar 2026 22:16:19 +0800
Subject: [PATCH 8/9] test e2e
---
.github/workflows/backend.yaml | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/backend.yaml b/.github/workflows/backend.yaml
index 17d22feaba..8f38ae9c61 100644
--- a/.github/workflows/backend.yaml
+++ b/.github/workflows/backend.yaml
@@ -247,13 +247,32 @@ jobs:
version: v1.35.2+k3s1
k3d-args: -s 1 --network dinky_net --api-port 172.28.0.1:6550
k3d-tag: v5.7.5
- - name: Get k3s kube config
- run: k3d kubeconfig get --all && mkdir ./kube && k3d kubeconfig get --all > ./kube/k3s.yaml && sed -i 's/0.0.0.0/172.28.0.1/g' ./kube/k3s.yaml
- name: Init k8s RBAC and namespace
run: |
kubectl create namespace dinky
kubectl create serviceaccount dinky -n dinky
kubectl create clusterrolebinding flink-role-binding-dinky --clusterrole=edit --serviceaccount=dinky:dinky
+ mkdir ./kube
+ cat < ./kube/k3s.yaml
+ apiVersion: v1
+ kind: Config
+ clusters:
+ - name: k3d-default
+ cluster:
+ server: https://172.28.0.1:6550
+ insecure-skip-tls-verify: true
+ users:
+ - name: dinky
+ user:
+ token: $(kubectl create token dinky -n dinky)
+ contexts:
+ - name: dinky
+ context:
+ cluster: k3d-default
+ namespace: dinky
+ user: dinky
+ current-context: dinky
+ EOF
- name: Init k3s main images
run: |
docker exec k3d-k3s-default-server-0 crictl pull library/busybox:latest
From 575d47e652fab984e3674960b1dccfb36563a853 Mon Sep 17 00:00:00 2001
From: Wink <809097465@qq.com>
Date: Fri, 20 Mar 2026 22:56:17 +0800
Subject: [PATCH 9/9] test
---
.github/workflows/backend.yaml | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/.github/workflows/backend.yaml b/.github/workflows/backend.yaml
index 8f38ae9c61..fc9ae65001 100644
--- a/.github/workflows/backend.yaml
+++ b/.github/workflows/backend.yaml
@@ -252,6 +252,29 @@ jobs:
kubectl create namespace dinky
kubectl create serviceaccount dinky -n dinky
kubectl create clusterrolebinding flink-role-binding-dinky --clusterrole=edit --serviceaccount=dinky:dinky
+ cat < ./kube/k3s.yaml
apiVersion: v1