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 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 */ |
| 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; |
