From a624a0afa529f5eaf73aa1c85f3c900957356556 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 19 Nov 2010 21:11:26 +0100 Subject: [PATCH] Reset all failover services when going online --- src/providers/data_provider_be.c | 2 ++ src/providers/data_provider_fo.c | 5 +++++ src/providers/dp_backend.h | 1 + src/providers/fail_over.c | 17 +++++++++++++++++ src/providers/fail_over.h | 1 + 5 files changed, 26 insertions(+), 0 deletions(-) diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c index 764635a..d4deaf4 100644 --- a/src/providers/data_provider_be.c +++ b/src/providers/data_provider_be.c @@ -177,6 +177,8 @@ void be_reset_offline(struct be_ctx *ctx) { DEBUG(8, ("Going back online!\n")); + reset_fo(ctx); + ctx->offstat.went_offline = 0; ctx->offstat.offline = false; be_run_online_cb(ctx); } diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index dff0aef..61bc938 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -493,3 +493,8 @@ int be_fo_run_callbacks_at_next_request(struct be_ctx *ctx, return EOK; } +void reset_fo(struct be_ctx *be_ctx) +{ + fo_reset_services(be_ctx->be_fo->fo_ctx); +} + diff --git a/src/providers/dp_backend.h b/src/providers/dp_backend.h index a31e458..db3d085 100644 --- a/src/providers/dp_backend.h +++ b/src/providers/dp_backend.h @@ -187,4 +187,5 @@ void be_fo_try_next_server(struct be_ctx *ctx, const char *service_name); int be_fo_run_callbacks_at_next_request(struct be_ctx *ctx, const char *service_name); +void reset_fo(struct be_ctx *be_ctx); #endif /* __DP_BACKEND_H___ */ diff --git a/src/providers/fail_over.c b/src/providers/fail_over.c index fa91aec..125dfe5 100644 --- a/src/providers/fail_over.c +++ b/src/providers/fail_over.c @@ -1329,3 +1329,20 @@ fo_get_server_hostent(struct fo_server *server) } return server->common->hostent; } + +void fo_reset_services(struct fo_ctx *fo_ctx) +{ + struct fo_service *service; + struct fo_server *server; + + DLIST_FOR_EACH(service, fo_ctx->service_list) { + DLIST_FOR_EACH(server, service->server_list) { + fo_set_server_status(server, SERVER_NAME_NOT_RESOLVED); + fo_set_port_status(server, PORT_NEUTRAL); + if (server->srv_data != NULL) { + set_srv_data_status(server->srv_data, SRV_NOT_RESOLVED); + } + } + } +} + diff --git a/src/providers/fail_over.h b/src/providers/fail_over.h index f1a071d..dce02dc 100644 --- a/src/providers/fail_over.h +++ b/src/providers/fail_over.h @@ -172,4 +172,5 @@ struct hostent *fo_get_server_hostent(struct fo_server *server); int fo_is_srv_lookup(struct fo_server *s); +void fo_reset_services(struct fo_ctx *fo_ctx); #endif /* !__FAIL_OVER_H__ */ -- 1.7.3.2