aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/osd_client.h
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2010-02-26 18:32:31 -0500
committerSage Weil <sage@newdream.net>2010-03-04 14:26:35 -0500
commit422d2cb8f9afadba1ecd3614f658b6daaaa480fb (patch)
tree22e1a61acdbbe1459b190c4dbb6019360464b2e9 /fs/ceph/osd_client.h
parente9964c102312967a4bc1fd501cb628c4a3b19034 (diff)
ceph: reset osd after relevant messages timed out
This simplifies the process of timing out messages. We keep lru of current messages that are in flight. If a timeout has passed, we reset the osd connection, so that messages will be retransmitted. This is a failsafe in case we hit some sort of problem sending out message to the OSD. Normally, we'll get notification via an updated osdmap if there are problems. If a request is older than the keepalive timeout, send a keepalive to ensure we detect any breaks in the TCP connection. Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net> Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/osd_client.h')
-rw-r--r--fs/ceph/osd_client.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ceph/osd_client.h b/fs/ceph/osd_client.h
index f256eba6fe7a..1b1a3ca43afc 100644
--- a/fs/ceph/osd_client.h
+++ b/fs/ceph/osd_client.h
@@ -36,12 +36,15 @@ struct ceph_osd {
36 void *o_authorizer_buf, *o_authorizer_reply_buf; 36 void *o_authorizer_buf, *o_authorizer_reply_buf;
37 size_t o_authorizer_buf_len, o_authorizer_reply_buf_len; 37 size_t o_authorizer_buf_len, o_authorizer_reply_buf_len;
38 unsigned long lru_ttl; 38 unsigned long lru_ttl;
39 int o_marked_for_keepalive;
40 struct list_head o_keepalive_item;
39}; 41};
40 42
41/* an in-flight request */ 43/* an in-flight request */
42struct ceph_osd_request { 44struct ceph_osd_request {
43 u64 r_tid; /* unique for this client */ 45 u64 r_tid; /* unique for this client */
44 struct rb_node r_node; 46 struct rb_node r_node;
47 struct list_head r_req_lru_item;
45 struct list_head r_osd_item; 48 struct list_head r_osd_item;
46 struct ceph_osd *r_osd; 49 struct ceph_osd *r_osd;
47 struct ceph_pg r_pgid; 50 struct ceph_pg r_pgid;
@@ -67,7 +70,7 @@ struct ceph_osd_request {
67 70
68 char r_oid[40]; /* object name */ 71 char r_oid[40]; /* object name */
69 int r_oid_len; 72 int r_oid_len;
70 unsigned long r_timeout_stamp; 73 unsigned long r_sent_stamp;
71 bool r_resend; /* msg send failed, needs retry */ 74 bool r_resend; /* msg send failed, needs retry */
72 75
73 struct ceph_file_layout r_file_layout; 76 struct ceph_file_layout r_file_layout;
@@ -92,6 +95,7 @@ struct ceph_osd_client {
92 u64 timeout_tid; /* tid of timeout triggering rq */ 95 u64 timeout_tid; /* tid of timeout triggering rq */
93 u64 last_tid; /* tid of last request */ 96 u64 last_tid; /* tid of last request */
94 struct rb_root requests; /* pending requests */ 97 struct rb_root requests; /* pending requests */
98 struct list_head req_lru; /* pending requests lru */
95 int num_requests; 99 int num_requests;
96 struct delayed_work timeout_work; 100 struct delayed_work timeout_work;
97 struct delayed_work osds_timeout_work; 101 struct delayed_work osds_timeout_work;