-
Notifications
You must be signed in to change notification settings - Fork 4.5k
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
stats: Improved sequencing documentation for server-side stats events and added tests. #7885
base: master
Are you sure you want to change the base?
Conversation
…s to verify the order of server-side events.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #7885 +/- ##
==========================================
+ Coverage 81.84% 82.25% +0.40%
==========================================
Files 377 392 +15
Lines 38120 39140 +1020
==========================================
+ Hits 31201 32194 +993
- Misses 5603 5610 +7
- Partials 1316 1336 +20
🚀 New features to boost your workflow:
|
stats/stats_test.go
Outdated
func (s *testServer) UnaryCall( | ||
ctx context.Context, | ||
in *testpb.SimpleRequest, | ||
) (*testpb.SimpleResponse, error) { |
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.
grpc-go follows the Google style guide. Based on this section in the style guide:
The signature of a function or method declaration should remain on a single line to avoid indentation confusion.
Please revert the changes made to wrap function definationations and calls throughout the PR.
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.
Got it! I'll disable my autoformatter going forward or reconfigure it to follow the Google style guide.
stats/stats_test.go
Outdated
@@ -786,8 +884,14 @@ func checkConnEnd(t *testing.T, d *gotData) { | |||
st.IsClient() // TODO remove this. | |||
} | |||
|
|||
type event struct { | |||
eventType string | |||
timestamp time.Time |
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.
What is the use of storing a timestamp? I believe we're only interested in the ordering of the events and not the absolute times they were emitted.
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.
The timestamp was included for debugging purposes in case of test failures, since it could help identify delays or other issues. If you feel this isn’t valuable, I can to remove it for simplicity.
I have fixed the wrapping errors for formatting and I removed the timestamps from the event structs. Thank you for your feedback @arjan-bal, is there anything else you need me to do? |
…. Added a server stats Server Stream RPC test.
stats/stats_test.go
Outdated
@@ -81,6 +83,55 @@ var ( | |||
} | |||
// The id for which the service handler should return error. | |||
errorID int32 = 32202 | |||
|
|||
// Server Stats |
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.
Please fix the documentation everywhere. Remove extra spaces at start and end etc.
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.
Everything should be resolved now. Thank you for your help!
@RyanBlaney is it ready for re-review? I see that you have commits for the last comments. Also, since its been called out, you can revert the style changes for want/expect in existing code but keep want/wantData in the new code that you have written. This is just to make code review focused on new changes. Thanks. |
Yes, it should be ready! Everything new that I added is using want instead of expected. |
stats/stats_test.go
Outdated
|
||
select { | ||
case <-ctx.Done(): | ||
t.Fatalf("Timed out waiting for events to propagate: Diff (-got +want):\n%s", cmp.Diff(eventCount, len(wantUnarySequence))) |
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.
These are just single integers, so using cmp.Diff
is just going to make it hard to read. Please change to:
t.Fatalf("Timed out waiting for events to propagate: Diff (-got +want):\n%s", cmp.Diff(eventCount, len(wantUnarySequence))) | |
t.Fatalf("Timed out waiting for events to propagate. Got %v events; want %v", eventCount, len(wantUnarySequence)) |
stats/stats_test.go
Outdated
|
||
select { | ||
case <-ctx.Done(): | ||
t.Fatalf("Timed out waiting for events to propagate: Diff (-got +want):\n%s", cmp.Diff(eventCount, len(wantClientStreamSequence))) |
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.
As above.
stats/stats_test.go
Outdated
h.mu.Lock() | ||
defer h.mu.Unlock() | ||
h.gotConn = append(h.gotConn, &gotData{ctx, s.IsClient(), s}) | ||
} | ||
|
||
func (h *statshandler) HandleRPC(ctx context.Context, s stats.RPCStats) { | ||
switch s.(type) { | ||
case *stats.Begin: | ||
h.recordEvent("Begin") |
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.
Could you define constants for these strings please?
This PR should be complete, although there are a few more changes I want to make for a second PR. Implement all TODO tests
Possible logic error
// TODO: check values of WireLength and RecvTime.
if st.Length > 0 && st.CompressedLength == 0 {
t.Fatalf("st.WireLength = %v with non-empty data, want <non-zero>",
st.CompressedLength)
} Fix deprecated tests
|
This PR is labeled as requiring an update from the reporter, and no update has been received after 6 days. If no update is provided in the next 7 days, this issue will be automatically closed. |
stats/stats.go
Outdated
// InHeader contains stats about header reception. | ||
// | ||
// - Server-side: The first stats event after the RPC request is received. | ||
// - Client-side: Occurs after the `OutPayload` event (after the request payload is sent). |
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.
This isn't quite true. InHeader comes any time after OutHeader. This is especially true for bidi- or client- streaming RPCs, since OutPayload isn't guaranteed to come right after OutHeader, like it is for unary or server-streaming RPCs.
Maybe exclude the note about client-side here, but you can add a note to OutHeader
for Client-side
that says something like Only occurs after 'Begin', as headers are always the first thing sent on a stream.
stats/stats_test.go
Outdated
@@ -800,13 +803,52 @@ func (h *statshandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) conte | |||
return context.WithValue(ctx, rpcCtxKey{}, info) | |||
} | |||
|
|||
// recordEvent records an event in the statshandler along with a timestamp. | |||
func (h *statshandler) recordEvent(eventType string) { |
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.
Do we need any of this now? I don't think anyone reads this field since the new tests were removed.
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.
Nope! Forgot to remove this. Thanks!
Response to Issue #7824
RELEASE NOTES: