-
Notifications
You must be signed in to change notification settings - Fork 325
Reducing Allocation from GitInfo #10498
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
+23
−9
Merged
Changes from all commits
Commits
Show all changes
50 commits
Select commit
Hold shift + click to select a range
9482232
Updating tests to account for API changes
dougqh 8720c24
Adding tagIterator and valueIterator
dougqh fbec328
Adding checks for EntryIterator
dougqh 2864bac
Removing EntryIterator and EntryChangeIterator
dougqh 43bbea1
spotless
dougqh 5fadff5
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh 3c0997f
Refining handling of primitive types
dougqh b192679
Refining comment in toBoolean
dougqh cffac87
Adding more TagValueConversionTest-s
dougqh 8c51f7f
Adding Entry tests for byte and short boxes
dougqh 17b1255
spotless
dougqh e18b404
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh 5698bff
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh 9d43d47
Direct TagMap.Entry support in AgentSpan / DDSpan
dougqh 26cab22
Adding public create methods to TagMap.Entry
dougqh f6ceef1
spotless
dougqh 501ade2
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 40847ac
Fixed merge
dougqh d96ebfb
Clarifying comments
dougqh 9f64448
Adding tests for TagMap.Entry.create
dougqh b7327b5
spotless
dougqh 6fa193a
Comments
dougqh c97cdee
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 531f63b
Adding test for TagMap.Entry setters
dougqh 2b89bfc
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' of github.com:Dat…
dougqh db10ed5
Adding missing import
dougqh 37d1009
spotless
dougqh 6f2160f
Groovy codeNarc
dougqh 4d0be98
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 70904c5
Reusing TagMap.Entry for GitInfo
dougqh e26c70b
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 53e4441
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 701dc6c
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 4ec6393
Update dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java
dougqh 9891002
Switching to just camelCase for test method names
dougqh fcc7ed0
Better null support
dougqh 6752a4b
Adding null TagMap.Entry tests to SpanTest
dougqh 98aad8a
Clean-up
dougqh 702d59f
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh f603aa0
Fixing silly oversight - name collision in test cases
dougqh e11513e
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' of github.com:Dat…
dougqh a077c82
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh 0795229
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' into dougqh/gitin…
dougqh f566c74
Clarifying null handling
dougqh a978239
Merge branch 'master' into dougqh/gitinfo-entry-reuse
dougqh b262e3e
More final
dougqh 849930d
Merge branch 'master' into dougqh/gitinfo-entry-reuse
dougqh fd9210b
Fixing null handling
dougqh 05347ab
Merge branch 'dougqh/gitinfo-entry-reuse' of github.com:DataDog/dd-tr…
dougqh b5701ef
spotless
dougqh 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,21 +1,34 @@ | ||
| package datadog.trace.api.git; | ||
|
|
||
| import datadog.trace.api.DDTags; | ||
| import datadog.trace.api.TagMap; | ||
| import datadog.trace.bootstrap.instrumentation.api.AgentSpan; | ||
| import java.util.Objects; | ||
|
|
||
| public class GitInfo { | ||
|
|
||
| public final class GitInfo { | ||
| public static final GitInfo NOOP = new GitInfo(null, null, null, CommitInfo.NOOP); | ||
|
|
||
| private final String repositoryURL; | ||
| private final String branch; | ||
| private final String tag; | ||
| private final CommitInfo commit; | ||
|
|
||
| private final TagMap.Entry repositoryEntry; | ||
| private final TagMap.Entry commitEntry; | ||
|
|
||
| public GitInfo(String repositoryURL, String branch, String tag, CommitInfo commit) { | ||
| this.repositoryURL = repositoryURL; | ||
| this.branch = branch; | ||
| this.tag = tag; | ||
| this.commit = commit; | ||
|
|
||
| // GitInfo is reused across many traces, so create entries once and reuse them (see addTags) | ||
| // null & empty values result in null entries which nop when added to a span | ||
| this.repositoryEntry = TagMap.Entry.create(DDTags.INTERNAL_GIT_REPOSITORY_URL, repositoryURL); | ||
| this.commitEntry = | ||
| commit == null | ||
| ? null | ||
| : TagMap.Entry.create(DDTags.INTERNAL_GIT_COMMIT_SHA, commit.getSha()); | ||
| } | ||
|
|
||
| public String getRepositoryURL() { | ||
|
|
@@ -34,6 +47,11 @@ public CommitInfo getCommit() { | |
| return commit; | ||
| } | ||
|
|
||
| public void addTags(AgentSpan span) { | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think eventually I'd like introduce an interface for objects that add tags to span or TagMap. |
||
| span.setTag(this.repositoryEntry); | ||
| span.setTag(this.commitEntry); | ||
| } | ||
|
|
||
| public boolean isEmpty() { | ||
| return (repositoryURL == null || repositoryURL.isEmpty()) | ||
| && (branch == null || branch.isEmpty()) | ||
|
|
||
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
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.
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.
Despite the rest of this class being coded defensively for null - as far as I could tell from GitMetadataTraceInterceptor, repositoryURL and commit.getSha() are never null.
That said, I'm happy to add defensive here and in addTags if so desired.
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.
In Test Optimization we've seen some edge cases in which
commit.getSha()could be null (seems much more unlikely for repositoryURL). We usually have to point them to set the git info through environment variables in those cases. Will theTagMap.Entry.createcall have issues with a null object?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.
Good to know.
No, TagMap.Entry.create doesn't support having a null value.
In AgentSpan / DDSpan setting a null tag is translated into a removal.
TagMap does have EntryRemoval for that purpose, but EntryRemoval-s are never stored in TagMap directly just in TagMap.Ledger-s.
I think the solution is just to guard against the null-s. I just wanted to clarify whether or not null-s were expected in the Git related code.
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.
In another PR, I've tweaked TagMap.Entry.create to allow null & empty String to return a null TagMap.Entry.
And now, AgentSpan / DDSpan ignore being called with a null TagMap.Entry.
So that now allows null to be handled simply in the calling code, I'll update this PR once the other one is merged.
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.
Done. Thanks for the review. You were right that commit sha can be null.