NonblockingSkipListVersionHistory

rescala.fullmv.FullMvStateBundle.NonblockingSkipListVersionHistory
See theNonblockingSkipListVersionHistory companion object
class NonblockingSkipListVersionHistory[V, T <: FullMVTurn](init: T, val valuePersistency: V) extends FullMVState[V, T]

A node version history datastructure

Type parameters

InDep

the type of incoming dependency nodes

OutDep

the type of outgoing dependency nodes

T

the type of transactions

V

the type of stored values

Value parameters

init

the initial creating transaction

valuePersistency

the value persistency descriptor

Attributes

Companion
object
Graph
Supertypes
trait FullMVState[V, T]
class Object
trait Matchable
class Any

Members list

Type members

Classlikes

final class QueuedVersion(val txn: T, var previousWriteIfStable: QueuedVersion, var value: MaybeWritten[V], next: QueuedVersion) extends LinkWithCounters[QueuedVersion]

Value parameters

next

the successor version; the chain of next links forms the ground truth for which versions are contained in which order in the node's history.

previousWriteIfStable

if set, this version is guaranteed to be stable. if null, stable must be verified by comparing firstFrame and possibly traversing the history.

txn

the transaction to which this version belongs

value

current state of this version

Attributes

Supertypes
class LinkWithCounters[QueuedVersion]
class AtomicReference[QueuedVersion]
trait Serializable
class Object
trait Matchable
class Any
Show all

Value members

Concrete methods

def discover(txn: T, add: OutDep): (List[T], Option[T])

entry point for discover(this, add). May suspend.

entry point for discover(this, add). May suspend.

Value parameters

add

the new edge's sink node

txn

the executing reevaluation's transaction

Attributes

Returns

the appropriate Version.value.

def drop(txn: T, remove: OutDep): (List[T], Option[T])

entry point for drop(this, ticket.issuer); may suspend temporarily.

entry point for drop(this, ticket.issuer); may suspend temporarily.

Value parameters

remove

the removed edge's sink node

txn

the executing reevaluation's transaction

Attributes

def dynamicAfter(txn: T): V

entry point for after(this); may suspend.

entry point for after(this); may suspend.

Value parameters

txn

the executing transaction

Attributes

Returns

the corresponding value from after this transaction, i.e., awaiting and returning the transaction's own write if one has occurred or will occur.

def dynamicBefore(txn: T): V

entry point for before(this); may suspend.

entry point for before(this); may suspend.

Value parameters

txn

the executing transaction

Attributes

Returns

the corresponding value from before this transaction, i.e., ignoring the transaction's own writes.

entry point for regular framing

entry point for regular framing

Value parameters

txn

the transaction visiting the node for framing

Attributes

def incrementSupersedeFrame(txn: T, supersede: T): FramingBranchResult[T, OutDep]

entry point for superseding framing

entry point for superseding framing

Value parameters

supersede

the transaction whose frame was superseded by the visiting transaction at the previous node

txn

the transaction visiting the node for framing

Attributes

def notify(txn: T, changed: Boolean): (Boolean, NotificationBranchResult[T, OutDep])

entry point for change/nochange notification reception

entry point for change/nochange notification reception

Value parameters

changed

whether or not the dependency changed

txn

the transaction sending the notification

Attributes

def notifyFollowFrame(txn: T, changed: Boolean, followFrame: T): (Boolean, NotificationBranchResult[T, OutDep])

entry point for change/nochange notification reception with follow-up framing

entry point for change/nochange notification reception with follow-up framing

Value parameters

changed

whether or not the dependency changed

followFrame

a transaction for which to create a subsequent frame, furthering its partial framing.

txn

the transaction sending the notification

Attributes

def reevIn(txn: T): V
def reevOut(turn: T, maybeValue: Option[V], unchange: V => V): ReevOutBranchResult[T, OutDep]

progress firstFrame forward until a Version.isFrame is encountered, and return the resulting notification out (with reframing if subsequent write is found).

progress firstFrame forward until a Version.isFrame is encountered, and return the resulting notification out (with reframing if subsequent write is found).

Attributes

def retrofitSinkFrames(successorWrittenVersions: Seq[T], maybeSuccessorFrame: Option[T], arity: Int): Seq[T]

performs the reframings on the sink of a discover(n, this) with arity +1, or drop(n, this) with arity -1

performs the reframings on the sink of a discover(n, this) with arity +1, or drop(n, this) with arity -1

Value parameters

arity

+1 for discover adding frames, -1 for drop removing frames.

maybeSuccessorFrame

maybe a reframing to perform for the first successor frame

successorWrittenVersions

the reframings to perform for successor written versions

Attributes

def staticAfter(txn: T): V
def staticBefore(txn: T): V
override def toString: String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns

a string representation of the object.

Definition Classes
Any

Concrete fields

pointer that reflects, which firstFrame is currently communicated to all successor nodes. writes are sequentialized and synchronized with outgoings changes through the object monitor (this.synchronized)

pointer that reflects, which firstFrame is currently communicated to all successor nodes. writes are sequentialized and synchronized with outgoings changes through the object monitor (this.synchronized)

Attributes

override val host: FullMVEngine
val laggingLatestStable: AtomicReference[QueuedVersion]
var latestValue: V

a pointer to some random version at or behind latestStable, used for periodic O(1) gc support accesses are executed only inside reevOut, and are therefore sequential by nature.

a pointer to some random version at or behind latestStable, used for periodic O(1) gc support accesses are executed only inside reevOut, and are therefore sequential by nature.

Attributes

successor nodes that are currently sbuscribed for cange notifications. accesses are sequentialized and synchronized with firstFrame changes through the object monitor (this.synchronized)

successor nodes that are currently sbuscribed for cange notifications. accesses are sequentialized and synchronized with firstFrame changes through the object monitor (this.synchronized)

Attributes

Inherited fields

Attributes

Inherited from:
FullMVState