FileInstaller spawns multiple watchers for same directory
---------------------------------------------------------

                 Key: FELIX-1036
                 URL: https://issues.apache.org/jira/browse/FELIX-1036
             Project: Felix
          Issue Type: Bug
         Environment: Felix 1.6.0, fileinstall 0.9.2, configadmin 1.0.10
            Reporter: Sahoo


I am running into a strange issue and I don't know if it has to do with any bad 
use in my part. I am using fileinstall to monitor two directories. fileinstall 
is configured using config.properties file to monitor a dir called 
/space/ss141213/software/felix-1.6.0/bundle. I have a cfg file in modules dir 
that configures fileinstall to monitor a second dir called /tmp/bundles. During 
subsequent start of the framework, I see fileinstall spwaning more than one 
watchers for the second dir as shown in the jstack output below:

"{felix.fileinstall.dir=/space/ss141213/software/felix-1.6.0/bundle, 
felix.fileinstall.debug=1}" daemon prio=3 tid=0x0833fc00 nid=0xd waiting on 
condition [0xcbaea000..0xcbaeaae0]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at 
org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:122)

"{service.pid=org.apache.felix.fileinstall.bd775a2e-9ed9-41e4-8159-83295f3aaefa,
 felix.fileinstall.dir=/tmp/bundles, 
service.factorypid=org.apache.felix.fileinstall, felix.fileinstall.debug=1}" 
daemon prio=3 tid=0x083a5800 nid=0x13 waiting on condition 
[0xcb7ad000..0xcb7adbe0]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at 
org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:122)

"{service.pid=org.apache.felix.fileinstall.2aac2209-96d0-4dcb-8e33-ac3f6fbf2856,
 felix.fileinstall.dir=/tmp/bundles, 
service.factorypid=org.apache.felix.fileinstall, felix.fileinstall.debug=1}" 
daemon prio=3 tid=0x08387800 nid=0x12 waiting on condition 
[0xcb927000..0xcb927a60]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at 
org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:122)

"{service.pid=org.apache.felix.fileinstall.8997ded4-b1de-46bb-b675-4166734eea73,
 felix.fileinstall.dir=/tmp/bundles, 
service.factorypid=org.apache.felix.fileinstall, felix.fileinstall.debug=1}" 
daemon prio=3 tid=0x0838a000 nid=0x11 waiting on condition 
[0xcb979000..0xcb9798e0]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at 
org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:122)

"{service.pid=org.apache.felix.fileinstall.15c95057-a0f9-4269-b827-44df4fa23f6b,
 felix.fileinstall.dir=/tmp/bundles, 
service.factorypid=org.apache.felix.fileinstall, felix.fileinstall.debug=1}" 
daemon prio=3 tid=0x0838c800 nid=0x10 waiting on condition 
[0xcb9cb000..0xcb9cb960]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at 
org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:122)


The funny thing is the number keeps increasing by one more for every subsequent 
restart.

I see that as part of initial configuration, fileinstall spwans a directory 
watcher for modules dir, as this is configured using config.properties. Then 
that directorywatcher spawns a second one after it discovers the cfg file in 
modules dir. At the same time, configuration manager also notifies 
fileinstaller based on what appears to be its cached values.

It is very easy to reproduce. In a standard felix installation, drop 
fileinstall bundle alonng with configurationmanager bundle into bundle dir. Add 
it to the auto.start list. Add a cfg file with an entry: 
felix.fileinstall.dir=/tmp/bundles. Now start Felix. This time you shall see 
only thread for /tmp/bundles. Restart Felix, now you shall see two threads for 
that dir. Restart again to see three threads and it continues. If you clean the 
cache, it goes back to one thread.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to