summaryrefslogtreecommitdiff
path: root/storage/ndb/src/kernel/blocks/dbdict/DropTable.txt
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/kernel/blocks/dbdict/DropTable.txt')
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/DropTable.txt140
1 files changed, 140 insertions, 0 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbdict/DropTable.txt b/storage/ndb/src/kernel/blocks/dbdict/DropTable.txt
new file mode 100644
index 00000000000..8d364d15c57
--- /dev/null
+++ b/storage/ndb/src/kernel/blocks/dbdict/DropTable.txt
@@ -0,0 +1,140 @@
+DROP TABLE DESCRIPTION
+----------------------
+
+Drop table is controlled by DICT.
+
+Drop table is used in the following cases in some sort.
+ - Drop Table
+ - Abort Add Table
+ - Drop table in node restart
+ - Drop table in system restart
+
+Sequence of Drop Table:
+-----------------------
+
+1) PREP_DROP_TAB_REQ -> all DICT
+ Update schema files on disk
+ Table status = DROPPING
+
+2) Controlling DICT only
+ Report Table Dropped secured but not yet completed.
+
+------ PREP DROP
+
+4) PREP_DROP_TAB_REQ -> all LQHs
+
+5) PREP_DROP_TAB_REQ -> all TCs
+
+6) PREP_DROP_TAB_REQ -> all DIHs
+
+
+--- LQH::PREP_DROP_TAB_REQ
+
+*) Mark the table so that no new operations will start
+*) Mark all fragments so that new LCP_FRAG_ORD gets replied directly
+ w.o actually checkpointing the fragment
+2) Start waiting for completion
+3) Reply PREP_DROP_TAB_CONF
+
+- After this LQH accepts WAIT_DROP_TAB_REQ
+
+--- TC::PREP_DROP_TAB_REQ
+
+1) Mark the table so that no new transactions will start on the table
+2) Send WAIT_DROP_TAB_REQ -> all connected LQH's
+3) Wait for CONF (including NF-handling) from LQH:s
+4) Reply PREP_DROP_TAB_CONF
+
+--- DIH::PREP_DROP_TAB_REQ
+
+1) Mark the table so that no new LCP will start on the table
+2) If master (unlink any queued LCP_FRAG_ORD)
+3) Send WAIT_DROP_TAB_REQ -> all connected LQH's
+4) Wait for CONF (including NF-handling) from LQH:s
+5) Reply PREP_DROP_TAB_CONF
+
+--- LQH::WAIT_DROP_TAB_REQ
+
+1) Wait for running operations
+ Wait for running LCP
+
+2) Reply
+
+------ PREP_DROP
+
+7) DROP_TAB_REQ -> all DICT's
+ *) DROP_TAB_REQ -> TC
+ *) DROP_TAB_REQ -> ACC
+ *) DROP_TAB_REQ -> TUP
+ *) DROP_TAB_REQ -> DIH
+ *) DROP_TAB_REQ -> LQH
+ *) Update schema files on disk DROPPED
+
+8) DICT_SCHEMAREQ -> all DICT
+ Table status = DROPPED
+
+---------------------------------
+
+Sequence of Drop table in node/system restart
+---------------------------------------------
+
+In both node and system restart the node receives the schema information from
+the master. If the table is in a state where it needs to complete the drop
+table activity then DBACC, DBTUP, DBDIH, DBDICT is contacted to drop all files
+related to the table. After this the schema information is updated with the new
+state. Since all nodes receive the same schema information there is no risk of
+different behaviour in the various NDB nodes.
+
+API Requirements for Drop Table
+-------------------------------
+Definition:
+
+ Two tables are NOT the same if they were created with two create
+ tables at different points in time, even if the two create tables
+ had exactly the same definition.
+
+Requirements:
+
+1. Each operation in a transaction refering to a table (by name or by id)
+ should operate on the same table. (This is probably necessary.)
+
+2. Each operation in a transaction refering to a table (by name or by
+ id) should operate on the same table as were defined at the
+ startTransaction timepoint. (This is not strictly necessary for
+ API consistency.)
+
+ Example 1:
+
+ startTransaction()
+
+ drop("TableName1")
+ create("TableName1")
+
+ getNdbOperation("TableName1")
+
+ execute(commit)
+
+ - If both requirements 1 and 2 are fulfilled, then this should lead
+ to "Error: Invalid Schema Version" or similar error
+
+ - If only requirement 1 is fulfilled, then this may be executed
+ without any errors.
+
+
+ Example 2:
+
+ startTransaction()
+
+ getNdbOperation("TableName1")
+ execute(NoCommit)
+
+ drop("TableName1")
+ create("TableName1")
+
+ getNdbOperation("TableName1")
+
+ execute(commit)
+
+ - This should always lead to "Error: Invalid Schema Version" or
+ similar error.
+