To make this example a bit more concrete for everyone else...
gfsh>start server --name=*Server1* --log-level=config Starting a Geode Server in /Users/jblum/pivdev/lab/Server1... .... Server in /Users/jblum/pivdev/lab/Server1 on 10.99.199.7[*40404*] as Server1 is currently online. Process ID: 49850 Uptime: 3 seconds Geode Version: 1.6.0 Java Version: 1.8.0_192 Log File: /Users/jblum/pivdev/lab/Server1/Server1.log JVM Arguments: -Dgemfire.default.locators=10.99.199.7[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.log-level=config -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806 Class-Path: /Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-dependencies.jar gfsh>show log --member=*Server1* --lines=20 SystemLog: [info 2018/11/02 17:52:53.523 PDT Server1 <main> tid=0x1] Initialization of region _monitoringRegion_10.99.199.7<v1>1025 completed [info 2018/11/02 17:52:54.146 PDT Server1 <main> tid=0x1] Initialized cache service org.apache.geode.connectors.jdbc.internal.JdbcConnectorServiceImpl [info 2018/11/02 17:52:54.160 PDT Server1 <main> tid=0x1] Initialized cache service org.apache.geode.cache.lucene.internal.LuceneServiceImpl [info 2018/11/02 17:52:54.161 PDT Server1 <main> tid=0x1] Initialized cache service com.gemstone.gemfire.OldClientSupportProvider [info 2018/11/02 17:52:54.171 PDT Server1 <main> tid=0x1] Initializing region PdxTypes [info 2018/11/02 17:52:54.173 PDT Server1 <main> tid=0x1] Initialization of region PdxTypes completed [info 2018/11/02 17:52:54.226 PDT Server1 <main> tid=0x1] Cache server connection listener bound to address 10.99.199.7-0.0.0.0/0.0.0.0:40404 with backlog 1,000. [info 2018/11/02 17:52:54.235 PDT Server1 <main> tid=0x1] ClientHealthMonitorThread maximum allowed time between pings: 60,000 [warning 2018/11/02 17:52:54.236 PDT Server1 <main> tid=0x1] Handshaker max Pool size: 4 [info 2018/11/02 17:52:54.242 PDT *Server1* <main> tid=0x1] *CacheServer Configuration: port=40404* max-connections=800 max-threads=0 notify-by-subscription=true socket-buffer-size=32768 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 gfsh>start server --name=*Server2* --log-level=config --server-port=51515 Starting a Geode Server in /Users/jblum/pivdev/lab/Server2... ... Server in /Users/jblum/pivdev/lab/Server2 on 10.99.199.7[*51515*] as Server2 is currently online. Process ID: 49916 Uptime: 3 seconds Geode Version: 1.6.0 Java Version: 1.8.0_192 Log File: /Users/jblum/pivdev/lab/Server2/Server2.log JVM Arguments: -Dgemfire.default.locators=10.99.199.7[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.log-level=config -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806 Class-Path: /Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-dependencies.jar gfsh>show log --member=Server2 --lines=20 SystemLog: [info 2018/11/02 17:54:36.776 PDT Server2 <main> tid=0x1] Initialized cache service org.apache.geode.cache.lucene.internal.LuceneServiceImpl [info 2018/11/02 17:54:36.777 PDT Server2 <main> tid=0x1] Initialized cache service com.gemstone.gemfire.OldClientSupportProvider [info 2018/11/02 17:54:36.788 PDT Server2 <main> tid=0x1] Initializing region PdxTypes [info 2018/11/02 17:54:36.793 PDT Server2 <main> tid=0x1] Region PdxTypes requesting initial image from 10.99.199.7(Server1:49850)<v1>:1025 [info 2018/11/02 17:54:36.797 PDT Server2 <main> tid=0x1] PdxTypes is done getting image from 10.99.199.7(Server1:49850)<v1>:1025. isDeltaGII is false [info 2018/11/02 17:54:36.797 PDT Server2 <main> tid=0x1] Initialization of region PdxTypes completed [info 2018/11/02 17:54:36.852 PDT Server2 <main> tid=0x1] Cache server connection listener bound to address 10.99.199.7-0.0.0.0/0.0.0.0:51515 with backlog 1,000. [info 2018/11/02 17:54:36.859 PDT Server2 <main> tid=0x1] ClientHealthMonitorThread maximum allowed time between pings: 60,000 [warning 2018/11/02 17:54:36.860 PDT Server2 <main> tid=0x1] Handshaker max Pool size: 4 [info 2018/11/02 17:54:36.867 PDT *Server2* <main> tid=0x1] *CacheServer Configuration: port=51515* max-connections=800 max-threads=0 notify-by-subscription=true socket-buffer-size=32768 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 gfsh>start server --name=*Server3* --log-level=config --disable-default-server Starting a Geode Server in /Users/jblum/pivdev/lab/Server3... .... Server in /Users/jblum/pivdev/lab/Server3 on 10.99.199.7 as Server3 is currently online. Process ID: 49955 Uptime: 3 seconds Geode Version: 1.6.0 Java Version: 1.8.0_192 Log File: /Users/jblum/pivdev/lab/Server3/Server3.log JVM Arguments: -Dgemfire.default.locators=10.99.199.7[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.log-level=config -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806 Class-Path: /Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-dependencies.jar gfsh>show log --member=*Server3* --lines=20 SystemLog: [info 2018/11/02 17:55:19.144 PDT Server3 <main> tid=0x1] Region _monitoringRegion_10.99.199.7<v3>1027 requesting initial image from 10.99.199.7(Locator1:49705:locator)<ec><v0>:1024 [info 2018/11/02 17:55:19.147 PDT Server3 <main> tid=0x1] _monitoringRegion_10.99.199.7<v3>1027 is done getting image from 10.99.199.7(Locator1:49705:locator)<ec><v0>:1024. isDeltaGII is false [info 2018/11/02 17:55:19.147 PDT Server3 <main> tid=0x1] Initialization of region _monitoringRegion_10.99.199.7<v3>1027 completed [info 2018/11/02 17:55:19.811 PDT Server3 <main> tid=0x1] Initialized cache service org.apache.geode.connectors.jdbc.internal.JdbcConnectorServiceImpl [info 2018/11/02 17:55:19.823 PDT Server3 <main> tid=0x1] Initialized cache service org.apache.geode.cache.lucene.internal.LuceneServiceImpl [info 2018/11/02 17:55:19.824 PDT Server3 <main> tid=0x1] Initialized cache service com.gemstone.gemfire.OldClientSupportProvider [info 2018/11/02 17:55:19.834 PDT Server3 <main> tid=0x1] Initializing region PdxTypes [info 2018/11/02 17:55:19.842 PDT Server3 <main> tid=0x1] Region PdxTypes requesting initial image from 10.99.199.7(Server2:49916)<v2>:1026 [info 2018/11/02 17:55:19.846 PDT Server3 <main> tid=0x1] PdxTypes is done getting image from 10.99.199.7(Server2:49916)<v2>:1026. isDeltaGII is false [info 2018/11/02 17:55:19.846 PDT Server3 <main> tid=0x1] Initialization of region PdxTypes completed gfsh>start server --name=*Server4* --log-level=config --disable-default-server Starting a Geode Server in /Users/jblum/pivdev/lab/Server4... .... Server in /Users/jblum/pivdev/lab/Server4 on 10.99.199.7 as Server4 is currently online. Process ID: 49972 Uptime: 3 seconds Geode Version: 1.6.0 Java Version: 1.8.0_192 Log File: /Users/jblum/pivdev/lab/Server4/Server4.log JVM Arguments: -Dgemfire.default.locators=10.99.199.7[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.log-level=config -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806 Class-Path: /Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-dependencies.jar gfsh>show log --member=*Server4* --lines=20 SystemLog: [info 2018/11/02 17:55:48.826 PDT Server4 <main> tid=0x1] Region _monitoringRegion_10.99.199.7<v4>1028 requesting initial image from 10.99.199.7(Locator1:49705:locator)<ec><v0>:1024 [info 2018/11/02 17:55:48.829 PDT Server4 <main> tid=0x1] _monitoringRegion_10.99.199.7<v4>1028 is done getting image from 10.99.199.7(Locator1:49705:locator)<ec><v0>:1024. isDeltaGII is false [info 2018/11/02 17:55:48.829 PDT Server4 <main> tid=0x1] Initialization of region _monitoringRegion_10.99.199.7<v4>1028 completed [info 2018/11/02 17:55:49.475 PDT Server4 <main> tid=0x1] Initialized cache service org.apache.geode.connectors.jdbc.internal.JdbcConnectorServiceImpl [info 2018/11/02 17:55:49.489 PDT Server4 <main> tid=0x1] Initialized cache service org.apache.geode.cache.lucene.internal.LuceneServiceImpl [info 2018/11/02 17:55:49.499 PDT Server4 <main> tid=0x1] Initialized cache service com.gemstone.gemfire.OldClientSupportProvider [info 2018/11/02 17:55:49.509 PDT Server4 <main> tid=0x1] Initializing region PdxTypes [info 2018/11/02 17:55:49.517 PDT Server4 <main> tid=0x1] Region PdxTypes requesting initial image from 10.99.199.7(Server3:49955)<v3>:1027 [info 2018/11/02 17:55:49.521 PDT Server4 <main> tid=0x1] PdxTypes is done getting image from 10.99.199.7(Server3:49955)<v3>:1027. isDeltaGII is false [info 2018/11/02 17:55:49.521 PDT Server4 <main> tid=0x1] Initialization of region PdxTypes completed gfsh>list members Name | Id -------- | -------------------------------------------------------------- Locator1 | 10.99.199.7(Locator1:49705:locator)<ec><v0>:1024 [Coordinator] Server1 | 10.99.199.7(Server1:49850)<v1>:1025 Server2 | 10.99.199.7(Server2:49916)<v2>:1026 Server3 | 10.99.199.7(Server3:49955)<v3>:1027 Server4 | 10.99.199.7(Server4:49972)<v4>:1028 However, if I not started Server5 using the default port (i.e. *40404*) or mistakenly tried to reuse port 51515, then I would get... gfsh>debug --state=ON Debug is ON gfsh>start server --name=*Server5* --log-level=config /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/bin/java -server -classpath /Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/Users/jblum/pivdev/apache-geode-1.6.0/lib/geode-dependencies.jar -Dgemfire.default.locators=10.99.199.7[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.log-level=config -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806 org.apache.geode.distributed.ServerLauncher start Server5 --debug --server-port=40404 Starting a Geode Server in /Users/jblum/pivdev/lab/Server5... The Cache Server process terminated unexpectedly with exit status 1. Please refer to the log file in /Users/jblum/pivdev/lab/Server5 for full details. Exception in thread "main" java.lang.RuntimeException: An IO error occurred while starting a Server in /Users/jblum/pivdev/lab/Server5 on 10.99.199.7[40404]: Network is unreachable; port (40404) is not available on localhost. at org.apache.geode.distributed.ServerLauncher.start(ServerLauncher.java:804) at org.apache.geode.distributed.ServerLauncher.run(ServerLauncher.java:692) at org.apache.geode.distributed.ServerLauncher.main(ServerLauncher.java:225) Caused by: *java.net.BindException: Network is unreachable; port (40404) is not available on localhost.* at org.apache.geode.distributed.AbstractLauncher.assertPortAvailable(AbstractLauncher.java:129) at org.apache.geode.distributed.ServerLauncher.start(ServerLauncher.java:749) ... 2 more Cheers, -John On Fri, Nov 2, 2018 at 5:49 PM, John Blum <jb...@pivotal.io> wrote: > Damn it! Correction to my previous email... > > '--disable-default-port' should read '--disable-default-server' in my > *Gfsh* `start server` command examples. > > Apologies, > John > > > On Fri, Nov 2, 2018 at 5:41 PM, John Blum <jb...@pivotal.io> wrote: > >> Bruce- >> >> Regarding... >> >> > "... *but it's the AcceptorImpl thread that keeps the JVM from >> exiting, so I don't really agree that you can create a server with gfsh >> that doesn't have a CacheServer.*" >> >> Well, that is not entirely true, and the last bit is definitely not true. >> >> How do you suppose I can do this... >> >> gfsh>start server --name=Server1 >> gfsh>start server --name=Server2 *--server-port*=51515 >> gfsh>start server --name=Server3 *--disable-default-port* >> gfsh>start server --name=Server4 *--disable-default-port* >> >> ... if I could not disable the CacheServer? >> >> Clearly, Server1 starts up with the default CacheServer port, 40404. >> Server2 explicitly sets the CacheServer port to 51515. And Servers 3 & >> 4 simply do not have CacheServers running. If they tried to start a >> CacheServer, and they did NOT explicitly set the --server-port option, >> then Servers 3 & 4 would result in throwing a java.net.BindException. >> >> So, the ServerLauncher class "blocks" if you do not start a CacheServer >> instance, which would not be started if the server was started using `start >> server --disable-default-server`). >> >> See here [1], then here [2], and then here [3] and here [4] as well as >> this [5], which gets set from this [6]. >> >> There is a very good reason why I know this. >> >> Regards, >> -John >> >> >> [1] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher.java#L705 >> [2] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher >> .java#L906-L928 >> [3] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher.java#L953 >> [4] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher >> .java#L940-L942 >> [5] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher >> .java#L407-L409 >> [6] https://github.com/apache/geode/blob/rel/v1.7.0/geode-co >> re/src/main/java/org/apache/geode/distributed/ServerLauncher.java#L1487 >> >> >> On Fri, Nov 2, 2018 at 3:03 PM, Bruce Schuchardt <bschucha...@pivotal.io> >> wrote: >> >>> Hmm, but it's the AcceptorImpl thread that keeps the JVM from exiting, >>> so I don't really agree that you can create a server with gfsh that doesn't >>> have a CacheServer. One's got to be created through cache.xml or something. >>> >>> Be that as it may I think the recent talk about this convinces me that >>> Kirk's original proposal is sound and we should go with it. Servers can be >>> fished out of the cache so it's not a big deal if the launcher API doesn't >>> have a getCacheServer method. >>> >>> >>> On 11/1/18 9:38 AM, John Blum wrote: >>> >>>> Well, ServerLauncher may or may not create a CacheServer instance when >>>> it >>>> starts a server. A server can be created without a CacheServer, for >>>> instance, when in *Gfsh* `start server --disable-default-server` option >>>> is >>>> >>>> specified. >>>> >>>> In addition, you can always find or get the list of CacheServers (if >>>> present) from the Cache instance, using >>>> Cache.getCacheServers():List<CacheServer> [1]. So, I think it would be >>>> better if the ServerLauncher returned a handle to the Cache and then >>>> drill >>>> down as opposed to up. >>>> >>>> -j >>>> >>>> >>>> [1] >>>> http://geode.apache.org/releases/latest/javadoc/org/apache/g >>>> eode/cache/Cache.html#getCacheServers-- >>>> >>>> >>>> On Thu, Nov 1, 2018 at 7:31 AM, Bruce Schuchardt < >>>> bschucha...@pivotal.io> >>>> wrote: >>>> >>>> I like this but it might be even better if ServerLauncher gave access to >>>>> the CacheServer it launched and CacheServer gave access to its cache. >>>>> The >>>>> Locator interface, as well, could have a getCache() method and >>>>> deprecate >>>>> the getDistributedSystem() method. These days a Locator always has a >>>>> Cache >>>>> and no-one is interested in its DistributedSystem. >>>>> >>>>> >>>>> On 10/31/18 2:48 PM, Kirk Lund wrote: >>>>> >>>>> LocatorLauncher provides an API which can be used in-process to create >>>>>> a >>>>>> Locator. There is no public API on that class to get a reference to >>>>>> the >>>>>> Locator or its Cache. >>>>>> >>>>>> Similarly, ServerLauncher provides an API which can be used >>>>>> in-process to >>>>>> create a Server, but there is no public API in that class to get a >>>>>> reference to its Cache. >>>>>> >>>>>> The User of either Launcher would then have to resort to invoking >>>>>> singletons to get a reference to the Cache. >>>>>> >>>>>> There are existing package-private getter APIs on both Launchers but >>>>>> they're only used by tests in that same package. >>>>>> >>>>>> I propose adding public APIs for getCache to both LocatorLauncher and >>>>>> ServerLauncher as well as adding getLocator to LocatorLauncher. The >>>>>> signatures would look like: >>>>>> >>>>>> /** >>>>>> * Gets a reference to the Cache that was created by this >>>>>> ServerLauncher. >>>>>> * >>>>>> * @return a reference to the Cache >>>>>> */ >>>>>> public org.apache.geode.cache.Cache getCache(); >>>>>> >>>>>> /** >>>>>> * Gets a reference to the Locator that was created by this >>>>>> LocatorLauncher. >>>>>> * >>>>>> * @return a reference to the Locator >>>>>> */ >>>>>> public org.apache.geode.distributed.Locator getLocator(); >>>>>> >>>>>> Any thoughts? Yay or nay? >>>>>> >>>>>> Thanks, >>>>>> Kirk >>>>>> >>>>>> >>>>>> >>>> >>> >> >> >> -- >> -John >> john.blum10101 (skype) >> > > > > -- > -John > john.blum10101 (skype) > -- -John john.blum10101 (skype)