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

OpenShift - Distributed Timers, timer not found by TimerService::getTimers sometimes

XMLWordPrintable

    • False
    • None
    • False
    • Hide

      Locally:

      • Clone the EAP QE OpenShift test suite repository
      • Get testable bits, e.g. the productized EAP 8 Maven repository
      • Build the test suite, see the README.md
      • Configure the test suite execution by providing required parameters (feel free to reach out to QE to get values, e.g. the test cluster URL etc.)
      • Execute the test in debug mode, so that you can stop and monitor the cluster pods' logs. E.g.: mvn clean test -B -P80-openjdk17 -Dtest=EjbDistributedTimersTest -Dmaven.surefire.debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:8000"

      On Jenkins

      • Rebuild the internal job which is linked as part of the first comment (no debug mode here, hence monitoring the cluster becomes a bit harder)
      Show
      Locally: Clone the EAP QE OpenShift test suite repository Get testable bits, e.g. the productized EAP 8 Maven repository Build the test suite, see the README.md Configure the test suite execution by providing required parameters (feel free to reach out to QE to get values, e.g. the test cluster URL etc.) Execute the test in debug mode, so that you can stop and monitor the cluster pods' logs. E.g.: mvn clean test -B -P80-openjdk17 -Dtest=EjbDistributedTimersTest -Dmaven.surefire.debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:8000" On Jenkins Rebuild the internal job which is linked as part of the first comment (no debug mode here, hence monitoring the cluster becomes a bit harder)

      We have an OpenShift test that fails in about 50% cases when executed on EAP QE Jenkins pipelines.

      The mentioned test deploys:

      • a PostgreSql service to store timer expirations metadata
      • an EAP application service that exposes endpoints to handle such persistence operations
      • an EAP application service that exposes two EJB timer beans, one which is transactionally calling the persistence APIs to record its expirations and another one that just logs messages, without storing any expiration metadata. This application service also exposes endpoints for the test class to be able to create and delete timers, and to retrieve information about them. The EJB timer beans are called remotely by such endpoints.

      The timer persistence is delegated to the Infinispan subsystem, as per EAP7-1417.

      After deploying the scenario, several tests are run, e.g. to verify a timer can be created/deleted successfully or fail-over cases.

      Most of the tests eventually try to cancel the timers they create as the last thing by calling a REST API endpoint which remotely calls the EJB bean method that finally gets a list of all the timers to cancel the requested one. Sometimes such search ends up with a null value being returned, i.e. the timer, which is supposed to exist, is not found when calling TimerService::getTimers.

      Links to internal resources documenting the test behavior are reported as part of the first comments.

        1. eap-distributed-ejb-timers-app-1-r74jd.log
          40 kB
          Fabio Burzigotti
        2. eap-distributed-ejb-timers-app-1-w7sz6.log
          37 kB
          Fabio Burzigotti
        3. everything.log
          53 kB
          Fabio Burzigotti

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

                Created:
                Updated:
                Resolved: