svn commit: samba r12700 - in branches/SAMBA_4_0/source/nbt_server/wins: .

metze at samba.org metze at samba.org
Tue Jan 3 20:03:51 GMT 2006


Author: metze
Date: 2006-01-03 20:03:51 +0000 (Tue, 03 Jan 2006)
New Revision: 12700

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12700

Log:
fix name release of replica records, we need to become the owner and allocate a new versionID
so that it gets replicated to the old owning wins server directly

metze
Modified:
   branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h
   branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c
   branches/SAMBA_4_0/source/nbt_server/wins/winsserver.h


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h	2006-01-03 19:39:53 UTC (rev 12699)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h	2006-01-03 20:03:51 UTC (rev 12700)
@@ -55,25 +55,4 @@
 	const char *local_owner;
 };
 
-struct wins_server {
-	/* wins server database handle */
-	struct winsdb_handle *wins_db;
-
-	/* some configuration */
-	struct {
-		/* 
-		 * the interval (in secs) till an active record will be marked as RELEASED
-		 */
-		uint32_t min_renew_interval;
-		uint32_t max_renew_interval;
-
-		/* 
-		 * the interval (in secs) a record remains in RELEASED state,
-		 * before it will be marked as TOMBSTONE
-		 * (also known as extinction interval)
-		 */
-		uint32_t tombstone_interval;
-	} config;
-};
-
 #include "nbt_server/wins/winsdb_proto.h"

Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c	2006-01-03 19:39:53 UTC (rev 12699)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c	2006-01-03 20:03:51 UTC (rev 12700)
@@ -731,7 +731,23 @@
 	}
 
 	if (rec->state == WREPL_STATE_RELEASED) {
-		rec->expire_time = time(NULL) + winssrv->config.tombstone_interval;
+		/*
+		 * if we're not the owner, we need to take the owner ship
+		 * and make the record tombstone, but expire after
+		 * tombstone_interval + tombstone_timeout and not only after tombstone_timeout
+		 * like for normal tombstone records.
+		 * This is to replicate the record directly to the original owner,
+		 * where the record is still active
+		 */ 
+		if (strcmp(rec->wins_owner, winssrv->wins_db->local_owner) == 0) {
+			rec->expire_time= time(NULL) + winssrv->config.tombstone_interval;
+		} else {
+			rec->state	= WREPL_STATE_TOMBSTONE;
+			rec->expire_time= time(NULL) + 
+					  winssrv->config.tombstone_interval +
+					  winssrv->config.tombstone_timeout;
+			modify_flags	= WINSDB_FLAG_ALLOC_VERSION | WINSDB_FLAG_TAKE_OWNERSHIP;
+		}
 	}
 
 	ret = winsdb_modify(winssrv->wins_db, rec, modify_flags);
@@ -783,7 +799,7 @@
 */
 NTSTATUS nbtd_winsserver_init(struct nbtd_server *nbtsrv)
 {
-	uint32_t tombstone_interval;
+	uint32_t tmp;
 
 	if (!lp_wins_support()) {
 		nbtsrv->winssrv = NULL;
@@ -795,8 +811,10 @@
 
 	nbtsrv->winssrv->config.max_renew_interval = lp_max_wins_ttl();
 	nbtsrv->winssrv->config.min_renew_interval = lp_min_wins_ttl();
-	tombstone_interval = lp_parm_int(-1,"wreplsrv","tombstone_interval", 6*24*60*60);
-	nbtsrv->winssrv->config.tombstone_interval = tombstone_interval;
+	tmp = lp_parm_int(-1,"wreplsrv","tombstone_interval", 6*24*60*60);
+	nbtsrv->winssrv->config.tombstone_interval = tmp;
+	tmp = lp_parm_int(-1,"wreplsrv","tombstone_timeout", 1*24*60*60);
+	nbtsrv->winssrv->config.tombstone_timeout = tmp;
 
 	nbtsrv->winssrv->wins_db     = winsdb_connect(nbtsrv->winssrv);
 	if (!nbtsrv->winssrv->wins_db) {

Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsserver.h
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsserver.h	2006-01-03 19:39:53 UTC (rev 12699)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsserver.h	2006-01-03 20:03:51 UTC (rev 12700)
@@ -20,6 +20,35 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+struct wins_server {
+	/* wins server database handle */
+	struct winsdb_handle *wins_db;
+
+	/* some configuration */
+	struct {
+		/* 
+		 * the interval (in secs) till an active record will be marked as RELEASED
+		 */
+		uint32_t min_renew_interval;
+		uint32_t max_renew_interval;
+
+		/* 
+		 * the interval (in secs) a record remains in RELEASED state,
+		 * before it will be marked as TOMBSTONE
+		 * (also known as extinction interval)
+		 */
+		uint32_t tombstone_interval;
+
+		/* 
+		 * the interval (in secs) a record remains in TOMBSTONE state,
+		 * before it will be removed from the database.
+		 * See also 'tombstone_extra_timeout'.
+		 * (also known as extinction timeout)
+		 */
+		uint32_t tombstone_timeout;
+	} config;
+};
+
 struct wins_challenge_io {
 	struct {
 		struct nbtd_server *nbtd_server;



More information about the samba-cvs mailing list