From 209484eb3a3782ac3f27a347174d91271314b83f Mon Sep 17 00:00:00 2001 From: Steve Singer Date: Wed, 23 Oct 2013 11:08:51 -0400 Subject: [PATCH] If the event provider is not in the provider list but the event origin is a set origin (for a subscribed set) then we have a problem. Proceeding with the sync_event() would mean we could ignore data that should be replicated. --- src/slon/remote_worker.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/slon/remote_worker.c b/src/slon/remote_worker.c index 448a2ca..3db61db 100644 --- a/src/slon/remote_worker.c +++ b/src/slon/remote_worker.c @@ -3630,6 +3630,7 @@ sync_event(SlonNode * node, SlonConn * local_conn, SlonDString lsquery; SlonDString *provider_query; SlonDString actionseq_subquery; + SlonSet * set_ptr = NULL; int actionlist_len; int64 min_ssy_seqno; @@ -3662,6 +3663,41 @@ sync_event(SlonNode * node, SlonConn * local_conn, } } + + /* + * Make sure that we have the event provider in our provider list. + */ + for (provider = wd->provider_head; provider; provider = provider->next) + { + if (provider->no_id == event->event_provider) + break; + } + if (provider == NULL) + { + rtcfg_lock(); + /** + * is this remote_worker a set origin? + * if not we can ignore the SYNC event. + */ + for(set_ptr = rtcfg_set_list_head ; + set_ptr != NULL; set_ptr = set_ptr->next) + + { + if ( set_ptr->set_origin == node->no_id && set_ptr->sub_active) + break; + } + if ( set_ptr != NULL && event->event_provider != node->no_id && set_ptr->sub_active ) + { + //adjust_provider_info(node, wd, false, event->event_provider); + slon_log(SLON_ERROR,"remoteWorkerThread_%d: event provider %d is not in the provider list\n", + node->no_id,event->event_provider); + rtcfg_unlock(); + slon_retry(); + } + rtcfg_unlock(); + } + + /* * Establish all required data provider connections */ -- 1.7.10.4