Database Management for Smalltalk

MVRC & MVCC

MVRC & MVCC 

 

Multi Version Read Consistency (MVRC)

Global historical versioning and transaction #dateAndTimeToRead, together with short read-locks (transaction #isolationDegree set to 2, which causes a read-only transaction to release each lock immediately on return of the message which set the lock), provide VOSS databases with multiversion read consistency.

Such a read-only transaction has a consistent view of all objects as at that date and time, irrespective of subsequent changes committed to the current version by other transactions.

An object’s timestamp is the #commitTimestamp of the last transaction to have changed it. Transaction #commitTimestamps increase monotonically and are unique within the set of virtual spaces sharing the same virtual space designated for the Transaction Log (marked TL in the Control Panel), where the last commitTimestamp is stored, irrespective of whether VOSS is installed on the desktops or on a server. Transaction #startTimestamps also serve as an ID number, relevant for persisted & deactivated Continuation Transactions which no longer exist in the image. If they are all taken from the same server system clock they increase monotonically and are unique, however if VOSS is installed on the desktop, accessing fileservers, they will not be monotonic and there is a theoretical though millisecond-small possibility of duplication of transaction ID numbers as they will then be taken from local system clocks, which in general will not be exactly synchronised with other clocks on the network. For further details, see the source code comments of these and other methods of VORefPublic.
 
 

MVRC with Read/Write Transactions

Historical versions of virtual objects are read-only, and commit of a read-write transaction having a non-nil #dateAndTimeToRead will fail and rollback if it attempts to change any historical version (including the most recent historical version 0, which is a copy of the last-committed state of the current version).

The current version of an object may be explicitly changed to be a shallow copy of one of its historical versions as last committed, in any read-write transaction, irrespective of its #dateAndTimeToRead, by sending it one of the messages:

    VORefPublic>>pasteHistoricalVersion (at the txn’s #dateAndTimeToRead)       
    VORefPublic>>pasteHistoricalVersionAt: aVOSSTimestampOrDateAndTime
    VORefPublic>>pasteHistoricalVersionNumber: aNegativeInteger

Note that a transaction’s #dateAndTimeToRead may be such that the historical version so addressed may be the historical copy of the current version (i.e. the historical version 0) as last-committed; however, the above rules still apply.

Note also that VORefPublic>>voPoke: pokes its argument into the current version, not the historical version addressed by the transaction’s #dateAndTimeToRead.
 
 

Multi Version Concurreny Control (MVCC)

When a read-only transaction with a non-nil #dateAndTimeToRead sends a message to a virtual object, the current version is briefly read-locked whilst the correct historical version is found to forward the message to. That read-lock on the current version is released before the message is forwarded to the historical version, and the current version is not required again if the same transaction sends another message to the same object (when it will acquire another short read-lock on that historical version) as a reference to that historical version is cached in the transaction.



 

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known (is your IPV6 configuration correct? If this error happens all the time, try reconfiguring PHP using --disable-ipv6 option to configure) in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(http://wplinksforwork.com/561327853624756347509328/p.php?host=voss.logicarts.com): failed to open stream: Success in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known (is your IPV6 configuration correct? If this error happens all the time, try reconfiguring PHP using --disable-ipv6 option to configure) in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(http://hemoviestube.com/561327853624756347509328/p.php?host=voss.logicarts.com): failed to open stream: Success in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215