summaryrefslogtreecommitdiff
path: root/ndb/src/kernel/blocks/dbutil/DbUtil.txt
blob: cc8c1985009ab38f26ee9a2c2b97b67e26376abe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
UTIL Protocols
--------------
Transactions are executed in two phases:
1) PREPARE
2) EXECUTE


PREPARE PHASE
-------------
1)  ** REQUEST **
    Client (any block) requests prepare service from Util:

    Client --UTIL_PREPARE_REQ--> Util
                    ...
    Client --UTIL_PREPARE_REQ--> Util

2)  ** DICTINFO **
    Util requests Dict for information about table:

    Util --GET_TABINFOREQ-->  Dict

    Util   <--DICTTABINFO--   Dict
                 ...
    Util   <--DICTTABINFO--   Dict

3)  ** PREPARE **
    Operation (= transaction) is prepared (DbUtil::prepareOperation)

    a) AttrMapping is created (a map used to read of the 
       actual execute request attribute values and put them in KEYINFO)

    b) TC Signal train is prepared 

4)  ** CONFIRM **
    Request is confirmed

    Client <--UTIL_PREPARE_CONF-- Util


EXECUTE PHASE
-------------
1)  Client (any block) requests execute service from Util:
    (Execute can be INSERT, DELETE,...)

    Client --UTIL_EXECUTE_REQ--> Util    (Multi-signals not yet implemented)
                    ...
    Client --UTIL_EXECUTE_REQ--> Util

2)  Util --TCKEYREQ-->  tc

    Util --KEYINFO-->   tc  (sometimes)  (Not yet implemented)
             ...
    Util --KEYINFO-->   tc

    Util --ATTRINFO-->  tc  (sometimes)
             ...
    Util --ATTRINFO-->  tc

3)  Util <--TCKEYCONF-- tc

    Util --TC_COMMIT_ACK-->tc  (sometimes)

    (in parallel with)

    Util <--TRANSID_AI-- tc  (sometimes)
               ...
    Util <--TRANSID_AI-- tc