svn commit: samba r10640 - in branches/tmp/samba4-winsrepl/source: include wrepl_server

metze at samba.org metze at samba.org
Fri Sep 30 02:07:35 GMT 2005


Author: metze
Date: 2005-09-30 02:07:34 +0000 (Fri, 30 Sep 2005)
New Revision: 10640

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

Log:
- add some short path for the composite helper functions
  they will be used in the next commit

metze
Modified:
   branches/tmp/samba4-winsrepl/source/include/structs.h
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h


Changeset:
Modified: branches/tmp/samba4-winsrepl/source/include/structs.h
===================================================================
--- branches/tmp/samba4-winsrepl/source/include/structs.h	2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/include/structs.h	2005-09-30 02:07:34 UTC (rev 10640)
@@ -269,8 +269,10 @@
 struct wreplsrv_owner;
 struct wreplsrv_in_connection;
 struct wreplsrv_in_call;
+struct wreplsrv_out_connection;
 struct wreplsrv_pull_table_io;
 struct wreplsrv_pull_names_io;
+struct wreplsrv_pull_cycle_io;
 
 struct winsdb_record;
 

Modified: branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c	2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c	2005-09-30 02:07:34 UTC (rev 10640)
@@ -46,6 +46,9 @@
 
 	partner->pull.last_status = wreplsrv_pull_cycle_recv(partner->pull.creq);
 	partner->pull.creq = NULL;
