Message ID | b989c0cb3755bc4b6696e796fa8ed2ef6c56606a.1457610443.git.berto@igalia.com |
---|---|
State | New |
Headers | show |
On 03/10/2016 04:55 AM, Alberto Garcia wrote: > The QUORUM_REPORT_BAD event is emitted whenever there's an I/O error > in a child of a Quorum device. This event is emitted at a maximum rate > of 1 per second. This means that an error in one of the children will > mask errors in the other children if they happen within the same 1 > second interval. > > This patch modifies qapi_event_throttle_equal() so QUORUM_REPORT_BAD > events are kept separately if they come from different children. > > Signed-off-by: Alberto Garcia <berto@igalia.com> > Reviewed-by: Max Reitz <mreitz@redhat.com> > --- > monitor.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/monitor.c b/monitor.c > index e99ca8c..c9fe862 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -572,6 +572,10 @@ static unsigned int qapi_event_throttle_hash(const void *key) > hash += g_str_hash(qdict_get_str(evstate->data, "id")); > } > > + if (evstate->event == QAPI_EVENT_QUORUM_REPORT_BAD) { > + hash += g_str_hash(qdict_get_str(evstate->data, "node-name")); Is ^= any better than += when computing hashes, so that carry bits aren't weakening the distribution of bits? But as long as the computation is consistent, I'm not too worried, since you were copying the line above. Reviewed-by: Eric Blake <eblake@redhat.com>
On Thu 10 Mar 2016 09:35:32 PM CET, Eric Blake wrote: >> @@ -572,6 +572,10 @@ static unsigned int qapi_event_throttle_hash(const void *key) >> hash += g_str_hash(qdict_get_str(evstate->data, "id")); >> } >> >> + if (evstate->event == QAPI_EVENT_QUORUM_REPORT_BAD) { >> + hash += g_str_hash(qdict_get_str(evstate->data, "node-name")); > > Is ^= any better than += when computing hashes, so that carry bits > aren't weakening the distribution of bits? But as long as the > computation is consistent, I'm not too worried, since you were copying > the line above. I think the chances of having collisions here are so low (and their effect so negligible) that I wouldn't worry too much about it. Berto
diff --git a/monitor.c b/monitor.c index e99ca8c..c9fe862 100644 --- a/monitor.c +++ b/monitor.c @@ -572,6 +572,10 @@ static unsigned int qapi_event_throttle_hash(const void *key) hash += g_str_hash(qdict_get_str(evstate->data, "id")); } + if (evstate->event == QAPI_EVENT_QUORUM_REPORT_BAD) { + hash += g_str_hash(qdict_get_str(evstate->data, "node-name")); + } + return hash; } @@ -589,6 +593,11 @@ static gboolean qapi_event_throttle_equal(const void *a, const void *b) qdict_get_str(evb->data, "id")); } + if (eva->event == QAPI_EVENT_QUORUM_REPORT_BAD) { + return !strcmp(qdict_get_str(eva->data, "node-name"), + qdict_get_str(evb->data, "node-name")); + } + return TRUE; }