You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@karaf.apache.org by Charles Moulliard <ch...@gmail.com> on 2012/08/24 13:41:03 UTC

Why do we have port and pid file ?

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

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
I think that I know the reason. Openshift restricts which port we can use
on the cloud server (15000-35000). So if you try to bind a port which is
not allow you will ge this error.

[fabric-fuse.rhcloud.com bin]\> ./karaf
karaf: JAVA_HOME not set; results may vary
java.net.BindException: Permission denied
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.karaf.main.Main.setupShutdown(Main.java:1400)

I will make a test with a different port and using this variable :
karaf.shutdown.port

On Mon, Aug 27, 2012 at 11:03 AM, Charles Moulliard <ch...@gmail.com>wrote:

> After verification, it appears that karaf.base and karaf.home are defined
> correctly and both point to this location
> :/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric
>
> like also karaf.data
> : -Dkaraf.data=/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data
>
> The account has the permissions required to create the file in the data
> directory
>
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/
> total 136
> drwxr-xr-x. 11 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 .
> drwxr-x---.  5 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
> -rw-r--r--.  1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  6148 Aug 24 13:05 .DS_Store
> drwxr-xr-x.  2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 bin
> drwxr-xr-x.  6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 data
>
> Log are well created like also tmp file and karaf.out
>
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data
> total 40
> drwxr-xr-x.   6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
> drwxr-xr-x.  11 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
> drwxr-xr-x. 110 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 cache
> drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 generated-bundles
> -rw-r--r--.   1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6 14020 Aug 27 04:45 karaf.out
> drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 log
> drwxr-xr-x.   4 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 27 04:46 tmp
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data/log/
> total 76
> drwxr-xr-x. 2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
> drwxr-xr-x. 6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 ..
> -rw-r--r--. 1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6 63222 Aug 27 05:01 karaf.log
>
> Remarks :
>
> - Version used here is karaf 2.2.5 but code is the same compared to trunk
> of 2.2.3 -->
> https://github.com/apache/karaf/blob/karaf-2.2.5/main/src/main/java/org/apache/karaf/main/Main.java#L1333
> - I can create manually the port file but of course the port number added
> will be 0.
>
>
>
> On Mon, Aug 27, 2012 at 10:46 AM, Guillaume Nodet <gn...@gmail.com>wrote:
>
>> The port file is written with the following code:
>>
>>
>> https://github.com/apache/karaf/blob/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java#L1401
>>
>> It uses the karaf.shutdown.port.file property which is defined in
>> etc/config.properties and defaults to ${karaf.data}/port
>> The code is quite simple, so not sure what could go wrong beyond the above
>> property not being correctly defined maybe.
>>
>> On Mon, Aug 27, 2012 at 10:25 AM, Charles Moulliard <ch007m@gmail.com
>> >wrote:
>>
>> > FYI. In the data directory of the fabric/karaf instance running on
>> > openshift, the port file is not created
>> >
>> > [fabric-fuse.rhcloud.com ~]\> ls
>> >
>> >
>> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
>> > cache/             generated-bundles/ karaf.out          log/
>> > tmp/
>> >
>> > On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <ch007m@gmail.com
>> > >wrote:
>> >
>> > > In my case, the issue is related to the port file not created by Karaf
>> > > when the method setupShutdown is called (
>> > >
>> >
>> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java
>> > )
>> > > and not to the pidFile.
>> > >
>> > >
>> > > On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com>
>> > wrote:
>> > >
>> > >> 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
>> > >>
>> > >
>> > >
>> > >
>> > > --
>> > > Charles Moulliard
>> > > Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> > > Twitter : @cmoulliard
>> > > Blog : http://cmoulliard.blogspot.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
>>
>
>
>
> --
> Charles Moulliard
> Apache Committer / Sr. Pr. Consultant at FuseSource.com
> Twitter : @cmoulliard
> Blog : http://cmoulliard.blogspot.com
>
>
>


-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
After verification, it appears that karaf.base and karaf.home are defined
correctly and both point to this location
:/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric

like also karaf.data
: -Dkaraf.data=/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data

The account has the permissions required to create the file in the data
directory

[fabric-fuse.rhcloud.com bin]\> ls -la
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/
total 136
drwxr-xr-x. 11 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 .
drwxr-x---.  5 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
-rw-r--r--.  1 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  6148 Aug 24 13:05 .DS_Store
drwxr-xr-x.  2 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 bin
drwxr-xr-x.  6 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 data

Log are well created like also tmp file and karaf.out

[fabric-fuse.rhcloud.com bin]\> ls -la
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data
total 40
drwxr-xr-x.   6 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
drwxr-xr-x.  11 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
drwxr-xr-x. 110 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 cache
drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 generated-bundles
-rw-r--r--.   1 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6 14020 Aug 27 04:45 karaf.out
drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 log
drwxr-xr-x.   4 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 27 04:46 tmp
[fabric-fuse.rhcloud.com bin]\> ls -la
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data/log/
total 76
drwxr-xr-x. 2 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
drwxr-xr-x. 6 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 ..
-rw-r--r--. 1 b8f9c391e35a4ab3b376e66929e7f2f6
b8f9c391e35a4ab3b376e66929e7f2f6 63222 Aug 27 05:01 karaf.log

Remarks :

- Version used here is karaf 2.2.5 but code is the same compared to trunk
of 2.2.3 -->
https://github.com/apache/karaf/blob/karaf-2.2.5/main/src/main/java/org/apache/karaf/main/Main.java#L1333
- I can create manually the port file but of course the port number added
will be 0.



