Skip to content

[#514] Add map adapters#625

Open
jabolina wants to merge 1 commit into
infinispan:mainfrom
jabolina:514/maps-adapters
Open

[#514] Add map adapters#625
jabolina wants to merge 1 commit into
infinispan:mainfrom
jabolina:514/maps-adapters

Conversation

@jabolina

Copy link
Copy Markdown
Member
  • Include adapters for several Map implementations.
  • Utilize dedicated adapters so they can return the concrete type as much as possible.
  • Smaller fixes to code generation of maps and JSON parsing of container messages.

Close #514

* Include adapters for several Map implementations.
* Utilize dedicates adapters so they can return the concrete type as
  much as possible.
* Smaller fixes to code generation of maps and JSON parsing of container
  messages.
@jabolina
jabolina requested a review from a team as a code owner February 19, 2026 21:37
@tristantarrant

Copy link
Copy Markdown
Member

This PR causes Infinispan's core test suite to fail with:

[ERROR] org.infinispan.distribution.CustomMarshallerClusterTest.testRemotePutGetWithMaps -- Time elapsed: 0.005 s <<< ERROR!
org.infinispan.commons.marshall.MarshallingException: No marshaller registered for object of Java type org.infinispan.distribution.CustomMarshallerClusterTest$MyClass : MyClass[value=v]
	at org.infinispan.marshall.protostream.impl.AbstractInternalProtoStreamMarshaller.objectToOutputStream(AbstractInternalProtoStreamMarshaller.java:73)
	at org.infinispan.marshall.protostream.impl.AbstractInternalProtoStreamMarshaller.objectToBuffer(AbstractInternalProtoStreamMarshaller.java:90)
	at org.infinispan.marshall.protostream.impl.GlobalMarshaller.objectToBuffer(GlobalMarshaller.java:88)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.marshallRequest(JGroupsTransport.java:1202)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.doSendForCluster(JGroupsTransport.java:1194)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.sendCommandCheckingView(JGroupsTransport.java:1182)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.invokeCommand(JGroupsTransport.java:968)
	at org.infinispan.remoting.rpc.RpcManagerImpl.invokeCommand(RpcManagerImpl.java:236)
	at org.infinispan.interceptors.distribution.TriangleDistributionInterceptor.forwardToPrimary(TriangleDistributionInterceptor.java:557)
	at org.infinispan.interceptors.distribution.TriangleDistributionInterceptor.localWriteInvocation(TriangleDistributionInterceptor.java:542)
	at org.infinispan.interceptors.distribution.TriangleDistributionInterceptor.handleSingleKeyWriteCommand(TriangleDistributionInterceptor.java:417)
	at org.infinispan.interceptors.distribution.TriangleDistributionInterceptor.visitPutKeyValueCommand(TriangleDistributionInterceptor.java:115)
	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58)
	at org.infinispan.interceptors.BaseAsyncInterceptor.asyncInvokeNext(BaseAsyncInterceptor.java:231)
	at org.infinispan.interceptors.impl.EntryWrappingInterceptor.setSkipRemoteGetsAndInvokeNextForDataCommand(EntryWrappingInterceptor.java:732)
	at org.infinispan.interceptors.impl.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:335)
	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58)
	at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:134)
	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:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndHandle(BaseAsyncInterceptor.java:187)
	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:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58)
	at org.infinispan.interceptors.impl.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:233)
	at org.infinispan.interceptors.impl.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:196)
	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58)
	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:113)
	at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndExceptionally(BaseAsyncInterceptor.java:127)
	at org.infinispan.interceptors.impl.InvocationContextInterceptor.visitCommand(InvocationContextInterceptor.java:93)
	at org.infinispan.interceptors.impl.AsyncInterceptorChainImpl.invoke(AsyncInterceptorChainImpl.java:238)
	at org.infinispan.cache.impl.InvocationHelper.doInvoke(InvocationHelper.java:329)
	at org.infinispan.cache.impl.InvocationHelper.invoke(InvocationHelper.java:112)
	at org.infinispan.cache.impl.InvocationHelper.invoke(InvocationHelper.java:94)
	at org.infinispan.cache.impl.CacheImpl.put(CacheImpl.java:1280)
	at org.infinispan.cache.impl.CacheImpl.put(CacheImpl.java:1844)
	at org.infinispan.cache.impl.CacheImpl.put(CacheImpl.java:237)
	at org.infinispan.cache.impl.EncoderCache.put(EncoderCache.java:690)
	at org.infinispan.distribution.CustomMarshallerClusterTest.testRemotePutGet(CustomMarshallerClusterTest.java:65)
	at org.infinispan.distribution.CustomMarshallerClusterTest.testRemotePutGetWithMaps(CustomMarshallerClusterTest.java:56)
	at java.base/java.lang.reflect.Method.invoke(Method.java:565)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
	at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:230)
	at org.infinispan.testing.testng.TestNGLongTestsHook.run(TestNGLongTestsHook.java:17)
	at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:242)
	at org.testng.internal.InvokeMethodRunnable.runOne(InvokeMethodRunnable.java:56)
	at org.testng.internal.InvokeMethodRunnable.run(InvokeMethodRunnable.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
	at java.base/java.lang.Thread.run(Thread.java:1474)

@tristantarrant

Copy link
Copy Markdown
Member

Any news on this ?

@tristantarrant

Copy link
Copy Markdown
Member

I think Infinispan will need a fix in GlobalMarshaller.isMarshallableWithoutWrapping() to also check Map contents, just like it already does for Iterable.

@jabolina

Copy link
Copy Markdown
Member Author

Thanks, sorry about the delay. I'll try to run this soon to verify. I'm worried that having the adapter here could create a different wire format, since we already have the adapter in Infinispan :(

@karesti

karesti commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

@jabolina this needs rebase

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add adapters for common map types

3 participants