From 97cc3ebb01f0494c252cac315054e78f43cfa7b4 Mon Sep 17 00:00:00 2001 From: Yoann La Cancellera Date: Mon, 8 Jan 2024 18:37:57 +0100 Subject: [PATCH 1/2] PT-2298 pt-galera-log-explainer superfluous lines on conflicts --- src/go/pt-galera-log-explainer/main_test.go | 6 ++++++ src/go/pt-galera-log-explainer/regex/applicative.go | 8 +++++--- .../tests/expected/conflict_list_all_no_color | 12 ++++++++++++ src/go/pt-galera-log-explainer/types/timeline.go | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 src/go/pt-galera-log-explainer/tests/expected/conflict_list_all_no_color diff --git a/src/go/pt-galera-log-explainer/main_test.go b/src/go/pt-galera-log-explainer/main_test.go index e4bf895e..17e286e4 100644 --- a/src/go/pt-galera-log-explainer/main_test.go +++ b/src/go/pt-galera-log-explainer/main_test.go @@ -103,6 +103,12 @@ func TestMain(t *testing.T) { cmd: []string{"conflicts"}, path: "tests/logs/conflict/*", }, + + { + name: "conflict_list_all_no_color", + cmd: []string{"list", "--all", "--no-color"}, + path: "tests/logs/conflict/*", + }, } TESTS: diff --git a/src/go/pt-galera-log-explainer/regex/applicative.go b/src/go/pt-galera-log-explainer/regex/applicative.go index 028f86d4..f21810fd 100644 --- a/src/go/pt-galera-log-explainer/regex/applicative.go +++ b/src/go/pt-galera-log-explainer/regex/applicative.go @@ -92,9 +92,11 @@ var ApplicativeMap = types.RegexMap{ return logCtx, func(logCtx types.LogCtx) string { - for _, name := range logCtx.OwnNames { - vote, ok := latestConflict.VotePerNode[name] - if !ok { + for _, localname := range logCtx.OwnNames { + vote, ok := latestConflict.VotePerNode[localname] + // don't print other nodes vote, their should be in their own column + // else it just takes too much place without adding much usability + if node != localname || !ok { continue } diff --git a/src/go/pt-galera-log-explainer/tests/expected/conflict_list_all_no_color b/src/go/pt-galera-log-explainer/tests/expected/conflict_list_all_no_color new file mode 100644 index 00000000..542dc3d6 --- /dev/null +++ b/src/go/pt-galera-log-explainer/tests/expected/conflict_list_all_no_color @@ -0,0 +1,12 @@ +identifier node1 +current path tests/logs/conflict/node.log +last known ip +last known name node1 +mysql version + +2023-10-21T04:01:01.700706Z inconsistency vote started(seqno:102573168) + consistency vote(seqno:102573168): lost +2023-10-21T04:01:01.701512Z found inconsistent by vote +2023-10-21T04:01:01.704318Z NON-PRIMARY(n=1) +2023-10-21T04:01:01.704384Z SYNCED -> OPEN +2023-10-21T04:01:01.704465Z OPEN -> CLOSED diff --git a/src/go/pt-galera-log-explainer/types/timeline.go b/src/go/pt-galera-log-explainer/types/timeline.go index 8ff8e43a..85c53d88 100644 --- a/src/go/pt-galera-log-explainer/types/timeline.go +++ b/src/go/pt-galera-log-explainer/types/timeline.go @@ -139,7 +139,7 @@ func getlasttime(l LocalTimeline) time.Time { func CutTimelineAt(t LocalTimeline, at time.Time) LocalTimeline { var i int for i = 0; i < len(t); i++ { - if t[i].Date.Time.After(at) { + if t[i].Date != nil && t[i].Date.Time.After(at) { break } } From 3bdc4b95ba10dbcf116dd199455f1c6e1193c4db Mon Sep 17 00:00:00 2001 From: Yoann La Cancellera Date: Fri, 26 Jan 2024 12:25:45 +0100 Subject: [PATCH 2/2] pt-galera-log-explainer: refactor conflict response --- src/go/pt-galera-log-explainer/regex/applicative.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/go/pt-galera-log-explainer/regex/applicative.go b/src/go/pt-galera-log-explainer/regex/applicative.go index f21810fd..a033dbd9 100644 --- a/src/go/pt-galera-log-explainer/regex/applicative.go +++ b/src/go/pt-galera-log-explainer/regex/applicative.go @@ -93,14 +93,15 @@ var ApplicativeMap = types.RegexMap{ return logCtx, func(logCtx types.LogCtx) string { for _, localname := range logCtx.OwnNames { - vote, ok := latestConflict.VotePerNode[localname] - // don't print other nodes vote, their should be in their own column - // else it just takes too much place without adding much usability - if node != localname || !ok { + if node != localname { + // don't print other nodes vote, their should be in their own column + // else it just takes too much place without adding much usability continue } - return voteResponse(vote, *latestConflict) + if vote, ok := latestConflict.VotePerNode[localname]; ok { + return voteResponse(vote, *latestConflict) + } } return ""