diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index a79f0627..a454a61e 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:2567a120ce90fadb6201999b87d649d9f67459de28815ad239bce9ebfaa18a74 -# created: 2022-05-19T15:12:45.278246753Z + digest: sha256:6d4e3a15c62cfdcb823d60e16da7521e7c6fc00eba07c8ff12e4de9924a57d28 +# created: 2022-06-29T23:17:33.110417661Z diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index aa339494..957fea57 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -11,7 +11,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' @@ -26,7 +25,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (7) - units (8) - units (11) @@ -42,7 +40,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (7) - units (8) - units (11) @@ -58,7 +55,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' @@ -73,7 +69,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' diff --git a/.kokoro/common.sh b/.kokoro/common.sh index ace89f45..f8f957af 100644 --- a/.kokoro/common.sh +++ b/.kokoro/common.sh @@ -55,4 +55,6 @@ function retry_with_backoff { ## Helper functionss function now() { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n'; } function msg() { println "$*" >&2; } -function println() { printf '%s\n' "$(now) $*"; } \ No newline at end of file +function println() { printf '%s\n' "$(now) $*"; } + +## Helper comment to trigger updated repo dependency release \ No newline at end of file diff --git a/.kokoro/release/stage.sh b/.kokoro/release/stage.sh index 77dc4e8f..1dba8de1 100755 --- a/.kokoro/release/stage.sh +++ b/.kokoro/release/stage.sh @@ -32,6 +32,7 @@ retry_with_backoff 3 10 \ mvn clean deploy -B \ --settings ${MAVEN_SETTINGS_FILE} \ -DskipTests=true \ + -Dclirr.skip=true \ -DperformRelease=true \ -Dgpg.executable=gpg \ -Dgpg.passphrase=${GPG_PASSPHRASE} \ @@ -42,4 +43,4 @@ then mvn nexus-staging:release -B \ -DperformRelease=true \ --settings=settings.xml -fi \ No newline at end of file +fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 9558ad50..3a8f51fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [2.3.0](https://github.com/googleapis/java-trace/compare/v2.2.0...v2.3.0) (2022-07-01) + + +### Features + +* Enable REST transport for most of Java and Go clients ([#812](https://github.com/googleapis/java-trace/issues/812)) ([30d0122](https://github.com/googleapis/java-trace/commit/30d012223ef1f96cec9b3cb5446146468cde6b67)) + + +### Documentation + +* **sample:** clean up README for native image sample ([#808](https://github.com/googleapis/java-trace/issues/808)) ([b60afab](https://github.com/googleapis/java-trace/commit/b60afab929b7f5275ebdfef76a383163e98a18ba)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#811](https://github.com/googleapis/java-trace/issues/811)) ([db46126](https://github.com/googleapis/java-trace/commit/db46126eee29ba731a89e692788fa7ae5f7544a8)) +* update dependency org.graalvm.buildtools:junit-platform-native to v0.9.12 ([#809](https://github.com/googleapis/java-trace/issues/809)) ([f35f82d](https://github.com/googleapis/java-trace/commit/f35f82d50961f139c8903296d4e8fca351da10b2)) +* update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.12 ([#810](https://github.com/googleapis/java-trace/issues/810)) ([6b2d9d7](https://github.com/googleapis/java-trace/commit/6b2d9d7e800870747e72d48e3c9de25fbebb912e)) + ## [2.2.0](https://github.com/googleapis/java-trace/compare/v2.1.11...v2.2.0) (2022-05-19) diff --git a/README.md b/README.md index 5a2cba74..9e266562 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import @@ -41,7 +41,7 @@ If you are using Maven without BOM, add this to your dependencies: com.google.cloud google-cloud-trace - 2.1.11 + 2.2.0 ``` @@ -49,20 +49,20 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies ```Groovy -implementation platform('com.google.cloud:libraries-bom:25.3.0') +implementation platform('com.google.cloud:libraries-bom:25.4.0') implementation 'com.google.cloud:google-cloud-trace' ``` If you are using Gradle without BOM, add this to your dependencies ```Groovy -implementation 'com.google.cloud:google-cloud-trace:2.1.11' +implementation 'com.google.cloud:google-cloud-trace:2.2.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-trace" % "2.1.11" +libraryDependencies += "com.google.cloud" % "google-cloud-trace" % "2.2.0" ``` ## Authentication diff --git a/google-cloud-trace-bom/pom.xml b/google-cloud-trace-bom/pom.xml index 01d5a34d..6f74d778 100644 --- a/google-cloud-trace-bom/pom.xml +++ b/google-cloud-trace-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-trace-bom - 2.2.0 + 2.3.0 pom com.google.cloud google-cloud-shared-config - 1.4.0 + 1.5.0 Google Cloud Trace BOM @@ -52,27 +52,27 @@ com.google.cloud google-cloud-trace - 2.2.0 + 2.3.0 com.google.api.grpc grpc-google-cloud-trace-v1 - 2.2.0 + 2.3.0 com.google.api.grpc grpc-google-cloud-trace-v2 - 2.2.0 + 2.3.0 com.google.api.grpc proto-google-cloud-trace-v1 - 2.2.0 + 2.3.0 com.google.api.grpc proto-google-cloud-trace-v2 - 2.2.0 + 2.3.0 diff --git a/google-cloud-trace/pom.xml b/google-cloud-trace/pom.xml index 2fb99155..10da5130 100644 --- a/google-cloud-trace/pom.xml +++ b/google-cloud-trace/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-trace - 2.2.0 + 2.3.0 jar Google Cloud Trace https://github.com/googleapis/java-trace @@ -13,7 +13,7 @@ com.google.cloud google-cloud-trace-parent - 2.2.0 + 2.3.0 google-cloud-trace @@ -63,6 +63,10 @@ com.google.api gax-grpc + + com.google.api + gax-httpjson + org.threeten threetenbp @@ -90,12 +94,24 @@ test + + com.google.api + gax + testlib + test + com.google.api gax-grpc testlib test + + com.google.api + gax-httpjson + testlib + test + diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceClient.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceClient.java index 2cb50080..1494d49d 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceClient.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceClient.java @@ -18,7 +18,6 @@ import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; -import com.google.api.core.BetaApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.paging.AbstractFixedSizeCollection; import com.google.api.gax.paging.AbstractPage; @@ -108,6 +107,20 @@ * TraceServiceClient traceServiceClient = TraceServiceClient.create(traceServiceSettings); * } * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@code
+ * // This snippet has been automatically generated for illustrative purposes only.
+ * // It may require modifications to work in your environment.
+ * TraceServiceSettings traceServiceSettings =
+ *     TraceServiceSettings.newBuilder()
+ *         .setTransportChannelProvider(
+ *             TraceServiceSettings.defaultHttpJsonTransportProviderBuilder().build())
+ *         .build();
+ * TraceServiceClient traceServiceClient = TraceServiceClient.create(traceServiceSettings);
+ * }
+ * *

