concurrency icon indicating copy to clipboard operation
concurrency copied to clipboard

TCK Challenge InheritedAPITests#testApiScheduleAtFixedRate and InheritedAPITests#testApiScheduleWithFixedDelay, tests don't use a Singleton EJB as counter

Open emmartins opened this issue 3 years ago • 1 comments

Specification:

Jakarta Concurrency 3.0.0

Challenged test(s):

ee.jakarta.tck.concurrent.spec.ManagedScheduledExecutorService.inheritedapi.InheritedAPITests#testApiScheduleAtFixedRate

ee.jakarta.tck.concurrent.spec.ManagedScheduledExecutorService.inheritedapi.InheritedAPITests#testApiScheduleWithFixedDelay

TCK version:

3.0.1

Tested implementation:

WildFly 27.0.0.Alpha4-SNAPSHOT (branch)

Description

Both tests lookup and use an EJB to count task runs, yet such EJB is Stateless and the counter is local to each EJB instance provided by the container. There is no spec guarantee that each JNDI lookup will return the same EJB instance, which means that if a container uses an EJB instance pool, and provides different EJB instances to each task execution, the counter value which the test uses to assert the result will not have the correct value.

Here is an example of the issue with the CounterSingleton EJB code modified to print the instance and counter value, on each business method:

2022-07-28 11:59:42,449 INFO  [ee.jakarta.tck.concurrent.framework.ArquillianTests] (default task-2) --> testApiScheduleAtFixedRate
[ testApiScheduleAtFixedRate ]
2022-07-28 11:59:43,452 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-12) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 1
2022-07-28 11:59:44,456 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-12) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 0
2022-07-28 11:59:45,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-12) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 2
2022-07-28 11:59:46,456 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-13) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 1
2022-07-28 11:59:47,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-8) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 3
2022-07-28 11:59:48,455 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-8) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 2
2022-07-28 11:59:49,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-8) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 4
2022-07-28 11:59:50,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-7) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 3
2022-07-28 11:59:51,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-7) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 5
2022-07-28 11:59:52,454 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-9) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 4
2022-07-28 11:59:53,452 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-4) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 6
2022-07-28 11:59:54,454 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-16) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 5
2022-07-28 11:59:55,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-16) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 inc: 7
2022-07-28 11:59:56,454 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-16) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 6
2022-07-28 11:59:57,452 INFO  [stdout] (default task-2) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 get: 8
2022-07-28 11:59:57,453 INFO  [stdout] (EE-ManagedScheduledExecutorService-default-Thread-16) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@3d0b3524 inc: 7
2022-07-28 11:59:58,454 INFO  [stdout] (default task-2) Counter ee.jakarta.tck.concurrent.common.counter.CounterSingleton@15a07b40 reset: 8

The fix is simple, change the CounterSingleton from @Stateless to @Singleton (which was the original TCK code), at https://github.com/jakartaee/concurrency/blob/d1a608c33bcb97eede0c7c445ae101ea0d5747a3/tck/src/main/java/ee/jakarta/tck/concurrent/common/counter/CounterSingleton.java#L21

I will submit a PR with the fix.

emmartins avatar Jul 29 '22 13:07 emmartins

Could one of the committers please add the challenge label.

scottmarlow avatar Jul 29 '22 14:07 scottmarlow

It looks like the challenge has been fixed, and these tests are not disabled. Closing as resolved.

KyleAure avatar Oct 04 '23 20:10 KyleAure