Class VFMemoryStorageFactory
java.lang.Object
org.apache.derby.impl.io.VFMemoryStorageFactory
- All Implemented Interfaces:
StorageFactory, WritableStorageFactory
public class VFMemoryStorageFactory
extends Object
implements StorageFactory, WritableStorageFactory
A storage factory for virtual files, where the contents of the files are
stored in main memory.
Note that data store deletion may happen inside one of two different methods;
either in shutdown or in init. This is due to the current
implementation and the fact that dropping a database is done through the
file IO interface by deleting the service root. As the deletion then becomes
a two step process, someone else may boot the database again before the
reference to the store has been removed. To avoid this, the
init-method will never initialize with a store scheduled for
deletion. I have only seen this issue in heavily loaded multithreaded
environments (2 CPUs/cores should be enough to reproduce).
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate StringThe canonical (unique) name of the database (absolute path).References to the databases created / existing.private StorageFileThe data directory of the database.private DataStoreThe data store used for the database.private static final DataStoreDummy store used to carry out frequent operations that don't require a "proper store", for instance getting the canonical name of the data store.private StorageFileThe temporary directory for the database (absolute path).Fields inherited from interface StorageFactory
VERSION_NUMBER -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new, uninitialized instance of the storage factory. -
Method Summary
Modifier and TypeMethodDescriptioncreateTemporaryFile(String prefix, String suffix) Creates a handle to a temporary file.private voiddbDropCleanupInDummy(String dbPath) Cleans up the internal dummy data store after a database has been dropped.Get the canonical name of the database.charReturns the path separator used by this storage factory.intReturns the temporary directory for this storage factory instance.voidInitializes the storage factory instance by setting up a temporary directory, the database directory and checking if the database being named already exists.booleanisFast()The service is fast and supports random access.booleanThe service supports writes.newStorageFile(String path) Returns a handle to the specific storage file.newStorageFile(String directoryName, String fileName) Returns a handle to the specified storage file.newStorageFile(StorageFile directoryName, String fileName) Returns a handle to the specified storage file.private StringnormalizePath(String path) Returns a normalized absolute path.private StringnormalizePath(String dir, String file) Returns a normalized absolute path.voidsetCanonicalName(String name) Set the canonicalName.voidshutdown()Normally does nothing, but if the database is in a state such that it should be deleted this will happen here.booleanThe service supports random access.booleanThis method tests whether the StorageRandomAccessFile "rws" and "rwd" modes are implemented.voidsync(OutputStream stream, boolean metaData) The sync method is a no-op for this storage factory.
-
Field Details
-
DATABASES
-
DUMMY_STORE
Dummy store used to carry out frequent operations that don't require a "proper store", for instance getting the canonical name of the data store. -
canonicalName
The canonical (unique) name of the database (absolute path). -
dataDirectory
The data directory of the database. -
tempDir
The temporary directory for the database (absolute path). -
dbData
The data store used for the database.
-
-
Constructor Details
-
VFMemoryStorageFactory
public VFMemoryStorageFactory()Creates a new, uninitialized instance of the storage factory.To initialize the instance,
initmust be called.- See Also:
-
-
Method Details
-
init
public void init(String home, String databaseName, String tempDirNameIgnored, String uniqueName) throws IOException Initializes the storage factory instance by setting up a temporary directory, the database directory and checking if the database being named already exists.- Specified by:
initin interfaceStorageFactory- Parameters:
home- the value ofsystem.homefor this storage factorydatabaseName- the name of the database, all relative pathnames are relative to this nametempDirNameIgnored- ignoreduniqueName- used to determine when the temporary directory can be created, but not to name the temporary directory itself- Throws:
IOException- on an error (unexpected).
-
shutdown
public void shutdown()Normally does nothing, but if the database is in a state such that it should be deleted this will happen here.- Specified by:
shutdownin interfaceStorageFactory
-
getCanonicalName
Description copied from interface:StorageFactoryGet the canonical name of the database. This is a name that uniquely identifies it. It is system dependent. The normal, disk based implementation uses method java.io.File.getCanonicalPath on the directory holding the database to construct the canonical name.- Specified by:
getCanonicalNamein interfaceStorageFactory- Returns:
- the canonical name
-
setCanonicalName
Set the canonicalName. May need adjustment due to DERBY-5096- Specified by:
setCanonicalNamein interfaceStorageFactory- Parameters:
name- uniquely identifiable name for this database
-
newStorageFile
Returns a handle to the specific storage file.- Specified by:
newStorageFilein interfaceStorageFactory- Parameters:
path- the path of the file or directory- Returns:
- A path handle.
-
newStorageFile
Returns a handle to the specified storage file.- Specified by:
newStorageFilein interfaceStorageFactory- Parameters:
directoryName- the name of the parent directoryfileName- the name of the file- Returns:
- A path handle.
-
newStorageFile
Returns a handle to the specified storage file.- Specified by:
newStorageFilein interfaceStorageFactory- Parameters:
directoryName- the name of the parent directoryfileName- the name of the file- Returns:
- A path handle.
-
getTempDir
Returns the temporary directory for this storage factory instance.- Specified by:
getTempDirin interfaceStorageFactory- Returns:
- A
StorageFile-object representing the temp directory.
-
isFast
public boolean isFast()The service is fast and supports random access.- Specified by:
isFastin interfaceStorageFactory- Returns:
true
-
isReadOnlyDatabase
public boolean isReadOnlyDatabase()The service supports writes.- Specified by:
isReadOnlyDatabasein interfaceStorageFactory- Returns:
false
-
supportsRandomAccess
public boolean supportsRandomAccess()The service supports random access.- Specified by:
supportsRandomAccessin interfaceStorageFactory- Returns:
true
-
getStorageFactoryVersion
public int getStorageFactoryVersion()- Specified by:
getStorageFactoryVersionin interfaceStorageFactory- Returns:
- the StorageFactory version supported by this implementation
-
createTemporaryFile
Creates a handle to a temporary file.- Specified by:
createTemporaryFilein interfaceStorageFactory- Parameters:
prefix- requested prefix for the file namesuffix- requested suffix for the file name, ifnullthen.tmpwill be used- Returns:
- A handle to the temporary file.
-
getSeparator
public char getSeparator()Returns the path separator used by this storage factory.- Specified by:
getSeparatorin interfaceStorageFactory- Returns:
PathUtil.SEP
-
sync
The sync method is a no-op for this storage factory.- Specified by:
syncin interfaceWritableStorageFactory- Parameters:
stream- ignoredmetaData- ignored
-
supportsWriteSync
public boolean supportsWriteSync()Description copied from interface:WritableStorageFactoryThis method tests whether the StorageRandomAccessFile "rws" and "rwd" modes are implemented. If the "rws" and "rwd" modes are supported then the database engine will conclude that the write methods of "rws"/"rwd" mode StorageRandomAccessFiles are slow but the sync method is fast and optimize accordingly.- Specified by:
supportsWriteSyncin interfaceWritableStorageFactory- Returns:
- true if an StIRandomAccess file opened with "rws" or "rwd" modes immediately writes data to the underlying storage, false if not.
-
normalizePath
Returns a normalized absolute path.- Parameters:
dir- parent directory, ifnullthedataDirectorywill be usedfile- the file name (nullnot allowed)- Returns:
- A path.
- Throws:
NullPointerException- iffileisnull
-
normalizePath
-
dbDropCleanupInDummy
Cleans up the internal dummy data store after a database has been dropped.- Parameters:
dbPath- absolute path of the dropped database
-