Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explore removing Caffeine's UnsafeRefArrayAccess #25125

Closed
galderz opened this issue Apr 25, 2022 · 11 comments · Fixed by #28780
Closed

Explore removing Caffeine's UnsafeRefArrayAccess #25125

galderz opened this issue Apr 25, 2022 · 11 comments · Fixed by #28780
Labels
area/cache good first issue Good for newcomers kind/enhancement New feature or request
Milestone

Comments

@galderz
Copy link
Member

galderz commented Apr 25, 2022

Description

While doing some research, I've discovered that Caffeine is no longer using Unsafe. In ben-manes/caffeine@e4b77d2, Caffeine moved its copy of MpscGrowableArrayQueue to use either Unsafe, or if not available, VarHandle. Then, with ben-manes/caffeine@4db9e8e, Unsafe was completely removed and VarHandle is only in use.

This means that UnsafeRefArrayAccess should no longer be needed. I'm not aware of VarHandles requiring extra handling.

Implementation ideas

Upgrade to a Caffeine version that includes the 2 commits mentioned above. The minimum version that includes both is 3.0.2. At the time of writing, the latest version is 3.0.6.

Then, remove UnsafeRefArrayAccess and see if Caffeine dependant native CI tests fail.

When UnsafeRefArrayAccess was not in place, you'd get a segmentation fault during runtime native execution, as a result of native offset that is runtime dependant being wrongly baked at build time.

@galderz galderz added the kind/enhancement New feature or request label Apr 25, 2022
@galderz galderz added the good first issue Good for newcomers label Apr 25, 2022
@galderz
Copy link
Member Author

galderz commented Apr 25, 2022

This could be a good task for anyone getting started with tacking native issues. Happy to help with any obstacles encountered.

@ejba
Copy link
Contributor

ejba commented Apr 25, 2022

I'd love to help if you don't mind.

@ejba
Copy link
Contributor

ejba commented Apr 25, 2022

Hi @galderz,
Upgrading bens-manes/caffeine to any version >= 3.0 breaks integration tests on quarkus-infinispan-client. The bens-manes/caffeine's CacheWriter class has been deprecated.

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 7.706 s <<< FAILURE! - in io.quarkus.it.infinispan.client.HealthCheckTest
[ERROR] io.quarkus.it.infinispan.client.HealthCheckTest.testHealthCheck  Time elapsed: 0.005 s  <<< ERROR!
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:632)
	at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:703)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.api.extension.InvocationInterceptor.interceptTestClassConstructor(InvocationInterceptor.java:73)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:77)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:355)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:302)
	at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:280)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271)
	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:188)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:154)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:240)
	at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:609)
	at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:647)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$10(ClassBasedTestDescriptor.java:381)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:381)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:205)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:80)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148)
	... 36 more
Caused by: java.util.concurrent.CompletionException: java.lang.RuntimeException: Unable to start Quarkus test resource io.quarkus.it.infinispan.client.InfinispanServerTestResource@617aff50
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1807)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: Unable to start Quarkus test resource io.quarkus.it.infinispan.client.InfinispanServerTestResource@617aff50
	at io.quarkus.test.common.TestResourceManager$TestResourceEntryRunnable.run(TestResourceManager.java:457)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
	... 3 more