+	talloc_free(partner->pull.cycle_io);
+	partner->pull.cycle_io = NULL;
+
 	if (!NT_STATUS_IS_OK(partner->pull.last_status)) {
 		interval = partner->pull.error_count * partner->pull.retry_interval;
 		interval = MIN(interval, partner->pull.interval);
@@ -76,7 +79,17 @@
 {
 	struct wreplsrv_partner *partner = talloc_get_type(ptr, struct wreplsrv_partner);
 
-	partner->pull.creq = wreplsrv_pull_cycle_send(partner);
+	partner->pull.cycle_io = talloc(partner, struct wreplsrv_pull_cycle_io);
+	if (!partner->pull.cycle_io) {
+		goto requeue;
+	}
+
+	
+	partner->pull.cycle_io->in.partner	= partner;
+	partner->pull.cycle_io->in.num_owners	= 0;
+	partner->pull.cycle_io->in.owners	= NULL;
+	partner->pull.cycle_io->in.wreplconn	= NULL;
+	partner->pull.creq = wreplsrv_pull_cycle_send(partner, partner->pull.cycle_io);
 	if (!partner->pull.creq) {
 		DEBUG(1,("wreplsrv_pull_cycle_send(%s) failed\n",
 			 partner->address));

Modified: branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c	2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c	2005-09-30 02:07:34 UTC (rev 10640)
@@ -113,12 +113,12 @@
 	}
 }
 
-static struct composite_context *wreplsrv_out_connect_send(struct wreplsrv_partner *partner)
+static struct composite_context *wreplsrv_out_connect_send(struct wreplsrv_partner *partner,
+							   struct wreplsrv_out_connection *wreplconn)
 {
 	struct composite_context *c = NULL;
 	struct wreplsrv_service *service = partner->service;
 	struct wreplsrv_out_connect_state *state = NULL;
-	struct wreplsrv_out_connection *wreplconn;
 
 	c = talloc_zero(partner, struct composite_context);
 	if (!c) goto failed;
@@ -131,6 +131,17 @@
 	c->event_ctx	= service->task->event_ctx;
 	c->private_data	= state;
 
+	/* we have a connection given, so use it */
+	if (wreplconn) {
+		if (wreplconn->sock->dead) {
+			goto failed;
+		}
+		state->stage	= WREPLSRV_OUT_CONNECT_STAGE_DONE;
+		state->wreplconn= wreplconn;
+		composite_trigger_done(c);
+		return c;
+	}
+
 	/* we have a connection already, so use it */
 	if (partner->pull.wreplconn) {
 		if (!partner->pull.wreplconn->sock->dead) {
@@ -295,8 +306,16 @@
 	c->event_ctx	= service->task->event_ctx;
 	c->private_data	= state;
 
-	state->stage	= WREPLSRV_PULL_TABLE_STAGE_WAIT_CONNECTION;
-	state->creq	= wreplsrv_out_connect_send(io->in.partner);
+	if (io->in.num_owners) {
+		state->table_io.out.num_partners	= io->in.num_owners;
+		state->table_io.out.partners		= io->in.owners;
+		state->stage				= WREPLSRV_PULL_TABLE_STAGE_DONE;
+		composite_trigger_done(c);
+		return c;
+	}
+
+	state->stage    = WREPLSRV_PULL_TABLE_STAGE_WAIT_CONNECTION;
+	state->creq	= wreplsrv_out_connect_send(io->in.partner, NULL);
 	if (!state->creq) goto failed;
 
 	state->creq->async.fn		= wreplsrv_pull_table_handler_creq;
@@ -437,7 +456,7 @@
 	c->private_data	= state;
 
 	state->stage	= WREPLSRV_PULL_NAMES_STAGE_WAIT_CONNECTION;
-	state->creq	= wreplsrv_out_connect_send(io->in.partner);
+	state->creq	= wreplsrv_out_connect_send(io->in.partner, io->in.wreplconn);
 	if (!state->creq) goto failed;
 
 	state->creq->async.fn		= wreplsrv_pull_names_handler_creq;
@@ -478,7 +497,7 @@
 struct wreplsrv_pull_cycle_state {
 	enum wreplsrv_pull_cycle_stage stage;
 	struct composite_context *c;
-	struct wreplsrv_partner *partner;
+	struct wreplsrv_pull_cycle_io *io;
 	struct wreplsrv_pull_table_io table_io;
 	uint32_t current;
 	struct wreplsrv_pull_names_io names_io;
@@ -496,10 +515,10 @@
 	BOOL do_pull = False;
 
 	for (i=state->current; i < state->table_io.out.num_owners; i++) {
-		current_owner = wreplsrv_find_owner(state->partner->pull.table,
+		current_owner = wreplsrv_find_owner(state->io->in.partner->pull.table,
 						    state->table_io.out.owners[i].address);
 
-		local_owner = wreplsrv_find_owner(state->partner->service->table,
+		local_owner = wreplsrv_find_owner(state->io->in.partner->service->table,
 						  state->table_io.out.owners[i].address);
 		/*
 		 * this means we are ourself the current owner,
@@ -530,7 +549,8 @@
 	state->current = i;
 
 	if (do_pull) {
-		state->names_io.in.partner		= state->partner;
+		state->names_io.in.partner		= state->io->in.partner;
+		state->names_io.in.wreplconn		= state->io->in.wreplconn;
 		state->names_io.in.owner		= current_owner->owner;
 		state->names_io.in.owner.min_version	= old_max_version;
 		state->creq = wreplsrv_pull_names_send(state, &state->names_io);
@@ -557,13 +577,13 @@
 	for (i=0; i < state->table_io.out.num_owners; i++) {
 		BOOL is_our_addr;
 
-		is_our_addr = wreplsrv_is_our_address(state->partner->service,
+		is_our_addr = wreplsrv_is_our_address(state->io->in.partner->service,
 						      state->table_io.out.owners[i].address);
 		if (is_our_addr) continue;
 
-		status = wreplsrv_add_table(state->partner->service,
-					    state->partner, 
-					    &state->partner->pull.table,
+		status = wreplsrv_add_table(state->io->in.partner->service,
+					    state->io->in.partner, 
+					    &state->io->in.partner->pull.table,
 					    state->table_io.out.owners[i].address,
 					    state->table_io.out.owners[i].max_version);
 		NT_STATUS_NOT_OK_RETURN(status);
@@ -584,7 +604,7 @@
 {
 	NTSTATUS status;
 
-	status = wreplsrv_apply_records(state->partner, &state->names_io);
+	status = wreplsrv_apply_records(state->io->in.partner, &state->names_io);
 	NT_STATUS_NOT_OK_RETURN(status);
 
 	talloc_free(state->names_io.out.names);
@@ -654,26 +674,28 @@
 	return;
 }
 
-struct composite_context *wreplsrv_pull_cycle_send(struct wreplsrv_partner *partner)
+struct composite_context *wreplsrv_pull_cycle_send(TALLOC_CTX *mem_ctx, struct wreplsrv_pull_cycle_io *io)
 {
 	struct composite_context *c = NULL;
-	struct wreplsrv_service *service = partner->service;
+	struct wreplsrv_service *service = io->in.partner->service;
 	struct wreplsrv_pull_cycle_state *state = NULL;
 
-	c = talloc_zero(partner, struct composite_context);
+	c = talloc_zero(mem_ctx, struct composite_context);
 	if (!c) goto failed;
 
 	state = talloc_zero(c, struct wreplsrv_pull_cycle_state);
 	if (!state) goto failed;
 	state->c	= c;
-	state->partner	= partner;
+	state->io	= io;
 
 	c->state	= COMPOSITE_STATE_IN_PROGRESS;
 	c->event_ctx	= service->task->event_ctx;
 	c->private_data	= state;
 
 	state->stage	= WREPLSRV_PULL_CYCLE_STAGE_WAIT_TABLE_REPLY;
-	state->table_io.in.partner	= partner;
+	state->table_io.in.partner	= io->in.partner;
+	state->table_io.in.num_owners	= io->in.num_owners;
+	state->table_io.in.owners	= io->in.owners;
 	state->creq = wreplsrv_pull_table_send(state, &state->table_io);
 	if (!state->creq) goto failed;
 

Modified: branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h	2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h	2005-09-30 02:07:34 UTC (rev 10640)
@@ -108,11 +108,6 @@
 		uint32_t peer_ctx;
 	} assoc_ctx;
 
-	/*
-	 * are we currently doing something on the connection?
-	 */
-	BOOL processing;
-
 	/* 
 	 * the client socket to the partner,
 	 * NULL if not yet connected
@@ -176,6 +171,9 @@
 		/* the current pending pull cycle request */
 		struct composite_context *creq;
 
+		/* the pull cycle io params */
+		struct wreplsrv_pull_cycle_io *cycle_io;
+
 		/* the current timed_event to the next pull cycle */
 		struct timed_event *te;
 	} pull;



More information about the samba-cvs mailing list