970. [func] 'max-journal-size' can now be used to set a target
size for a journal.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zone.c,v 1.333.2.23 2003/07/28 07:03:15 marka Exp $ */
|
||||
/* $Id: zone.c,v 1.333.2.23.2.1 2003/07/31 23:34:57 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -405,7 +405,7 @@ static isc_result_t notify_createmessage(dns_zone_t *zone,
|
||||
dns_message_t **messagep);
|
||||
static void notify_done(isc_task_t *task, isc_event_t *event);
|
||||
static void notify_send_toaddr(isc_task_t *task, isc_event_t *event);
|
||||
static isc_result_t zone_dump(dns_zone_t *);
|
||||
static isc_result_t zone_dump(dns_zone_t *, isc_boolean_t);
|
||||
static void got_transfer_quota(isc_task_t *task, isc_event_t *event);
|
||||
static isc_result_t zmgr_start_xfrin_ifquota(dns_zonemgr_t *zmgr,
|
||||
dns_zone_t *zone);
|
||||
@@ -2003,7 +2003,7 @@ zone_maintenance(dns_zone_t *zone) {
|
||||
dumping = ISC_TRUE;
|
||||
UNLOCK_ZONE(zone);
|
||||
if (!dumping) {
|
||||
result = zone_dump(zone);
|
||||
result = zone_dump(zone, ISC_TRUE); /* task locked */
|
||||
if (result != ISC_R_SUCCESS)
|
||||
dns_zone_log(zone, ISC_LOG_WARNING,
|
||||
"dump failed: %s",
|
||||
@@ -2133,7 +2133,7 @@ dns_zone_flush(dns_zone_t *zone) {
|
||||
dumping = ISC_TRUE;
|
||||
UNLOCK_ZONE(zone);
|
||||
if (!dumping)
|
||||
result = zone_dump(zone);
|
||||
result = zone_dump(zone, ISC_FALSE); /* Unknown task. */
|
||||
return (result);
|
||||
}
|
||||
|
||||
@@ -2148,7 +2148,7 @@ dns_zone_dump(dns_zone_t *zone) {
|
||||
dumping = was_dumping(zone);
|
||||
UNLOCK_ZONE(zone);
|
||||
if (!dumping)
|
||||
result = zone_dump(zone);
|
||||
result = zone_dump(zone, ISC_FALSE); /* Unknown task. */
|
||||
return (result);
|
||||
}
|
||||
|
||||
@@ -2188,14 +2188,19 @@ zone_needdump(dns_zone_t *zone, unsigned int delay) {
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
zone_dump(dns_zone_t *zone) {
|
||||
zone_dump(dns_zone_t *zone, isc_boolean_t compact) {
|
||||
isc_result_t result;
|
||||
dns_dbversion_t *version = NULL;
|
||||
isc_boolean_t again;
|
||||
dns_db_t *db = NULL;
|
||||
char *masterfile = NULL;
|
||||
|
||||
/*
|
||||
* 'compact' MUST only be set if we are task locked.
|
||||
*/
|
||||
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
UNUSED(compact);
|
||||
|
||||
redo:
|
||||
LOCK_ZONE(zone);
|
||||
@@ -2217,6 +2222,34 @@ zone_dump(dns_zone_t *zone) {
|
||||
result = dns_master_dump(zone->mctx, db, version,
|
||||
&dns_master_style_default, masterfile);
|
||||
|
||||
/*
|
||||
* Journal updates are task locked (bin/named/update.c), compact
|
||||
* is only set if we are task locked.
|
||||
*/
|
||||
if (result == ISC_R_SUCCESS && compact &&
|
||||
zone->journal != NULL && zone->journalsize != -1) {
|
||||
isc_uint32_t serial;
|
||||
isc_result_t tresult;
|
||||
|
||||
tresult = dns_db_getsoaserial(db, version, &serial);
|
||||
if (tresult == ISC_R_SUCCESS) {
|
||||
tresult = dns_journal_compact(zone->mctx, zone->journal,
|
||||
serial, zone->journalsize);
|
||||
switch (tresult) {
|
||||
case ISC_R_SUCCESS:
|
||||
case ISC_R_NOSPACE:
|
||||
dns_zone_log(zone, ISC_LOG_DEBUG(3),
|
||||
"dns_journal_compact: %s",
|
||||
dns_result_totext(tresult));
|
||||
break;
|
||||
default:
|
||||
dns_zone_log(zone, ISC_LOG_ERROR,
|
||||
"dns_journal_compact failed: %s",
|
||||
dns_result_totext(tresult));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
dns_db_closeversion(db, &version, ISC_FALSE);
|
||||
fail:
|
||||
if (db != NULL)
|
||||
|
||||
Reference in New Issue
Block a user