Caused by: org.infinispan.manager.EmbeddedCacheManagerStartupException: org.infinispan.commons.CacheConfigurationException: Failed to construct component org.infinispan.container.impl.InternalDataContainer, path org.infinispan.container.impl.InternalDataContainer
  << org.infinispan.interceptors.locking.ClusteringDependentLogic (a org.infinispan.interceptors.locking.ClusteringDependentLogic$LocalLogic)
  << org.infinispan.commands.CommandsFactory (a org.infinispan.commands.CommandsFactoryImpl)
  << wireDependencies (a org.infinispan.cache.impl.CacheImpl)
  << org.infinispan.AdvancedCache (a org.infinispan.cache.impl.EncoderCache)
	at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:770)
	at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:734)
	at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:405)
	at org.infinispan.test.fwk.TestCacheManagerFactory.newDefaultCacheManager(TestCacheManagerFactory.java:84)
	at org.infinispan.test.fwk.TestCacheManagerFactory.createCacheManager(TestCacheManagerFactory.java:340)
	at org.infinispan.test.fwk.TestCacheManagerFactory.createCacheManager(TestCacheManagerFactory.java:330)
	at io.quarkus.it.infinispan.client.InfinispanServerTestResource.start(InfinispanServerTestResource.java:30)
	at io.quarkus.test.common.TestResourceManager$TestResourceEntryRunnable.run(TestResourceManager.java:452)
	... 4 more
Caused by: org.infinispan.commons.CacheConfigurationException: Failed to construct component org.infinispan.container.impl.InternalDataContainer, path org.infinispan.container.impl.InternalDataContainer
  << org.infinispan.interceptors.locking.ClusteringDependentLogic (a org.infinispan.interceptors.locking.ClusteringDependentLogic$LocalLogic)
  << org.infinispan.commands.CommandsFactory (a org.infinispan.commands.CommandsFactoryImpl)
  << wireDependencies (a org.infinispan.cache.impl.CacheImpl)
  << org.infinispan.AdvancedCache (a org.infinispan.cache.impl.EncoderCache)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doInstantiateWrapper(BasicComponentRegistryImpl.java:192)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.instantiateWrapper(BasicComponentRegistryImpl.java:179)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.getComponent0(BasicComponentRegistryImpl.java:144)
	at org.infinispan.factories.impl.WireContext.get(WireContext.java:20)
	at org.infinispan.interceptors.locking.CorePackageImpl$2.wire(CorePackageImpl.java:62)
	at org.infinispan.interceptors.locking.CorePackageImpl$2.wire(CorePackageImpl.java:58)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeInjection(BasicComponentRegistryImpl.java:337)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeInjection(BasicComponentRegistryImpl.java:345)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doWireWrapper(BasicComponentRegistryImpl.java:234)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.wireWrapper(BasicComponentRegistryImpl.java:215)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.getComponent0(BasicComponentRegistryImpl.java:150)
	at org.infinispan.factories.impl.WireContext.get(WireContext.java:20)
	at org.infinispan.commands.CorePackageImpl$1.wire(CorePackageImpl.java:29)
	at org.infinispan.commands.CorePackageImpl$1.wire(CorePackageImpl.java:27)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeInjection(BasicComponentRegistryImpl.java:337)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doWireWrapper(BasicComponentRegistryImpl.java:234)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.wireWrapper(BasicComponentRegistryImpl.java:215)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.getComponent0(BasicComponentRegistryImpl.java:150)
	at org.infinispan.factories.impl.WireContext.get(WireContext.java:20)
	at org.infinispan.cache.impl.CorePackageImpl$9.wire(CorePackageImpl.java:178)
	at org.infinispan.cache.impl.CorePackageImpl$9.wire(CorePackageImpl.java:175)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeInjection(BasicComponentRegistryImpl.java:337)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.wireDependencies(BasicComponentRegistryImpl.java:247)
	at org.infinispan.cache.impl.EncoderCache.wireRealCache(EncoderCache.java:120)
	at org.infinispan.cache.impl.CorePackageImpl$4.wire(CorePackageImpl.java:94)
	at org.infinispan.cache.impl.CorePackageImpl$4.wire(CorePackageImpl.java:90)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeInjection(BasicComponentRegistryImpl.java:337)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doWireWrapper(BasicComponentRegistryImpl.java:234)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.wireWrapper(BasicComponentRegistryImpl.java:215)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.registerComponent(BasicComponentRegistryImpl.java:374)
	at org.infinispan.factories.InternalCacheFactory.bootstrap(InternalCacheFactory.java:172)
	at org.infinispan.factories.InternalCacheFactory.createAndWire(InternalCacheFactory.java:118)
	at org.infinispan.factories.InternalCacheFactory.createCache(InternalCacheFactory.java:84)
	at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:704)
	at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:660)
	at org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:549)
	at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:517)
	at org.infinispan.security.actions.GetCacheAction.run(GetCacheAction.java:26)
	at org.infinispan.security.actions.GetCacheAction.run(GetCacheAction.java:14)
	at org.infinispan.security.Security.doPrivileged(Security.java:56)
	at org.infinispan.globalstate.impl.SecurityActions.doPrivileged(SecurityActions.java:30)
	at org.infinispan.globalstate.impl.SecurityActions.getCache(SecurityActions.java:39)
	at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.start(GlobalConfigurationManagerImpl.java:104)
	at org.infinispan.globalstate.impl.CorePackageImpl$2.start(CorePackageImpl.java:60)
	at org.infinispan.globalstate.impl.CorePackageImpl$2.start(CorePackageImpl.java:48)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:617)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:608)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:577)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.access$700(BasicComponentRegistryImpl.java:30)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:808)
	at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:354)
	at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:250)
	at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:766)
	... 11 more
