Class EmbeddedStorageManager.Default
- All Implemented Interfaces:
AutoCloseable
,PersistenceStoring
,Persister
,Unpersistable
,LazyReferenceManager.Controller
,ObjectSwizzling
,DatabasePart
,EmbeddedStorageManager
,StorageActivePart
,StorageConnection
,StorageController
,StorageManager
- Enclosing interface:
- EmbeddedStorageManager
public static final class EmbeddedStorageManager.Default extends Object implements EmbeddedStorageManager, Unpersistable, LazyReferenceManager.Controller
-
Nested Class Summary
Nested classes/interfaces inherited from interface one.microstream.storage.types.EmbeddedStorageManager
EmbeddedStorageManager.Default
-
Constructor Summary
Constructors Constructor Description Default()
-
Method Summary
Modifier and Type Method Description void
checkAcceptingTasks()
StorageConfiguration
configuration()
Returns theStorageConfiguration
used to initialize thisStorageManager
instance.StorageConnection
createConnection()
Creates a newStorageConnection
instance.StorageRawFileStatistics
createStorageStatistics()
Creates aStorageRawFileStatistics
instance, (obviously) containing raw file statistics about every channel in the storage.Storer
createStorer()
Creates a newStorer
instance with default storing behavior.Database
database()
Returns theDatabase
instance thisStorageManager
is associated with.Reference<Object>
defaultRoot()
Deprecated.void
exportChannels(StorageLiveFileProvider fileProvider, boolean performGarbageCollection)
Exports the data of all channels in the storage by using the passedStorageLiveFileProvider
instance.
This is basically a simple file copy applied to all files in the storage, however with the guaranteed safety of no other task / access to the storage's files intervening with the ongoing process.StorageEntityTypeExportStatistics
exportTypes(StorageEntityTypeExportFileProvider exportFileProvider, Predicate<? super StorageEntityTypeHandler> isExportType)
Exports the entity data of all selected types of all channels into one file per type.
The data will be in the native binary format used internally by the storage.void
importFiles(XGettingEnum<AFile> importFiles)
Imports all files specified by the passed Enum (ordered set) ofAFile
in order.
The files are assumed to be in the native binary format used internally by the storage.
All entities contained in the specified files will be imported.long
initializationTime()
boolean
isAcceptingTasks()
boolean
isActive()
Queries whether the part is actually active right now.boolean
isRunning()
boolean
isShuttingDown()
boolean
isStartingUp()
boolean
issueCacheCheck(long nanoTimeBudget)
Issues a storage cache check to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the checking logic will keep the current progress and continue there at the next opportunity.boolean
issueCacheCheck(long nanoTimeBudget, StorageEntityCacheEvaluator entityEvaluator)
Same asStorageConnection.issueCacheCheck(long)
, but with using the passedStorageEntityCacheEvaluator
logic instead of the configured one.boolean
issueFileCheck(long nanoTimeBudget)
Issues a storage file check to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the checking logic will keep the current progress and continue there at the next opportunity.void
issueFullCacheCheck()
Issues a full storage cache check to be executed.void
issueFullCacheCheck(StorageEntityCacheEvaluator entityEvaluator)
Same asStorageConnection.issueFullCacheCheck()
, but with using the passedStorageEntityCacheEvaluator
logic instead of the configured one.void
issueFullFileCheck()
Issues a full storage file check to be executed.void
issueFullGarbageCollection()
Issues a full garbage collection to be executed.boolean
issueGarbageCollection(long nanoTimeBudget)
Issues garbage collection to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the garbage collector will keep the current progress and continue there at the next opportunity.boolean
mayRun()
long
operationModeTime()
PersistenceManager<Binary>
persistenceManager()
Object
root()
Return the persistent object graph's root object, without specific typing.Object
setRoot(Object newRoot)
Sets the passed instance as the new root for the persistent object graph.
Note that this will replace the old root instance, potentially resulting in wiping the whole database.boolean
shutdown()
Issues a command to shut down all active threads managing the storage.EmbeddedStorageManager.Default
start()
"Starts" the storage controlled by thisStorageController
instance, with "starting" meaning:
Reading, indexing and potentially caching all the persisted data in the storage. Starting storage managing threads to execute requests like storing, loading and issued utility functions.long
storeRoot()
Stores the registered root instance (as returned byStorageManager.root()
) by using the default storing logic by callingStorageConnection.createStorer()
to create theStorer
to be used.
Depending on the storer logic, storing the root instance can cause many other object to be stored, as well.StorageTypeDictionary
typeDictionary()
Returns theStorageTypeDictionary
that contains a completely list of types currently known to / handled by the storage represented by thisStorageManager
instance.PersistenceRootsView
viewRoots()
Returns a read-only view on all technical root instance registered in thisStorageManager
instance.
See the description inPersistenceRootsView
for details.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface one.microstream.storage.types.StorageConnection
createEagerStorer, createLazyStorer, exportChannels, exportTypes, getObject, store, storeAll, storeAll
Methods inherited from interface one.microstream.storage.types.StorageController
close, initializationDuration, isShutdown
Methods inherited from interface one.microstream.storage.types.StorageManager
customRoot, databaseName, storeDefaultRoot
-
Constructor Details
-
Default
public Default()
-
-
Method Details
-
database
Description copied from interface:StorageManager
Returns theDatabase
instance thisStorageManager
is associated with. See its description for details.- Specified by:
database
in interfaceStorageManager
- Returns:
- the associated
Database
instance.
-
root
Description copied from interface:StorageManager
Return the persistent object graph's root object, without specific typing.If a specifically typed root instance reference is desired, it is preferable to hold a properly typed constant reference to it and let the storage initialization use that instance as the root.
See the following code snippet on how to do that:static final MyAppRoot ROOT = new MyAppRoot(); static final StorageManager STORAGE = EmbeddedStorage.start(ROOT);
- Specified by:
root
in interfaceStorageManager
- Returns:
- the persistent object graph's root object.
-
setRoot
Description copied from interface:StorageManager
Sets the passed instance as the new root for the persistent object graph.
Note that this will replace the old root instance, potentially resulting in wiping the whole database.- Specified by:
setRoot
in interfaceStorageManager
- Parameters:
newRoot
- the new root instance to be set.- Returns:
- the passed newRoot to allow fluent usage of this method.
-
storeRoot
public long storeRoot()Description copied from interface:StorageManager
Stores the registered root instance (as returned byStorageManager.root()
) by using the default storing logic by callingStorageConnection.createStorer()
to create theStorer
to be used.
Depending on the storer logic, storing the root instance can cause many other object to be stored, as well. For example for the default behavior (as implemented inStorageConnection.createLazyStorer()
, all recursively referenced instances that are not yet known to the persistent context (i.e. have an associated objectId registered in the context'sPersistenceObjectRegistry
) are stored as well.- Specified by:
storeRoot
in interfaceStorageManager
- Returns:
- the root instance's objectId.
-
viewRoots
Description copied from interface:StorageManager
Returns a read-only view on all technical root instance registered in thisStorageManager
instance.
See the description inPersistenceRootsView
for details.- Specified by:
viewRoots
in interfaceStorageManager
- Returns:
- a new
PersistenceRootsView
instance allowing to iterate all technical root instances.
-
persistenceManager
- Specified by:
persistenceManager
in interfaceStorageConnection
- Returns:
- the
PersistenceManager
used by thisStorageConnection
.
-
createStorer
Description copied from interface:StorageConnection
Creates a newStorer
instance with default storing behavior. The default is lazy storing. SeePersister.createLazyStorer()
.- Specified by:
createStorer
in interfacePersister
- Specified by:
createStorer
in interfaceStorageConnection
- Returns:
- the newly created
Storer
instance.
-
mayRun
public boolean mayRun()- Specified by:
mayRun
in interfaceLazyReferenceManager.Controller
-
start
Description copied from interface:StorageManager
"Starts" the storage controlled by thisStorageController
instance, with "starting" meaning:
- Reading, indexing and potentially caching all the persisted data in the storage.
- Starting storage managing threads to execute requests like storing, loading and issued utility functions.
- Specified by:
start
in interfaceEmbeddedStorageManager
- Specified by:
start
in interfaceStorageController
- Specified by:
start
in interfaceStorageManager
- Returns:
- this to allow writing of fluent code.
-
shutdown
public final boolean shutdown()Description copied from interface:StorageManager
Issues a command to shut down all active threads managing the storage.- Specified by:
shutdown
in interfaceStorageController
- Specified by:
shutdown
in interfaceStorageManager
- Returns:
true
after a successful shutdown orfalse
if an internalInterruptedException
happened.
-
isAcceptingTasks
public final boolean isAcceptingTasks()- Specified by:
isAcceptingTasks
in interfaceStorageController
-
isRunning
public final boolean isRunning()- Specified by:
isRunning
in interfaceStorageController
-
isActive
public final boolean isActive()Description copied from interface:StorageActivePart
Queries whether the part is actually active right now. This might returntrue
even despite some "running" flag being set tofalse
because there might be one last loop cycle execution before checking the "running" flag again.- Specified by:
isActive
in interfaceStorageActivePart
- Returns:
- if the part is actually active right now.
-
isStartingUp
public final boolean isStartingUp()- Specified by:
isStartingUp
in interfaceStorageController
-
isShuttingDown
public final boolean isShuttingDown()- Specified by:
isShuttingDown
in interfaceStorageController
-
checkAcceptingTasks
public final void checkAcceptingTasks()- Specified by:
checkAcceptingTasks
in interfaceStorageController
-
configuration
Description copied from interface:StorageManager
Returns theStorageConfiguration
used to initialize thisStorageManager
instance.- Specified by:
configuration
in interfaceStorageManager
- Returns:
- the used configuration.
-
typeDictionary
Description copied from interface:StorageManager
Returns theStorageTypeDictionary
that contains a completely list of types currently known to / handled by the storage represented by thisStorageManager
instance. This list grows dynamically as so far unknown types are discovered, analyzed, mapped and added on the fly by a store.- Specified by:
typeDictionary
in interfaceStorageManager
- Returns:
- thr current
StorageTypeDictionary
.
-
createConnection
Description copied from interface:StorageManager
Creates a newStorageConnection
instance. See the type description for details.
Not that while it makes sense on an architectural level to have a connecting mechanism between application logic and storage level, there is currently no need to create additional connections beyond the intrinsic one held inside aStorageManager
instance. Just use it instead.- Specified by:
createConnection
in interfaceStorageManager
- Returns:
- a new
StorageConnection
instance.
-
initializationTime
public final long initializationTime()- Specified by:
initializationTime
in interfaceStorageController
-
operationModeTime
public final long operationModeTime()- Specified by:
operationModeTime
in interfaceStorageController
-
issueFullGarbageCollection
public final void issueFullGarbageCollection()Description copied from interface:StorageConnection
Issues a full garbage collection to be executed. Depending on the size of the database, the available cache, used hardware, etc., this can take any amount of time.Garbage collection marks all persisted objects/records that are reachable from the root (mark phase) and once that is completed, all non-marked records are determined to be effectively unreachable and are thus deleted. This common mechanism in graph-organised data completely removes the need for any explicit deleting.
Note that the garbage collection on the storage level has nothing to do with the JVM's Garbage Collector on the heap level. While the technical principle is the same, both GCs are separate from each other and do not have anything to do with each other.
- Specified by:
issueFullGarbageCollection
in interfaceStorageConnection
- See Also:
StorageConnection.issueGarbageCollection(long)
-
issueGarbageCollection
public final boolean issueGarbageCollection(long nanoTimeBudget)Description copied from interface:StorageConnection
Issues garbage collection to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the garbage collector will keep the current progress and continue there at the next opportunity. The same progress marker is used by the implicit housekeeping, so both mechanisms will continue on the same progress.
If no store has occured since the last completed garbage sweep, this method will have no effect and return immediately.- Specified by:
issueGarbageCollection
in interfaceStorageConnection
- Parameters:
nanoTimeBudget
- the time budget in nanoseconds to be used to perform garbage collection.- Returns:
- whether the returned call has completed garbage collection.
- See Also:
StorageConnection.issueFullGarbageCollection()
-
issueFullFileCheck
public final void issueFullFileCheck()Description copied from interface:StorageConnection
Issues a full storage file check to be executed. Depending on the size of the database, the available cache, used hardware, etc., this can take any amount of time.File checking evaluates every storage data file about being either too small, too big or having too many logical "gaps" in it (created by storing newer versions of an object or by garbage collection). If one of those checks applies, the remaining live data in the file is moved to the current head file and once that is done, the source file (now consisting of 100% logical "gaps", making it effectively superfluous) is then deleted.
The exact logic is defined by
StorageConfiguration.dataFileEvaluator()
- Specified by:
issueFullFileCheck
in interfaceStorageConnection
- See Also:
StorageConnection.issueFileCheck(long)
-
issueFileCheck
public final boolean issueFileCheck(long nanoTimeBudget)Description copied from interface:StorageConnection
Issues a storage file check to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the checking logic will keep the current progress and continue there at the next opportunity. The same progress marker is used by the implicit housekeeping, so both mechanisms will continue on the same progress.
If no store has occured since the last completed check, this method will have no effect and return immediately.- Specified by:
issueFileCheck
in interfaceStorageConnection
- Parameters:
nanoTimeBudget
- the time budget in nanoseconds to be used to perform file checking.- Returns:
- whether the returned call has completed file checking.
-
issueFullCacheCheck
public final void issueFullCacheCheck()Description copied from interface:StorageConnection
Issues a full storage cache check to be executed. Depending on the size of the database, the available cache, used hardware, etc., this can take any amount of time.Cache checking evaluates every cache entity data about being worth to be kept in cache according to the configured
StorageEntityCacheEvaluator
logic. If deemed unworthy, its data will be cleared from the cache and has to be loaded from the persistent form on the next reading access.
The check will run until the used cache size is 0 or every entity is checked at least once. -
issueFullCacheCheck
Description copied from interface:StorageConnection
Same asStorageConnection.issueFullCacheCheck()
, but with using the passedStorageEntityCacheEvaluator
logic instead of the configured one.- Specified by:
issueFullCacheCheck
in interfaceStorageConnection
- Parameters:
entityEvaluator
- the entity cache evaluation logic to be used for the call.- See Also:
StorageConnection.issueFullCacheCheck()
,StorageConnection.issueCacheCheck(long)
,StorageConnection.issueCacheCheck(long,StorageEntityCacheEvaluator)
-
issueCacheCheck
public final boolean issueCacheCheck(long nanoTimeBudget)Description copied from interface:StorageConnection
Issues a storage cache check to be executed, limited to the time budget in nanoseconds specified by the passednanoTimeBudget
.
When the time budget is used up, the checking logic will keep the current progress and continue there at the next opportunity. The same progress marker is used by the implicit housekeeping, so both mechanisms will continue on the same progress.
If the used cache size is 0, this method will have no effect and return immediately.- Specified by:
issueCacheCheck
in interfaceStorageConnection
- Parameters:
nanoTimeBudget
- the time budget in nanoseconds to be used to perform cache checking.- Returns:
- whether the used cache size is 0 or became 0 via the performed check.
- See Also:
StorageConnection.issueFullCacheCheck()
,StorageConnection.issueFullCacheCheck(StorageEntityCacheEvaluator)
,StorageConnection.issueCacheCheck(long,StorageEntityCacheEvaluator)
-
issueCacheCheck
public final boolean issueCacheCheck(long nanoTimeBudget, StorageEntityCacheEvaluator entityEvaluator)Description copied from interface:StorageConnection
Same asStorageConnection.issueCacheCheck(long)
, but with using the passedStorageEntityCacheEvaluator
logic instead of the configured one.- Specified by:
issueCacheCheck
in interfaceStorageConnection
entityEvaluator
- the entity cache evaluation logic to be used for the call.- See Also:
StorageConnection.issueFullCacheCheck()
,StorageConnection.issueFullCacheCheck(StorageEntityCacheEvaluator)
,StorageConnection.issueCacheCheck(long)
-
createStorageStatistics
Description copied from interface:StorageConnection
Creates aStorageRawFileStatistics
instance, (obviously) containing raw file statistics about every channel in the storage.- Specified by:
createStorageStatistics
in interfaceStorageConnection
- Returns:
- a
StorageRawFileStatistics
instance based on the current state.
-
exportChannels
public final void exportChannels(StorageLiveFileProvider fileProvider, boolean performGarbageCollection)Description copied from interface:StorageConnection
Exports the data of all channels in the storage by using the passedStorageLiveFileProvider
instance.
This is basically a simple file copy applied to all files in the storage, however with the guaranteed safety of no other task / access to the storage's files intervening with the ongoing process. This is useful to safely create a complete copy of the storage, e.g. a full backup.- Specified by:
exportChannels
in interfaceStorageConnection
- Parameters:
fileProvider
- theStorageLiveFileProvider
logic to be used for the export.performGarbageCollection
- whether aStorageConnection.issueFullGarbageCollection()
shall be issued before performing the export.
-
exportTypes
public final StorageEntityTypeExportStatistics exportTypes(StorageEntityTypeExportFileProvider exportFileProvider, Predicate<? super StorageEntityTypeHandler> isExportType)Description copied from interface:StorageConnection
Exports the entity data of all selected types of all channels into one file per type.
The data will be in the native binary format used internally by the storage. Converters can be used to transform the data into a different, for example human readable, form like CSV.This is useful to extract the data contained in the storage in a structured way, for example to migrate it into another storage system or to analyze it, like converting it into human readable form.
- Specified by:
exportTypes
in interfaceStorageConnection
- Parameters:
exportFileProvider
- theStorageEntityTypeExportFileProvider
logic to be used.isExportType
- aPredicate
selecting which type's entity data to be exported.- Returns:
- a
StorageEntityTypeExportStatistics
information instance about the completed export. - See Also:
StorageConnection.exportTypes(StorageEntityTypeExportFileProvider)
-
importFiles
Description copied from interface:StorageConnection
Imports all files specified by the passed Enum (ordered set) ofAFile
in order.
The files are assumed to be in the native binary format used internally by the storage.
All entities contained in the specified files will be imported. If they already exist in the storage (identified by their ObjectId), their current data will be replaced by the imported data.
Note that importing data that is not reachable from any root entity will have no effect and will eventually be deleted by the garbage collector.- Specified by:
importFiles
in interfaceStorageConnection
- Parameters:
importFiles
- the files whose native binary content shall be imported.
-
defaultRoot
Deprecated.Description copied from interface:StorageManager
This method is deprecated due to simplified root handling and will be removed in a future version.
It is advised to useStorageManager.root()
andStorageManager.setRoot(Object)
instead.- Specified by:
defaultRoot
in interfaceStorageManager
- Returns:
- a mutable
Reference
to the root object.
-