Thanks for providing steps to reproduce the problem.

The cryptic 50200 refers to an old issue tracker database ticket.  The issue was that Token$NotAvailable was added to the source base and was java-serializable (ObjectOutputStream) but was not in previous versions and so could possibly break backward-compatibility and hence the ability to do a rolling upgrade.  The issue was closed when NotAvailable was modified to not be java-serializable.

I know that doesn't help your situation - we need to look into it further to figure out what's going wrong.



On 5/2/18 8:42 AM, Pieter van Zyl wrote:
Hi Anthony

Yes the domain classes are present in the server classpath. All seems to work the first time. See steps below.
I have not set read-serialized

The steps are:

 1. Start Geode server with empty database.
 2. Startup application initializer to populate database with dummy data.
 3. Startup Swing app.
 4. Browse data. All 100%
 5. Stop application.
 6. Start application and browse again. All 100%

But if I do the following

 1. Start Geode server with empty database.
 2. Startup application initializer to populate database with dummy data.
 3. Startup Swing app.
 4. Browse data. All 100%
 5. Stop application. AND stop Geode server
 6. Start Geode Database with dummy data.
 7. Start application. This then fails with *NotSerializableException:
    org.apache.geode.internal.cache.Token$NotAvailable*


I am just wondering why it is trying to send *Token$NotAvailable back to the client?* Could this be related tour our custom** RDBGeodeSerializer which extends ReflectionBasedAutoSerializer?

*
*
public static class Removed extends Token implements *_DataSerializableFixedID_*, Serializable {
*vs:*
*
*
public static class NotAvailable extends Token {...
  @Override public StringtoString() {
     return "NOT_A_TOKEN"; }
   // to fix bug 50200 no longer serializable }
...

*What is bug 50200? I cannot find this bug on your Jira site.*
*
*

Some of the client config:

<bean id="pdxSerializer" class="org.rdb.geode.mapping.RDBGeodeSerializer"> <constructor-arg value="org.rdb.*,net.lautus.*"/> </bean> <util:properties id="gemfire-props"> <prop key="log-level">debug</prop> </util:properties> <gfe:client-cache properties-ref="gemfire-props" pdx-serializer-ref="pdxSerializer" pool-name="pool"/> <gfe:transaction-manager/> <gfe:pool id="pool" socket-buffer-size="65536" max-connections="300" min-connections="200"> <gfe:locator host="pvz-dell.lautus.net <http://pvz-dell.lautus.net>" port="10334"/> </gfe:pool> <gfe:client-region id="org.rdb.internal.session.rootmap.RootMapHolder" shortcut="CACHING_PROXY_HEAP_LRU" ignore-if-exists="true"> <!--<gfe:cache-listener ref="cacheClientListener"/>--> </gfe:client-region> <!--<bean id="cacheClientListener" class="org.rdb.session.geode.LoggingClientCacheListener"/>--> <gfe:client-region id="ClassName-ClassID-LookUp" shortcut="CACHING_PROXY_HEAP_LRU" ignore-if-exists="true"/> <gfe:client-region id="ClassID-ClassName-LookUp" shortcut="CACHING_PROXY_HEAP_LRU" ignore-if-exists="true"/> <gfe:client-region id="ClassCounter" shortcut="CACHING_PROXY_HEAP_LRU" ignore-if-exists="true"/>

Some extra debug

*<<<<<GeodeDatabaseSession>>>>>*
*[debug 2018/05/02 15:15:44.559 SAST <main> tid=0x1] setting up server affinity*
*
*
*[debug 2018/05/02 15:15:44.559 SAST <main> tid=0x1] Built a new TXState: class org.apache.geode.internal.cache.tx.ClientTXStateStub@673992096 target node: null me:pvz-dell(13285:loner):45990:8485fe20*
*
*
*[debug 2018/05/02 15:15:44.570 SAST <main> tid=0x1] constructing a GetOp for key 0*
*
*
*[debug 2018/05/02 15:15:44.570 SAST <main> tid=0x1] GetOp invoked for key 0*
*
*
*[debug 2018/05/02 15:15:44.570 SAST <main> tid=0x1] setting server affinity to pvz-dell.lautus.net:40404 <http://pvz-dell.lautus.net:40404>*
*
*
*Exception in thread "main" org.apache.geode.cache.client.ServerOperationException: remote server on pvz-dell(13285:loner):45990:8485fe20: org.apache.geode.SerializationException: failed serializing object* *at org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:669)*
*
*

Kindly
Pieter


On Tue, May 1, 2018 at 5:35 PM, Anthony Baker <[email protected] <mailto:[email protected]>> wrote:

    Hi Pieter!

    Are your domain classes present on the server classpath?  Do you
    know if ‘read-serialized’ was set or changed?

    If you could provide a set of steps to reproduce this that would
    be great.

    Thanks,
    Anthony



    On Apr 30, 2018, at 3:47 AM, Pieter van Zyl
    <[email protected] <mailto:[email protected]>> wrote:

    Good day.

    I am constantly seeing this error below when we stop and start
    Geode server after a data import.

    When the client connects the second time after the restart we get
    NotSerializableException:
    org.apache.geode.internal.cache.Token$NotAvailable

    Any ideas why we are getting this error or why it would state
    "NotAvailable"?

    _Versions:_

    compile 'org.springframework.data:spring-data-geode:2.1.0.M2'
    compile group: 'org.apache.geode', name: 'geode-core', version:
    '1.5.0'

    Trying to access this region on startup:

    /<gfe:replicated-region id="ClassID-ClassName-LookUp"
     disk-store-ref="tauDiskStore"
     persistent="true">
        <gfe:eviction type="HEAP_PERCENTAGE" action="OVERFLOW_TO_DISK"/>
    </gfe:replicated-region>/

    _Server config:_
    /
    /
    /<util:properties id="gemfire-props">
    <prop key="log-level">info</prop>
    <prop key="locators">pvz-dell[10334]</prop>
    <prop key="start-locator">pvz-dell[10334]</prop>
    <prop key="mcast-port">0</prop>
    <prop key="http-service-port">0</prop>

    <prop key="jmx-manager">true</prop>
    <prop key="jmx-manager-port">1099</prop>
    <prop key="jmx-manager-start">true</prop>
    </util:properties>/
    *<gfe:cache properties-ref="gemfire-props"
    pdx-serializer-ref="pdxSerializer" pdx-persistent="true"
    pdx-disk-store="pdx-disk-store" />

    <gfe:cache-server port="40404" max-connections="300"
    socket-buffer-size="65536" max-threads="200"/>

    <gfe:transaction-manager id="txManager"/>


    <bean id="pdxSerializer"
    class="org.rdb.geode.mapping.RDBGeodeSerializer">
    <constructor-arg value="org.rdb.*,net.lautus.*"/>
    </bean>*

    The server seems to be up and running
    /*Cache server connection listener bound to address
    pvz-dell-/0:0:0:0:0:0:0:0:40404 with backlog 1,000.*/
    /*
    */
    /*[info 2018/04/30 12:32:30.483 SAST <main> tid=0x1]
    ClientHealthMonitorThread maximum allowed time between pings:
    60,000*/
    /*
    */
    /*[warn 2018/04/30 12:32:30.485 SAST <main> tid=0x1] Handshaker
    max Pool size: 4*/
    /*
    */
    /*[info 2018/04/30 12:32:30.486 SAST <Cache Server Selector
    /0:0:0:0:0:0:0:0:40404 local port: 40404> tid=0x4f] SELECTOR
    enabled*/
    /*
    */
    /*[info 2018/04/30 12:32:30.491 SAST <main> tid=0x1] CacheServer
    Configuration:   port=40404 max-connections=300 max-threads=200
    notify-by-subscription=true socket-buffer-size=65536
    maximum-time-between-pings=60000 maximum-message-count=230000
    message-time-to-live=180 eviction-policy=none capacity=1 overflow
    directory=. groups=[] loadProbe=ConnectionCountProbe
    loadPollInterval=5000 tcpNoDelay=true*/
    /*
    */
    /*server running on port 40404*/
    /*Press <Enter> to terminate the server*/


    Exception in thread "main"
    org.apache.geode.cache.client.ServerOperationException: remote
    server on pvz-dell(23128:loner):38042:2edf1c16:
    org.apache.geode.SerializationException: failed serializing object
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:669)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:742)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:611)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.executeOnServer(OpExecutorImpl.java:373)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithServerAffinity(OpExecutorImpl.java:220)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:129)
    at
    
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:116)
    at
    org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:774)
    at
    org.apache.geode.cache.client.internal.GetOp.execute(GetOp.java:91)
    at
    
org.apache.geode.cache.client.internal.ServerRegionProxy.get(ServerRegionProxy.java:113)
    at
    
org.apache.geode.internal.cache.tx.ClientTXRegionStub.findObject(ClientTXRegionStub.java:72)
    at
    org.apache.geode.internal.cache.TXStateStub.findObject(TXStateStub.java:453)
    at
    
org.apache.geode.internal.cache.TXStateProxyImpl.findObject(TXStateProxyImpl.java:496)
    at
    org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1366)
    at
    org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1300)
    at
    org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1285)
    at
    org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:320)
    ......
    Caused by: org.apache.geode.SerializationException: failed
    serializing object
    at
    
org.apache.geode.internal.cache.tier.sockets.Message.serializeAndAddPart(Message.java:399)
    at
    
org.apache.geode.internal.cache.tier.sockets.Message.addPartInAnyForm(Message.java:360)
    at
    
org.apache.geode.internal.cache.tier.sockets.command.Get70.writeResponse(Get70.java:424)
    at
    
org.apache.geode.internal.cache.tier.sockets.command.Get70.cmdExecute(Get70.java:211)
    at
    
org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:157)
    at
    
org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:797)
    at
    
org.apache.geode.internal.cache.tier.sockets.LegacyServerConnection.doOneMessage(LegacyServerConnection.java:85)
    at
    
org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1148)
    at
    
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at
    
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at
    
org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:641)
    at java.lang.Thread.run(Thread.java:748)
    *Caused by: java.io <http://java.io>.NotSerializableException:
    org.apache.geode.internal.cache.Token$NotAvailable*
    at
    java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at
    java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at
    
org.apache.geode.internal.InternalDataSerializer.writeSerializableObject(InternalDataSerializer.java:2341)
    at
    
org.apache.geode.internal.InternalDataSerializer.basicWriteObject(InternalDataSerializer.java:2216)
    at
    org.apache.geode.DataSerializer.writeObject(DataSerializer.java:2936)
    at
    org.apache.geode.internal.util.BlobHelper.serializeTo(BlobHelper.java:66)
    at
    
org.apache.geode.internal.cache.tier.sockets.Message.serializeAndAddPart(Message.java:397)


    Kindly
    Pieter



Reply via email to