geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <david_jen...@yahoo.com>
Subject Re: How to detect status of server instance?
Date Fri, 20 Aug 2010 03:17:47 GMT
This isn't enough information for me.  

What do you want to do with the information that, for instance, a karaf instance started but
no geronimo bundles were started?  You have no idea how to contact this karaf instance with
this information, nor any information about what it can do.

I don't think we should support this. I can understand trying to communicate with a server
that can do something, but  not detecting that a jvm started with some stuff running that
has no way to communicate with the outside world.

Maybe if you explain your goals I'll start thinking this might be useful....

thanks
david jencks

On Aug 19, 2010, at 8:03 PM, Delos wrote:

> Let me try again to clarify my requirements and implementation. 
> 
> What I want to do?
> I just hope to detect all running instances of a specific Geronimo installation (For
multi instances configuration, see https://cwiki.apache.org/GMOxDOC22/running-multiple-geronimo-instances.html).
In one word, I just need a mechanism to tell if any running instance exists or not. So far,
I don't care which instance is running but only want to know if there is a running instance.
> 
> How I want to do?
> My solution leverages a flag file to indicate if an instance is running. When an instance
is running, it will lock its flag file first; any other process or thread CAN'T lock this
file any more until the instance is stopped. In this way, by checking if any of these flag
files is lockable, we can know if there is a running instance. 
> 
> Flag file 
> A flag file can be created and locked at the beginning when a server instance is starting.
The file can also be unlocked and deleted at the ending when the serve instance is stopping.
File creating and locking can be done before we start OSGi framework at the beginning of Bootstrapper.execute();
while file deleting and unlocking can be done in the thread added as shutdown hook in FrameworkLauncher.launch()
(line 140). NOTE, even if server instance is stopped abnormally, its flag file will still
be unlocked by JVM.
> 
> API
> It's not difficult to create and delete flag file by File.createNewFile() and File.delete().
For locking and unlocking file, we may use FileChannel.lock() to lock a file, FileChannel.tryLock()
to check if the file has been locked and FileLock.release() to unlock the file.
> 
> 2010/8/18 Rex Wang <rwonly@gmail.com>
> 
> 
> 2010/8/18 Kevan Miller <kevan.miller@gmail.com>
> 
> 
> On Aug 17, 2010, at 4:45 AM, Delos wrote:
> 
> >
> > For some reasons, we often need to know if there is a running server instance. By
establishing a connection to a specific port such as 1099,  we may get the status of server.
However, the method doesn't work if default port number is changed, especially in multi-instances
scenario. In multi-instances scenario, we hope to know if any instance is running.
> 
> I think we'd better do a better job of defining some requirements. I'm not sure I understand
precisely what you're trying to accomplish. Some off-hand thoughts:
> 
> 1) Users want to know when a server is up and running and ready to process user requests
(at least that's what users have asked me for, in the past). So, the fact that a process has
been started is probably not sufficient
> 
> 2) I think most users will want information on a specific server, not *any* server
> 
> 3) If determining the proper port to be used is a problem (and I think we should make
this simpler), then the problem applies to any command stop-server, wait-for-server, deploy,
list-modules, etc.
> 
> 
> 
> wait-for-server might be a good way to address the problem, however it is a gsh command
in 2.1.x
> Shall we resume the command in deploytool for 3.0?
> 
> -Rex
> 
>  
> >
> > Below is my thoughts about the solution. Any comments or suggestions, please feel
free to tell me. It will be appreciated if any better solution could be provided.
> >
> > Possible solution:
> >
> > We may create flag file for each instance and lock the file with FileChannel.lock()
 when a server instance is starting up. It will be unlocked and deleted when the server is
stopped. Unlocking will be automatically done when JVM exits; deleting the file can be done
in shutdown hook in FrameworkLauncher.launch().
> >
> > In this way, if any flag file has been locked, we may deduce that there is at least
one running server instance; if no locked files found, we may think all server instances are
stopped. We can put all the flag files in a same directory for us to track.
> 
> It's been a while since I looked at similar issues, but I'm not very trusting about how
much work a Java process can be guaranteed to perform on shutdown. Normal shutdown situations
work fine. But what happens when the JVM catches an abnormal signal and just exits? I'd want
to see thorough testing of any file locking/file deleting technique (especially if appropriate
file manipulation was required to start/restart the server).
> 
> --kevan
> 
> 
> 
> -- 
> Lei Wang (Rex)
> rwonly AT apache.org
> 
> 
> 
> -- 
> Best Regards,
> 
> Delos


Mime
View raw message