casacore
|
Class to hold table lock options. More...
#include <TableLock.h>
Public Types | |
enum | LockOption { PermanentLocking, PermanentLockingWait, AutoLocking, UserLocking, AutoNoReadLocking, UserNoReadLocking, NoLocking, DefaultLocking } |
Define the possible table locking options. More... | |
Public Member Functions | |
TableLock (LockOption option=DefaultLocking) | |
Construct with given option and interval. More... | |
TableLock (LockOption option, double inspectionInterval, uInt maxWait=0) | |
TableLock (const TableLock &that) | |
Copy constructor. More... | |
TableLock & | operator= (const TableLock &that) |
Assignment. More... | |
void | merge (const TableLock &that) |
Merge that TableLock with this TableLock object by taking the maximum option and minimum inspection interval. More... | |
LockOption | option () const |
Get the locking option. More... | |
Bool | readLocking () const |
Is read locking needed? More... | |
Bool | isPermanent () const |
Is permanent locking used? More... | |
double | interval () const |
Get the inspection interval. More... | |
uInt | maxWait () const |
Get the maximum wait period in AutoLocking mode. More... | |
Static Public Member Functions | |
static Bool | lockingDisabled () |
Is table locking disabled (because AIPS_TABLE_NOLOCKING or table.nolocking is set)? More... | |
Private Member Functions | |
void | init () |
Set itsOption and itsReadLocking when needed. More... | |
Private Attributes | |
LockOption | itsOption |
Bool | itsReadLocking |
uInt | itsMaxWait |
double | itsInterval |
Bool | itsIsDefaultLocking |
Bool | itsIsDefaultInterval |
Class to hold table lock options.
Internal
This class keeps the Table lock options. Currently these are the LockingOption and the inspection interval.
It also keeps the LockFile
object used to do the actual locking/unlocking.
It is possible to disable locking by building casacore with -DAIPS_TABLE_NOLOCKING or by setting the aipsrc variable table.nolocking=true.
Encapsulate Table locking info.
Definition at line 68 of file TableLock.h.
Define the possible table locking options.
They offer the user the possibility to lock and synchronize access to the table. A lot of locking degrades table performance; not only because acquiring/releasing locks takes time, but especially because table data has to be synchronized (thus written to disk) when a lock is released. Otherwise the other processes see data which is not up-to-date.
Building Casacore with -DTABLE_NOLOCKING or setting aipsrc variable table.nolocking=1 forces lock option NoLocking.
Enumerator | |
---|---|
PermanentLocking |
The table is permanently locked. A lock is set at the beginning and only released when the table is closed. A read lock is used when the table is opened for readonly; otherwise a write lock is used. This means that multiple readers are possible. The Table constructor exits with an exception when the lock cannot be acquired. |
PermanentLockingWait |
The same as above, but the table constructor waits until the lock gets available. |
AutoLocking |
The system takes care of acquiring/releasing locks. In principle it keeps the table locked, but from time to time (defined by the inspection interval) it is checked whether another process wants to access the table. If so, the lock is released and probably re-acquired later. This mode is the default mode. |
UserLocking |
The user is taking care of locking the table by means of the Table functions In this way transaction processing can be implemented. |
AutoNoReadLocking |
The system takes care of acquiring/releasing locks. It is similar to AutoLocking, but no locks are needed for reading. |
UserNoReadLocking |
The user is taking care of locking the table by means of the Table functions It is similar to UserLocking, but no locks are needed for reading. |
NoLocking |
Do not do any locking at all. This should be used with care because concurrent access might result in table corruption. |
DefaultLocking |
This is the default locking option. It means that AutoLocking will be used if the table is not opened yet. Otherwise the locking options of the PlainTable object already in use will be used. |
Definition at line 81 of file TableLock.h.
casacore::TableLock::TableLock | ( | LockOption | option = DefaultLocking | ) |
Construct with given option and interval.
The default LockOption
is AutoLocking
. In case of AutloLocking the inspection interval defines how often the table system checks if another process needs a lock on the table. It defaults to 5 seconds. The maxWait defines the maximum number of seconds the table system waits when acquiring a lock in AutoLocking mode. The default is 0 seconds meaning indefinitely.
casacore::TableLock::TableLock | ( | LockOption | option, |
double | inspectionInterval, | ||
uInt | maxWait = 0 |
||
) |
casacore::TableLock::TableLock | ( | const TableLock & | that | ) |
Copy constructor.
|
private |
Set itsOption and itsReadLocking when needed.
|
inline |
|
inline |
Is permanent locking used?
Definition at line 194 of file TableLock.h.
References itsOption, PermanentLocking, and PermanentLockingWait.
|
static |
Is table locking disabled (because AIPS_TABLE_NOLOCKING or table.nolocking is set)?
|
inline |
Get the maximum wait period in AutoLocking mode.
Definition at line 205 of file TableLock.h.
References itsMaxWait.
void casacore::TableLock::merge | ( | const TableLock & | that | ) |
|
inline |
Get the locking option.
Definition at line 184 of file TableLock.h.
References itsOption.
Referenced by casacore::TableLockData::autoRelease().
|
inline |
Is read locking needed?
Definition at line 189 of file TableLock.h.
References itsReadLocking.
Referenced by casacore::ColumnSet::checkReadLock().
|
private |
Definition at line 173 of file TableLock.h.
Referenced by interval().
|
private |
Definition at line 175 of file TableLock.h.
|
private |
Definition at line 174 of file TableLock.h.
|
private |
Definition at line 172 of file TableLock.h.
Referenced by maxWait().
|
private |
Definition at line 170 of file TableLock.h.
Referenced by isPermanent(), and option().
|
private |
Definition at line 171 of file TableLock.h.
Referenced by readLocking().