Walkthrough
The following steps simulate a typical user session. An end result (i.e a layout of file and directories) is then shown.
The user uploads content – in this example it's a simple text file (chandni.txt) with a string ("chandni o. . ."):
mvn jetty:run -Dfcrepo.ispn.repo.CacheDirPath=/tmp/FedoraRepo -Dfcrepo.modeshape.configuration=/config/single-file/repository.json curl -v -XPUT --upload-file chandni.txt http://localhost:8080/rest/chandni/ds0/fcr:content
The files generated in the directory would look something like this:
ls /tmp/FedoraRepo 1255445 77871154 -4545415 54541544 . . .
These generated files contain serialized data about each of the nodes. Running the command above would generate files for the object and datastream (text in bold shows data of interest; the grayed out text refers to Modeshape classes responsible for data representation and serialization):
87a0a8c7505d64/7org.infinispan.schematic.internal.SchematicEntryLiteral6org.infinispan.marshall.jboss.JBossExternalizerAdapterq externalizer$org.infinispan.marshall.ExternalizerDorg.infinispan.schematic.internal.SchematicEntryLiteral$Externalizer7org.infinispan.schematic.internal.SchematicExternalizer8org.infinispan.schematic.internal.document.BasicDocument;?org.infinispan.schematic.internal.document.DocumentExternalizer;23 metadata?id87a0a8c7505d64/contentTypeapplication/jsoncontent>propertiesghttp://www.jcp.org/jcr/1.0FprimaryType$name 87a0a8c7505d64/children0<key87a0a8c317f1e7jcr:systemnamejcr:system1Skey3 87a0a8c7505d64 53f49a07-8e14-41a1-bab3-abc59d86846enamechandni
|
87a0a8c7505d64 8e6504dd-1fb8-4011-8d38-4fcd2e46c0f77org.infinispan.schematic.internal.SchematicEntryLiteral6org.infinispan.marshall.jboss.JBossExternalizerAdapterq externalizer$org.infinispan.marshall.ExternalizerDorg.infinispan.schematic.internal.SchematicEntryLiteral$Externalizer7org.infinispan.schematic.internal.SchematicExternalizer8org.infinispan.schematic.internal.document.BasicDocument; ?org.infinispan.schematic.internal.document.DocumentExternalizer;23metadatabid387a0a8c7505d64 8e6504dd-1fb8-4011-8d38-4fcd2e46c0f7 contentTypeapplication/jsoncontentkey3 87a0a8c7505d64 8e6504dd-1fb8-4011-8d38-4fcd2e46c0f7 parent387a0a8c7505d64 46c11a1e-b2d9-496c-a950-5bd8cf7f2096 propertieshttp://www.jcp.org/jcr/1.0+primaryType$name nt:resourcedatachandni o meri chandni lastModified.$date2013-12-05T18:52:00.714-05:00 mixinTypesL0D$name4{http://fedora.info/definitions/v4/rest-api#}binarylastModifiedBy bypassAdminmimeTypeapplication/octet-streamhttp://fedora.info/definitions/v4/rest-api |
Configuration Options
File system Backends
LevelDB
Specifying fcrepo.ispn.repo.CacheDirPath=/tmp/FedoraRepo would result in a directory with LevelDB artifacts, such as files 000003.log.
Currently, the default configuration outputs Fedora data to LevelDB (a fast filesystem based key-value store). When Fedora 4 is started, ModeShape (actually Infinispan and LevelDB in the background) will create several directories on the filesystem. Currently, the directories created are:
- fcrepo.ispn.binary.CacheDirPath (binary data)
- fcrepo.ispn.CacheDirPath (metadata)
- fcrepo.ispn.repo.CacheDirPath (repository)
- fcrepo.modeshape.index.location
The layout of files in directories 1-3 is determined by LevelDB. Some of the important files are:
- File .log holds entries for recent transactions. The relevant API for representing these entries is modeshape-schematics (see, e.g., org.infinispan.schematic.SchematicEntry)
- File .sst stores these entries when the .log file reaches a size threshold. A new log file is generated.
- File MANIFEST.x records info about .sst files (among other things).
- File CURRENT specifies the current MANIFEST file.
Most of these files are binary and can be read by a LevelDB Java library.
FileCacheStore
Using the Infinispan 6.x deprecated FileCacheStore (specified via file/infinispan.xml, currently our ModeShape is on 5.x) results in creation of hundreds of binary files (compared to LevelDB). A hashing algorithm is used to map keys to buckets. The value files contain serialized ModeShape objects. The key files can be read using org.infinispan.schematic.internal.document.BsonReader. (It does not seem possible to read these files using existing bson tools, like mongoDB bsondump, but further inspection is needed.)