[ 
https://issues.apache.org/jira/browse/GEODE-6863?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16867817#comment-16867817
 ] 

ASF subversion and git services commented on GEODE-6863:
--------------------------------------------------------

Commit 867307dc8d8f51f57a58ac194c9e3c83170d827e in geode's branch 
refs/heads/develop from Nabarun Nag
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=867307d ]

GEODE-6863: Ignoring IllegalStateException (#3719)

        * Ignoring IllegalStateException if the server is no more running.
        * If the server is not running then getting external address will 
result in IllegalStateException.
        * The server may shut down in between isRunning and getExternalAddress 
calls.
        * If this happens then the server is not added to the location list of 
the servers hosting bucket.



> CI failure: A cache server's bind address is only available if it has been 
> started
> ----------------------------------------------------------------------------------
>
>                 Key: GEODE-6863
>                 URL: https://issues.apache.org/jira/browse/GEODE-6863
>             Project: Geode
>          Issue Type: Bug
>          Components: core
>            Reporter: Darrel Schneider
>            Priority: Major
>          Time Spent: 2.5h
>  Remaining Estimate: 0h
>
> This looks like an existing issue that has a very small window of time in 
> which it can fail.
> It should not be hard to fix.
> See: http://hydradb.gemfire.pivotal.io/hdb/testresult/5751289
> I think the place to fix this is in 
> org.apache.geode.internal.cache.BucketAdvisor.instantiateProfile(InternalDistributedMember,
>  int)
> It does a test if the server is running and then calls getExternalAddress 
> twice. If the server is stopped after the isRunning check but before 
> getExternalAddress is called then getExternalAddress will throw the 
> IllegalStateException. The following "if" block could be put in a try/catch 
> that catches IllegalStateException and ignores and skips that server if it is 
> no longer running.
> Another possible fix would be to call getExternalAddress(false) which does 
> not throw IllegalStateException and then right before adding to 
> serverLocations do a check that the server is running. Here is the code that 
> needs to be fixed:
> {code:java}
>       for (CacheServer cacheServer : servers) {
>         CacheServerImpl server = (CacheServerImpl) cacheServer;
>         if (server.isRunning() && (server.getExternalAddress() != null)) {
>           BucketServerLocation66 location = new 
> BucketServerLocation66(getBucket().getId(),
>               server.getPort(), server.getExternalAddress(), 
> getBucket().isPrimary(),
>               Integer.valueOf(version).byteValue(), 
> server.getCombinedGroups());
>           serverLocations.add(location);
>         }
>       }
> {code}
> {noformat}
> Found suspect string in log4j at line 4995
>     [error 2019/06/13 18:35:08.681 GMT <Pooled Waiting Message Processor 1> 
> tid=62] A cache server's bind address is only available if it has been started
>     java.lang.IllegalStateException: A cache server's bind address is only 
> available if it has been started
>       at 
> org.apache.geode.internal.cache.CacheServerImpl.getExternalAddress(CacheServerImpl.java:435)
>       at 
> org.apache.geode.internal.cache.CacheServerImpl.getExternalAddress(CacheServerImpl.java:427)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor.instantiateProfile(BucketAdvisor.java:1611)
>       at 
> org.apache.geode.distributed.internal.DistributionAdvisor.createProfile(DistributionAdvisor.java:1008)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor.sendProfileUpdate(BucketAdvisor.java:1576)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor.acquiredPrimaryLock(BucketAdvisor.java:1160)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor.access$300(BucketAdvisor.java:77)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor$VolunteeringDelegate.doVolunteerForPrimary(BucketAdvisor.java:2471)
>       at 
> org.apache.geode.internal.cache.BucketAdvisor$VolunteeringDelegate.lambda$consumeQueue$0(BucketAdvisor.java:2680)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at 
> org.apache.geode.distributed.internal.ClusterDistributionManager.runUntilShutdown(ClusterDistributionManager.java:959)
>       at 
> org.apache.geode.distributed.internal.ClusterDistributionManager.doWaitingThread(ClusterDistributionManager.java:849)
>       at 
> org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121)
>       at java.lang.Thread.run(Thread.java:748)
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to