From 2bf85951c6c25aa17acc591fabc3b3927b6dc82f Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Mon, 30 Mar 2015 16:56:59 +0530 Subject: Upcall: Process each of the upcall events separately As suggested during the code-review of Bug1200262, have modified GF_CBK_UPCALL to be exlusively GF_CBK_CACHE_INVALIDATION. Thus, for any new upcall event, a new CBK procedure will be added. Also made changes to store upcall data separately based on the upcall event type received. BUG: 1200262 Change-Id: I0f5e53d6f5ece16aecb514a0a426dca40fa1c755 Signed-off-by: Soumya Koduri Reviewed-on: http://review.gluster.org/10049 Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY --- xlators/features/upcall/src/upcall-internal.c | 2 +- xlators/features/upcall/src/upcall.c | 12 +++++++----- xlators/features/upcall/src/upcall.h | 8 +------- 3 files changed, 9 insertions(+), 13 deletions(-) (limited to 'xlators/features/upcall') diff --git a/xlators/features/upcall/src/upcall-internal.c b/xlators/features/upcall/src/upcall-internal.c index 41548afb930..a7f0fd991cf 100644 --- a/xlators/features/upcall/src/upcall-internal.c +++ b/xlators/features/upcall/src/upcall-internal.c @@ -423,7 +423,7 @@ upcall_client_cache_invalidate (xlator_t *this, uuid_t gfid, /* Send notify call */ gf_uuid_copy(n_event_data.gfid, gfid); n_event_data.client_entry = up_client_entry; - n_event_data.event_type = CACHE_INVALIDATION; + n_event_data.event_type = GF_UPCALL_CACHE_INVALIDATION; n_event_data.invalidate_flags = flags; /* Need to send inode flags */ diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c index 93861e7955f..21f8e0ba339 100644 --- a/xlators/features/upcall/src/upcall.c +++ b/xlators/features/upcall/src/upcall.c @@ -887,6 +887,7 @@ notify (xlator_t *this, int32_t event, void *data, ...) notify_event_data_t *notify_event = NULL; struct gf_upcall up_req = {0,}; upcall_client_t *up_client_entry = NULL; + struct gf_upcall_cache_invalidation ca_req = {0,}; switch (event) { case GF_EVENT_UPCALL: @@ -903,16 +904,17 @@ notify (xlator_t *this, int32_t event, void *data, ...) up_req.client_uid = up_client_entry->client_uid; - memcpy (up_req.gfid, notify_event->gfid, 16); + gf_uuid_copy (up_req.gfid, notify_event->gfid); gf_log (this->name, GF_LOG_DEBUG, "Sending notify to the client- %s, gfid - %s", up_client_entry->client_uid, up_req.gfid); switch (notify_event->event_type) { - case CACHE_INVALIDATION: - GF_ASSERT (notify_event->extra); - up_req.flags = notify_event->invalidate_flags; - up_req.expire_time_attr = up_client_entry->expire_time_attr; + case GF_UPCALL_CACHE_INVALIDATION: + ca_req.flags = notify_event->invalidate_flags; + ca_req.expire_time_attr = + up_client_entry->expire_time_attr; + up_req.data = &ca_req; break; default: goto out; diff --git a/xlators/features/upcall/src/upcall.h b/xlators/features/upcall/src/upcall.h index 7cbec22bbf2..3994c2648f4 100644 --- a/xlators/features/upcall/src/upcall.h +++ b/xlators/features/upcall/src/upcall.h @@ -59,12 +59,6 @@ struct _upcall_private_t { }; typedef struct _upcall_private_t upcall_private_t; -enum _upcall_event_type_t { - EVENT_NULL, - CACHE_INVALIDATION, -}; -typedef enum _upcall_event_type_t upcall_event_type_t; - struct _upcall_client_t { struct list_head client_list; /* strdup to store client_uid, strdup. Free it explicitly */ @@ -86,7 +80,7 @@ typedef struct _upcall_inode_ctx_t upcall_inode_ctx_t; struct _notify_event_data { uuid_t gfid; upcall_client_t *client_entry; - upcall_event_type_t event_type; + gf_upcall_event_t event_type; uint32_t invalidate_flags; /* any extra data needed, like inode flags * to be invalidated incase of cache invalidation, -- cgit