Please refer to the GitHub repository's samples for more quickstart code snippets. */ @Generated("by gapic-generator-java") @@ -132,7 +145,6 @@ public static final TraceServiceClient create(TraceServiceSettings settings) thr * Constructs an instance of TraceServiceClient, using the given stub for making calls. This is * for advanced usage - prefer using create(TraceServiceSettings). */ - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public static final TraceServiceClient create(TraceServiceStub stub) { return new TraceServiceClient(stub); } @@ -147,7 +159,6 @@ protected TraceServiceClient(TraceServiceSettings settings) throws IOException { this.stub = ((TraceServiceStubSettings) settings.getStubSettings()).createStub(); } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") protected TraceServiceClient(TraceServiceStub stub) { this.settings = null; this.stub = stub; @@ -157,7 +168,6 @@ public final TraceServiceSettings getSettings() { return settings; } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public TraceServiceStub getStub() { return stub; } @@ -274,7 +284,7 @@ public final UnaryCallable listTrace * .build(); * while (true) { * ListTracesResponse response = traceServiceClient.listTracesCallable().call(request); - * for (Trace element : response.getResponsesList()) { + * for (Trace element : response.getTracesList()) { * // doThingsWith(element); * } * String nextPageToken = response.getNextPageToken(); diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceSettings.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceSettings.java index 4926725e..1d262efa 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceSettings.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/TraceServiceSettings.java @@ -23,6 +23,7 @@ import com.google.api.gax.core.GoogleCredentialsProvider; import com.google.api.gax.core.InstantiatingExecutorProvider; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.ClientSettings; @@ -117,11 +118,18 @@ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilde return TraceServiceStubSettings.defaultCredentialsProviderBuilder(); } - /** Returns a builder for the default ChannelProvider for this service. */ + /** Returns a builder for the default gRPC ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { return TraceServiceStubSettings.defaultGrpcTransportProviderBuilder(); } + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return TraceServiceStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + public static TransportChannelProvider defaultTransportChannelProvider() { return TraceServiceStubSettings.defaultTransportChannelProvider(); } @@ -131,11 +139,17 @@ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuil return TraceServiceStubSettings.defaultApiClientHeaderProviderBuilder(); } - /** Returns a new builder for this class. */ + /** Returns a new gRPC builder for this class. */ public static Builder newBuilder() { return Builder.createDefault(); } + /** Returns a new REST builder for this class. */ + @BetaApi + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + /** Returns a new builder for this class. */ public static Builder newBuilder(ClientContext clientContext) { return new Builder(clientContext); @@ -173,6 +187,11 @@ private static Builder createDefault() { return new Builder(TraceServiceStubSettings.newBuilder()); } + @BetaApi + private static Builder createHttpJsonDefault() { + return new Builder(TraceServiceStubSettings.newHttpJsonBuilder()); + } + public TraceServiceStubSettings.Builder getStubSettingsBuilder() { return ((TraceServiceStubSettings.Builder) getStubSettings()); } diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceCallableFactory.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceCallableFactory.java new file mode 100644 index 00000000..daedf20e --- /dev/null +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceCallableFactory.java @@ -0,0 +1,105 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v1.stub; + +import com.google.api.core.BetaApi; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the TraceService service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +@BetaApi +public class HttpJsonTraceServiceCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @BetaApi( + "The surface for long-running operations is not stable yet and may change in the future.") + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceStub.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceStub.java new file mode 100644 index 00000000..7ebf0b19 --- /dev/null +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/HttpJsonTraceServiceStub.java @@ -0,0 +1,309 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v1.stub; + +import static com.google.cloud.trace.v1.TraceServiceClient.ListTracesPagedResponse; + +import com.google.api.core.BetaApi; +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.devtools.cloudtrace.v1.GetTraceRequest; +import com.google.devtools.cloudtrace.v1.ListTracesRequest; +import com.google.devtools.cloudtrace.v1.ListTracesResponse; +import com.google.devtools.cloudtrace.v1.PatchTracesRequest; +import com.google.devtools.cloudtrace.v1.Trace; +import com.google.protobuf.Empty; +import com.google.protobuf.TypeRegistry; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the TraceService service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +@BetaApi +public class HttpJsonTraceServiceStub extends TraceServiceStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor + listTracesMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.devtools.cloudtrace.v1.TraceService/ListTraces") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}/traces", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "endTime", request.getEndTime()); + serializer.putQueryParam(fields, "filter", request.getFilter()); + serializer.putQueryParam(fields, "orderBy", request.getOrderBy()); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "startTime", request.getStartTime()); + serializer.putQueryParam(fields, "view", request.getView()); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListTracesResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor getTraceMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.devtools.cloudtrace.v1.TraceService/GetTrace") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}/traces/{traceId}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + serializer.putPathParam(fields, "traceId", request.getTraceId()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Trace.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor patchTracesMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.devtools.cloudtrace.v1.TraceService/PatchTraces") + .setHttpMethod("PATCH") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}/traces", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + return fields; + }) + .setRequestBodyExtractor( + request -> ProtoRestSerializer.create().toBody("traces", request.getTraces())) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable listTracesCallable; + private final UnaryCallable listTracesPagedCallable; + private final UnaryCallable getTraceCallable; + private final UnaryCallable patchTracesCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonTraceServiceStub create(TraceServiceStubSettings settings) + throws IOException { + return new HttpJsonTraceServiceStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonTraceServiceStub create(ClientContext clientContext) + throws IOException { + return new HttpJsonTraceServiceStub( + TraceServiceStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonTraceServiceStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonTraceServiceStub( + TraceServiceStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonTraceServiceStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonTraceServiceStub(TraceServiceStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonTraceServiceCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonTraceServiceStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonTraceServiceStub( + TraceServiceStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings listTracesTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listTracesMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + HttpJsonCallSettings getTraceTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getTraceMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + HttpJsonCallSettings patchTracesTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(patchTracesMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + + this.listTracesCallable = + callableFactory.createUnaryCallable( + listTracesTransportSettings, settings.listTracesSettings(), clientContext); + this.listTracesPagedCallable = + callableFactory.createPagedCallable( + listTracesTransportSettings, settings.listTracesSettings(), clientContext); + this.getTraceCallable = + callableFactory.createUnaryCallable( + getTraceTransportSettings, settings.getTraceSettings(), clientContext); + this.patchTracesCallable = + callableFactory.createUnaryCallable( + patchTracesTransportSettings, settings.patchTracesSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(listTracesMethodDescriptor); + methodDescriptors.add(getTraceMethodDescriptor); + methodDescriptors.add(patchTracesMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable listTracesCallable() { + return listTracesCallable; + } + + @Override + public UnaryCallable listTracesPagedCallable() { + return listTracesPagedCallable; + } + + @Override + public UnaryCallable getTraceCallable() { + return getTraceCallable; + } + + @Override + public UnaryCallable patchTracesCallable() { + return patchTracesCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/TraceServiceStubSettings.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/TraceServiceStubSettings.java index dfce5fe0..086c1fb6 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/TraceServiceStubSettings.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v1/stub/TraceServiceStubSettings.java @@ -27,6 +27,9 @@ import com.google.api.gax.grpc.GaxGrpcProperties; import com.google.api.gax.grpc.GrpcTransportChannel; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; @@ -173,13 +176,17 @@ public UnaryCallSettings patchTracesSettings() { return patchTracesSettings; } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public TraceServiceStub createStub() throws IOException { if (getTransportChannelProvider() .getTransportName() .equals(GrpcTransportChannel.getGrpcTransportName())) { return GrpcTraceServiceStub.create(this); } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonTraceServiceStub.create(this); + } throw new UnsupportedOperationException( String.format( "Transport not supported: %s", getTransportChannelProvider().getTransportName())); @@ -212,18 +219,25 @@ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilde .setUseJwtAccessWithScope(true); } - /** Returns a builder for the default ChannelProvider for this service. */ + /** Returns a builder for the default gRPC ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { return InstantiatingGrpcChannelProvider.newBuilder() .setMaxInboundMessageSize(Integer.MAX_VALUE); } + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + public static TransportChannelProvider defaultTransportChannelProvider() { return defaultGrpcTransportProviderBuilder().build(); } @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") - public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { return ApiClientHeaderProvider.newBuilder() .setGeneratedLibToken( "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) @@ -231,11 +245,30 @@ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuil GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); } - /** Returns a new builder for this class. */ + @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return TraceServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ public static Builder newBuilder() { return Builder.createDefault(); } + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + /** Returns a new builder for this class. */ public static Builder newBuilder(ClientContext clientContext) { return new Builder(clientContext); @@ -337,6 +370,19 @@ private static Builder createDefault() { return initDefaults(builder); } + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setEndpoint(getDefaultEndpoint()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + private static Builder initDefaults(Builder builder) { builder .listTracesSettings() diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceClient.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceClient.java index b07bb46a..8b3a6dc6 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceClient.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceClient.java @@ -16,7 +16,6 @@ package com.google.cloud.trace.v2; -import com.google.api.core.BetaApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.trace.v2.stub.TraceServiceStub; @@ -98,6 +97,20 @@ * TraceServiceClient traceServiceClient = TraceServiceClient.create(traceServiceSettings); * } * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@code
+ * // This snippet has been automatically generated for illustrative purposes only.
+ * // It may require modifications to work in your environment.
+ * TraceServiceSettings traceServiceSettings =
+ *     TraceServiceSettings.newBuilder()
+ *         .setTransportChannelProvider(
+ *             TraceServiceSettings.defaultHttpJsonTransportProviderBuilder().build())
+ *         .build();
+ * TraceServiceClient traceServiceClient = TraceServiceClient.create(traceServiceSettings);
+ * }
+ * *

Please refer to the GitHub repository's samples for more quickstart code snippets. */ @Generated("by gapic-generator-java") @@ -122,7 +135,6 @@ public static final TraceServiceClient create(TraceServiceSettings settings) thr * Constructs an instance of TraceServiceClient, using the given stub for making calls. This is * for advanced usage - prefer using create(TraceServiceSettings). */ - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public static final TraceServiceClient create(TraceServiceStub stub) { return new TraceServiceClient(stub); } @@ -137,7 +149,6 @@ protected TraceServiceClient(TraceServiceSettings settings) throws IOException { this.stub = ((TraceServiceStubSettings) settings.getStubSettings()).createStub(); } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") protected TraceServiceClient(TraceServiceStub stub) { this.settings = null; this.stub = stub; @@ -147,7 +158,6 @@ public final TraceServiceSettings getSettings() { return settings; } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public TraceServiceStub getStub() { return stub; } diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceSettings.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceSettings.java index cc8e9bcf..91c76c6b 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceSettings.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/TraceServiceSettings.java @@ -21,6 +21,7 @@ import com.google.api.gax.core.GoogleCredentialsProvider; import com.google.api.gax.core.InstantiatingExecutorProvider; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.ClientSettings; @@ -105,11 +106,18 @@ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilde return TraceServiceStubSettings.defaultCredentialsProviderBuilder(); } - /** Returns a builder for the default ChannelProvider for this service. */ + /** Returns a builder for the default gRPC ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { return TraceServiceStubSettings.defaultGrpcTransportProviderBuilder(); } + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return TraceServiceStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + public static TransportChannelProvider defaultTransportChannelProvider() { return TraceServiceStubSettings.defaultTransportChannelProvider(); } @@ -119,11 +127,17 @@ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuil return TraceServiceStubSettings.defaultApiClientHeaderProviderBuilder(); } - /** Returns a new builder for this class. */ + /** Returns a new gRPC builder for this class. */ public static Builder newBuilder() { return Builder.createDefault(); } + /** Returns a new REST builder for this class. */ + @BetaApi + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + /** Returns a new builder for this class. */ public static Builder newBuilder(ClientContext clientContext) { return new Builder(clientContext); @@ -161,6 +175,11 @@ private static Builder createDefault() { return new Builder(TraceServiceStubSettings.newBuilder()); } + @BetaApi + private static Builder createHttpJsonDefault() { + return new Builder(TraceServiceStubSettings.newHttpJsonBuilder()); + } + public TraceServiceStubSettings.Builder getStubSettingsBuilder() { return ((TraceServiceStubSettings.Builder) getStubSettings()); } diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceCallableFactory.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceCallableFactory.java new file mode 100644 index 00000000..60e603e9 --- /dev/null +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceCallableFactory.java @@ -0,0 +1,105 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v2.stub; + +import com.google.api.core.BetaApi; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the TraceService service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +@BetaApi +public class HttpJsonTraceServiceCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @BetaApi( + "The surface for long-running operations is not stable yet and may change in the future.") + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceStub.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceStub.java new file mode 100644 index 00000000..cfa71f71 --- /dev/null +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/HttpJsonTraceServiceStub.java @@ -0,0 +1,243 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v2.stub; + +import com.google.api.core.BetaApi; +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.devtools.cloudtrace.v2.BatchWriteSpansRequest; +import com.google.devtools.cloudtrace.v2.Span; +import com.google.protobuf.Empty; +import com.google.protobuf.TypeRegistry; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the TraceService service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +@BetaApi +public class HttpJsonTraceServiceStub extends TraceServiceStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor + batchWriteSpansMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.devtools.cloudtrace.v2.TraceService/BatchWriteSpans") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v2/{name=projects/*}/traces:batchWrite", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build())) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor createSpanMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.devtools.cloudtrace.v2.TraceService/CreateSpan") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v2/{name=projects/*/traces/*/spans/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build())) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Span.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable batchWriteSpansCallable; + private final UnaryCallable createSpanCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonTraceServiceStub create(TraceServiceStubSettings settings) + throws IOException { + return new HttpJsonTraceServiceStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonTraceServiceStub create(ClientContext clientContext) + throws IOException { + return new HttpJsonTraceServiceStub( + TraceServiceStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonTraceServiceStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonTraceServiceStub( + TraceServiceStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonTraceServiceStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonTraceServiceStub(TraceServiceStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonTraceServiceCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonTraceServiceStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonTraceServiceStub( + TraceServiceStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings batchWriteSpansTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(batchWriteSpansMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + HttpJsonCallSettings createSpanTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createSpanMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + + this.batchWriteSpansCallable = + callableFactory.createUnaryCallable( + batchWriteSpansTransportSettings, settings.batchWriteSpansSettings(), clientContext); + this.createSpanCallable = + callableFactory.createUnaryCallable( + createSpanTransportSettings, settings.createSpanSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(batchWriteSpansMethodDescriptor); + methodDescriptors.add(createSpanMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable batchWriteSpansCallable() { + return batchWriteSpansCallable; + } + + @Override + public UnaryCallable createSpanCallable() { + return createSpanCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/TraceServiceStubSettings.java b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/TraceServiceStubSettings.java index 3dbcc705..1315723f 100644 --- a/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/TraceServiceStubSettings.java +++ b/google-cloud-trace/src/main/java/com/google/cloud/trace/v2/stub/TraceServiceStubSettings.java @@ -24,6 +24,9 @@ import com.google.api.gax.grpc.GaxGrpcProperties; import com.google.api.gax.grpc.GrpcTransportChannel; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; @@ -99,13 +102,17 @@ public UnaryCallSettings createSpanSettings() { return createSpanSettings; } - @BetaApi("A restructuring of stub classes is planned, so this may break in the future") public TraceServiceStub createStub() throws IOException { if (getTransportChannelProvider() .getTransportName() .equals(GrpcTransportChannel.getGrpcTransportName())) { return GrpcTraceServiceStub.create(this); } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonTraceServiceStub.create(this); + } throw new UnsupportedOperationException( String.format( "Transport not supported: %s", getTransportChannelProvider().getTransportName())); @@ -138,18 +145,25 @@ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilde .setUseJwtAccessWithScope(true); } - /** Returns a builder for the default ChannelProvider for this service. */ + /** Returns a builder for the default gRPC ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { return InstantiatingGrpcChannelProvider.newBuilder() .setMaxInboundMessageSize(Integer.MAX_VALUE); } + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + public static TransportChannelProvider defaultTransportChannelProvider() { return defaultGrpcTransportProviderBuilder().build(); } @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") - public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { return ApiClientHeaderProvider.newBuilder() .setGeneratedLibToken( "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) @@ -157,11 +171,30 @@ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuil GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); } - /** Returns a new builder for this class. */ + @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return TraceServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ public static Builder newBuilder() { return Builder.createDefault(); } + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + /** Returns a new builder for this class. */ public static Builder newBuilder(ClientContext clientContext) { return new Builder(clientContext); @@ -267,6 +300,19 @@ private static Builder createDefault() { return initDefaults(builder); } + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setEndpoint(getDefaultEndpoint()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + private static Builder initDefaults(Builder builder) { builder .batchWriteSpansSettings() diff --git a/google-cloud-trace/src/test/java/com/google/cloud/trace/v1/TraceServiceClientHttpJsonTest.java b/google-cloud-trace/src/test/java/com/google/cloud/trace/v1/TraceServiceClientHttpJsonTest.java new file mode 100644 index 00000000..d0223008 --- /dev/null +++ b/google-cloud-trace/src/test/java/com/google/cloud/trace/v1/TraceServiceClientHttpJsonTest.java @@ -0,0 +1,223 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v1; + +import static com.google.cloud.trace.v1.TraceServiceClient.ListTracesPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.cloud.trace.v1.stub.HttpJsonTraceServiceStub; +import com.google.common.collect.Lists; +import com.google.devtools.cloudtrace.v1.ListTracesResponse; +import com.google.devtools.cloudtrace.v1.Trace; +import com.google.devtools.cloudtrace.v1.TraceSpan; +import com.google.devtools.cloudtrace.v1.Traces; +import com.google.protobuf.Empty; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class TraceServiceClientHttpJsonTest { + private static MockHttpService mockService; + private static TraceServiceClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonTraceServiceStub.getMethodDescriptors(), + TraceServiceSettings.getDefaultEndpoint()); + TraceServiceSettings settings = + TraceServiceSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + TraceServiceSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = TraceServiceClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void listTracesTest() throws Exception { + Trace responsesElement = Trace.newBuilder().build(); + ListTracesResponse expectedResponse = + ListTracesResponse.newBuilder() + .setNextPageToken("") + .addAllTraces(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + + ListTracesPagedResponse pagedListResponse = client.listTraces(projectId); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getTracesList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTracesExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + client.listTraces(projectId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getTraceTest() throws Exception { + Trace expectedResponse = + Trace.newBuilder() + .setProjectId("projectId-894832108") + .setTraceId("traceId-1067401920") + .addAllSpans(new ArrayList()) + .build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + String traceId = "traceId-8890"; + + Trace actualResponse = client.getTrace(projectId, traceId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getTraceExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + String traceId = "traceId-8890"; + client.getTrace(projectId, traceId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void patchTracesTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + Traces traces = Traces.newBuilder().build(); + + client.patchTraces(projectId, traces); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void patchTracesExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + Traces traces = Traces.newBuilder().build(); + client.patchTraces(projectId, traces); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/google-cloud-trace/src/test/java/com/google/cloud/trace/v2/TraceServiceClientHttpJsonTest.java b/google-cloud-trace/src/test/java/com/google/cloud/trace/v2/TraceServiceClientHttpJsonTest.java new file mode 100644 index 00000000..22d611cc --- /dev/null +++ b/google-cloud-trace/src/test/java/com/google/cloud/trace/v2/TraceServiceClientHttpJsonTest.java @@ -0,0 +1,254 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.trace.v2; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.cloud.trace.v2.stub.HttpJsonTraceServiceStub; +import com.google.devtools.cloudtrace.v2.ProjectName; +import com.google.devtools.cloudtrace.v2.Span; +import com.google.devtools.cloudtrace.v2.SpanName; +import com.google.devtools.cloudtrace.v2.StackTrace; +import com.google.devtools.cloudtrace.v2.TruncatableString; +import com.google.protobuf.BoolValue; +import com.google.protobuf.Empty; +import com.google.protobuf.Int32Value; +import com.google.protobuf.Timestamp; +import com.google.rpc.Status; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class TraceServiceClientHttpJsonTest { + private static MockHttpService mockService; + private static TraceServiceClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonTraceServiceStub.getMethodDescriptors(), + TraceServiceSettings.getDefaultEndpoint()); + TraceServiceSettings settings = + TraceServiceSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + TraceServiceSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = TraceServiceClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void batchWriteSpansTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + ProjectName name = ProjectName.of("[PROJECT]"); + List spans = new ArrayList<>(); + + client.batchWriteSpans(name, spans); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void batchWriteSpansExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName name = ProjectName.of("[PROJECT]"); + List spans = new ArrayList<>(); + client.batchWriteSpans(name, spans); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void batchWriteSpansTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-3664"; + List spans = new ArrayList<>(); + + client.batchWriteSpans(name, spans); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void batchWriteSpansExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-3664"; + List spans = new ArrayList<>(); + client.batchWriteSpans(name, spans); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSpanTest() throws Exception { + Span expectedResponse = + Span.newBuilder() + .setName(SpanName.of("[PROJECT]", "[TRACE]", "[SPAN]").toString()) + .setSpanId("spanId-896182779") + .setParentSpanId("parentSpanId1059234639") + .setDisplayName(TruncatableString.newBuilder().build()) + .setStartTime(Timestamp.newBuilder().build()) + .setEndTime(Timestamp.newBuilder().build()) + .setAttributes(Span.Attributes.newBuilder().build()) + .setStackTrace(StackTrace.newBuilder().build()) + .setTimeEvents(Span.TimeEvents.newBuilder().build()) + .setLinks(Span.Links.newBuilder().build()) + .setStatus(Status.newBuilder().build()) + .setSameProcessAsParentSpan(BoolValue.newBuilder().build()) + .setChildSpanCount(Int32Value.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + Span request = + Span.newBuilder() + .setName(SpanName.of("[PROJECT]", "[TRACE]", "[SPAN]").toString()) + .setSpanId("spanId-896182779") + .setParentSpanId("parentSpanId1059234639") + .setDisplayName(TruncatableString.newBuilder().build()) + .setStartTime(Timestamp.newBuilder().build()) + .setEndTime(Timestamp.newBuilder().build()) + .setAttributes(Span.Attributes.newBuilder().build()) + .setStackTrace(StackTrace.newBuilder().build()) + .setTimeEvents(Span.TimeEvents.newBuilder().build()) + .setLinks(Span.Links.newBuilder().build()) + .setStatus(Status.newBuilder().build()) + .setSameProcessAsParentSpan(BoolValue.newBuilder().build()) + .setChildSpanCount(Int32Value.newBuilder().build()) + .build(); + + Span actualResponse = client.createSpan(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSpanExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + Span request = + Span.newBuilder() + .setName(SpanName.of("[PROJECT]", "[TRACE]", "[SPAN]").toString()) + .setSpanId("spanId-896182779") + .setParentSpanId("parentSpanId1059234639") + .setDisplayName(TruncatableString.newBuilder().build()) + .setStartTime(Timestamp.newBuilder().build()) + .setEndTime(Timestamp.newBuilder().build()) + .setAttributes(Span.Attributes.newBuilder().build()) + .setStackTrace(StackTrace.newBuilder().build()) + .setTimeEvents(Span.TimeEvents.newBuilder().build()) + .setLinks(Span.Links.newBuilder().build()) + .setStatus(Status.newBuilder().build()) + .setSameProcessAsParentSpan(BoolValue.newBuilder().build()) + .setChildSpanCount(Int32Value.newBuilder().build()) + .build(); + client.createSpan(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/grpc-google-cloud-trace-v1/pom.xml b/grpc-google-cloud-trace-v1/pom.xml index 179fdf1c..fd680fdc 100644 --- a/grpc-google-cloud-trace-v1/pom.xml +++ b/grpc-google-cloud-trace-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-trace-v1 - 2.2.0 + 2.3.0 grpc-google-cloud-trace-v1 GRPC library for grpc-google-cloud-trace-v1 com.google.cloud google-cloud-trace-parent - 2.2.0 + 2.3.0 diff --git a/grpc-google-cloud-trace-v2/pom.xml b/grpc-google-cloud-trace-v2/pom.xml index 37302d4f..12b8cdba 100644 --- a/grpc-google-cloud-trace-v2/pom.xml +++ b/grpc-google-cloud-trace-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-trace-v2 - 2.2.0 + 2.3.0 grpc-google-cloud-trace-v2 GRPC library for grpc-google-cloud-trace-v2 com.google.cloud google-cloud-trace-parent - 2.2.0 + 2.3.0 diff --git a/pom.xml b/pom.xml index 0833deab..d307653c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-trace-parent pom - 2.2.0 + 2.3.0 Google Cloud Trace Parent https://github.com/googleapis/java-core @@ -14,7 +14,7 @@ com.google.cloud google-cloud-shared-config - 1.4.0 + 1.5.0 @@ -149,33 +149,33 @@ com.google.api.grpc proto-google-cloud-trace-v1 - 2.2.0 + 2.3.0 com.google.cloud google-cloud-trace - 2.2.0 + 2.3.0 com.google.api.grpc proto-google-cloud-trace-v2 - 2.2.0 + 2.3.0 com.google.api.grpc grpc-google-cloud-trace-v1 - 2.2.0 + 2.3.0 com.google.api.grpc grpc-google-cloud-trace-v2 - 2.2.0 + 2.3.0 com.google.cloud google-cloud-shared-dependencies - 2.12.0 + 2.13.0 pom import diff --git a/proto-google-cloud-trace-v1/pom.xml b/proto-google-cloud-trace-v1/pom.xml index 79970b34..3026acc2 100644 --- a/proto-google-cloud-trace-v1/pom.xml +++ b/proto-google-cloud-trace-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-trace-v1 - 2.2.0 + 2.3.0 proto-google-cloud-trace-v1 PROTO library for proto-google-cloud-trace-v1 com.google.cloud google-cloud-trace-parent - 2.2.0 + 2.3.0 diff --git a/proto-google-cloud-trace-v2/pom.xml b/proto-google-cloud-trace-v2/pom.xml index 34b64775..d74fda1a 100644 --- a/proto-google-cloud-trace-v2/pom.xml +++ b/proto-google-cloud-trace-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-trace-v2 - 2.2.0 + 2.3.0 proto-google-cloud-trace-v2 PROTO library for proto-google-cloud-trace-v2 com.google.cloud google-cloud-trace-parent - 2.2.0 + 2.3.0 diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 05137a55..130ec212 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-trace - 2.1.11 + 2.2.0 diff --git a/samples/native-image-sample/README.md b/samples/native-image-sample/README.md index 24afd924..315b9865 100644 --- a/samples/native-image-sample/README.md +++ b/samples/native-image-sample/README.md @@ -20,25 +20,25 @@ You will need to follow these prerequisite steps in order to run these samples: **Note:** Authenticating with Application Default Credentials is convenient to use during development, but we recommend [alternate methods of authentication](https://cloud.google.com/docs/authentication/production) during production use. -3. Install the GraalVM compiler. +3. Install the native image compiler. - You can follow the [official installation instructions](https://www.graalvm.org/docs/getting-started/#install-graalvm) from the GraalVM website. + You can follow the [official installation instructions](https://www.graalvm.org/docs/getting-started/#install-graalvm). After following the instructions, ensure that you install the Native Image extension installed by running: ``` gu install native-image ``` - Once you finish following the instructions, verify that the default version of Java is set to the GraalVM version by running `java -version` in a terminal. + Once you finish following the instructions, verify that the default version of Java is set to the correct version by running `java -version` in a terminal. You will see something similar to the below output: ``` $ java -version - openjdk version "11.0.7" 2020-04-14 - OpenJDK Runtime Environment GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02) - OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02, mixed mode, sharing) + openjdk version "17.0.3" 2022-04-19 + OpenJDK Runtime Environment GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06) + OpenJDK 64-Bit Server VM GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06, mixed mode, sharing) ``` 4. Enable the [Cloud Trace APIs](https://console.cloud.google.com/apis/api/cloudtrace.googleapis.com/overview). diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml index f871843b..d4d23aec 100644 --- a/samples/native-image-sample/pom.xml +++ b/samples/native-image-sample/pom.xml @@ -31,7 +31,7 @@ com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import @@ -112,7 +112,7 @@ org.graalvm.buildtools junit-platform-native - 0.9.11 + 0.9.12 test @@ -132,7 +132,7 @@ org.graalvm.buildtools native-maven-plugin - 0.9.11 + 0.9.12 true trace.TraceSampleApplication diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 6ba9bf6d..8bfc976c 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-trace - 2.2.0 + 2.3.0 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 3f578116..ef1b6f8a 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import diff --git a/versions.txt b/versions.txt index 651e5ea8..af11356a 100644 --- a/versions.txt +++ b/versions.txt @@ -1,8 +1,8 @@ # Format: # module:released-version:current-version -google-cloud-trace:2.2.0:2.2.0 -grpc-google-cloud-trace-v1:2.2.0:2.2.0 -grpc-google-cloud-trace-v2:2.2.0:2.2.0 -proto-google-cloud-trace-v1:2.2.0:2.2.0 -proto-google-cloud-trace-v2:2.2.0:2.2.0 +google-cloud-trace:2.3.0:2.3.0 +grpc-google-cloud-trace-v1:2.3.0:2.3.0 +grpc-google-cloud-trace-v2:2.3.0:2.3.0 +proto-google-cloud-trace-v1:2.3.0:2.3.0 +proto-google-cloud-trace-v2:2.3.0:2.3.0