[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |