[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 3/4] xenstore: rework of transaction handling
On 31/03/17 14:03, Wei Liu wrote: > 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. It is in the node itself stored in the data base. >> + * 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. In the end the generation count of a node modified by a transaction isn't important for the transaction. Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |