Here's an update on attempting a Time Partition for model analyses that
are in GRIB1:
I have created a local data structure for testing where I can write to
the file directories (until I can get permission to write to the file
directories of our main archive). The structure is as follows:
/glade/nwsc_scratch/manross/ds083.2/grib1/yyyy/yyyy.MM/fnl_yyyyMMdd_HH_00_c
When I found the message thread :
http://www.unidata.ucar.edu/support/help/MailArchives/thredds/msg01820.html
I took the advice mentioned therein and grabbed the 4.3.17 version of
the thredds war, and set my catalog.xml config as follows:
<?xml version="1.0" encoding="UTF-8"?>
<catalog name="THREDDS Server Default Catalog : You must change this to
fit your server!"
xmlns="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0"
xmlns:xlink="http://www.w3.org/1999/xlink">
<service name="all" base="" serviceType="compound">
<service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" />
<service name="http" serviceType="HTTPServer"
base="/thredds/fileServer/" />
<!--service name="wcs" serviceType="WCS" base="/thredds/wcs/" /-->
<service name="wms" serviceType="WMS" base="/thredds/wms/" />
<service name="ncss" serviceType="NetcdfSubset"
base="/thredds/ncss/grid/" />
</service>
<!--datasetRoot path="FNL" location="content/ds083.2" /-->
<featureCollection name="LOCAL_FNL"
path="LOCALFNL"
harvest="true"
featureType="GRIB">
<metadata inherited="true">
<serviceName>all</serviceName>
<documentation type="summary">LOCAL FNLS FOR TESING
</documentation>
<dataFormat>GRIB-1</dataFormat>
</metadata>
<collection
spec="/glade/nwsc_scratch/manross/ds083.2/grib1/**/fnl_.*_c$"
timePartition="1 day"
dateFormatMark="#fnl_#yyyyMMdd_HH"
/>
<update startup="true" rescan="0 0 0 * * ? *"/>
<gribConfig datasetTypes="Best Files"/>
</featureCollection>
</catalog>
Upon restarting tomcat, the directory was scanned and I was met with
numerous "Too many open files" errors:
2013-04-29T13:12:17.795 -0600 [ 36341][ ] ERROR -
fc.LOCAL_FNL - Grib1CollectionBuilder LOCAL_FNL-20130416 :
reading/Creating gbx9 index for file
/glade/nwsc_scratch/manross/ds083.2/grib1/2013/2013.04/fnl_20130416_18_00_c
failed
java.io.FileNotFoundException:
/usr/share/tomcat6/content/thredds/cache/grib/glade-nwsc_scratch-manross-ds083.2-grib1-2013-2013.04-fnl_20130416_18_00_c.gbx9
(Too many open files)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
at java.io.FileOutputStream.<init>(FileOutputStream.java:160)
at ucar.nc2.grib.grib1.Grib1Index.makeIndex(Grib1Index.java:199)
at
ucar.nc2.grib.GribIndex.readOrCreateIndexFromSingleFile(GribIndex.java:143)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.makeAggregatedGroups(Grib1CollectionBuilder.java:469)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.createIndex(Grib1CollectionBuilder.java:434)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.readOrCreateIndex(Grib1CollectionBuilder.java:167)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.factory(Grib1CollectionBuilder.java:85)
at ucar.nc2.grib.GribCollection.factory(GribCollection.java:177)
at
ucar.nc2.grib.TimePartition$Partition.makeGribCollection(TimePartition.java:172)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.createPartitionedIndex(Grib1TimePartitionBuilder.java:163)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.readOrCreateIndex(Grib1TimePartitionBuilder.java:128)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.factory(Grib1TimePartitionBuilder.java:73)
at ucar.nc2.grib.TimePartition.factory(TimePartition.java:96)
at
thredds.catalog.InvDatasetFcGrib.updateCollection(InvDatasetFcGrib.java:224)
at thredds.catalog.InvDatasetFcGrib.update(InvDatasetFcGrib.java:163)
at
thredds.catalog.InvDatasetFeatureCollection.handleCollectionEvent(InvDatasetFeatureCollection.java:236)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at ucar.nc2.util.ListenerManager.sendEvent(ListenerManager.java:177)
at
thredds.inventory.CollectionManagerAbstract.sendEvent(CollectionManagerAbstract.java:213)
at
thredds.inventory.MFileCollectionManager.scan(MFileCollectionManager.java:392)
at
thredds.inventory.CollectionUpdater$UpdateCollectionJob.execute(CollectionUpdater.java:287)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
2013-04-29T13:12:17.796 -0600 [ 36342][ ] ERROR -
fc.LOCAL_FNL - Failed to open partition LOCAL_FNL-20130416
java.io.FileNotFoundException:
/usr/share/tomcat6/content/thredds/cache/grib/glade-nwsc_scratch-manross-ds083.2-grib1-LOCAL_FNL-20130416.ncx
(Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:118)
at ucar.unidata.io.RandomAccessFile.<init>(RandomAccessFile.java:277)
at ucar.unidata.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.createIndex(Grib1CollectionBuilder.java:569)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.createIndex(Grib1CollectionBuilder.java:435)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.readOrCreateIndex(Grib1CollectionBuilder.java:167)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.factory(Grib1CollectionBuilder.java:85)
at ucar.nc2.grib.GribCollection.factory(GribCollection.java:177)
at
ucar.nc2.grib.TimePartition$Partition.makeGribCollection(TimePartition.java:172)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.createPartitionedIndex(Grib1TimePartitionBuilder.java:163)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.readOrCreateIndex(Grib1TimePartitionBuilder.java:128)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.factory(Grib1TimePartitionBuilder.java:73)
at ucar.nc2.grib.TimePartition.factory(TimePartition.java:96)
at
thredds.catalog.InvDatasetFcGrib.updateCollection(InvDatasetFcGrib.java:224)
at thredds.catalog.InvDatasetFcGrib.update(InvDatasetFcGrib.java:163)
at
thredds.catalog.InvDatasetFeatureCollection.handleCollectionEvent(InvDatasetFeatureCollection.java:236)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at ucar.nc2.util.ListenerManager.sendEvent(ListenerManager.java:177)
at
thredds.inventory.CollectionManagerAbstract.sendEvent(CollectionManagerAbstract.java:213)
at
thredds.inventory.MFileCollectionManager.scan(MFileCollectionManager.java:392)
at
thredds.inventory.CollectionUpdater$UpdateCollectionJob.execute(CollectionUpdater.java:287)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
2013-04-29T13:12:17.803 -0600 [ 36349][ ] ERROR -
fc.LOCAL_FNL - Fail to create/update collection
java.io.FileNotFoundException:
/glade/nwsc_scratch/manross/ds083.2/grib1/LOCAL_FNL-20120605.ncx (Too
many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:118)
at ucar.unidata.io.RandomAccessFile.<init>(RandomAccessFile.java:277)
at ucar.unidata.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.readIndex(Grib1CollectionBuilder.java:196)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.readOrCreateIndex(Grib1CollectionBuilder.java:163)
at
ucar.nc2.grib.grib1.Grib1CollectionBuilder.factory(Grib1CollectionBuilder.java:85)
at ucar.nc2.grib.GribCollection.factory(GribCollection.java:177)
at
ucar.nc2.grib.TimePartition$Partition.makeGribCollection(TimePartition.java:172)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.checkPartitions(Grib1TimePartitionBuilder.java:215)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.createPartitionedIndex(Grib1TimePartitionBuilder.java:187)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.readOrCreateIndex(Grib1TimePartitionBuilder.java:128)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.factory(Grib1TimePartitionBuilder.java:73)
at ucar.nc2.grib.TimePartition.factory(TimePartition.java:96)
at
thredds.catalog.InvDatasetFcGrib.updateCollection(InvDatasetFcGrib.java:224)
at thredds.catalog.InvDatasetFcGrib.update(InvDatasetFcGrib.java:163)
at
thredds.catalog.InvDatasetFeatureCollection.handleCollectionEvent(InvDatasetFeatureCollection.java:236)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at ucar.nc2.util.ListenerManager.sendEvent(ListenerManager.java:177)
at
thredds.inventory.CollectionManagerAbstract.sendEvent(CollectionManagerAbstract.java:213)
at
thredds.inventory.MFileCollectionManager.scan(MFileCollectionManager.java:392)
at
thredds.inventory.CollectionUpdater$UpdateCollectionJob.execute(CollectionUpdater.java:287)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
So I pared back the dataset from 3.5 years worth of 4 daily files to
just the first month (still 4 files daily) of 2010-2013. This
eliminated the "Too many open files" errors, and created the respective
*.gbx9 and .ncx files, but threw a cast error:
2013-04-29T13:40:04.188 -0600 [ 108434][ ] INFO -
fc.LOCAL_FNL - fnl_20130131_00_00_c: createIndex
/glade/nwsc_scratch/manross/ds083.2/grib1.1/2013/2013.01/fnl_20130131_00_00_c.ncx
2013-04-29T13:40:04.351 -0600 [ 108597][ ] INFO -
fc.LOCAL_FNL - fnl_20130131_06_00_c: createIndex
/glade/nwsc_scratch/manross/ds083.2/grib1.1/2013/2013.01/fnl_20130131_06_00_c.ncx
2013-04-29T13:40:04.508 -0600 [ 108754][ ] INFO -
fc.LOCAL_FNL - fnl_20130131_12_00_c: createIndex
/glade/nwsc_scratch/manross/ds083.2/grib1.1/2013/2013.01/fnl_20130131_12_00_c.ncx
2013-04-29T13:40:04.649 -0600 [ 108895][ ] INFO -
fc.LOCAL_FNL - fnl_20130131_18_00_c: createIndex
/glade/nwsc_scratch/manross/ds083.2/grib1.1/2013/2013.01/fnl_20130131_18_00_c.ncx
2013-04-29T13:40:06.936 -0600 [ 111182][ ] ERROR -
fc.LOCAL_FNL - Fail to create/update collection
java.lang.ClassCastException: ucar.nc2.grib.GribCollection$VariableIndex
cannot be cast to ucar.nc2.grib.TimePartition$VariableIndexPartitioned
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.writeGroupProto(Grib1TimePartitionBuilder.java:445)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.writeIndex(Grib1TimePartitionBuilder.java:413)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.createPartitionedIndex(Grib1TimePartitionBuilder.java:197)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.readOrCreateIndex(Grib1TimePartitionBuilder.java:128)
at
ucar.nc2.grib.grib1.Grib1TimePartitionBuilder.factory(Grib1TimePartitionBuilder.java:73)
at ucar.nc2.grib.TimePartition.factory(TimePartition.java:96)
at
thredds.catalog.InvDatasetFcGrib.updateCollection(InvDatasetFcGrib.java:224)
at thredds.catalog.InvDatasetFcGrib.update(InvDatasetFcGrib.java:163)
at
thredds.catalog.InvDatasetFeatureCollection.handleCollectionEvent(InvDatasetFeatureCollection.java:236)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at ucar.nc2.util.ListenerManager.sendEvent(ListenerManager.java:177)
at
thredds.inventory.CollectionManagerAbstract.sendEvent(CollectionManagerAbstract.java:213)
at
thredds.inventory.MFileCollectionManager.scan(MFileCollectionManager.java:392)
at
thredds.inventory.CollectionUpdater$UpdateCollectionJob.execute(CollectionUpdater.java:287)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
And when trying to access my TDS from a browser, the catalog could not
be made:
2013-04-29T13:40:33.330 -0600 [ 137576][ 7] INFO -
threddsServlet - Remote host: 128.117.8.232 - Request: "GET
/thredds/catalog/LOCALFNL/catalog.html HTTP/1.1"
2013-04-29T13:40:33.335 -0600 [ 137581][ 7] ERROR -
fc.LOCAL_FNL - Error making catalog for LOCALFNL
java.lang.NullPointerException
at
thredds.catalog.InvDatasetFcGrib.makeCatalogTop(InvDatasetFcGrib.java:453)
at
thredds.catalog.InvDatasetFcGrib.makeCatalog(InvDatasetFcGrib.java:377)
at
thredds.servlet.DataRootHandler.makeDynamicCatalog(DataRootHandler.java:1467)
at
thredds.servlet.DataRootHandler.getCatalog(DataRootHandler.java:1430)
at
thredds.server.catalogservice.LocalCatalogServiceController.handleRequestInternal(LocalCatalogServiceController.java:191)
at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
...
For grins, I tried changing the partition to
timePartition="directory"
dateFormatMark="#grib1/#yyyy"
And got the same ClassCastException.
If I'm missing something obvious, please let me know. I understand that
the GRIB feature collection is still in flux, so please consider this
some testing info. I'm able to make a GRIB collection without the time
partition, but for file browsing, that partition would be a feature we
would really want to incorporate.
Cheers!
-kevin.
--
Kevin Manross
NCAR/CISL/Data Support Section
Phone: (303)-497-1218
Email:manross@xxxxxxxx <mailto:manross@xxxxxxxx>
Web:http://rda.ucar.edu