On Mon, Aug 27, 2012 at 10:46 AM, Guillaume Nodet <gn...@gmail.com> wrote:

> The port file is written with the following code:
>
>
> https://github.com/apache/karaf/blob/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java#L1401
>
> It uses the karaf.shutdown.port.file property which is defined in
> etc/config.properties and defaults to ${karaf.data}/port
> The code is quite simple, so not sure what could go wrong beyond the above
> property not being correctly defined maybe.
>
> On Mon, Aug 27, 2012 at 10:25 AM, Charles Moulliard <ch007m@gmail.com
> >wrote:
>
> > FYI. In the data directory of the fabric/karaf instance running on
> > openshift, the port file is not created
> >
> > [fabric-fuse.rhcloud.com ~]\> ls
> >
> >
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
> > cache/             generated-bundles/ karaf.out          log/
> > tmp/
> >
> > On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <ch007m@gmail.com
> > >wrote:
> >
> > > In my case, the issue is related to the port file not created by Karaf
> > > when the method setupShutdown is called (
> > >
> >
> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java
> > )
> > > and not to the pidFile.
> > >
> > >
> > > On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com>
> > wrote:
> > >
> > >> 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 <ch...@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 <gn...@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
> > >>
> > >
> > >
> > >
> > > --
> > > Charles Moulliard
> > > Apache Committer / Sr. Pr. Consultant at FuseSource.com
> > > Twitter : @cmoulliard
> > > Blog : http://cmoulliard.blogspot.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
>



-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Re: Why do we have port and pid file ?

Posted by Guillaume Nodet <gn...@gmail.com>.
The port file is written with the following code:

https://github.com/apache/karaf/blob/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java#L1401

It uses the karaf.shutdown.port.file property which is defined in
etc/config.properties and defaults to ${karaf.data}/port
The code is quite simple, so not sure what could go wrong beyond the above
property not being correctly defined maybe.

On Mon, Aug 27, 2012 at 10:25 AM, Charles Moulliard <ch...@gmail.com>wrote:

> FYI. In the data directory of the fabric/karaf instance running on
> openshift, the port file is not created
>
> [fabric-fuse.rhcloud.com ~]\> ls
>
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
> cache/             generated-bundles/ karaf.out          log/
> tmp/
>
> On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <ch007m@gmail.com
> >wrote:
>
> > In my case, the issue is related to the port file not created by Karaf
> > when the method setupShutdown is called (
> >
> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java
> )
> > and not to the pidFile.
> >
> >
> > On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com>
> wrote:
> >
> >> 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 <ch...@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 <gn...@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
> >>
> >
> >
> >
> > --
> > Charles Moulliard
> > Apache Committer / Sr. Pr. Consultant at FuseSource.com
> > Twitter : @cmoulliard
> > Blog : http://cmoulliard.blogspot.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

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
Found the reason

The path used does not correspond to the location where karaf runs on the
cloud machine :

Exception in thread "main" java.io.FileNotFoundException:
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data/port
(No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at org.apache.karaf.main.Stop.main(Stop.java:64)

Is =
 /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data/port
and should be
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/port

On Mon, Aug 27, 2012 at 10:25 AM, Charles Moulliard <ch...@gmail.com>wrote:

> FYI. In the data directory of the fabric/karaf instance running on
> openshift, the port file is not created
>
> [fabric-fuse.rhcloud.com ~]\> ls
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
> cache/             generated-bundles/ karaf.out          log/
>   tmp/
>
> On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <ch...@gmail.com>wrote:
>
>> In my case, the issue is related to the port file not created by Karaf
>> when the method setupShutdown is called (
>> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java)
>> and not to the pidFile.
>>
>>
>> On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com>wrote:
>>
>>> 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 <ch...@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 <gn...@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
>>>
>>
>>
>>
>> --
>> Charles Moulliard
>> Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> Twitter : @cmoulliard
>> Blog : http://cmoulliard.blogspot.com
>>
>>
>>
>
>
> --
> Charles Moulliard
> Apache Committer / Sr. Pr. Consultant at FuseSource.com
> Twitter : @cmoulliard
> Blog : http://cmoulliard.blogspot.com
>
>
>


-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
FYI. In the data directory of the fabric/karaf instance running on
openshift, the port file is not created

[fabric-fuse.rhcloud.com ~]\> ls
/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
cache/             generated-bundles/ karaf.out          log/
tmp/

On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <ch...@gmail.com>wrote:

> In my case, the issue is related to the port file not created by Karaf
> when the method setupShutdown is called (
> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java)
> and not to the pidFile.
>
>
> On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com> wrote:
>
>> 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 <ch...@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 <gn...@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 <ch...@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
>>
>
>
>
> --
> Charles Moulliard
> Apache Committer / Sr. Pr. Consultant at FuseSource.com
> Twitter : @cmoulliard
> Blog : http://cmoulliard.blogspot.com
>
>
>


-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
In my case, the issue is related to the port file not created by Karaf when
the method setupShutdown is called (
https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java)
and not to the pidFile.

On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <gn...@gmail.com> wrote:

> 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 <ch...@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 <gn...@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 <ch...@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
>



-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Re: Why do we have port and pid file ?

Posted by Guillaume Nodet <gn...@gmail.com>.
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 <ch...@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 <gn...@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 <ch...@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

Re: Why do we have port and pid file ?

Posted by Charles Moulliard <ch...@gmail.com>.
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 <gn...@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 <ch...@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

Re: Why do we have port and pid file ?

Posted by Guillaume Nodet <gn...@gmail.com>.
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 <ch...@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