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 creates a node through the UI and 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 CURL commands above, for example, generates binary files such as the 2 pasted below (after some editing for readability) 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 refers to root node UUID):
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/jsoncontentkey 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 |
Infinispan Configuration Options
Depending on the configured Infinispan backend, the directory layout would be different. The following sections covers some of the file system cache store 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.)