-
Notifications
You must be signed in to change notification settings - Fork 405
libhive,hiveview: Track per-test client log ranges for better reporting #1402
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
b789552
libhive: add log byte offsets to ClientInfo
danceratopz 02615ce
libhive: add registerMultiTestNode API endpoint for client reuse
danceratopz 319ebe5
libhive: flag multi-test lifecycle tests via a `MultiTestContext` field
danceratopz b125aa2
hiveview: add byte range highlighting for multi-test client logs
danceratopz aa244cc
libhive: fix data race in `IsTestInSuite` on `suite.TestCases` map read
danceratopz ec9d4cb
libhive: rewrite testmanager_test as external test package
danceratopz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| package libhive | ||
|
|
||
| import ( | ||
| "os" | ||
| "path/filepath" | ||
| "testing" | ||
| ) | ||
|
|
||
| func TestLogFileSize(t *testing.T) { | ||
| // Non-existent file should return 0. | ||
| if got := logFileSize("/nonexistent/path/file.log"); got != 0 { | ||
| t.Fatalf("logFileSize(nonexistent) = %d, want 0", got) | ||
| } | ||
|
|
||
| // Create a temp file with known content. | ||
| tmpFile := filepath.Join(t.TempDir(), "test.log") | ||
| content := []byte("hello world\n") | ||
| if err := os.WriteFile(tmpFile, content, 0644); err != nil { | ||
| t.Fatal("WriteFile:", err) | ||
| } | ||
|
|
||
| if got := logFileSize(tmpFile); got != int64(len(content)) { | ||
| t.Fatalf("logFileSize = %d, want %d", got, len(content)) | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wouldn't have another method handy, but just want to note that this way of getting the offsets might be unreliable. The way logs are handled is that hive attaches to the docker output stream and writes the output to the file in a background goroutine. This process is not at all synchronized with the running of tests. So depending on machine load, docker latency, etc., the collected offsets can be way behind. Basically what's happening here is, we are taking the current size of the output file, as reported by the OS, and recording that.
We could improve this by adding more API surface in the docker backend to allow reading the current output size of the container. This would remove the OS filesystem from the equation at least.
Nothing further can be done though, since we fundamentally rely on docker to provide us with the output from the client container.
There is also the fundamental issue that client logs may not always be emitted in time with the tests.