-
Notifications
You must be signed in to change notification settings - Fork 1.1k
fix(datastore): reduce flakiness of E2E tracing tests #13645
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
4 commits
Select commit
Hold shift + click to select a range
1e5a18c
fix(datastore): reduce flakiness of E2E tracing tests
lqiu96 9493964
fix(datastore): use openTelemetrySdk.close() in teardown
lqiu96 91b9e21
fix(datastore): make tracer and SDK fields non-static in E2E tests
lqiu96 6d01781
fix(datastore): address PR comments on E2E tracing tests
lqiu96 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -227,14 +227,12 @@ private boolean dfsContainsCallStack(long spanId, List<String> expectedCallStack | |
|
|
||
| private static final int NUM_SPAN_ID_BYTES = 16; | ||
|
|
||
| private static final int GET_TRACE_RETRY_COUNT = 60; | ||
| private static final int GET_TRACE_RETRY_COUNT = 120; | ||
|
|
||
| private static final int GET_TRACE_RETRY_BACKOFF_MILLIS = 1000; | ||
|
|
||
| private static final int TRACE_FORCE_FLUSH_MILLIS = 5000; | ||
|
|
||
| private static final int TRACE_PROVIDER_SHUTDOWN_MILLIS = 1000; | ||
|
|
||
| private static Key KEY1; | ||
|
|
||
| private static Key KEY2; | ||
|
|
@@ -246,22 +244,24 @@ private boolean dfsContainsCallStack(long spanId, List<String> expectedCallStack | |
| // Random int generator for trace ID and span ID | ||
| private static Random random; | ||
|
|
||
| private static TraceExporter traceExporter; | ||
| private static Credentials credentials; | ||
|
|
||
| private TraceExporter traceExporter; | ||
|
|
||
| // Required for reading back traces from Cloud Trace for validation | ||
| private static TraceServiceClient traceClient; | ||
|
|
||
| // Custom SpanContext for each test, required for TraceID injection | ||
| private static SpanContext customSpanContext; | ||
| private SpanContext customSpanContext; | ||
|
|
||
| // Trace read back from Cloud Trace using traceClient for verification | ||
| private static Trace retrievedTrace; | ||
| private Trace retrievedTrace; | ||
|
|
||
| private static String rootSpanName; | ||
| private static Tracer tracer; | ||
| private String rootSpanName; | ||
| private Tracer tracer; | ||
|
|
||
| // Required to set custom-root span | ||
| private static OpenTelemetrySdk openTelemetrySdk; | ||
| private OpenTelemetrySdk openTelemetrySdk; | ||
|
|
||
| private static String projectId; | ||
|
|
||
|
|
@@ -287,14 +287,7 @@ public static void setup() throws IOException { | |
| // Share the same credentials used by Datastore client with the TraceExporter and | ||
| // TraceServiceClient to ensure consistency and avoid auth issues in environments | ||
| // where default ADC resolution might fail for the exporter. | ||
| Credentials credentials = DatastoreOptions.getDefaultInstance().getCredentials(); | ||
|
|
||
| TraceConfiguration.Builder traceConfigurationBuilder = | ||
| TraceConfiguration.builder().setProjectId(projectId); | ||
| if (credentials != null) { | ||
| traceConfigurationBuilder.setCredentials(credentials); | ||
| } | ||
| traceExporter = TraceExporter.createWithConfiguration(traceConfigurationBuilder.build()); | ||
| credentials = DatastoreOptions.getDefaultInstance().getCredentials(); | ||
|
|
||
| TraceServiceSettings.Builder clientBuilder = TraceServiceSettings.newBuilder(); | ||
| if (credentials != null) { | ||
|
|
@@ -310,6 +303,13 @@ public void before() throws Exception { | |
| Resource resource = | ||
| Resource.getDefault().merge(Resource.builder().put(SERVICE_NAME, "Sparky").build()); | ||
|
|
||
| TraceConfiguration.Builder traceConfigurationBuilder = | ||
| TraceConfiguration.builder().setProjectId(projectId); | ||
| if (credentials != null) { | ||
| traceConfigurationBuilder.setCredentials(credentials); | ||
| } | ||
| traceExporter = TraceExporter.createWithConfiguration(traceConfigurationBuilder.build()); | ||
|
|
||
| if (isUsingGlobalOpenTelemetrySDK()) { | ||
| openTelemetrySdk = | ||
| OpenTelemetrySdk.builder() | ||
|
|
@@ -393,7 +393,22 @@ public void after() throws Exception { | |
| tracer = null; | ||
| retrievedTrace = null; | ||
| customSpanContext = null; | ||
| try { | ||
| if (openTelemetrySdk != null) { | ||
| openTelemetrySdk.close(); | ||
| } | ||
| } finally { | ||
| if (traceExporter != null) { | ||
| try { | ||
| // Attempt to shut down traceExporter. | ||
| traceExporter.shutdown(); | ||
| } catch (Exception e) { | ||
| logger.log(Level.WARNING, "Failed to shut down traceExporter", e); | ||
| } | ||
| } | ||
| } | ||
| openTelemetrySdk = null; | ||
| traceExporter = null; | ||
| } | ||
|
|
||
| @AfterClass | ||
|
|
@@ -437,10 +452,17 @@ protected Span getNewRootSpanWithContext() { | |
| } | ||
|
|
||
| protected void waitForTracesToComplete() throws Exception { | ||
| if (openTelemetrySdk == null) { | ||
| logger.warning("OpenTelemetrySdk is null, cannot flush traces"); | ||
| return; | ||
| } | ||
| logger.info("Flushing traces..."); | ||
| CompletableResultCode completableResultCode = | ||
| openTelemetrySdk.getSdkTracerProvider().forceFlush(); | ||
| completableResultCode.join(TRACE_FORCE_FLUSH_MILLIS, TimeUnit.MILLISECONDS); | ||
| if (!completableResultCode.isSuccess()) { | ||
| logger.warning("Force flush did not complete successfully"); | ||
| } | ||
|
Comment on lines
460
to
+465
Contributor
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. If if (openTelemetrySdk != null) {
CompletableResultCode completableResultCode =
openTelemetrySdk.getSdkTracerProvider().forceFlush();
completableResultCode.join(TRACE_FORCE_FLUSH_MILLIS, TimeUnit.MILLISECONDS);
if (!completableResultCode.isSuccess()) {
logger.warning("Force flush did not complete successfully");
}
} else if (traceExporter != null) {
CompletableResultCode completableResultCode = traceExporter.flush();
completableResultCode.join(TRACE_FORCE_FLUSH_MILLIS, TimeUnit.MILLISECONDS);
if (!completableResultCode.isSuccess()) {
logger.warning("Trace exporter flush did not complete successfully");
}
}References
|
||
| } | ||
|
|
||
| // Validates `retrievedTrace`. Cloud Trace indexes traces w/ eventual consistency, even when | ||
|
|
||
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.
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 see that we do
Thread.sleepafter each unsuccessful check, consider migrate the test to useAwaitility?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.
Raised a PR #13668