Package org.apache.jackrabbit.core.data
Class FileDataStore
java.lang.Object
org.apache.jackrabbit.core.data.AbstractDataStore
org.apache.jackrabbit.core.data.FileDataStore
- All Implemented Interfaces:
DataStore,MultiDataStoreAware
- Direct Known Subclasses:
OakFileDataStore
Simple file-based data store. Data records are stored as normal files
named using a message digest of the contained binary stream.
Configuration:
<DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
<param name="path" value="/data/datastore"/>
<param name="minRecordLength" value="1024"/>
</DataStore>
If the directory is not set, the directory <repository home>/repository/datastore is used.
A three level directory structure is used to avoid placing too many files in a single directory. The chosen structure is designed to scale up to billions of distinct records.
This implementation relies on the underlying file system to support
atomic O(1) move operations with Files.move(Path, Path, CopyOption...).
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddRecord(InputStream input) Creates a new data record.voidClear the in-use list.voidclose()Close the data storeintdeleteAllOlderThan(long min) Delete objects that have a modified date older than the specified date.voiddeleteRecord(DataIdentifier identifier) Deletes a single DataRecord based on the given identifier.Get all identifiers.intGet the minimum size of an object that should be stored in this data store.getPath()Get the name of the directory where this data store keeps the files.getRecordIfStored(DataIdentifier identifier) Get a data record for the given identifier.voidInitialized the data store.voidsetMinRecordLength(int minRecordLength) Set the minimum object length.voidSet the name of the directory where this data store keeps the files.voidupdateModifiedDateOnAccess(long before) From now on, update the modified date of an object even when accessing it.Methods inherited from class org.apache.jackrabbit.core.data.AbstractDataStore
getRecord, getRecordFromReference
-
Constructor Details
-
FileDataStore
public FileDataStore()
-
-
Method Details
-
init
Initialized the data store. If the path is not set, <repository home>/repository/datastore is used. This directory is automatically created if it does not yet exist. -
getRecordIfStored
Get a data record for the given identifier.- Specified by:
getRecordIfStoredin interfaceDataStore- Parameters:
identifier- the identifier- Returns:
- the data record or null
- Throws:
DataStoreException- if the data store could not be accessed
-
addRecord
Creates a new data record. The stream is first consumed and the contents are saved in a temporary file and theAbstractDataStore.DIGESTmessage digest of the stream is calculated. If a record with the sameAbstractDataStore.DIGESTdigest (and length) is found then it is returned. Otherwise the temporary file is moved in place to become the new data record that gets returned.- Specified by:
addRecordin interfaceDataStore- Parameters:
input- binary stream- Returns:
- data record that contains the given stream
- Throws:
DataStoreException- if the record could not be created
-
updateModifiedDateOnAccess
public void updateModifiedDateOnAccess(long before) Description copied from interface:DataStoreFrom now on, update the modified date of an object even when accessing it. Usually, the modified date is only updated when creating a new object, or when a new link is added to an existing object. When this setting is enabled, even getLength() will update the modified date.- Specified by:
updateModifiedDateOnAccessin interfaceDataStore- Parameters:
before- - update the modified date to the current time if it is older than this value
-
deleteRecord
Description copied from interface:MultiDataStoreAwareDeletes a single DataRecord based on the given identifier. Delete will only be used by theMultiDataStore.MoveDataTask.- Specified by:
deleteRecordin interfaceMultiDataStoreAware- Parameters:
identifier- data identifier- Throws:
DataStoreException- if the data store could not be accessed, or if the given identifier is invalid
-
deleteAllOlderThan
public int deleteAllOlderThan(long min) Description copied from interface:DataStoreDelete objects that have a modified date older than the specified date.- Specified by:
deleteAllOlderThanin interfaceDataStore- Parameters:
min- the minimum time- Returns:
- the number of data records deleted
-
getAllIdentifiers
Description copied from interface:DataStoreGet all identifiers.- Specified by:
getAllIdentifiersin interfaceDataStore- Returns:
- an iterator over all DataIdentifier objects
-
clearInUse
public void clearInUse()Description copied from interface:DataStoreClear the in-use list. This is only used for testing to make the the garbage collection think that objects are no longer in use.- Specified by:
clearInUsein interfaceDataStore
-
getPath
Get the name of the directory where this data store keeps the files.- Returns:
- the full path name
-
setPath
Set the name of the directory where this data store keeps the files.- Parameters:
directoryName- the path name
-
getMinRecordLength
public int getMinRecordLength()Description copied from interface:DataStoreGet the minimum size of an object that should be stored in this data store. Depending on the overhead and configuration, each store may return a different value.- Specified by:
getMinRecordLengthin interfaceDataStore- Returns:
- the minimum size in bytes
-
setMinRecordLength
public void setMinRecordLength(int minRecordLength) Set the minimum object length.- Parameters:
minRecordLength- the length
-
close
public void close()Description copied from interface:DataStoreClose the data store
-