summaryrefslogtreecommitdiff
path: root/source3/registry/reg_backend_db.c
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-05-06 10:06:34 +0200
committerMichael Adam <obnox@samba.org>2008-05-08 18:29:10 +0200
commit01e640f6ea609ec2235543d69b1715a1be7d09b3 (patch)
tree79c7dea2a701c610f560dafc0efc5b866040cdd3 /source3/registry/reg_backend_db.c
parent7fa4cd242163cf048785585b7a1f392aeefeb20f (diff)
downloadsamba-01e640f6ea609ec2235543d69b1715a1be7d09b3.tar.gz
samba-01e640f6ea609ec2235543d69b1715a1be7d09b3.tar.bz2
samba-01e640f6ea609ec2235543d69b1715a1be7d09b3.zip
registry: add comment explaining workflow to make store_keys safe w/o transactions
/* * 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)
Diffstat (limited to 'source3/registry/reg_backend_db.c')
-rw-r--r--source3/registry/reg_backend_db.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
index 50fc20ea82..87837448d9 100644
--- a/source3/registry/reg_backend_db.c
+++ b/source3/registry/reg_backend_db.c
@@ -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) ) {