]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3-dbwrap: Add dbwrap_set_stored_callback
authorVolker Lendecke <vl@samba.org>
Wed, 15 Feb 2012 14:08:29 +0000 (15:08 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 20 Apr 2012 11:42:40 +0000 (13:42 +0200)
This is a per-db function that is called whenever some record is modified

source3/lib/dbwrap/dbwrap.c
source3/lib/dbwrap/dbwrap.h
source3/lib/dbwrap/dbwrap_ctdb.c
source3/lib/dbwrap/dbwrap_private.h
source3/lib/dbwrap/dbwrap_rbt.c
source3/lib/dbwrap/dbwrap_tdb.c

index 21d46ea8957a0fbbc93cc2aade29086bfba11405..14562bb6e4f3d9a7885502bd41799a17f83aab0d 100644 (file)
@@ -67,12 +67,46 @@ TDB_DATA dbwrap_record_get_value(const struct db_record *rec)
 
 NTSTATUS dbwrap_record_store(struct db_record *rec, TDB_DATA data, int flags)
 {
-       return rec->store(rec, data, flags);
+       NTSTATUS status;
+       struct db_context *db;
+
+       status = rec->store(rec, data, flags);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+       db = rec->db;
+       if (db->stored_callback != NULL) {
+               db->stored_callback(db, rec,
+                                   db->stored_callback_private_data);
+       }
+       return NT_STATUS_OK;
+}
+
+void dbwrap_set_stored_callback(
+       struct db_context *db,
+       void (*cb)(struct db_context *db, struct db_record *rec,
+                  void *private_data),
+       void *private_data)
+{
+       db->stored_callback = cb;
+       db->stored_callback_private_data = private_data;
 }
 
 NTSTATUS dbwrap_record_delete(struct db_record *rec)
 {
-       return rec->delete_rec(rec);
+       NTSTATUS status;
+       struct db_context *db;
+
+       status = rec->delete_rec(rec);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+       db = rec->db;
+       if (db->stored_callback != NULL) {
+               db->stored_callback(db, rec,
+                                   db->stored_callback_private_data);
+       }
+       return NT_STATUS_OK;
 }
 
 struct dbwrap_lock_order_state {
index ff41e647efb6c83e3e2cc94f97ffa8240185e57a..3304bcf4a466d69053ff2c04094708eebfc65ffd 100644 (file)
@@ -38,6 +38,11 @@ struct db_record *dbwrap_try_fetch_locked(struct db_context *db,
                                          TALLOC_CTX *mem_ctx,
                                          TDB_DATA key);
 struct db_context *dbwrap_record_get_db(struct db_record *rec);
+void dbwrap_set_stored_callback(
+       struct db_context *db,
+       void (*cb)(struct db_context *db, struct db_record *rec,
+                  void *private_data),
+       void *private_data);
 
 NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key);
 NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key,
index 0454e62e698e20cc7d98aad2661484b086b3dac1..933cad5ebdf37a631954c8d493bcfde48ea2ee7e 100644 (file)
@@ -1610,6 +1610,7 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
        result->transaction_commit = db_ctdb_transaction_commit;
        result->transaction_cancel = db_ctdb_transaction_cancel;
        result->id = db_ctdb_id;
+       result->stored_callback = NULL;
 
        DEBUG(3,("db_open_ctdb: opened database '%s' with dbid 0x%x\n",
                 name, db_ctdb->db_id));
index 28da1add537744f4ea5a2156496bbac577f282c3..94993428a4f41f6e0a0f44c1c78688a9493c2772 100644 (file)
@@ -63,6 +63,9 @@ struct db_context {
        void *private_data;
        enum dbwrap_lock_order lock_order;
        bool persistent;
+       void (*stored_callback)(struct db_context *db, struct db_record *rec,
+                               void *private_data);
+       void *stored_callback_private_data;
 };
 
 #endif /* __DBWRAP_PRIVATE_H__ */
index 453efca7990b72cc52fef5660c2f92c51945472a..0d0fb02c9cf732f10682c4c52a4e990fae9c46de 100644 (file)
@@ -444,6 +444,7 @@ struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx)
        result->parse_record = db_rbt_parse_record;
        result->lock_order = 0;
        result->id = db_rbt_id;
+       result->stored_callback = NULL;
 
        return result;
 }
index 9450be0e651a5e8cb130d3a6c0bc108dc6ec68b0..fbbe757ca3bd4d8a0ea22b19a7e3c7dc29b67529 100644 (file)
@@ -436,6 +436,7 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
        result->exists = db_tdb_exists;
        result->wipe = db_tdb_wipe;
        result->id = db_tdb_id;
+       result->stored_callback = NULL;
        return result;
 
  fail: