-
Bug
-
Resolution: Done
-
Major
-
14.0.0.Final
-
None
It's not possible to upgrade clusters from 13.0.x to 14.0.0 if any cache configurations with persistence exist in `caches.xml`. The following exception is thrown on startup of 14.0.0.Dev03 when trying to upgrade a cluster with the following caches.xml:
<?xml version="1.0"?> <infinispan xmlns="urn:infinispan:config:13.0"> <cache-container> <caches> <distributed-cache name="someCache" mode="SYNC"> <persistence> <file-store/> </persistence> </distributed-cache> </caches> </cache-container> </infinispan>
09:04:07,826 INFO (main) [BOOT] JVM OpenJDK 64-Bit Server VM Red Hat, Inc. 17.0.3+7-LTS 09:04:07,832 INFO (main) [BOOT] JVM arguments = [-server, --add-exports, java.naming/com.sun.jndi.ldap=ALL-UNNAMED, -Xmx512m, -XX:+ExitOnOutOfMemoryError, -XX:MetaspaceSize=32m, -XX:MaxMetaspaceSize=96m, -Djava.net.preferIPv4Stack=true, -Djava.awt.headless=true, -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n, -Dvisualvm.display.name=infinispan-server, -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager, -Dinfinispan.server.home.path=/opt/infinispan, -classpath, :/opt/infinispan/boot/infinispan-server-runtime-14.0.0.Dev03-loader.jar, org.infinispan.server.loader.Loader, org.infinispan.server.Bootstrap, --bind-address=0.0.0.0, -l, /opt/infinispan/server/conf/operator/log4j.xml, -c, operator/infinispan-base.xml, -c, operator/infinispan-admin.xml] 09:04:07,835 INFO (main) [BOOT] PID = 166 09:04:07,862 INFO (main) [org.infinispan.SERVER] ISPN080000: Infinispan Server 14.0.0.Dev03 starting 09:04:07,862 INFO (main) [org.infinispan.SERVER] ISPN080017: Server configuration: operator/infinispan-base.xml 09:04:07,862 INFO (main) [org.infinispan.SERVER] ISPN080017: Server configuration: operator/infinispan-admin.xml 09:04:07,862 INFO (main) [org.infinispan.SERVER] ISPN080032: Logging configuration: /opt/infinispan/server/conf/operator/log4j.xml 09:04:08,323 INFO (main) [org.infinispan.SERVER] ISPN080027: Loaded extension 'query-dsl-filter-converter-factory' 09:04:08,323 INFO (main) [org.infinispan.SERVER] ISPN080027: Loaded extension 'continuous-query-filter-converter-factory' 09:04:08,325 INFO (main) [org.infinispan.SERVER] ISPN080027: Loaded extension 'iteration-filter-converter-factory' 09:04:08,326 WARN (main) [org.infinispan.SERVER] ISPN080059: No script engines are available 09:04:08,789 WARN (main) [org.infinispan.PERSISTENCE] ISPN000554: jboss-marshalling is deprecated and planned for removal 09:04:08,825 INFO (main) [org.infinispan.CONTAINER] ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller' 09:04:09,326 WARN (main) [org.infinispan.protostream.impl.AnnotatedDescriptorImpl] Encountered and ignored and unknown annotation "Scope" on org.infinispan.persistence.query.core.LocalQueryStatistics 09:04:09,330 INFO (main) [org.infinispan.CONTAINER] ISPN000389: Loaded global state, version=14.0.0.Dev03 timestamp=2022-07-21T09:03:17.863111740Z 09:04:09,609 INFO (main) [org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel `test-upgrade` with stack `image-tcp` 09:04:09,734 INFO (main) [org.jgroups.JChannel] local_addr: 8543edd1-b69b-4215-9533-57b01efda2a0, name: test-upgrade-0-10865 09:04:11,749 INFO (main) [org.jgroups.protocols.pbcast.GMS] test-upgrade-0-10865: no members discovered after 2004 ms: creating cluster as coordinator 09:04:11,775 INFO (main) [org.infinispan.CLUSTER] ISPN000094: Received new cluster view for channel test-upgrade: [test-upgrade-0-10865|0] (1) [test-upgrade-0-10865] 09:04:11,831 INFO (main) [org.infinispan.CLUSTER] ISPN000079: Channel `test-upgrade` local address is `test-upgrade-0-10865`, physical addresses are `[10.244.0.67:7800]` 09:04:12,089 INFO (main) [org.jboss.threads] JBoss Threads version 2.3.3.Final 09:04:12,152 INFO (main) [org.infinispan.CONTAINER] ISPN000104: Using EmbeddedTransactionManager 09:04:12,400 WARN (blocking-thread--p3-t1) [org.infinispan.encoding.impl.StorageConfigurationManager] ISPN000599: Configuration for cache 'someCache' does not define the encoding for keys or values. If you use operations that require data conversion or queries, you should configure the cache with a specific MediaType for keys or values. 09:04:12,450 ERROR (main) [org.infinispan.interceptors.impl.InvocationContextInterceptor] ISPN000136: Error executing command PutKeyValueCommand on Cache 'org.infinispan.CONFIG', writing keys [ScopedState{scope='cache', name='someCache'}] org.infinispan.commons.CacheListenerException: ISPN000280: Caught exception [org.infinispan.commons.CacheConfigurationException] while invoking method [public java.util.concurrent.CompletionStage org.infinispan.globalstate.impl.GlobalConfigurationStateListener.handleCreate(org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent)] on listener instance: org.infinispan.globalstate.impl.GlobalConfigurationStateListener@422ba9b7 at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.lambda$invoke$1(AbstractListenerImpl.java:430) at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.invoke(AbstractListenerImpl.java:450) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.doRealInvocation(CacheNotifierImpl.java:1793) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.doRealInvocation(CacheNotifierImpl.java:1789) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invokeNoChecks(CacheNotifierImpl.java:1784) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invoke(CacheNotifierImpl.java:1757) at org.infinispan.notifications.cachelistener.CacheNotifierImpl.doNotifyCreated(CacheNotifierImpl.java:428) at org.infinispan.notifications.cachelistener.CacheNotifierImpl.notifyCacheEntryCreated(CacheNotifierImpl.java:410) at org.infinispan.notifications.cachelistener.NotifyHelper.entryCommitted(NotifyHelper.java:63) at org.infinispan.interceptors.locking.ClusteringDependentLogic$ReplicationLogic.commitSingleEntry(ClusteringDependentLogic.java:561) at org.infinispan.interceptors.locking.ClusteringDependentLogic$AbstractClusteringDependentLogic.commitEntry(ClusteringDependentLogic.java:243) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitContextEntry(EntryWrappingInterceptor.java:612) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitEntryIfNeeded(EntryWrappingInterceptor.java:885) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitContextEntries(EntryWrappingInterceptor.java:592) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.applyChanges(EntryWrappingInterceptor.java:686) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.applyAndFixVersion(EntryWrappingInterceptor.java:738) at org.infinispan.interceptors.SyncInvocationStage.thenApply(SyncInvocationStage.java:44) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.setSkipRemoteGetsAndInvokeNextForDataCommand(EntryWrappingInterceptor.java:733) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:336) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:63) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndFinally(BaseAsyncInterceptor.java:155) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.lambda$nonTxLockAndInvokeNext$3(AbstractLockingInterceptor.java:318) at org.infinispan.interceptors.SyncInvocationStage.andHandle(SyncInvocationStage.java:69) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.nonTxLockAndInvokeNext(AbstractLockingInterceptor.java:313) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:138) at org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitDataWriteCommand(NonTransactionalLockingInterceptor.java:41) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:82) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:63) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndHandle(BaseAsyncInterceptor.java:188) at org.infinispan.statetransfer.StateTransferInterceptor.handleNonTxWriteCommand(StateTransferInterceptor.java:312) at org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:256) at org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:96) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:63) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:59) at org.infinispan.interceptors.impl.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:265) at org.infinispan.interceptors.impl.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:224) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:63) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:59) at org.infinispan.interceptors.DDAsyncInterceptor.handleDefault(DDAsyncInterceptor.java:54) at org.infinispan.interceptors.DDAsyncInterceptor.visitPutKeyValueCommand(DDAsyncInterceptor.java:60) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:63) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndExceptionally(BaseAsyncInterceptor.java:128) at org.infinispan.interceptors.impl.InvocationContextInterceptor.visitCommand(InvocationContextInterceptor.java:89) at org.infinispan.interceptors.impl.AsyncInterceptorChainImpl.invokeAsync(AsyncInterceptorChainImpl.java:220) at org.infinispan.cache.impl.InvocationHelper.doInvokeAsync(InvocationHelper.java:318) at org.infinispan.cache.impl.InvocationHelper.invokeAsync(InvocationHelper.java:156) at org.infinispan.cache.impl.InvocationHelper.invokeAsync(InvocationHelper.java:139) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:1476) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:1469) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:446) at org.infinispan.cache.impl.AbstractDelegatingCache.putIfAbsentAsync(AbstractDelegatingCache.java:203) at org.infinispan.cache.impl.AbstractDelegatingCache.putIfAbsentAsync(AbstractDelegatingCache.java:203) at org.infinispan.cache.impl.EncoderCache.putIfAbsentAsync(EncoderCache.java:296) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCache(GlobalConfigurationManagerImpl.java:271) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.getOrCreateCache(GlobalConfigurationManagerImpl.java:215) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.lambda$start$1(GlobalConfigurationManagerImpl.java:136) at java.base/java.util.HashMap.forEach(HashMap.java:1421) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.start(GlobalConfigurationManagerImpl.java:131) 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$ComponentWrapper.running(BasicComponentRegistryImpl.java:808) at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:357) at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:250) at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:769) at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:737) at org.infinispan.server.SecurityActions.lambda$startCacheManager$1(SecurityActions.java:68) at org.infinispan.security.Security.doPrivileged(Security.java:56) at org.infinispan.server.SecurityActions.doPrivileged(SecurityActions.java:40) at org.infinispan.server.SecurityActions.startCacheManager(SecurityActions.java:71) at org.infinispan.server.Server.run(Server.java:409) at org.infinispan.server.Bootstrap.runInternal(Bootstrap.java:168) at org.infinispan.server.tool.Main.run(Main.java:98) at org.infinispan.server.Bootstrap.main(Bootstrap.java:50) 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 org.infinispan.server.loader.Loader.run(Loader.java:106) at org.infinispan.server.loader.Loader.main(Loader.java:51) Caused by: org.infinispan.commons.CacheConfigurationException: ISPN000500: Cannot create clustered configuration for cache 'someCache' because configuration Configuration{simpleCache=simple-cache=false, clustering=ClusteringConfiguration = [mode=DIST_SYNC, remote-timeout=15000, invalidation-batch-size=128, bias-acquisition=ON_WRITE, bias-lifespan=300000], customInterceptors=CustomInterceptorsConfiguration [interceptors=[]], encodingConfiguration= EncodingConfiguration = [media-type=null], expiration=ExpirationConfiguration = [lifespan=-1, max-idle=-1, reaperEnabled=true, interval=60000, touch=SYNC], indexing=IndexingConfiguration{readerConfiguration=IndexReaderConfiguration = [refresh-interval=0], writerConfiguration=IndexWriterConfiguration = [thread-pool-size=1, queue-count=1, queue-size=null, commit-interval=null, ram-buffer-size=null, max-buffered-entries=null, low-level-trace=false], attributes=IndexingConfiguration = [properties={}, index=null, auto-config=false, key-transformers={}, indexed-entities=[], enabled=false, storage=filesystem, startup-mode=NONE, path=null]}, invocationBatching=InvocationBatchingConfiguration [attributes=InvocationBatchingConfiguration = [enabled=false]], statistics=StatisticsConfiguration = [statistics=false, statistics-available=true], persistence=PersistenceConfiguration [attributes=PersistenceConfiguration = [passivation=false, availability-interval=1000, connection-attempts=10, connection-interval=50], stores=[SoftIndexFileStore [attributes=SoftIndexFileStoreConfiguration = [purge=false, read-only=false, write-only=false, preload=false, shared=false, transactional=false, max-batch-size=100, segmented=true, properties={}, open-files-limit=1000, compaction-threshold=0.5]]]], locking=LockingConfiguration = [concurrency-level=32, isolation=REPEATABLE_READ, acquire-timeout=10000, striping=false], modules={}, security=SecurityConfiguration [authorization=AuthorizationConfiguration = [enabled=false, roles=[]]], transaction=TransactionConfiguration = [auto-commit=true, stop-timeout=30000, locking=OPTIMISTIC, transaction-manager-lookup=org.infinispan.transaction.lookup.GenericTransactionManagerLookup@3359c3f6, transaction-synchronization-registry-lookup=null, mode=NON_TRANSACTIONAL, synchronization=false, single-phase-auto-commit=false, reaper-interval=30000, complete-timeout=60000, notifications=true], unsafe=UnsafeConfiguration = [unreliable-return-values=false], sites=SitesConfiguration = [merge-policy=org.infinispan.xsite.spi.DefaultXSiteEntryMergePolicy@3d3b272a, max-cleanup-delay=30000, tombstone-map-size=512000], memory=MemoryConfiguration{memoryStorageConfiguration=MemoryStorageConfiguration{attributes=MemoryStorageConfiguration = [size=-1, eviction=COUNT, strategy=NONE, type=HEAP]}, attributes=MemoryConfiguration = [storage=HEAP, max-size=null, max-count=-1, when-full=NONE]}} is incompatible with the existing configuration Configuration{simpleCache=simple-cache=false, clustering=ClusteringConfiguration = [mode=DIST_SYNC, remote-timeout=15000, invalidation-batch-size=128, bias-acquisition=ON_WRITE, bias-lifespan=300000], customInterceptors=CustomInterceptorsConfiguration [interceptors=[]], encodingConfiguration= EncodingConfiguration = [media-type=null], expiration=ExpirationConfiguration = [lifespan=-1, max-idle=-1, reaperEnabled=true, interval=60000, touch=SYNC], indexing=IndexingConfiguration{readerConfiguration=IndexReaderConfiguration = [refresh-interval=0], writerConfiguration=IndexWriterConfiguration = [thread-pool-size=1, queue-count=1, queue-size=null, commit-interval=null, ram-buffer-size=null, max-buffered-entries=null, low-level-trace=false], attributes=IndexingConfiguration = [properties={}, index=null, auto-config=false, key-transformers={}, indexed-entities=[], enabled=false, storage=filesystem, startup-mode=NONE, path=null]}, invocationBatching=InvocationBatchingConfiguration [attributes=InvocationBatchingConfiguration = [enabled=false]], statistics=StatisticsConfiguration = [statistics=false, statistics-available=true], persistence=PersistenceConfiguration [attributes=PersistenceConfiguration = [passivation=false, availability-interval=1000, connection-attempts=10, connection-interval=50], stores=[SoftIndexFileStore [attributes=SoftIndexFileStoreConfiguration = [purge=false, read-only=false, write-only=false, preload=false, shared=false, transactional=false, max-batch-size=100, segmented=true, properties={}, open-files-limit=1000, compaction-threshold=0.5]]]], locking=LockingConfiguration = [concurrency-level=32, isolation=REPEATABLE_READ, acquire-timeout=10000, striping=false], modules={}, security=SecurityConfiguration [authorization=AuthorizationConfiguration = [enabled=false, roles=[]]], transaction=TransactionConfiguration = [auto-commit=true, stop-timeout=30000, locking=OPTIMISTIC, transaction-manager-lookup=org.infinispan.transaction.lookup.GenericTransactionManagerLookup@3359c3f6, transaction-synchronization-registry-lookup=null, mode=NON_TRANSACTIONAL, synchronization=false, single-phase-auto-commit=false, reaper-interval=30000, complete-timeout=60000, notifications=true], unsafe=UnsafeConfiguration = [unreliable-return-values=false], sites=SitesConfiguration = [merge-policy=org.infinispan.xsite.spi.DefaultXSiteEntryMergePolicy@3d3b272a, max-cleanup-delay=30000, tombstone-map-size=512000], memory=MemoryConfiguration{memoryStorageConfiguration=MemoryStorageConfiguration{attributes=MemoryStorageConfiguration = [size=-1, eviction=COUNT, strategy=NONE, type=HEAP]}, attributes=MemoryConfiguration = [storage=HEAP, max-size=null, max-count=-1, when-full=NONE]}} at org.infinispan.globalstate.impl.VolatileLocalConfigurationStorage.createCache(VolatileLocalConfigurationStorage.java:80) at org.infinispan.globalstate.impl.OverlayLocalConfigurationStorage.createCache(OverlayLocalConfigurationStorage.java:83) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCacheLocally(GlobalConfigurationManagerImpl.java:295) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCacheLocally(GlobalConfigurationManagerImpl.java:290) at org.infinispan.globalstate.impl.GlobalConfigurationStateListener.handleCreate(GlobalConfigurationStateListener.java:46) 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 org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.lambda$invoke$1(AbstractListenerImpl.java:424) ... 81 more
The root cause is that the configuration created for the 13.0 schema uses org.infinispan.configuration.parsing.SFSToSIFSConfiguration whereas 14.0 uses org.infinispan.persistence.sifs.configuration.SoftIndexFileStoreConfiguration, causing the call to Configuration#matches in GlobalConfigurationManagerImpl#ensureClusterCompatibility to return false and an exception thrown.