diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2010-02-26 18:32:31 -0500 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-03-04 14:26:35 -0500 |
commit | 422d2cb8f9afadba1ecd3614f658b6daaaa480fb (patch) | |
tree | 22e1a61acdbbe1459b190c4dbb6019360464b2e9 /fs/ceph/osd_client.h | |
parent | e9964c102312967a4bc1fd501cb628c4a3b19034 (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.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ceph/osd_client.h b/fs/ceph/osd_client.h index f256eba6fe7..1b1a3ca43af 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 */ |
42 | struct ceph_osd_request { | 44 | struct 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; |