geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Delos <dait...@gmail.com>
Subject Re: How to detect status of server instance?
Date Fri, 20 Aug 2010 03:03:08 GMT
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