Cool - okay, I'm convinced

On 11/2/18 6:02 PM, John Blum wrote:
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)




Reply via email to