This is an automated email from the ASF dual-hosted git repository.
Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new c1719cef13 fix: fix ingress deletion cleanup NPE (#6988)
c1719cef13 is described below
commit c1719cef13351dc4a9cfb4e0418514f3f2fa7049
Author: hengyuss <[email protected]>
AuthorDate: Fri Sep 4 18:04:35 2026 +0800
fix: fix ingress deletion cleanup NPE (#6988)
Co-authored-by: aias00 <[email protected]>
---
.../shenyu/k8s/reconciler/IngressReconciler.java | 4 +--
.../shenyu/k8s/DivideIngressReconcilerTest.java | 32 ++++++++++++++++++++--
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git
a/shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/reconciler/IngressReconciler.java
b/shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/reconciler/IngressReconciler.java
index c47a93ef2e..ab461f8e18 100644
---
a/shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/reconciler/IngressReconciler.java
+++
b/shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/reconciler/IngressReconciler.java
@@ -133,8 +133,6 @@ public class IngressReconciler implements Reconciler {
// Do not modify current ingress object directly
final V1Ingress v1Ingress =
this.ingressLister.namespace(request.getNamespace()).get(request.getName());
final V1Ingress oldIngress =
IngressCache.getInstance().get(request.getNamespace(), request.getName());
- Map<String, String> annotations =
v1Ingress.getMetadata().getAnnotations();
- enablePluginsBasedOnAnnotations(annotations, request);
if (Objects.isNull(v1Ingress)) {
if (Objects.nonNull(oldIngress)) {
// Delete ingress binding selectors
@@ -160,6 +158,8 @@ public class IngressReconciler implements Reconciler {
}
return new Result(false);
}
+ Map<String, String> annotations =
v1Ingress.getMetadata().getAnnotations();
+ enablePluginsBasedOnAnnotations(annotations, request);
if (!checkIngressClass(v1Ingress)) {
LOG.info("IngressClass is not match {}", request);
diff --git
a/shenyu-kubernetes-controller/src/test/java/org/apache/shenyu/k8s/DivideIngressReconcilerTest.java
b/shenyu-kubernetes-controller/src/test/java/org/apache/shenyu/k8s/DivideIngressReconcilerTest.java
index e23e92037e..c5e8430ed3 100644
---
a/shenyu-kubernetes-controller/src/test/java/org/apache/shenyu/k8s/DivideIngressReconcilerTest.java
+++
b/shenyu-kubernetes-controller/src/test/java/org/apache/shenyu/k8s/DivideIngressReconcilerTest.java
@@ -34,6 +34,10 @@ import
io.kubernetes.client.openapi.models.V1EndpointsBuilder;
import io.kubernetes.client.openapi.models.V1EndpointSubsetBuilder;
import io.kubernetes.client.openapi.models.V1EndpointAddress;
import org.apache.shenyu.common.config.ssl.ShenyuSniAsyncMapping;
+import org.apache.shenyu.common.enums.PluginEnum;
+import org.apache.shenyu.k8s.cache.IngressCache;
+import org.apache.shenyu.k8s.cache.IngressSelectorCache;
+import org.apache.shenyu.k8s.cache.ServiceIngressCache;
import org.apache.shenyu.k8s.parser.IngressParser;
import org.apache.shenyu.k8s.reconciler.IngressReconciler;
import org.apache.shenyu.k8s.repository.ShenyuCacheRepository;
@@ -41,13 +45,16 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.when;
/**
* Divide Ingress Reconciler Test.
@@ -119,4 +126,25 @@ public final class DivideIngressReconcilerTest {
verify(shenyuCacheRepository).saveOrUpdateSelectorData(any());
verify(shenyuCacheRepository).saveOrUpdateRuleData(any());
}
+
+ /**
+ * Test reconcile after ingress deletion.
+ */
+ @Test
+ public void testReconcileDeletedIngress() {
+ Result result = ingressReconciler.reconcile(new
Request("mockedNamespace", "mockedIngress"));
+ Assertions.assertEquals(new Result(false), result);
+
when(ingressInformer.getIndexer().getByKey("mockedNamespace/mockedIngress")).thenReturn(null);
+
when(shenyuCacheRepository.findRuleDataList(anyString())).thenReturn(Collections.emptyList());
+
+ result = Assertions.assertDoesNotThrow(
+ () -> ingressReconciler.reconcile(new
Request("mockedNamespace", "mockedIngress")));
+
+ Assertions.assertEquals(new Result(false), result);
+
Assertions.assertNull(IngressCache.getInstance().get("mockedNamespace",
"mockedIngress"));
+ Assertions.assertNull(IngressSelectorCache.getInstance().get(
+ "mockedNamespace", "mockedIngress",
PluginEnum.DIVIDE.getName()));
+
Assertions.assertTrue(ServiceIngressCache.getInstance().getIngressName("mockedNamespace",
"testService").isEmpty());
+
verify(shenyuCacheRepository).deleteSelectorData(eq(PluginEnum.DIVIDE.getName()),
anyString());
+ }
}