diff options
author | shishir gowda <sgowda@redhat.com> | 2013-08-20 16:30:06 +0530 |
---|---|---|
committer | shishir gowda <sgowda@redhat.com> | 2013-11-15 12:30:00 +0530 |
commit | 83417fbfeb4262eaed78b6c086f9d249361ebb65 (patch) | |
tree | c7df1b667c3a6133f66a3a39401e4cdef79013fd /xlators/protocol/server/src/server.h | |
parent | e3d266deb09ed5ff8825db681c1d82552ffacdcb (diff) |
protocol/server: Implement barriering mechanisms for fops
Barriering allows cbk's responses to be held back until either a
timeout or a un-barrier event is received.
The event is triggered by a brick-op.
barrier-timeout, barrier-queue-lenght, and barrier-fops are currently
exposed as a xlator-options only
Change-Id: Ifb62d5b2bd2fbb35aca3b537e534156c877ce3a6
Signed-off-by: shishir gowda <sgowda@redhat.com>
Diffstat (limited to 'xlators/protocol/server/src/server.h')
-rw-r--r-- | xlators/protocol/server/src/server.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/xlators/protocol/server/src/server.h b/xlators/protocol/server/src/server.h index 43e84921c..e76390992 100644 --- a/xlators/protocol/server/src/server.h +++ b/xlators/protocol/server/src/server.h @@ -28,6 +28,34 @@ #define GF_MAX_SOCKET_WINDOW_SIZE (1 * GF_UNIT_MB) #define GF_MIN_SOCKET_WINDOW_SIZE (0) +struct _gf_barrier_payload { + rpcsvc_request_t *req; + struct iovec *rsp; + call_frame_t *frame; + struct iovec *payload; + struct iobref *iobref; + struct iobuf *iob; + int payload_count; + gf_boolean_t free_iobref; + struct list_head list; +}; + +typedef struct _gf_barrier_payload gf_barrier_payload_t; + +struct _gf_barrier { + gf_lock_t lock; + gf_boolean_t on; + gf_boolean_t force; + size_t cur_size; + int64_t max_size; + uint64_t fops; + gf_timer_t *timer; + uint64_t time_out; + struct list_head queue; +}; + +typedef struct _gf_barrier gf_barrier_t; + typedef enum { INTERNAL_LOCKS = 1, POSIX_LOCKS = 2, @@ -56,6 +84,7 @@ struct server_conf { struct timespec grace_ts; dict_t *auth_modules; pthread_mutex_t mutex; + gf_barrier_t *barrier; struct list_head xprt_list; }; typedef struct server_conf server_conf_t; @@ -94,6 +123,7 @@ int resolve_and_resume (call_frame_t *frame, server_resume_fn_t fn); struct _server_state { + struct _client_t *client; rpc_transport_t *xprt; inode_table_t *itable; |