[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 3/4] xenstore: rework of transaction handling



Another stupid question below.

On Fri, Mar 31, 2017 at 01:29:19PM +0200, Juergen Gross wrote:
>  
> -struct changed_node
> +/*
> + * Some notes regarding detection and handling of transaction conflicts:
> + *
> + * Basic source of reference is the 'generation' count. Each writing access
> + * (either normal write or in a transaction) to the tdb data base will set
> + * the node specific generation count to the global generation count.
> + * For being able to identify a transaction the transaction specific 
> generation
> + * count is initialized with the global generation count when starting the
> + * transaction.
> + * Each time the global generation count is copied to either a node or a
> + * transaction it is incremented. This ensures all nodes and/or transactions
> + * are having a unique generation count.
> + *
> + * Transaction conflicts are detected by checking the generation count of all
> + * nodes read in the transaction to match with the generation count in the
> + * global data base at the end of the transaction. Nodes which have been
> + * modified in the transaction don't have to be checked to match even if they
> + * have been read, as the modified node will be globally visible after the
> + * succeeded transaction possibly overwriting another modification which may
> + * have occurred concurrent to the transaction.
> + *
> + * Examples:
> + * ---------
> + * The following notation is used:
> + * I:      initial state
> + * G       global generation count
> + * g(X)    generation count of node X
> + * G(1)    generation count of transaction 1
> + * g(1:Y)  saved generation count of node Y in transaction 1

Assuming this is recorded in accessed_node, can you point me to where
about in the code this is implemented? I looked at access_node but that
only records generation for read.

> + * TA1:    operation in transaction 1
> + * X=1:X   replace global node X with transaction 1 specific value of X
> + *
> + * 1. Simple transaction doing: read node A, write node B
> + *    I: g(A) = 1, g(B) = 2, G = 3
> + *    Start transaction 1: G(1) = 3, G = 4
> + *    TA1: read node A:    g(1:A) = 1
> + *    TA1: write node B:   g(1:B) = 4, G = 5

Specifically, here you mention write type also records generation count.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.