Caused by: java.lang.NoClassDefFoundError: com/github/benmanes/caffeine/cache/CacheWriter
	at org.infinispan.factories.DataContainerFactory.construct(DataContainerFactory.java:70)
	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doInstantiateWrapper(BasicComponentRegistryImpl.java:189)
	... 63 more
Caused by: java.lang.ClassNotFoundException: com.github.benmanes.caffeine.cache.CacheWriter
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:491)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:441)
	... 65 more

[INFO] Running io.quarkus.it.infinispan.client.InfinispanClientFunctionalityTest
[WARNING] Tests run: 7, Failures: 0, Errors: 0, Skipped: 7, Time elapsed: 0.018 s - in io.quarkus.it.infinispan.client.InfinispanClientFunctionalityTest

@galderz
Copy link
Member Author

galderz commented Apr 26, 2022

Hmmmm, seems we need Infinispan (cc @wburns) to upgrade to Caffeine 3.x to make this possible.

Last year there was a discussion on the Caffeine 3 upgrade on the Infinispan Zulip server. I've just asked there to see if there's any updates.

@ejba
Copy link
Contributor

ejba commented Apr 26, 2022

@galderz silly question :) is it a public chat group?

@galderz
Copy link
Member Author

galderz commented Apr 26, 2022

Yes, anyone can join. Just like Quarkus' Zulip server.

@galderz
Copy link
Member Author

galderz commented Apr 26, 2022

It seems we're going to have to postpone this temporarily. Infinispan's baseline is still Java 8 and Caffeine 3 needs Java 11. Technically, the error above is a runtime error, so if Infinispan can somehow avoid the binary compatibility, the upgrade would still be doable. They're on Caffeine 2.8.x, which is too old to solve this problem. They need at least Caffeine 2.9.x to attempt to workaround the binary compatibility. More details in Zulip discussion linked in earlier comment.

@Sanne
Copy link
Member

Sanne commented Jun 9, 2022

Just a note: Infinispan main upgraded to Caffeine 3 and requires Java 11 now.

This still needs to wait for a proper release and us upgrading though.

@quarkus-bot
Copy link

quarkus-bot bot commented Jun 17, 2022

/cc @gwenneg

@gwenneg
Copy link
Member

gwenneg commented Sep 23, 2022

infinispan/infinispan@88cfbf1 will be available with Infinispan 14.0.0 which hasn't been released yet. The CR2 has been published already so I guess the final release of 14.0.0 will happen soon.

@geoand
Copy link
Contributor

geoand commented Oct 19, 2022

Quarkus is now using Infinispan 14.0.0 so I rebased #25134 onto main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/cache good first issue Good for newcomers kind/enhancement New feature or request
Projects
None yet
6 participants