registry: add comment explaining workflow to make store_keys safe w/o transactions
authorMichael Adam <obnox@samba.org>
Tue, 6 May 2008 08:06:34 +0000 (10:06 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 8 May 2008 16:29:10 +0000 (18:29 +0200)
/*
 * Make the store operation as safe as possible without transactions:
 *
 * (1) For each subkey removed from ctr compared with old_subkeys:
 *
 *     (a) First delete the value db entry.
 *
 *     (b) Next delete the secdesc db record.
 *
 *     (c) Then delete the subkey list entry.
 *
 * (2) Now write the list of subkeys of the parent key,
 *     deleting removed entries and adding new ones.
 *
 * (3) Finally create the subkey list entries for the added keys.
 *
 * This way if we crash half-way in between deleting the subkeys
 * and storing the parent's list of subkeys, no old data can pop up
 * out of the blue when re-adding keys later on.
 */

The workflow is going to be modified to meet this agendain the next commits.

Michael
(This used to be commit 55dd9bdd148fc942e15aacfe9f6b38b1a5c53158)

source3/registry/reg_backend_db.c

index 50fc20ea82f2e3ef52995c8f9da1f127bf4456a2..87837448d91ccb8a41ec9c4f25763c70ea378ab9 100644 (file)
@@ -636,6 +636,27 @@ bool regdb_store_keys(const char *key, REGSUBKEY_CTR *ctr)
 
        regdb_fetch_keys(key, old_subkeys);
 
+       /*
+        * Make the store operation as safe as possible without transactions:
+        *
+        * (1) For each subkey removed from ctr compared with old_subkeys:
+        *
+        *     (a) First delete the value db entry.
+        *
+        *     (b) Next delete the secdesc db record.
+        *
+        *     (c) Then delete the subkey list entry.
+        *
+        * (2) Now write the list of subkeys of the parent key,
+        *     deleting removed entries and adding new ones.
+        *
+        * (3) Finally create the subkey list entries for the added keys.
+        *
+        * This way if we crash half-way in between deleting the subkeys
+        * and storing the parent's list of subkeys, no old data can pop up
+        * out of the blue when re-adding keys later on.
+        */
+
        /* store the subkey list for the parent */
 
        if (!regdb_store_keys_internal(key, ctr) ) {