Both are used in a two step shutdown iirc.
When using bin/stop or when stopping a child instance, we first ask for the
instance to shutdown cleanly, and if it does not work, the process is
killed using its pid.

On Fri, Aug 24, 2012 at 1:41 PM, Charles Moulliard <[email protected]> wrote:

> Hi,
>
> I'm really curious to discover that we have 2 files doing the same job (I
> think so) a port file (created in data directory) and a pid file (that I
> cannot find in data directory)
>
>         this.pidFile = props.getProperty(KARAF_SHUTDOWN_PID_FILE);
>         this.portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
>
> 1) For PidFile --> org.apache.karaf.main.InstanceHelper
>
>     private static void writePid(String pidFile) {
>         try {
>             if (pidFile != null) {
>             ....
>                 if (matcher.matches()) {
>                     int pid = Integer.parseInt(matcher.group(1));
>                     Writer w = new OutputStreamWriter(new
> FileOutputStream(pidFile));
>                     w.write(Integer.toString(pid));
>                     w.close();
>             ...
>     }
>
> Most probably we never create it in this part of the code
>
> 2) Port File --> org.apache.karaf.main.InstanceHelper
>
>     static void setupShutdown(ConfigProperties config, Framework framework)
> {
>         writePid(config.pidFile);
>         try {
>             int port = config.shutdownPort;
>             String host = config.shutdownHost;
>             String portFile = config.portFile;
>             final String shutdown = config.shutdownCommand;
>             if (port >= 0) {
>                 ServerSocket shutdownSocket = new ServerSocket(port, 1,
> InetAddress.getByName(host));
>                 if (port == 0) {
>                     port = shutdownSocket.getLocalPort();
>                 }
>                 if (portFile != null) {
>                     Writer w = new OutputStreamWriter(new
> FileOutputStream(portFile));
>                     w.write(Integer.toString(port));
>                     w.close();
>                 }
>                 Thread thread = new ShutdownSocketThread(shutdown,
> shutdownSocket, framework);
>                 thread.setDaemon(true);
>                 thread.start();
>             }
>         } catch (Exception e) {
>             e.printStackTrace();
>         }
>     }
>
> Questions :
> - Do we still need the pid file ? If no can we clean the code ?
> - Could it be possible that for some reasons (JDK = 7,
> AccessRights/Permissions), the process to create the port file fails on a
> machine ? I ask you this question as I get this messsage when I tried to
> shutdown karaf on acloud machine
>
> remote: Stopping application...
> remote: Exception in thread "main" java.lang.NumberFormatException: null
> remote: at java.lang.Integer.parseInt(Integer.java:454)
> remote: at java.lang.Integer.parseInt(Integer.java:527)
> remote: at org.apache.karaf.main.Stop.main(Stop.java:66)
> remote: Done
>
>
> Regards,
>
> --
> Charles Moulliard
> Apache Committer / Sr. Pr. Consultant at FuseSource.com
> Twitter : @cmoulliard
> Blog : http://cmoulliard.blogspot.com
>



-- 
------------------------
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
FuseSource, Integration everywhere
http://fusesource.com

Reply via email to