Gitweb: http://git.fedorahosted.org/git/dlm.git?p=dlm.git;a=commitdiff;h=d4cf6836ee6... Commit: d4cf6836ee60d12d07841b44986cf443a8b4f2ce Parent: d218916fd8a4132d2b4df8b7853ad419b3538637 Author: David Teigland teigland@redhat.com AuthorDate: Fri Oct 7 15:46:12 2011 -0500 Committer: David Teigland teigland@redhat.com CommitterDate: Fri Oct 7 15:46:12 2011 -0500
dlm_controld: use monotonic times
except for value compared to time from fenced which is still real time
Signed-off-by: David Teigland teigland@redhat.com --- dlm_controld/cpg.c | 26 +++++++++++++++----------- dlm_controld/member_cman.c | 2 +- dlm_controld/plock.c | 12 ++++++------ 3 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/dlm_controld/cpg.c b/dlm_controld/cpg.c index 4dc2bc2..4bf7d1d 100644 --- a/dlm_controld/cpg.c +++ b/dlm_controld/cpg.c @@ -72,7 +72,8 @@ struct node { int fs_notified;
int check_fencing; - uint64_t fence_time; /* for debug */ + uint64_t fail_realtime; + uint64_t fence_realtime; uint32_t fence_queries; /* for debug */ };
@@ -525,7 +526,7 @@ static void node_history_lockspace_fail(struct lockspace *ls, int nodeid,
if (cfgd_enable_fencing && node->start_time) { node->check_fencing = 1; - node->fence_time = 0; + node->fence_realtime = 0; node->fence_queries = 0; }
@@ -540,6 +541,7 @@ static void node_history_lockspace_fail(struct lockspace *ls, int nodeid, node->lockspace_fail_time = now; node->lockspace_fail_seq = node->lockspace_rem_seq; node->lockspace_fail_reason = reason; /* for queries */ + node->fail_realtime = time(NULL); }
static void node_history_start(struct lockspace *ls, int nodeid) @@ -552,7 +554,7 @@ static void node_history_start(struct lockspace *ls, int nodeid) return; }
- node->start_time = time(NULL); + node->start_time = monotime(); }
/* wait for cluster ringid and cpg ringid to be the same so we know our @@ -596,31 +598,33 @@ static int check_fencing_done(struct lockspace *ls) if (rv < 0) log_error("fenced_node_info error %d", rv);
+ /* fenced gives us real time */ + /* need >= not just > because in at least one case we've seen fenced_time within the same second as fail_time: with external fencing, e.g. fence_node */
- if (last_fenced_time >= node->lockspace_fail_time) { + if (last_fenced_time >= node->fail_realtime) { log_group(ls, "check_fencing %d done " "start %llu fail %llu last %llu", node->nodeid, (unsigned long long)node->start_time, - (unsigned long long)node->lockspace_fail_time, + (unsigned long long)node->fail_realtime, (unsigned long long)last_fenced_time); node->check_fencing = 0; node->start_time = 0; - node->fence_time = last_fenced_time; + node->fence_realtime = last_fenced_time; } else { if (!node->fence_queries || - node->fence_time != last_fenced_time) { + node->fence_realtime != last_fenced_time) { log_group(ls, "check_fencing %d wait " "start %llu fail %llu last %llu", node->nodeid, (unsigned long long)node->start_time, - (unsigned long long)node->lockspace_fail_time, + (unsigned long long)node->fail_realtime, (unsigned long long)last_fenced_time); node->fence_queries++; - node->fence_time = last_fenced_time; + node->fence_realtime = last_fenced_time; } wait_count++; } @@ -1415,7 +1419,7 @@ static int add_change(struct lockspace *ls, struct change *cg; struct member *memb; int i, error; - uint64_t now = time(NULL); + uint64_t now = monotime();
cg = malloc(sizeof(struct change)); if (!cg) @@ -2418,7 +2422,7 @@ static void confchg_cb_daemon(cpg_handle_t handle, size_t joined_list_entries) { struct node_daemon *node; - uint64_t now = time(NULL); + uint64_t now = monotime(); int i;
log_config(group_name, member_list, member_list_entries, diff --git a/dlm_controld/member_cman.c b/dlm_controld/member_cman.c index f7a099c..6bfb2a9 100644 --- a/dlm_controld/member_cman.c +++ b/dlm_controld/member_cman.c @@ -110,7 +110,7 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate, corosync_cfg_node_address_t *addrptr = addrs; cs_error_t err; int i, j, num_addrs; - uint64_t now = time(NULL); + uint64_t now = monotime();
if (!cluster_quorate && quorate) quorate_time = now; diff --git a/dlm_controld/plock.c b/dlm_controld/plock.c index d475cf4..3e48267 100644 --- a/dlm_controld/plock.c +++ b/dlm_controld/plock.c @@ -813,11 +813,11 @@ static void __receive_plock(struct lockspace *ls, struct dlm_plock_info *in, { switch (in->optype) { case DLM_PLOCK_OP_LOCK: - ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime(); do_lock(ls, in, r); break; case DLM_PLOCK_OP_UNLOCK: - ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime(); do_unlock(ls, in, r); break; case DLM_PLOCK_OP_GET: @@ -1132,7 +1132,7 @@ static void _receive_own(struct lockspace *ls, struct dlm_header *hd, int len) int from = hd->nodeid; int rv;
- ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime();
memcpy(&info, (char *)hd + sizeof(struct dlm_header), sizeof(info)); info_bswap_in(&info); @@ -1305,7 +1305,7 @@ static void _receive_sync(struct lockspace *ls, struct dlm_header *hd, int len) int from = hd->nodeid; int rv;
- ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime();
memcpy(&info, (char *)hd + sizeof(struct dlm_header), sizeof(info)); info_bswap_in(&info); @@ -1352,7 +1352,7 @@ static void _receive_drop(struct lockspace *ls, struct dlm_header *hd, int len) int from = hd->nodeid; int rv;
- ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime();
memcpy(&info, (char *)hd + sizeof(struct dlm_header), sizeof(info)); info_bswap_in(&info); @@ -2072,7 +2072,7 @@ void purge_plocks(struct lockspace *ls, int nodeid, int unmount) } if (purged) - ls->last_plock_time = time(NULL); + ls->last_plock_time = monotime();
log_dlock(ls, "purged %d plocks for %d", purged, nodeid); }
cluster-commits@lists.stg.fedorahosted.org