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