Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-2553

JBossMarshaller can be used before properly initialized

    XMLWordPrintable

Details

    Description

      The JBossMarshaller can be used before its start() method is called. I've noticed that with replicated cache without transactions, an OOB thread can start demarshalling SingleRpcCommand in CacheRpcCommandExternalizer but when it tries to create a new unmarshaller (through AbstractJBossMarshaller.startObjectInput(...) and the marshallerTL.initialValue() the baseCfg configuration is not fully initialized yet and this results in creating marshallers in PerThreadInstanceHolder with objectTable == null. Then, objects are deserialized to null.

      I have verified this by inserting some log messages into constructors and start method:

      19:49:02,404 INFO  [org.infinispan.marshall.jboss.AbstractJBossMarshaller] (pool-1-thread-1) Creating AbstractJBossMarshaller with org.jboss.marshalling.MarshallingConfiguration@1d296aa3: classExternalizerFactor
      y=<org.infinispan.marshall.jboss.SerializeWithExtFactory@a18024a> exceptionListener=<null> instanceCount=16 classCount=8 bufferSize=512 version=3
      19:49:02,409 INFO  [org.infinispan.marshall.jboss.AbstractJBossMarshaller] (pool-1-thread-1) Creating JBossMarshaller org.infinispan.marshall.jboss.JBossMarshaller@2e3e4d73
      19:49:02,410 INFO  [org.infinispan.marshall.jboss.AbstractJBossMarshaller] (pool-1-thread-1) Starting JBossMarshaller
      

      and into the thread-local initialization and to getUnmarshaller() just before factory.createUnmarshaller:

      19:49:02,410 ERROR [org.infinispan.marshall.jboss.AbstractJBossMarshaller] (OOB-49,rvansa-22965) No object table in org.jboss.marshalling.MarshallingConfiguration@7c4ed0bc: classExternalizerFactory=<org.infinisp
      an.marshall.jboss.SerializeWithExtFactory@a18024a> exceptionListener=<null> instanceCount=16 classCount=8 bufferSize=512 version=3, base is org.jboss.marshalling.MarshallingConfiguration@1d296aa3: classExternali
      zerFactory=<org.infinispan.marshall.jboss.SerializeWithExtFactory@a18024a> exceptionListener=<null> instanceCount=16 classCount=8 bufferSize=512 version=3
      19:49:02,453 ERROR [org.infinispan.marshall.jboss.AbstractJBossMarshaller] (OOB-49,rvansa-22965) Unmarshaller with cfg org.jboss.marshalling.MarshallingConfiguration@7c4ed0bc: classExternalizerFactory=<org.infin
      ispan.marshall.jboss.SerializeWithExtFactory@a18024a> exceptionListener=<null> instanceCount=16 classCount=8 bufferSize=512 version=3
      

      See that the timestamps for start() and thread-local initialization are same, and the base configuration (baseCfg) does not have objectTable initialized.

      Attachments

        Activity

          People

            rh-ee-galder Galder ZamarreƱo
            rvansa1@redhat.com Radim Vansa (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: