Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-29870

EAP 8.1.0 Beta on OpenShift clustering - EAP instance failover leads to (HTTP 504|HTTP 500) and cache inconsistencies intermittently

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not a Bug
    • Icon: Blocker Blocker
    • None
    • 8.1.0.GA-CR2, 8.1.0.Beta
    • Clustering, OpenShift
    • False
    • Hide

      None

      Show
      None
    • False
    • Known Issue

      Update 2025-05-28

      We are deleting the pod with no grace period, in order to simulate an abrupt termination, but we've added 30 seconds sleep time in the test to allow for the data to be replicated, as suggested. The test is now failing with a different error, i.e.:

      java.lang.AssertionError: 
      1 expectation failed.
      Expected status code <200> but was <504>.
      
      
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
      	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
      	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
      	at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:73)
      	at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:60)
      	at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:86)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)
      	at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:512)
      	at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
      	at io.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:696)
      	at io.restassured.internal.ResponseSpecificationImpl.this$2$validateResponseIfRequired(ResponseSpecificationImpl.groovy)
      	at jdk.internal.reflect.GeneratedMethodAccessor365.invoke(Unknown Source)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
      	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:62)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)
      	at io.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:135)
      	at io.restassured.specification.ResponseSpecification$statusCode$0.callCurrent(Unknown Source)
      	at io.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:143)
      	at io.restassured.internal.ValidatableResponseOptionsImpl.statusCode(ValidatableResponseOptionsImpl.java:89)
      	at org.jboss.qa.appsint.tests.eap.rhdg.eap8.session.offload.Eap8WebCacheOffloadedToOperatorRhdgTests.testValue(Eap8WebCacheOffloadedToOperatorRhdgTests.java:261)
      	at org.jboss.qa.appsint.tests.eap.rhdg.eap8.session.offload.Eap8WebCacheOffloadedToOperatorRhdgTests.eapFailover(Eap8WebCacheOffloadedToOperatorRhdgTests.java:148)
      ...
      

      the last line corresponding to the instruction for reading the value after the update.

      As an additional information, the 2 EAP pods do show clean logs at the end of the test.

      Outdated description

      An EAP 8.1.0 Beta + Red Hat Datagrid 8.5.3.GA interoperability test on OpenShift that validates EAP behavior on failover fails intermittently, signaling cache inconsistencies:

      java.lang.AssertionError: 
      1 expectation failed.
      JSON path value doesn't match.
      Expected: is "7"
        Actual: null
      
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
      	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
      	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
      	at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:73)
      	at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:60)
      	at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:86)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)
      	at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:512)
      	at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
      	at io.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:696)
      	at io.restassured.internal.ResponseSpecificationImpl.this$2$validateResponseIfRequired(ResponseSpecificationImpl.groovy)
      	at jdk.internal.reflect.GeneratedMethodAccessor755.invoke(Unknown Source)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
      	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:62)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)
      	at io.restassured.internal.ResponseSpecificationImpl.body(ResponseSpecificationImpl.groovy:270)
      	at io.restassured.specification.ResponseSpecification$body$1.callCurrent(Unknown Source)
      	at io.restassured.internal.ResponseSpecificationImpl.body(ResponseSpecificationImpl.groovy:117)
      	at io.restassured.internal.ValidatableResponseOptionsImpl.body(ValidatableResponseOptionsImpl.java:244)
      	at org.jboss.qa.appsint.tests.eap.rhdg.eap8.session.offload.Eap8WebCacheOffloadedToOperatorRhdgTests.testValue(Eap8WebCacheOffloadedToOperatorRhdgTests.java:252)
      at org.jboss.qa.appsint.tests.eap.rhdg.eap8.session.offload.Eap8WebCacheOffloadedToOperatorRhdgTests.eapFailover(Eap8WebCacheOffloadedToOperatorRhdgTests.java:142)
      

      The deployment is built via the EAP Maven plugin with the cloud-default-config layer, plus the web-clustering, ejb, and ejb-dist-cache, and excluding the ejb-local-cache layer.
      The infinispan subsystem is configured to connect via HotRod:

      /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=rhdg:add(host=${env.JDG_HOST}, port=${env.JDG_PORT})
      /subsystem=infinispan/remote-cache-container=rhdg-container:add(default-remote-cluster=data-grid-cluster)
      /subsystem=infinispan/remote-cache-container=rhdg-container/remote-cluster=data-grid-cluster:add(socket-bindings=[rhdg])
      /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg-cache:add()
      /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg-cache/store=hotrod:add(remote-cache-container=rhdg-container,fetch-state=false,purge=false,passivation=false,shared=true)
      /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=rhdg-cache)
      /subsystem=infinispan/remote-cache-container=rhdg-container:write-attribute(name=properties, value={infinispan.client.hotrod.auth_realm=default,infinispan.client.hotrod.use_auth=true,infinispan.client.hotrod.auth_username=${env.CACHE_USERNAME},infinispan.client.hotrod.auth_password=${env.CACHE_PASSWORD},infinispan.client.hotrod.auth_server_name=rhdg-host,infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth,infinispan.client.hotrod.sasl_mechanism=SCRAM-SHA-512,infinispan.client.hotrod.sni_host_name=rhdg-host,infinispan.client.hotrod.ssl_hostname_validation=false,infinispan.client.hotrod.trust_store_path=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt,})
      
      

      The test logic is about creating an EAP cluster that offloads a web cache to a RHDG cluster, and checking the expected values are stored in the cache when an EAP instance is ungracefully stopped.

      The priority of this issue is set to Major (therefore not a blocker for 8.1.0 Beta) because:
      1. the issue is intermittent
      2. the overall configuration (layers + infinispan subsystem) could be maybe improved according to the latest versions used.

      Feel free to reach out for any additional details.

              pferraro@redhat.com Paul Ferraro
              fburzigo@redhat.com Fabio Burzigotti
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: