Class ReadOnly
- java.lang.Object
-
- org.apache.derby.impl.store.raw.log.ReadOnly
-
- All Implemented Interfaces:
ModuleSupportable
,Corruptable
,LogFactory
public class ReadOnly extends java.lang.Object implements LogFactory, ModuleSupportable
A read-only version of the log factory. It doesn't do anything, it doesn't check that the database needs recovery or not.It doesn't handle undo. No recovery.
Multithreading considerations:
This class must be MT-safe.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
logArchiveDirectory
-
Fields inherited from interface org.apache.derby.iapi.store.raw.log.LogFactory
LOG_DIRECTORY_NAME, MODULE, RT_READONLY, RUNTIME_ATTRIBUTES
-
-
Constructor Summary
Constructors Constructor Description ReadOnly()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abortLogBackup()
boolean
canSupport(java.util.Properties startParams)
See if this implementation can support any attributes that are listed in properties.boolean
checkpoint(RawStoreFactory rawStoreFactory, DataFactory dataFactory, TransactionFactory transactionFactory, boolean wait)
MT - not needed, no work is donevoid
checkpointInRFR(LogInstant cinstant, long redoLWM, long undoLWM, DataFactory df)
Perform a checkpoint during rollforward recovery.boolean
checkVersion(int requiredMajorVersion, int requiredMinorVersion, java.lang.String feature)
Check to see if a database has been upgraded to the required level in order to use a store feature.void
createDataWarningFile()
Not applicable in readonly databasesvoid
deleteLogFileAfterCheckpointLogFile()
void
deleteOnlineArchivedLogFiles()
void
disableLogArchiveMode()
void
enableLogArchiveMode()
void
endLogBackup(java.io.File toDir)
void
flush(LogInstant where)
Flush all unwritten log record up to the log instance indicated to disk.void
freezePersistentStore()
Backup restore - stop sending log record to the log streamjava.lang.String
getCanonicalLogPath()
Return the canonical directory of the PARENT of the log directory.LogInstant
getFirstUnflushedInstant()
Get the instant for the last record in the log.long
getFirstUnflushedInstantAsLong()
Get the log instant long value of the first log record that has not been flushed.StorageFile
getLogDirectory()
Return the location of the log directory.void
getLogFactoryProperties(PersistentSet set)
Get JBMS properties relevant to the log factoryLogger
getLogger()
LogInstant
getTruncationLWM(UUID name)
boolean
inReplicationMasterMode()
Replication not applicable on readonly databases.boolean
inRFR()
boolean
isCheckpointInLastLogFile()
boolean
logArchived()
Backup restore - is the log being archived to some directory?StandardException
markCorrupt(StandardException originalError)
Mark the module as corrupt.ScanHandle
openFlushedScan(DatabaseInstant i, int groupsIWant)
Get a ScanHandle to scan flushed records from the log.LogScan
openForwardsFlushedScan(LogInstant startAt)
Get a LogScan to scan flushed records from the log.LogScan
openForwardsScan(LogInstant startAt, LogInstant stopAt)
Get a LogScan to scan the log in a forward direction.void
recover(DataFactory dataFactory, TransactionFactory transactionFactory)
MT - not needed, no work is donevoid
removeTruncationLWM(UUID name)
void
removeTruncationLWM(UUID name, RawStoreFactory rawStoreFactory, TransactionFactory transFactory)
void
setDatabaseEncrypted(boolean isEncrypted, boolean flushLog)
Sets whether the database is encrypted.void
setRawStoreFactory(RawStoreFactory rsf)
Not applicable in readonly databasesvoid
setTruncationLWM(UUID name, LogInstant instant)
LogInstant
setTruncationLWM(UUID name, LogInstant instant, RawStoreFactory rawStoreFactory, TransactionFactory transFactory)
void
startLogBackup(java.io.File toDir)
void
startNewLogFile()
void
startReplicationMasterRole(MasterFactory masterFactory)
Replication not applicable on readonly databasesvoid
stopReplicationMasterRole()
Replication not applicable on readonly databasesvoid
unfreezePersistentStore()
Backup restore - start sending log record to the log stream
-
-
-
Method Detail
-
getLogger
public Logger getLogger()
- Specified by:
getLogger
in interfaceLogFactory
-
createDataWarningFile
public void createDataWarningFile() throws StandardException
Not applicable in readonly databases- Specified by:
createDataWarningFile
in interfaceLogFactory
- Throws:
StandardException
-
setRawStoreFactory
public void setRawStoreFactory(RawStoreFactory rsf)
Not applicable in readonly databases- Specified by:
setRawStoreFactory
in interfaceLogFactory
-
recover
public void recover(DataFactory dataFactory, TransactionFactory transactionFactory) throws StandardException
MT - not needed, no work is done- Specified by:
recover
in interfaceLogFactory
- Parameters:
dataFactory
- - the data factorytransactionFactory
- - the transaction factory- Throws:
StandardException
- Standard Derby Error Policy
-
checkpoint
public boolean checkpoint(RawStoreFactory rawStoreFactory, DataFactory dataFactory, TransactionFactory transactionFactory, boolean wait)
MT - not needed, no work is done- Specified by:
checkpoint
in interfaceLogFactory
- Parameters:
rawStoreFactory
- - the raw storedataFactory
- - the data factorytransactionFactory
- - the transaction factorywait
- - if true waits for any existing checkpoint to complete and then executes and waits for another checkpoint. if false if another thead is executing a checkpoint routine will return immediately.- Returns:
- true if checkpoint is successful, Will return false if wait is false and the routine finds another thread executing a checkpoint.
-
markCorrupt
public StandardException markCorrupt(StandardException originalError)
Description copied from interface:Corruptable
Mark the module as corrupt. It is safe to call this multiple times.- Specified by:
markCorrupt
in interfaceCorruptable
- Returns:
- Must always return its parameter.
-
flush
public void flush(LogInstant where) throws StandardException
Description copied from interface:LogFactory
Flush all unwritten log record up to the log instance indicated to disk.- Specified by:
flush
in interfaceLogFactory
- Parameters:
where
- flush log up to here- Throws:
StandardException
- cannot flush log file due to sync error
-
canSupport
public boolean canSupport(java.util.Properties startParams)
Description copied from interface:ModuleSupportable
See if this implementation can support any attributes that are listed in properties. This call may be made on a newly created instance before the boot() method has been called, or after the boot method has been called for a running module.The module can check for attributes in the properties to see if it can fulfill the required behaviour. E.g. the raw store may define an attribute called RawStore.Recoverable. If a temporary raw store is required the property RawStore.recoverable=false would be added to the properties before calling bootServiceModule. If a raw store cannot support this attribute its canSupport method would return null. Also see the Monitor class's prologue to see how the identifier is used in looking up properties.
Actually a better way maybe to have properties of the form RawStore.Attributes.mandatory=recoverable,smallfootprint and RawStore.Attributes.requested=oltp,fast- Specified by:
canSupport
in interfaceModuleSupportable
- Returns:
- true if this instance can be used, false otherwise.
-
setTruncationLWM
public LogInstant setTruncationLWM(UUID name, LogInstant instant, RawStoreFactory rawStoreFactory, TransactionFactory transFactory) throws StandardException
- Throws:
StandardException
-
setTruncationLWM
public void setTruncationLWM(UUID name, LogInstant instant) throws StandardException
- Throws:
StandardException
- functionality not implemented
-
removeTruncationLWM
public void removeTruncationLWM(UUID name, RawStoreFactory rawStoreFactory, TransactionFactory transFactory) throws StandardException
- Throws:
StandardException
- functionality not implemented
-
getTruncationLWM
public LogInstant getTruncationLWM(UUID name) throws StandardException
- Throws:
StandardException
- functionality not implemented
-
removeTruncationLWM
public void removeTruncationLWM(UUID name) throws StandardException
- Throws:
StandardException
- functionality not implemented
-
openFlushedScan
public ScanHandle openFlushedScan(DatabaseInstant i, int groupsIWant) throws StandardException
Description copied from interface:LogFactory
Get a ScanHandle to scan flushed records from the log.MT- read only
- Specified by:
openFlushedScan
in interfaceLogFactory
- Parameters:
i
- - the LogInstant where we start our scan. null means start at the beginning of the log. This function raises an error if startAt is a LogInstant which is not in the log.groupsIWant
- - log record groups the scanner wants.- Returns:
- the LogScan.
- Throws:
StandardException
- functionality not implemented
-
openForwardsScan
public LogScan openForwardsScan(LogInstant startAt, LogInstant stopAt) throws StandardException
Description copied from interface:LogFactory
Get a LogScan to scan the log in a forward direction.MT- read only
- Specified by:
openForwardsScan
in interfaceLogFactory
- Parameters:
startAt
- - the LogInstant where we start our scan. null means start at the beginning of the log. This function raises an error if startAt is a LogInstant which is not in the log.stopAt
- - the LogInstant where we stop our scan. null means stop at the end of the log. This function raises an error if stopAt is a LogInstant which is not in the log.- Returns:
- the LogScan.
- Throws:
StandardException
- functionality not implemented
-
getFirstUnflushedInstant
public LogInstant getFirstUnflushedInstant()
Description copied from interface:LogFactory
Get the instant for the last record in the log.- Specified by:
getFirstUnflushedInstant
in interfaceLogFactory
-
getFirstUnflushedInstantAsLong
public long getFirstUnflushedInstantAsLong()
Description copied from interface:LogFactory
Get the log instant long value of the first log record that has not been flushed. Only works after recover() has finished, or (if in slave replication mode) after calling initializeReplicationSlaveRole.- Specified by:
getFirstUnflushedInstantAsLong
in interfaceLogFactory
- Returns:
- the log instant long value of the first log record that has not been flushed
-
openForwardsFlushedScan
public LogScan openForwardsFlushedScan(LogInstant startAt) throws StandardException
Description copied from interface:LogFactory
Get a LogScan to scan flushed records from the log.MT- read only
- Specified by:
openForwardsFlushedScan
in interfaceLogFactory
- Parameters:
startAt
- - the LogInstant where we start our scan. null means start at the beginning of the log. This function raises an error if startAt is a LogInstant which is not in the log.- Returns:
- the LogScan.
- Throws:
StandardException
- functionality not implemented
-
freezePersistentStore
public void freezePersistentStore() throws StandardException
Backup restore - stop sending log record to the log stream- Specified by:
freezePersistentStore
in interfaceLogFactory
- Throws:
StandardException
- Standard Derby error policy
-
unfreezePersistentStore
public void unfreezePersistentStore() throws StandardException
Backup restore - start sending log record to the log stream- Specified by:
unfreezePersistentStore
in interfaceLogFactory
- Throws:
StandardException
- Standard Derby error policy
-
logArchived
public boolean logArchived()
Backup restore - is the log being archived to some directory? if RawStore.LOG_ARCHIVAL_DIRECTORY is set to some value, that means the log is meant to be archived. Else, log not archived.- Specified by:
logArchived
in interfaceLogFactory
- Returns:
- true if the log is being archived.
-
getLogFactoryProperties
public void getLogFactoryProperties(PersistentSet set)
Get JBMS properties relevant to the log factory- Specified by:
getLogFactoryProperties
in interfaceLogFactory
-
getLogDirectory
public StorageFile getLogDirectory()
Description copied from interface:LogFactory
Return the location of the log directory.- Specified by:
getLogDirectory
in interfaceLogFactory
-
getCanonicalLogPath
public java.lang.String getCanonicalLogPath()
Description copied from interface:LogFactory
Return the canonical directory of the PARENT of the log directory. The log directory live in the "log" subdirectory of this path. If the log is at the default location (underneath the database directory), this returns null. Should only be called after the log factory is booted.- Specified by:
getCanonicalLogPath
in interfaceLogFactory
-
enableLogArchiveMode
public void enableLogArchiveMode()
- Specified by:
enableLogArchiveMode
in interfaceLogFactory
-
disableLogArchiveMode
public void disableLogArchiveMode()
- Specified by:
disableLogArchiveMode
in interfaceLogFactory
-
deleteOnlineArchivedLogFiles
public void deleteOnlineArchivedLogFiles()
- Specified by:
deleteOnlineArchivedLogFiles
in interfaceLogFactory
-
inRFR
public boolean inRFR()
- Specified by:
inRFR
in interfaceLogFactory
-
checkpointInRFR
public void checkpointInRFR(LogInstant cinstant, long redoLWM, long undoLWM, DataFactory df) throws StandardException
Perform a checkpoint during rollforward recovery.- Specified by:
checkpointInRFR
in interfaceLogFactory
- Parameters:
cinstant
- The LogInstant of the checkpointredoLWM
- Redo Low Water Mark in the check point recordundoLWM
- Undo Low Water Mark in the checkpointdf
- - the data factory- Throws:
StandardException
-
startLogBackup
public void startLogBackup(java.io.File toDir) throws StandardException
- Specified by:
startLogBackup
in interfaceLogFactory
- Throws:
StandardException
-
endLogBackup
public void endLogBackup(java.io.File toDir) throws StandardException
- Specified by:
endLogBackup
in interfaceLogFactory
- Throws:
StandardException
-
abortLogBackup
public void abortLogBackup()
- Specified by:
abortLogBackup
in interfaceLogFactory
-
setDatabaseEncrypted
public void setDatabaseEncrypted(boolean isEncrypted, boolean flushLog)
Sets whether the database is encrypted.Read-only database can not be re-encrypted, nothing to do in this case.
- Specified by:
setDatabaseEncrypted
in interfaceLogFactory
- Parameters:
isEncrypted
-true
if the database is encrypted,false
if notflushLog
-true
if log needs to be flushed,false
otherwise
-
startNewLogFile
public void startNewLogFile() throws StandardException
- Specified by:
startNewLogFile
in interfaceLogFactory
- Throws:
StandardException
-
isCheckpointInLastLogFile
public boolean isCheckpointInLastLogFile() throws StandardException
- Specified by:
isCheckpointInLastLogFile
in interfaceLogFactory
- Throws:
StandardException
-
deleteLogFileAfterCheckpointLogFile
public void deleteLogFileAfterCheckpointLogFile() throws StandardException
- Specified by:
deleteLogFileAfterCheckpointLogFile
in interfaceLogFactory
- Throws:
StandardException
-
checkVersion
public boolean checkVersion(int requiredMajorVersion, int requiredMinorVersion, java.lang.String feature) throws StandardException
Check to see if a database has been upgraded to the required level in order to use a store feature. This method is generally used to prevent writes to data/log file by a particular store feature until the database is upgraded to the required version. In read-only database writes are not allowed, so nothing to do for this method in this implementation of the log factory.- Specified by:
checkVersion
in interfaceLogFactory
- Parameters:
requiredMajorVersion
- required database Engine major versionrequiredMinorVersion
- required database Engine minor versionfeature
- Non-null to throw an exception, null to return the state of the version match.- Returns:
true
if the database has been upgraded to the required level,false
otherwise.- Throws:
StandardException
- not implemented exception is thrown
-
startReplicationMasterRole
public void startReplicationMasterRole(MasterFactory masterFactory) throws StandardException
Replication not applicable on readonly databases- Specified by:
startReplicationMasterRole
in interfaceLogFactory
- Parameters:
masterFactory
- The MasterFactory service responsible for controlling the master side replication behaviour.- Throws:
StandardException
- always thrown, indicating that ReadOnly databases can not be replicated
-
inReplicationMasterMode
public boolean inReplicationMasterMode()
Replication not applicable on readonly databases.- Specified by:
inReplicationMasterMode
in interfaceLogFactory
- Returns:
- false always since replication is not applicable here.
-
stopReplicationMasterRole
public void stopReplicationMasterRole()
Replication not applicable on readonly databases- Specified by:
stopReplicationMasterRole
in interfaceLogFactory
-
-