after testing the cosmo migration tool a few times, i've
come to the
conclusion that there's a file descriptor leak in
jackrabbit.
the migration tool builds a list of users from the 0.2 user
database
and then iterates through the list, copying the user's home
directory
from the 0.2 repository into the 0.3 repository.
after successfully processing some number of users, the tool
fails to
copy subsequent users, complaining "too many open
files". at some
later point the tool recovers and becomes able to copy later
users.
see below for a sample stack trace.
based on a discussion with bkirsch, who troubleshooted a
"too many
open files" issue last week, i think that File
instances are being
leaked. after the garbage collector eventually runs, the
File
instances are gc'd and their file descriptors are
reclaimed, allowing
the tool to progress successfully once again.
bkirsch pointed to
org.apache.jackrabbit.core.query.lucene.FSDirectory
as the potential source of the leak. brian, can you discuss
how you
arrived at the conclusion? you alluded to finding something
in google
about FSDirectory and leaks, but i can't find it myself.
supposing FSDirectory is not the issue, does anybody have
any idea how
to track down the leak?
javax.jcr.RepositoryException: failed to spool stream to
internal
storage:
cosmo-demo-0.2-data/repository/workspaces/homedir/blobs/58/2
f/41fbdae14d0db7b2c246150b4abe/%7bhttp%3a%2f%2fwww.jcp.org%2
fjcr%2f1.0%7ddata.0.bin
(Too many open files):
cosmo-demo-0.2-data/repository/workspaces/homedir/blobs/58/2
f/41fbdae14d0db7b2c246150b4abe/%7bhttp%3a%2f%2fwww.jcp.org%2
fjcr%2f1.0%7ddata.0.bin
(Too many open files)
at
org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImp
l.java:765)
at
org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.jav
a:2056)
at
org.osaf.cosmo.migrate.Migration03.copyProperty(Migration03.
java:609)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:558)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyHome(Migration03.java
:434)
at
org.osaf.cosmo.migrate.Migration03.up(Migration03.java:232)
at
org.osaf.cosmo.migrate.Migrator.doMigration(Migrator.java:31
0)
at
org.osaf.cosmo.migrate.Migrator.main(Migrator.java:366)
Caused by: java.io.FileNotFoundException:
cosmo-demo-0.2-data/repository/workspaces/homedir/blobs/58/2
f/41fbdae14d0db7b2c246150b4abe/%7bhttp%3a%2f%2fwww.jcp.org%2
fjcr%2f1.0%7ddata.0.bin
(Too many open files)
at
java.io.FileInputStream.open(Ljava.lang.String;)V(Native
Method)
at
java.io.FileInputStream.<init>(FileInputStream.java:10
6)
at
org.apache.jackrabbit.util.LazyFileInputStream.open(LazyFile
InputStream.java:91)
at
org.apache.jackrabbit.util.LazyFileInputStream.read(LazyFile
InputStream.java:172)
at
org.apache.jackrabbit.core.value.BLOBFileValue.<init>(
BLOBFileValue.java:121)
at
org.apache.jackrabbit.core.value.InternalValue.create(Intern
alValue.java:233)
at
org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImp
l.java:743)
... 19 more
java.io.FileNotFoundException:
cosmo-demo-0.2-data/repository/workspaces/homedir/blobs/58/2
f/41fbdae14d0db7b2c246150b4abe/%7bhttp%3a%2f%2fwww.jcp.org%2
fjcr%2f1.0%7ddata.0.bin
(Too many open files)
at
java.io.FileInputStream.open(Ljava.lang.String;)V(Native
Method)
at
java.io.FileInputStream.<init>(FileInputStream.java:10
6)
at
org.apache.jackrabbit.util.LazyFileInputStream.open(LazyFile
InputStream.java:91)
at
org.apache.jackrabbit.util.LazyFileInputStream.read(LazyFile
InputStream.java:172)
at
org.apache.jackrabbit.core.value.BLOBFileValue.<init>(
BLOBFileValue.java:121)
at
org.apache.jackrabbit.core.value.InternalValue.create(Intern
alValue.java:233)
at
org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImp
l.java:743)
at
org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.jav
a:2056)
at
org.osaf.cosmo.migrate.Migration03.copyProperty(Migration03.
java:609)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:558)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:497)
at
org.osaf.cosmo.migrate.Migration03.copyChildNodes(Migration0
3.java:680)
at
org.osaf.cosmo.migrate.Migration03.copyNode(Migration03.java
:504)
at
org.osaf.cosmo.migrate.Migration03.copyHome(Migration03.java
:434)
at
org.osaf.cosmo.migrate.Migration03.up(Migration03.java:232)
at
org.osaf.cosmo.migrate.Migrator.doMigration(Migrator.java:31
0)
at
org.osaf.cosmo.migrate.Migrator.main(Migrator.java:366)
_______________________________________________
cosmo-dev mailing list
cosmo-dev lists.osafoundation.org
http://lists.osafoundation.org/mailman/listinfo/cosmo-d
ev
|