karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guillaume Nodet <gno...@gmail.com>
Subject Re: Why do we have port and pid file ?
Date Mon, 27 Aug 2012 07:45:21 GMT
The related code is in

https://github.com/apache/karaf/blob/trunk/instance/core/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java

Could you try maybe deleting the file just after having created it using
createTempFile ?
The scripts that actually launch the process should create the file
themselves, but maybe the file is locked by the JVM ...

On Mon, Aug 27, 2012 at 8:54 AM, Charles Moulliard <ch007m@gmail.com> wrote:

> Thx for the clarification
>
> Could it be possible that for some reasons (JDK =
> 7, AccessRights/Permissions, ...), the process to create the port file
> fails on a machine but Karaf is well started ? I ask you this question as I
> get an error message (port file not found) when Karaf shutdown on openshift
> cloud machine.
>
> On Fri, Aug 24, 2012 at 3:05 PM, Guillaume Nodet <gnodet@gmail.com> wrote:
>
> > 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 <ch007m@gmail.com>
> > 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
> >
>
>
>
> --
> 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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message