mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Implement RBTDB update path
This commit implements dns_db_{begin,commit,abort}update for rbt-zonedb
using the default diff shim.
This commit is contained in:
parent
1d4ad50e81
commit
9d7dd08ef3
3 changed files with 56 additions and 1 deletions
|
|
@ -303,7 +303,7 @@ cleanup:
|
|||
return result;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
isc_result_t
|
||||
update_callback(void *arg, const dns_name_t *name, dns_rdataset_t *rds,
|
||||
dns_diffop_t op DNS__DB_FLARG) {
|
||||
dns_updatectx_t *ctx = arg;
|
||||
|
|
|
|||
|
|
@ -277,6 +277,18 @@ dns_diff_apply_with_callbacks(const dns_diff_t *diff, dns_rdatacallbacks_t *call
|
|||
*\li 'callbacks->update' is not NULL
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
update_callback(void *arg, const dns_name_t *name, dns_rdataset_t *rds,
|
||||
dns_diffop_t op DNS__DB_FLARG);
|
||||
/*%<
|
||||
* Standard update callback for dns_rdatacallbacks_t.
|
||||
* Updates a database version by applying DNS record operations.
|
||||
* Used with dns_updatectx_t context.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'arg' is a valid dns_updatectx_t pointer
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_diff_load(const dns_diff_t *diff, dns_rdatacallbacks_t *callbacks);
|
||||
/*%<
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
#include <dns/callbacks.h>
|
||||
#include <dns/db.h>
|
||||
#include <dns/dbiterator.h>
|
||||
#include <dns/diff.h>
|
||||
#include <dns/fixedname.h>
|
||||
#include <dns/log.h>
|
||||
#include <dns/masterdump.h>
|
||||
|
|
@ -2248,10 +2249,52 @@ addglue(dns_db_t *db, dns_dbversion_t *dbversion, dns_rdataset_t *rdataset,
|
|||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
rbt_beginupdate(dns_db_t *db, dns_dbversion_t *ver,
|
||||
dns_rdatacallbacks_t *callbacks) {
|
||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||
|
||||
REQUIRE(VALID_RBTDB(rbtdb));
|
||||
REQUIRE(ver != NULL);
|
||||
REQUIRE(DNS_CALLBACK_VALID(callbacks));
|
||||
|
||||
dns_updatectx_t *ctx = isc_mem_get(rbtdb->common.mctx, sizeof(*ctx));
|
||||
*ctx = (dns_updatectx_t){
|
||||
.db = db,
|
||||
.ver = ver,
|
||||
.warn = true,
|
||||
};
|
||||
|
||||
callbacks->update = update_callback;
|
||||
callbacks->add_private = ctx;
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
rbt_endupdate(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
|
||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||
dns_updatectx_t *ctx;
|
||||
|
||||
REQUIRE(VALID_RBTDB(rbtdb));
|
||||
REQUIRE(DNS_CALLBACK_VALID(callbacks));
|
||||
|
||||
ctx = (dns_updatectx_t *)callbacks->add_private;
|
||||
if (ctx != NULL) {
|
||||
isc_mem_put(rbtdb->common.mctx, ctx, sizeof(*ctx));
|
||||
callbacks->add_private = NULL;
|
||||
}
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
dns_dbmethods_t dns__rbtdb_zonemethods = {
|
||||
.destroy = dns__rbtdb_destroy,
|
||||
.beginload = beginload,
|
||||
.endload = endload,
|
||||
.beginupdate = rbt_beginupdate,
|
||||
.commitupdate = rbt_endupdate,
|
||||
.abortupdate = rbt_endupdate,
|
||||
.currentversion = dns__rbtdb_currentversion,
|
||||
.newversion = dns__rbtdb_newversion,
|
||||
.attachversion = dns__rbtdb_attachversion,
|
||||
|
|
|
|||
Loading…
Reference in a new issue