all: regenerate GAPIC clients
googleapis: 730ae385e8ddae8672c3d0fcbd3554d524456319
Require https://github.com/google/go-genproto/pull/41
Change-Id: Id928e4ad84512ee02f3c22ca14e8a52da4d24f20
Reviewed-on: https://code-review.googlesource.com/19091
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/debugger/apiv2/controller2_client.go b/debugger/apiv2/controller2_client.go
index 5c07d56..0cc67ab 100644
--- a/debugger/apiv2/controller2_client.go
+++ b/debugger/apiv2/controller2_client.go
@@ -27,6 +27,7 @@
clouddebuggerpb "google.golang.org/genproto/googleapis/devtools/clouddebugger/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// Controller2CallOptions contains the retry settings for each method of Controller2Client.
@@ -77,7 +78,7 @@
CallOptions *Controller2CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewController2Client creates a new controller2 client.
@@ -134,7 +135,7 @@
func (c *Controller2Client) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// RegisterDebuggee registers the debuggee with the controller service.
@@ -148,7 +149,7 @@
// from data loss, or change the debuggee_id format. Agents must handle
// debuggee_id value changing upon re-registration.
func (c *Controller2Client) RegisterDebuggee(ctx context.Context, req *clouddebuggerpb.RegisterDebuggeeRequest, opts ...gax.CallOption) (*clouddebuggerpb.RegisterDebuggeeResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.RegisterDebuggee[0:len(c.CallOptions.RegisterDebuggee):len(c.CallOptions.RegisterDebuggee)], opts...)
var resp *clouddebuggerpb.RegisterDebuggeeResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -176,7 +177,7 @@
// until the controller removes them from the active list to avoid
// setting those breakpoints again.
func (c *Controller2Client) ListActiveBreakpoints(ctx context.Context, req *clouddebuggerpb.ListActiveBreakpointsRequest, opts ...gax.CallOption) (*clouddebuggerpb.ListActiveBreakpointsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListActiveBreakpoints[0:len(c.CallOptions.ListActiveBreakpoints):len(c.CallOptions.ListActiveBreakpoints)], opts...)
var resp *clouddebuggerpb.ListActiveBreakpointsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -199,7 +200,7 @@
// semantics. These may only make changes such as canonicalizing a value
// or snapping the location to the correct line of code.
func (c *Controller2Client) UpdateActiveBreakpoint(ctx context.Context, req *clouddebuggerpb.UpdateActiveBreakpointRequest, opts ...gax.CallOption) (*clouddebuggerpb.UpdateActiveBreakpointResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateActiveBreakpoint[0:len(c.CallOptions.UpdateActiveBreakpoint):len(c.CallOptions.UpdateActiveBreakpoint)], opts...)
var resp *clouddebuggerpb.UpdateActiveBreakpointResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/debugger/apiv2/debugger2_client.go b/debugger/apiv2/debugger2_client.go
index a726f1f..bc1181d 100644
--- a/debugger/apiv2/debugger2_client.go
+++ b/debugger/apiv2/debugger2_client.go
@@ -27,6 +27,7 @@
clouddebuggerpb "google.golang.org/genproto/googleapis/devtools/clouddebugger/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// Debugger2CallOptions contains the retry settings for each method of Debugger2Client.
@@ -81,7 +82,7 @@
CallOptions *Debugger2CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewDebugger2Client creates a new debugger2 client.
@@ -130,12 +131,12 @@
func (c *Debugger2Client) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// SetBreakpoint sets the breakpoint to the debuggee.
func (c *Debugger2Client) SetBreakpoint(ctx context.Context, req *clouddebuggerpb.SetBreakpointRequest, opts ...gax.CallOption) (*clouddebuggerpb.SetBreakpointResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.SetBreakpoint[0:len(c.CallOptions.SetBreakpoint):len(c.CallOptions.SetBreakpoint)], opts...)
var resp *clouddebuggerpb.SetBreakpointResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -151,7 +152,7 @@
// GetBreakpoint gets breakpoint information.
func (c *Debugger2Client) GetBreakpoint(ctx context.Context, req *clouddebuggerpb.GetBreakpointRequest, opts ...gax.CallOption) (*clouddebuggerpb.GetBreakpointResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetBreakpoint[0:len(c.CallOptions.GetBreakpoint):len(c.CallOptions.GetBreakpoint)], opts...)
var resp *clouddebuggerpb.GetBreakpointResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -167,7 +168,7 @@
// DeleteBreakpoint deletes the breakpoint from the debuggee.
func (c *Debugger2Client) DeleteBreakpoint(ctx context.Context, req *clouddebuggerpb.DeleteBreakpointRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteBreakpoint[0:len(c.CallOptions.DeleteBreakpoint):len(c.CallOptions.DeleteBreakpoint)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -179,7 +180,7 @@
// ListBreakpoints lists all breakpoints for the debuggee.
func (c *Debugger2Client) ListBreakpoints(ctx context.Context, req *clouddebuggerpb.ListBreakpointsRequest, opts ...gax.CallOption) (*clouddebuggerpb.ListBreakpointsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListBreakpoints[0:len(c.CallOptions.ListBreakpoints):len(c.CallOptions.ListBreakpoints)], opts...)
var resp *clouddebuggerpb.ListBreakpointsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -195,7 +196,7 @@
// ListDebuggees lists all the debuggees that the user has access to.
func (c *Debugger2Client) ListDebuggees(ctx context.Context, req *clouddebuggerpb.ListDebuggeesRequest, opts ...gax.CallOption) (*clouddebuggerpb.ListDebuggeesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListDebuggees[0:len(c.CallOptions.ListDebuggees):len(c.CallOptions.ListDebuggees)], opts...)
var resp *clouddebuggerpb.ListDebuggeesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/debugger/apiv2/doc.go b/debugger/apiv2/doc.go
index 94d9f2b..7a78e85 100644
--- a/debugger/apiv2/doc.go
+++ b/debugger/apiv2/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package debugger is an experimental, auto-generated package for the
+// Package debugger is an auto-generated package for the
// Stackdriver Debugger API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Examines the call stack and variables of a running application
// without stopping or slowing it down.
//
@@ -28,11 +30,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/dlp/apiv2beta1/dlp_client.go b/dlp/apiv2beta1/dlp_client.go
index 4a6f80b..1cf2064 100644
--- a/dlp/apiv2beta1/dlp_client.go
+++ b/dlp/apiv2beta1/dlp_client.go
@@ -30,10 +30,13 @@
dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2beta1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
type CallOptions struct {
+ DeidentifyContent []gax.CallOption
+ AnalyzeDataSourceRisk []gax.CallOption
InspectContent []gax.CallOption
RedactContent []gax.CallOption
CreateInspectOperation []gax.CallOption
@@ -65,6 +68,8 @@
},
}
return &CallOptions{
+ DeidentifyContent: retry[[2]string{"default", "idempotent"}],
+ AnalyzeDataSourceRisk: retry[[2]string{"default", "idempotent"}],
InspectContent: retry[[2]string{"default", "non_idempotent"}],
RedactContent: retry[[2]string{"default", "non_idempotent"}],
CreateInspectOperation: retry[[2]string{"default", "non_idempotent"}],
@@ -91,7 +96,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new dlp service client.
@@ -145,7 +150,7 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ResultPath returns the path for the result resource.
@@ -156,10 +161,46 @@
""
}
+// DeidentifyContent de-identifies potentially sensitive info from a list of strings.
+// This method has limits on input size and output size.
+func (c *Client) DeidentifyContent(ctx context.Context, req *dlppb.DeidentifyContentRequest, opts ...gax.CallOption) (*dlppb.DeidentifyContentResponse, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.DeidentifyContent[0:len(c.CallOptions.DeidentifyContent):len(c.CallOptions.DeidentifyContent)], opts...)
+ var resp *dlppb.DeidentifyContentResponse
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.client.DeidentifyContent(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// AnalyzeDataSourceRisk schedules a job to compute risk analysis metrics over content in a Google
+// Cloud Platform repository.
+func (c *Client) AnalyzeDataSourceRisk(ctx context.Context, req *dlppb.AnalyzeDataSourceRiskRequest, opts ...gax.CallOption) (*AnalyzeDataSourceRiskOperation, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.AnalyzeDataSourceRisk[0:len(c.CallOptions.AnalyzeDataSourceRisk):len(c.CallOptions.AnalyzeDataSourceRisk)], opts...)
+ var resp *longrunningpb.Operation
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.client.AnalyzeDataSourceRisk(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return &AnalyzeDataSourceRiskOperation{
+ lro: longrunning.InternalNewOperation(c.LROClient, resp),
+ }, nil
+}
+
// InspectContent finds potentially sensitive info in a list of strings.
// This method has limits on input size, processing time, and output size.
func (c *Client) InspectContent(ctx context.Context, req *dlppb.InspectContentRequest, opts ...gax.CallOption) (*dlppb.InspectContentResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.InspectContent[0:len(c.CallOptions.InspectContent):len(c.CallOptions.InspectContent)], opts...)
var resp *dlppb.InspectContentResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -176,7 +217,7 @@
// RedactContent redacts potentially sensitive info from a list of strings.
// This method has limits on input size, processing time, and output size.
func (c *Client) RedactContent(ctx context.Context, req *dlppb.RedactContentRequest, opts ...gax.CallOption) (*dlppb.RedactContentResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.RedactContent[0:len(c.CallOptions.RedactContent):len(c.CallOptions.RedactContent)], opts...)
var resp *dlppb.RedactContentResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -193,7 +234,7 @@
// CreateInspectOperation schedules a job scanning content in a Google Cloud Platform data
// repository.
func (c *Client) CreateInspectOperation(ctx context.Context, req *dlppb.CreateInspectOperationRequest, opts ...gax.CallOption) (*CreateInspectOperationHandle, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateInspectOperation[0:len(c.CallOptions.CreateInspectOperation):len(c.CallOptions.CreateInspectOperation)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -211,7 +252,7 @@
// ListInspectFindings returns list of results for given inspect operation result set id.
func (c *Client) ListInspectFindings(ctx context.Context, req *dlppb.ListInspectFindingsRequest, opts ...gax.CallOption) (*dlppb.ListInspectFindingsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListInspectFindings[0:len(c.CallOptions.ListInspectFindings):len(c.CallOptions.ListInspectFindings)], opts...)
var resp *dlppb.ListInspectFindingsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -227,7 +268,7 @@
// ListInfoTypes returns sensitive information types for given category.
func (c *Client) ListInfoTypes(ctx context.Context, req *dlppb.ListInfoTypesRequest, opts ...gax.CallOption) (*dlppb.ListInfoTypesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListInfoTypes[0:len(c.CallOptions.ListInfoTypes):len(c.CallOptions.ListInfoTypes)], opts...)
var resp *dlppb.ListInfoTypesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -243,7 +284,7 @@
// ListRootCategories returns the list of root categories of sensitive information.
func (c *Client) ListRootCategories(ctx context.Context, req *dlppb.ListRootCategoriesRequest, opts ...gax.CallOption) (*dlppb.ListRootCategoriesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListRootCategories[0:len(c.CallOptions.ListRootCategories):len(c.CallOptions.ListRootCategories)], opts...)
var resp *dlppb.ListRootCategoriesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -257,6 +298,75 @@
return resp, nil
}
+// AnalyzeDataSourceRiskOperation manages a long-running operation from AnalyzeDataSourceRisk.
+type AnalyzeDataSourceRiskOperation struct {
+ lro *longrunning.Operation
+}
+
+// AnalyzeDataSourceRiskOperation returns a new AnalyzeDataSourceRiskOperation from a given name.
+// The name must be that of a previously created AnalyzeDataSourceRiskOperation, possibly from a different process.
+func (c *Client) AnalyzeDataSourceRiskOperation(name string) *AnalyzeDataSourceRiskOperation {
+ return &AnalyzeDataSourceRiskOperation{
+ lro: longrunning.InternalNewOperation(c.LROClient, &longrunningpb.Operation{Name: name}),
+ }
+}
+
+// Wait blocks until the long-running operation is completed, returning the response and any errors encountered.
+//
+// See documentation of Poll for error-handling information.
+func (op *AnalyzeDataSourceRiskOperation) Wait(ctx context.Context, opts ...gax.CallOption) (*dlppb.RiskAnalysisOperationResult, error) {
+ var resp dlppb.RiskAnalysisOperationResult
+ if err := op.lro.WaitWithInterval(ctx, &resp, 45000*time.Millisecond, opts...); err != nil {
+ return nil, err
+ }
+ return &resp, nil
+}
+
+// Poll fetches the latest state of the long-running operation.
+//
+// Poll also fetches the latest metadata, which can be retrieved by Metadata.
+//
+// If Poll fails, the error is returned and op is unmodified. If Poll succeeds and
+// the operation has completed with failure, the error is returned and op.Done will return true.
+// If Poll succeeds and the operation has completed successfully,
+// op.Done will return true, and the response of the operation is returned.
+// If Poll succeeds and the operation has not completed, the returned response and error are both nil.
+func (op *AnalyzeDataSourceRiskOperation) Poll(ctx context.Context, opts ...gax.CallOption) (*dlppb.RiskAnalysisOperationResult, error) {
+ var resp dlppb.RiskAnalysisOperationResult
+ if err := op.lro.Poll(ctx, &resp, opts...); err != nil {
+ return nil, err
+ }
+ if !op.Done() {
+ return nil, nil
+ }
+ return &resp, nil
+}
+
+// Metadata returns metadata associated with the long-running operation.
+// Metadata itself does not contact the server, but Poll does.
+// To get the latest metadata, call this method after a successful call to Poll.
+// If the metadata is not available, the returned metadata and error are both nil.
+func (op *AnalyzeDataSourceRiskOperation) Metadata() (*dlppb.RiskAnalysisOperationMetadata, error) {
+ var meta dlppb.RiskAnalysisOperationMetadata
+ if err := op.lro.Metadata(&meta); err == longrunning.ErrNoMetadata {
+ return nil, nil
+ } else if err != nil {
+ return nil, err
+ }
+ return &meta, nil
+}
+
+// Done reports whether the long-running operation has completed.
+func (op *AnalyzeDataSourceRiskOperation) Done() bool {
+ return op.lro.Done()
+}
+
+// Name returns the name of the long-running operation.
+// The name is assigned by the server and is unique within the service from which the operation is created.
+func (op *AnalyzeDataSourceRiskOperation) Name() string {
+ return op.lro.Name()
+}
+
// CreateInspectOperationHandle manages a long-running operation from CreateInspectOperation.
type CreateInspectOperationHandle struct {
lro *longrunning.Operation
diff --git a/dlp/apiv2beta1/dlp_client_example_test.go b/dlp/apiv2beta1/dlp_client_example_test.go
index 714ae5b..86398c1 100644
--- a/dlp/apiv2beta1/dlp_client_example_test.go
+++ b/dlp/apiv2beta1/dlp_client_example_test.go
@@ -32,6 +32,47 @@
_ = c
}
+func ExampleClient_DeidentifyContent() {
+ ctx := context.Background()
+ c, err := dlp.NewClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &dlppb.DeidentifyContentRequest{
+ // TODO: Fill request struct fields.
+ }
+ resp, err := c.DeidentifyContent(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
+func ExampleClient_AnalyzeDataSourceRisk() {
+ ctx := context.Background()
+ c, err := dlp.NewClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &dlppb.AnalyzeDataSourceRiskRequest{
+ // TODO: Fill request struct fields.
+ }
+ op, err := c.AnalyzeDataSourceRisk(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ resp, err := op.Wait(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
func ExampleClient_InspectContent() {
ctx := context.Background()
c, err := dlp.NewClient(ctx)
diff --git a/dlp/apiv2beta1/doc.go b/dlp/apiv2beta1/doc.go
index af6e0d9..cfd8d65 100644
--- a/dlp/apiv2beta1/doc.go
+++ b/dlp/apiv2beta1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package dlp is an experimental, auto-generated package for the
+// Package dlp is an auto-generated package for the
// DLP API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// The Google Data Loss Prevention API provides methods for detection of
// privacy-sensitive fragments in text, images, and Google Cloud Platform
// storage repositories.
@@ -27,11 +29,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/dlp/apiv2beta1/mock_test.go b/dlp/apiv2beta1/mock_test.go
index 45d4c4f..1fe5ae2 100644
--- a/dlp/apiv2beta1/mock_test.go
+++ b/dlp/apiv2beta1/mock_test.go
@@ -85,6 +85,18 @@
return s.resps[0].(*dlppb.RedactContentResponse), nil
}
+func (s *mockDlpServer) DeidentifyContent(ctx context.Context, req *dlppb.DeidentifyContentRequest) (*dlppb.DeidentifyContentResponse, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*dlppb.DeidentifyContentResponse), nil
+}
+
func (s *mockDlpServer) CreateInspectOperation(ctx context.Context, req *dlppb.CreateInspectOperationRequest) (*longrunningpb.Operation, error) {
md, _ := metadata.FromIncomingContext(ctx)
if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
@@ -97,6 +109,18 @@
return s.resps[0].(*longrunningpb.Operation), nil
}
+func (s *mockDlpServer) AnalyzeDataSourceRisk(ctx context.Context, req *dlppb.AnalyzeDataSourceRiskRequest) (*longrunningpb.Operation, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*longrunningpb.Operation), nil
+}
+
func (s *mockDlpServer) ListInspectFindings(ctx context.Context, req *dlppb.ListInspectFindingsRequest) (*dlppb.ListInspectFindingsResponse, error) {
md, _ := metadata.FromIncomingContext(ctx)
if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
@@ -162,6 +186,156 @@
os.Exit(m.Run())
}
+func TestDlpServiceDeidentifyContent(t *testing.T) {
+ var expectedResponse *dlppb.DeidentifyContentResponse = &dlppb.DeidentifyContentResponse{}
+
+ mockDlp.err = nil
+ mockDlp.reqs = nil
+
+ mockDlp.resps = append(mockDlp.resps[:0], expectedResponse)
+
+ var deidentifyConfig *dlppb.DeidentifyConfig = &dlppb.DeidentifyConfig{}
+ var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
+ var items []*dlppb.ContentItem = nil
+ var request = &dlppb.DeidentifyContentRequest{
+ DeidentifyConfig: deidentifyConfig,
+ InspectConfig: inspectConfig,
+ Items: items,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.DeidentifyContent(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockDlp.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestDlpServiceDeidentifyContentError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockDlp.err = gstatus.Error(errCode, "test error")
+
+ var deidentifyConfig *dlppb.DeidentifyConfig = &dlppb.DeidentifyConfig{}
+ var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
+ var items []*dlppb.ContentItem = nil
+ var request = &dlppb.DeidentifyContentRequest{
+ DeidentifyConfig: deidentifyConfig,
+ InspectConfig: inspectConfig,
+ Items: items,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.DeidentifyContent(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestDlpServiceAnalyzeDataSourceRisk(t *testing.T) {
+ var expectedResponse *dlppb.RiskAnalysisOperationResult = &dlppb.RiskAnalysisOperationResult{}
+
+ mockDlp.err = nil
+ mockDlp.reqs = nil
+
+ any, err := ptypes.MarshalAny(expectedResponse)
+ if err != nil {
+ t.Fatal(err)
+ }
+ mockDlp.resps = append(mockDlp.resps[:0], &longrunningpb.Operation{
+ Name: "longrunning-test",
+ Done: true,
+ Result: &longrunningpb.Operation_Response{Response: any},
+ })
+
+ var privacyMetric *dlppb.PrivacyMetric = &dlppb.PrivacyMetric{}
+ var sourceTable *dlppb.BigQueryTable = &dlppb.BigQueryTable{}
+ var request = &dlppb.AnalyzeDataSourceRiskRequest{
+ PrivacyMetric: privacyMetric,
+ SourceTable: sourceTable,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ respLRO, err := c.AnalyzeDataSourceRisk(context.Background(), request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ resp, err := respLRO.Wait(context.Background())
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockDlp.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestDlpServiceAnalyzeDataSourceRiskError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockDlp.err = nil
+ mockDlp.resps = append(mockDlp.resps[:0], &longrunningpb.Operation{
+ Name: "longrunning-test",
+ Done: true,
+ Result: &longrunningpb.Operation_Error{
+ Error: &status.Status{
+ Code: int32(errCode),
+ Message: "test error",
+ },
+ },
+ })
+
+ var privacyMetric *dlppb.PrivacyMetric = &dlppb.PrivacyMetric{}
+ var sourceTable *dlppb.BigQueryTable = &dlppb.BigQueryTable{}
+ var request = &dlppb.AnalyzeDataSourceRiskRequest{
+ PrivacyMetric: privacyMetric,
+ SourceTable: sourceTable,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ respLRO, err := c.AnalyzeDataSourceRisk(context.Background(), request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ resp, err := respLRO.Wait(context.Background())
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
func TestDlpServiceInspectContent(t *testing.T) {
var expectedResponse *dlppb.InspectContentResponse = &dlppb.InspectContentResponse{}
@@ -170,8 +344,23 @@
mockDlp.resps = append(mockDlp.resps[:0], expectedResponse)
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var items []*dlppb.ContentItem = nil
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var type_ string = "text/plain"
+ var value string = "My email is example@example.com."
+ var itemsElement = &dlppb.ContentItem{
+ Type: type_,
+ DataItem: &dlppb.ContentItem_Value{
+ Value: value,
+ },
+ }
+ var items = []*dlppb.ContentItem{itemsElement}
var request = &dlppb.InspectContentRequest{
InspectConfig: inspectConfig,
Items: items,
@@ -201,8 +390,23 @@
errCode := codes.PermissionDenied
mockDlp.err = gstatus.Error(errCode, "test error")
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var items []*dlppb.ContentItem = nil
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var type_ string = "text/plain"
+ var value string = "My email is example@example.com."
+ var itemsElement = &dlppb.ContentItem{
+ Type: type_,
+ DataItem: &dlppb.ContentItem_Value{
+ Value: value,
+ },
+ }
+ var items = []*dlppb.ContentItem{itemsElement}
var request = &dlppb.InspectContentRequest{
InspectConfig: inspectConfig,
Items: items,
@@ -230,9 +434,33 @@
mockDlp.resps = append(mockDlp.resps[:0], expectedResponse)
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var items []*dlppb.ContentItem = nil
- var replaceConfigs []*dlppb.RedactContentRequest_ReplaceConfig = nil
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var type_ string = "text/plain"
+ var value string = "My email is example@example.com."
+ var itemsElement = &dlppb.ContentItem{
+ Type: type_,
+ DataItem: &dlppb.ContentItem_Value{
+ Value: value,
+ },
+ }
+ var items = []*dlppb.ContentItem{itemsElement}
+ var name2 string = "EMAIL_ADDRESS"
+ var infoType = &dlppb.InfoType{
+ Name: name2,
+ }
+ var replaceWith string = "REDACTED"
+ var replaceConfigsElement = &dlppb.RedactContentRequest_ReplaceConfig{
+ InfoType: infoType,
+ ReplaceWith: replaceWith,
+ }
+ var replaceConfigs = []*dlppb.RedactContentRequest_ReplaceConfig{replaceConfigsElement}
var request = &dlppb.RedactContentRequest{
InspectConfig: inspectConfig,
Items: items,
@@ -263,9 +491,33 @@
errCode := codes.PermissionDenied
mockDlp.err = gstatus.Error(errCode, "test error")
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var items []*dlppb.ContentItem = nil
- var replaceConfigs []*dlppb.RedactContentRequest_ReplaceConfig = nil
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var type_ string = "text/plain"
+ var value string = "My email is example@example.com."
+ var itemsElement = &dlppb.ContentItem{
+ Type: type_,
+ DataItem: &dlppb.ContentItem_Value{
+ Value: value,
+ },
+ }
+ var items = []*dlppb.ContentItem{itemsElement}
+ var name2 string = "EMAIL_ADDRESS"
+ var infoType = &dlppb.InfoType{
+ Name: name2,
+ }
+ var replaceWith string = "REDACTED"
+ var replaceConfigsElement = &dlppb.RedactContentRequest_ReplaceConfig{
+ InfoType: infoType,
+ ReplaceWith: replaceWith,
+ }
+ var replaceConfigs = []*dlppb.RedactContentRequest_ReplaceConfig{replaceConfigsElement}
var request = &dlppb.RedactContentRequest{
InspectConfig: inspectConfig,
Items: items,
@@ -287,9 +539,9 @@
_ = resp
}
func TestDlpServiceCreateInspectOperation(t *testing.T) {
- var name string = "name3373707"
+ var name2 string = "name2-1052831874"
var expectedResponse = &dlppb.InspectOperationResult{
- Name: name,
+ Name: name2,
}
mockDlp.err = nil
@@ -305,8 +557,26 @@
Result: &longrunningpb.Operation_Response{Response: any},
})
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var storageConfig *dlppb.StorageConfig = &dlppb.StorageConfig{}
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var url string = "gs://example_bucket/example_file.png"
+ var fileSet = &dlppb.CloudStorageOptions_FileSet{
+ Url: url,
+ }
+ var cloudStorageOptions = &dlppb.CloudStorageOptions{
+ FileSet: fileSet,
+ }
+ var storageConfig = &dlppb.StorageConfig{
+ Type: &dlppb.StorageConfig_CloudStorageOptions{
+ CloudStorageOptions: cloudStorageOptions,
+ },
+ }
var outputConfig *dlppb.OutputStorageConfig = &dlppb.OutputStorageConfig{}
var request = &dlppb.CreateInspectOperationRequest{
InspectConfig: inspectConfig,
@@ -352,8 +622,26 @@
},
})
- var inspectConfig *dlppb.InspectConfig = &dlppb.InspectConfig{}
- var storageConfig *dlppb.StorageConfig = &dlppb.StorageConfig{}
+ var name string = "EMAIL_ADDRESS"
+ var infoTypesElement = &dlppb.InfoType{
+ Name: name,
+ }
+ var infoTypes = []*dlppb.InfoType{infoTypesElement}
+ var inspectConfig = &dlppb.InspectConfig{
+ InfoTypes: infoTypes,
+ }
+ var url string = "gs://example_bucket/example_file.png"
+ var fileSet = &dlppb.CloudStorageOptions_FileSet{
+ Url: url,
+ }
+ var cloudStorageOptions = &dlppb.CloudStorageOptions{
+ FileSet: fileSet,
+ }
+ var storageConfig = &dlppb.StorageConfig{
+ Type: &dlppb.StorageConfig_CloudStorageOptions{
+ CloudStorageOptions: cloudStorageOptions,
+ },
+ }
var outputConfig *dlppb.OutputStorageConfig = &dlppb.OutputStorageConfig{}
var request = &dlppb.CreateInspectOperationRequest{
InspectConfig: inspectConfig,
@@ -446,8 +734,8 @@
mockDlp.resps = append(mockDlp.resps[:0], expectedResponse)
- var category string = "category50511102"
- var languageCode string = "languageCode-412800396"
+ var category string = "PII"
+ var languageCode string = "en"
var request = &dlppb.ListInfoTypesRequest{
Category: category,
LanguageCode: languageCode,
@@ -477,8 +765,8 @@
errCode := codes.PermissionDenied
mockDlp.err = gstatus.Error(errCode, "test error")
- var category string = "category50511102"
- var languageCode string = "languageCode-412800396"
+ var category string = "PII"
+ var languageCode string = "en"
var request = &dlppb.ListInfoTypesRequest{
Category: category,
LanguageCode: languageCode,
@@ -506,7 +794,7 @@
mockDlp.resps = append(mockDlp.resps[:0], expectedResponse)
- var languageCode string = "languageCode-412800396"
+ var languageCode string = "en"
var request = &dlppb.ListRootCategoriesRequest{
LanguageCode: languageCode,
}
@@ -535,7 +823,7 @@
errCode := codes.PermissionDenied
mockDlp.err = gstatus.Error(errCode, "test error")
- var languageCode string = "languageCode-412800396"
+ var languageCode string = "en"
var request = &dlppb.ListRootCategoriesRequest{
LanguageCode: languageCode,
}
diff --git a/errorreporting/apiv1beta1/doc.go b/errorreporting/apiv1beta1/doc.go
index 5f94124..43ee1b9 100644
--- a/errorreporting/apiv1beta1/doc.go
+++ b/errorreporting/apiv1beta1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package errorreporting is an experimental, auto-generated package for the
+// Package errorreporting is an auto-generated package for the
// Stackdriver Error Reporting API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Stackdriver Error Reporting groups and counts similar errors from cloud
// services. The Stackdriver Error Reporting API provides a way to report new
// errors and read access to error groups and their associated errors.
@@ -29,11 +31,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/errorreporting/apiv1beta1/error_group_client.go b/errorreporting/apiv1beta1/error_group_client.go
index f2d2194..919b1e9 100644
--- a/errorreporting/apiv1beta1/error_group_client.go
+++ b/errorreporting/apiv1beta1/error_group_client.go
@@ -27,6 +27,7 @@
clouderrorreportingpb "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// ErrorGroupCallOptions contains the retry settings for each method of ErrorGroupClient.
@@ -75,7 +76,7 @@
CallOptions *ErrorGroupCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewErrorGroupClient creates a new error group service client.
@@ -113,7 +114,7 @@
func (c *ErrorGroupClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ErrorGroupGroupPath returns the path for the group resource.
@@ -128,7 +129,7 @@
// GetGroup get the specified group.
func (c *ErrorGroupClient) GetGroup(ctx context.Context, req *clouderrorreportingpb.GetGroupRequest, opts ...gax.CallOption) (*clouderrorreportingpb.ErrorGroup, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetGroup[0:len(c.CallOptions.GetGroup):len(c.CallOptions.GetGroup)], opts...)
var resp *clouderrorreportingpb.ErrorGroup
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -145,7 +146,7 @@
// UpdateGroup replace the data for the specified group.
// Fails if the group does not exist.
func (c *ErrorGroupClient) UpdateGroup(ctx context.Context, req *clouderrorreportingpb.UpdateGroupRequest, opts ...gax.CallOption) (*clouderrorreportingpb.ErrorGroup, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateGroup[0:len(c.CallOptions.UpdateGroup):len(c.CallOptions.UpdateGroup)], opts...)
var resp *clouderrorreportingpb.ErrorGroup
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/errorreporting/apiv1beta1/error_stats_client.go b/errorreporting/apiv1beta1/error_stats_client.go
index e9150a0..a7c86bc 100644
--- a/errorreporting/apiv1beta1/error_stats_client.go
+++ b/errorreporting/apiv1beta1/error_stats_client.go
@@ -29,6 +29,7 @@
clouderrorreportingpb "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// ErrorStatsCallOptions contains the retry settings for each method of ErrorStatsClient.
@@ -79,7 +80,7 @@
CallOptions *ErrorStatsCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewErrorStatsClient creates a new error stats service client.
@@ -118,7 +119,7 @@
func (c *ErrorStatsClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ErrorStatsProjectPath returns the path for the project resource.
@@ -131,7 +132,7 @@
// ListGroupStats lists the specified groups.
func (c *ErrorStatsClient) ListGroupStats(ctx context.Context, req *clouderrorreportingpb.ListGroupStatsRequest, opts ...gax.CallOption) *ErrorGroupStatsIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListGroupStats[0:len(c.CallOptions.ListGroupStats):len(c.CallOptions.ListGroupStats)], opts...)
it := &ErrorGroupStatsIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*clouderrorreportingpb.ErrorGroupStats, string, error) {
@@ -166,7 +167,7 @@
// ListEvents lists the specified events.
func (c *ErrorStatsClient) ListEvents(ctx context.Context, req *clouderrorreportingpb.ListEventsRequest, opts ...gax.CallOption) *ErrorEventIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListEvents[0:len(c.CallOptions.ListEvents):len(c.CallOptions.ListEvents)], opts...)
it := &ErrorEventIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*clouderrorreportingpb.ErrorEvent, string, error) {
@@ -201,7 +202,7 @@
// DeleteEvents deletes all error events of a given project.
func (c *ErrorStatsClient) DeleteEvents(ctx context.Context, req *clouderrorreportingpb.DeleteEventsRequest, opts ...gax.CallOption) (*clouderrorreportingpb.DeleteEventsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteEvents[0:len(c.CallOptions.DeleteEvents):len(c.CallOptions.DeleteEvents)], opts...)
var resp *clouderrorreportingpb.DeleteEventsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/errorreporting/apiv1beta1/report_errors_client.go b/errorreporting/apiv1beta1/report_errors_client.go
index bf8f98c..1a5510c 100644
--- a/errorreporting/apiv1beta1/report_errors_client.go
+++ b/errorreporting/apiv1beta1/report_errors_client.go
@@ -24,6 +24,7 @@
"google.golang.org/api/transport"
clouderrorreportingpb "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1"
"google.golang.org/grpc"
+ "google.golang.org/grpc/metadata"
)
// ReportErrorsCallOptions contains the retry settings for each method of ReportErrorsClient.
@@ -57,7 +58,7 @@
CallOptions *ReportErrorsCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewReportErrorsClient creates a new report errors service client.
@@ -95,7 +96,7 @@
func (c *ReportErrorsClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ReportErrorsProjectPath returns the path for the project resource.
@@ -114,7 +115,7 @@
// for authentication. To use an API key, append it to the URL as the value of
// a key parameter. For example:<pre>POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456</pre>
func (c *ReportErrorsClient) ReportErrorEvent(ctx context.Context, req *clouderrorreportingpb.ReportErrorEventRequest, opts ...gax.CallOption) (*clouderrorreportingpb.ReportErrorEventResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ReportErrorEvent[0:len(c.CallOptions.ReportErrorEvent):len(c.CallOptions.ReportErrorEvent)], opts...)
var resp *clouderrorreportingpb.ReportErrorEventResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/firestore/apiv1beta1/doc.go b/firestore/apiv1beta1/doc.go
index ef585cf..a5b5c1c 100644
--- a/firestore/apiv1beta1/doc.go
+++ b/firestore/apiv1beta1/doc.go
@@ -21,18 +21,22 @@
//
//
// Use the client at cloud.google.com/go/firestore in preference to this.
-package firestore
+package firestore // import "cloud.google.com/go/firestore/apiv1beta1"
import (
"golang.org/x/net/context"
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/firestore/apiv1beta1/firestore_client.go b/firestore/apiv1beta1/firestore_client.go
index b536156..862641d 100644
--- a/firestore/apiv1beta1/firestore_client.go
+++ b/firestore/apiv1beta1/firestore_client.go
@@ -21,15 +21,15 @@
"time"
"cloud.google.com/go/internal/version"
- firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
-
gax "github.com/googleapis/gax-go"
"golang.org/x/net/context"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"google.golang.org/api/transport"
+ firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -112,7 +112,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new firestore client.
@@ -168,7 +168,7 @@
func (c *Client) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// DatabaseRootPath returns the path for the database root resource.
@@ -220,7 +220,7 @@
// GetDocument gets a single document.
func (c *Client) GetDocument(ctx context.Context, req *firestorepb.GetDocumentRequest, opts ...gax.CallOption) (*firestorepb.Document, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetDocument[0:len(c.CallOptions.GetDocument):len(c.CallOptions.GetDocument)], opts...)
var resp *firestorepb.Document
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -236,7 +236,7 @@
// ListDocuments lists documents.
func (c *Client) ListDocuments(ctx context.Context, req *firestorepb.ListDocumentsRequest, opts ...gax.CallOption) *DocumentIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListDocuments[0:len(c.CallOptions.ListDocuments):len(c.CallOptions.ListDocuments)], opts...)
it := &DocumentIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*firestorepb.Document, string, error) {
@@ -271,7 +271,7 @@
// CreateDocument creates a new document.
func (c *Client) CreateDocument(ctx context.Context, req *firestorepb.CreateDocumentRequest, opts ...gax.CallOption) (*firestorepb.Document, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateDocument[0:len(c.CallOptions.CreateDocument):len(c.CallOptions.CreateDocument)], opts...)
var resp *firestorepb.Document
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -287,7 +287,7 @@
// UpdateDocument updates or inserts a document.
func (c *Client) UpdateDocument(ctx context.Context, req *firestorepb.UpdateDocumentRequest, opts ...gax.CallOption) (*firestorepb.Document, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateDocument[0:len(c.CallOptions.UpdateDocument):len(c.CallOptions.UpdateDocument)], opts...)
var resp *firestorepb.Document
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -303,7 +303,7 @@
// DeleteDocument deletes a document.
func (c *Client) DeleteDocument(ctx context.Context, req *firestorepb.DeleteDocumentRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteDocument[0:len(c.CallOptions.DeleteDocument):len(c.CallOptions.DeleteDocument)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -318,7 +318,7 @@
// Documents returned by this method are not guaranteed to be returned in the
// same order that they were requested.
func (c *Client) BatchGetDocuments(ctx context.Context, req *firestorepb.BatchGetDocumentsRequest, opts ...gax.CallOption) (firestorepb.Firestore_BatchGetDocumentsClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.BatchGetDocuments[0:len(c.CallOptions.BatchGetDocuments):len(c.CallOptions.BatchGetDocuments)], opts...)
var resp firestorepb.Firestore_BatchGetDocumentsClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -334,7 +334,7 @@
// BeginTransaction starts a new transaction.
func (c *Client) BeginTransaction(ctx context.Context, req *firestorepb.BeginTransactionRequest, opts ...gax.CallOption) (*firestorepb.BeginTransactionResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.BeginTransaction[0:len(c.CallOptions.BeginTransaction):len(c.CallOptions.BeginTransaction)], opts...)
var resp *firestorepb.BeginTransactionResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -350,7 +350,7 @@
// Commit commits a transaction, while optionally updating documents.
func (c *Client) Commit(ctx context.Context, req *firestorepb.CommitRequest, opts ...gax.CallOption) (*firestorepb.CommitResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Commit[0:len(c.CallOptions.Commit):len(c.CallOptions.Commit)], opts...)
var resp *firestorepb.CommitResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -366,7 +366,7 @@
// Rollback rolls back a transaction.
func (c *Client) Rollback(ctx context.Context, req *firestorepb.RollbackRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Rollback[0:len(c.CallOptions.Rollback):len(c.CallOptions.Rollback)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -378,7 +378,7 @@
// RunQuery runs a query.
func (c *Client) RunQuery(ctx context.Context, req *firestorepb.RunQueryRequest, opts ...gax.CallOption) (firestorepb.Firestore_RunQueryClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.RunQuery[0:len(c.CallOptions.RunQuery):len(c.CallOptions.RunQuery)], opts...)
var resp firestorepb.Firestore_RunQueryClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -394,7 +394,7 @@
// Write streams batches of document updates and deletes, in order.
func (c *Client) Write(ctx context.Context, opts ...gax.CallOption) (firestorepb.Firestore_WriteClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Write[0:len(c.CallOptions.Write):len(c.CallOptions.Write)], opts...)
var resp firestorepb.Firestore_WriteClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -410,7 +410,7 @@
// Listen listens to changes.
func (c *Client) Listen(ctx context.Context, opts ...gax.CallOption) (firestorepb.Firestore_ListenClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Listen[0:len(c.CallOptions.Listen):len(c.CallOptions.Listen)], opts...)
var resp firestorepb.Firestore_ListenClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -426,7 +426,7 @@
// ListCollectionIds lists all the collection IDs underneath a document.
func (c *Client) ListCollectionIds(ctx context.Context, req *firestorepb.ListCollectionIdsRequest, opts ...gax.CallOption) *StringIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListCollectionIds[0:len(c.CallOptions.ListCollectionIds):len(c.CallOptions.ListCollectionIds)], opts...)
it := &StringIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) {
diff --git a/firestore/apiv1beta1/firestore_client_example_test.go b/firestore/apiv1beta1/firestore_client_example_test.go
index 4038db2..a0ce89a 100644
--- a/firestore/apiv1beta1/firestore_client_example_test.go
+++ b/firestore/apiv1beta1/firestore_client_example_test.go
@@ -19,11 +19,10 @@
import (
"io"
- firestore "cloud.google.com/go/firestore/apiv1beta1"
- firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
-
+ "cloud.google.com/go/firestore/apiv1beta1"
"golang.org/x/net/context"
"google.golang.org/api/iterator"
+ firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
)
func ExampleNewClient() {
diff --git a/firestore/apiv1beta1/mock_test.go b/firestore/apiv1beta1/mock_test.go
index 9db3a49..fc93a22 100644
--- a/firestore/apiv1beta1/mock_test.go
+++ b/firestore/apiv1beta1/mock_test.go
@@ -17,9 +17,8 @@
package firestore
import (
- firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
-
emptypb "github.com/golang/protobuf/ptypes/empty"
+ firestorepb "google.golang.org/genproto/googleapis/firestore/v1beta1"
)
import (
diff --git a/language/apiv1beta2/doc.go b/language/apiv1beta2/doc.go
index 42dc1e5..4899db3 100644
--- a/language/apiv1beta2/doc.go
+++ b/language/apiv1beta2/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package language is an experimental, auto-generated package for the
+// Package language is an auto-generated package for the
// Google Cloud Natural Language API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Google Cloud Natural Language API provides natural language understanding
// technologies to developers. Examples include sentiment analysis, entity
// recognition, and text annotations.
@@ -27,11 +29,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/language/apiv1beta2/language_client.go b/language/apiv1beta2/language_client.go
index ab541ff..f63c8c8 100644
--- a/language/apiv1beta2/language_client.go
+++ b/language/apiv1beta2/language_client.go
@@ -27,6 +27,7 @@
languagepb "google.golang.org/genproto/googleapis/cloud/language/v1beta2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -83,7 +84,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new language service client.
@@ -122,12 +123,12 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// AnalyzeSentiment analyzes the sentiment of the provided text.
func (c *Client) AnalyzeSentiment(ctx context.Context, req *languagepb.AnalyzeSentimentRequest, opts ...gax.CallOption) (*languagepb.AnalyzeSentimentResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnalyzeSentiment[0:len(c.CallOptions.AnalyzeSentiment):len(c.CallOptions.AnalyzeSentiment)], opts...)
var resp *languagepb.AnalyzeSentimentResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -145,7 +146,7 @@
// along with entity types, salience, mentions for each entity, and
// other properties.
func (c *Client) AnalyzeEntities(ctx context.Context, req *languagepb.AnalyzeEntitiesRequest, opts ...gax.CallOption) (*languagepb.AnalyzeEntitiesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnalyzeEntities[0:len(c.CallOptions.AnalyzeEntities):len(c.CallOptions.AnalyzeEntities)], opts...)
var resp *languagepb.AnalyzeEntitiesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -162,7 +163,7 @@
// AnalyzeEntitySentiment finds entities, similar to [AnalyzeEntities][google.cloud.language.v1beta2.LanguageService.AnalyzeEntities] in the text and analyzes
// sentiment associated with each entity and its mentions.
func (c *Client) AnalyzeEntitySentiment(ctx context.Context, req *languagepb.AnalyzeEntitySentimentRequest, opts ...gax.CallOption) (*languagepb.AnalyzeEntitySentimentResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnalyzeEntitySentiment[0:len(c.CallOptions.AnalyzeEntitySentiment):len(c.CallOptions.AnalyzeEntitySentiment)], opts...)
var resp *languagepb.AnalyzeEntitySentimentResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -180,7 +181,7 @@
// tokenization along with part of speech tags, dependency trees, and other
// properties.
func (c *Client) AnalyzeSyntax(ctx context.Context, req *languagepb.AnalyzeSyntaxRequest, opts ...gax.CallOption) (*languagepb.AnalyzeSyntaxResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnalyzeSyntax[0:len(c.CallOptions.AnalyzeSyntax):len(c.CallOptions.AnalyzeSyntax)], opts...)
var resp *languagepb.AnalyzeSyntaxResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -196,7 +197,7 @@
// ClassifyText classifies a document into categories.
func (c *Client) ClassifyText(ctx context.Context, req *languagepb.ClassifyTextRequest, opts ...gax.CallOption) (*languagepb.ClassifyTextResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ClassifyText[0:len(c.CallOptions.ClassifyText):len(c.CallOptions.ClassifyText)], opts...)
var resp *languagepb.ClassifyTextResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -213,7 +214,7 @@
// AnnotateText a convenience method that provides all syntax, sentiment, entity, and
// classification features in one call.
func (c *Client) AnnotateText(ctx context.Context, req *languagepb.AnnotateTextRequest, opts ...gax.CallOption) (*languagepb.AnnotateTextResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnnotateText[0:len(c.CallOptions.AnnotateText):len(c.CallOptions.AnnotateText)], opts...)
var resp *languagepb.AnnotateTextResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/logging/apiv2/config_client.go b/logging/apiv2/config_client.go
index 3df8653..99857a1 100644
--- a/logging/apiv2/config_client.go
+++ b/logging/apiv2/config_client.go
@@ -29,15 +29,21 @@
loggingpb "google.golang.org/genproto/googleapis/logging/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// ConfigCallOptions contains the retry settings for each method of ConfigClient.
type ConfigCallOptions struct {
- ListSinks []gax.CallOption
- GetSink []gax.CallOption
- CreateSink []gax.CallOption
- UpdateSink []gax.CallOption
- DeleteSink []gax.CallOption
+ ListSinks []gax.CallOption
+ GetSink []gax.CallOption
+ CreateSink []gax.CallOption
+ UpdateSink []gax.CallOption
+ DeleteSink []gax.CallOption
+ ListExclusions []gax.CallOption
+ GetExclusion []gax.CallOption
+ CreateExclusion []gax.CallOption
+ UpdateExclusion []gax.CallOption
+ DeleteExclusion []gax.CallOption
}
func defaultConfigClientOptions() []option.ClientOption {
@@ -64,11 +70,16 @@
},
}
return &ConfigCallOptions{
- ListSinks: retry[[2]string{"default", "idempotent"}],
- GetSink: retry[[2]string{"default", "idempotent"}],
- CreateSink: retry[[2]string{"default", "non_idempotent"}],
- UpdateSink: retry[[2]string{"default", "non_idempotent"}],
- DeleteSink: retry[[2]string{"default", "idempotent"}],
+ ListSinks: retry[[2]string{"default", "idempotent"}],
+ GetSink: retry[[2]string{"default", "idempotent"}],
+ CreateSink: retry[[2]string{"default", "non_idempotent"}],
+ UpdateSink: retry[[2]string{"default", "non_idempotent"}],
+ DeleteSink: retry[[2]string{"default", "idempotent"}],
+ ListExclusions: retry[[2]string{"default", "idempotent"}],
+ GetExclusion: retry[[2]string{"default", "idempotent"}],
+ CreateExclusion: retry[[2]string{"default", "non_idempotent"}],
+ UpdateExclusion: retry[[2]string{"default", "non_idempotent"}],
+ DeleteExclusion: retry[[2]string{"default", "idempotent"}],
}
}
@@ -84,7 +95,7 @@
CallOptions *ConfigCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewConfigClient creates a new config service v2 client.
@@ -123,7 +134,7 @@
func (c *ConfigClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ConfigProjectPath returns the path for the project resource.
@@ -144,9 +155,19 @@
""
}
+// ConfigExclusionPath returns the path for the exclusion resource.
+func ConfigExclusionPath(project, exclusion string) string {
+ return "" +
+ "projects/" +
+ project +
+ "/exclusions/" +
+ exclusion +
+ ""
+}
+
// ListSinks lists sinks.
func (c *ConfigClient) ListSinks(ctx context.Context, req *loggingpb.ListSinksRequest, opts ...gax.CallOption) *LogSinkIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListSinks[0:len(c.CallOptions.ListSinks):len(c.CallOptions.ListSinks)], opts...)
it := &LogSinkIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogSink, string, error) {
@@ -181,7 +202,7 @@
// GetSink gets a sink.
func (c *ConfigClient) GetSink(ctx context.Context, req *loggingpb.GetSinkRequest, opts ...gax.CallOption) (*loggingpb.LogSink, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetSink[0:len(c.CallOptions.GetSink):len(c.CallOptions.GetSink)], opts...)
var resp *loggingpb.LogSink
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -201,7 +222,7 @@
// writer_identity is not permitted to write to the destination. A sink can
// export log entries only from the resource owning the sink.
func (c *ConfigClient) CreateSink(ctx context.Context, req *loggingpb.CreateSinkRequest, opts ...gax.CallOption) (*loggingpb.LogSink, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateSink[0:len(c.CallOptions.CreateSink):len(c.CallOptions.CreateSink)], opts...)
var resp *loggingpb.LogSink
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -215,16 +236,13 @@
return resp, nil
}
-// UpdateSink updates a sink. If the named sink doesn't exist, then this method is
-// identical to
-// sinks.create (at /logging/docs/api/reference/rest/v2/projects.sinks/create).
-// If the named sink does exist, then this method replaces the following
-// fields in the existing sink with values from the new sink: destination,
-// filter, output_version_format, start_time, and end_time.
-// The updated filter might also have a new writer_identity; see the
+// UpdateSink updates a sink. This method replaces the following fields in the existing
+// sink with values from the new sink: destination, filter,
+// output_version_format, start_time, and end_time.
+// The updated sink might also have a new writer_identity; see the
// unique_writer_identity field.
func (c *ConfigClient) UpdateSink(ctx context.Context, req *loggingpb.UpdateSinkRequest, opts ...gax.CallOption) (*loggingpb.LogSink, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateSink[0:len(c.CallOptions.UpdateSink):len(c.CallOptions.UpdateSink)], opts...)
var resp *loggingpb.LogSink
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -241,7 +259,7 @@
// DeleteSink deletes a sink. If the sink has a unique writer_identity, then that
// service account is also deleted.
func (c *ConfigClient) DeleteSink(ctx context.Context, req *loggingpb.DeleteSinkRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteSink[0:len(c.CallOptions.DeleteSink):len(c.CallOptions.DeleteSink)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -251,6 +269,145 @@
return err
}
+// ListExclusions lists all the exclusions in a parent resource.
+func (c *ConfigClient) ListExclusions(ctx context.Context, req *loggingpb.ListExclusionsRequest, opts ...gax.CallOption) *LogExclusionIterator {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.ListExclusions[0:len(c.CallOptions.ListExclusions):len(c.CallOptions.ListExclusions)], opts...)
+ it := &LogExclusionIterator{}
+ it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogExclusion, string, error) {
+ var resp *loggingpb.ListExclusionsResponse
+ req.PageToken = pageToken
+ if pageSize > math.MaxInt32 {
+ req.PageSize = math.MaxInt32
+ } else {
+ req.PageSize = int32(pageSize)
+ }
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.configClient.ListExclusions(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, "", err
+ }
+ return resp.Exclusions, resp.NextPageToken, nil
+ }
+ fetch := func(pageSize int, pageToken string) (string, error) {
+ items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
+ if err != nil {
+ return "", err
+ }
+ it.items = append(it.items, items...)
+ return nextPageToken, nil
+ }
+ it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
+ return it
+}
+
+// GetExclusion gets the description of an exclusion.
+func (c *ConfigClient) GetExclusion(ctx context.Context, req *loggingpb.GetExclusionRequest, opts ...gax.CallOption) (*loggingpb.LogExclusion, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.GetExclusion[0:len(c.CallOptions.GetExclusion):len(c.CallOptions.GetExclusion)], opts...)
+ var resp *loggingpb.LogExclusion
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.configClient.GetExclusion(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// CreateExclusion creates a new exclusion in a specified parent resource.
+// Only log entries belonging to that resource can be excluded.
+// You can have up to 10 exclusions in a resource.
+func (c *ConfigClient) CreateExclusion(ctx context.Context, req *loggingpb.CreateExclusionRequest, opts ...gax.CallOption) (*loggingpb.LogExclusion, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.CreateExclusion[0:len(c.CallOptions.CreateExclusion):len(c.CallOptions.CreateExclusion)], opts...)
+ var resp *loggingpb.LogExclusion
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.configClient.CreateExclusion(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// UpdateExclusion changes one or more properties of an existing exclusion.
+func (c *ConfigClient) UpdateExclusion(ctx context.Context, req *loggingpb.UpdateExclusionRequest, opts ...gax.CallOption) (*loggingpb.LogExclusion, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.UpdateExclusion[0:len(c.CallOptions.UpdateExclusion):len(c.CallOptions.UpdateExclusion)], opts...)
+ var resp *loggingpb.LogExclusion
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.configClient.UpdateExclusion(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// DeleteExclusion deletes an exclusion.
+func (c *ConfigClient) DeleteExclusion(ctx context.Context, req *loggingpb.DeleteExclusionRequest, opts ...gax.CallOption) error {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.DeleteExclusion[0:len(c.CallOptions.DeleteExclusion):len(c.CallOptions.DeleteExclusion)], opts...)
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ _, err = c.configClient.DeleteExclusion(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ return err
+}
+
+// LogExclusionIterator manages a stream of *loggingpb.LogExclusion.
+type LogExclusionIterator struct {
+ items []*loggingpb.LogExclusion
+ pageInfo *iterator.PageInfo
+ nextFunc func() error
+
+ // InternalFetch is for use by the Google Cloud Libraries only.
+ // It is not part of the stable interface of this package.
+ //
+ // InternalFetch returns results from a single call to the underlying RPC.
+ // The number of results is no greater than pageSize.
+ // If there are no more results, nextPageToken is empty and err is nil.
+ InternalFetch func(pageSize int, pageToken string) (results []*loggingpb.LogExclusion, nextPageToken string, err error)
+}
+
+// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
+func (it *LogExclusionIterator) PageInfo() *iterator.PageInfo {
+ return it.pageInfo
+}
+
+// Next returns the next result. Its second return value is iterator.Done if there are no more
+// results. Once Next returns Done, all subsequent calls will return Done.
+func (it *LogExclusionIterator) Next() (*loggingpb.LogExclusion, error) {
+ var item *loggingpb.LogExclusion
+ if err := it.nextFunc(); err != nil {
+ return item, err
+ }
+ item = it.items[0]
+ it.items = it.items[1:]
+ return item, nil
+}
+
+func (it *LogExclusionIterator) bufLen() int {
+ return len(it.items)
+}
+
+func (it *LogExclusionIterator) takeBuf() interface{} {
+ b := it.items
+ it.items = nil
+ return b
+}
+
// LogSinkIterator manages a stream of *loggingpb.LogSink.
type LogSinkIterator struct {
items []*loggingpb.LogSink
diff --git a/logging/apiv2/config_client_example_test.go b/logging/apiv2/config_client_example_test.go
index 7369260..92726aa 100644
--- a/logging/apiv2/config_client_example_test.go
+++ b/logging/apiv2/config_client_example_test.go
@@ -126,3 +126,97 @@
// TODO: Handle error.
}
}
+
+func ExampleConfigClient_ListExclusions() {
+ ctx := context.Background()
+ c, err := logging.NewConfigClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &loggingpb.ListExclusionsRequest{
+ // TODO: Fill request struct fields.
+ }
+ it := c.ListExclusions(ctx, req)
+ for {
+ resp, err := it.Next()
+ if err == iterator.Done {
+ break
+ }
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+ }
+}
+
+func ExampleConfigClient_GetExclusion() {
+ ctx := context.Background()
+ c, err := logging.NewConfigClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &loggingpb.GetExclusionRequest{
+ // TODO: Fill request struct fields.
+ }
+ resp, err := c.GetExclusion(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
+func ExampleConfigClient_CreateExclusion() {
+ ctx := context.Background()
+ c, err := logging.NewConfigClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &loggingpb.CreateExclusionRequest{
+ // TODO: Fill request struct fields.
+ }
+ resp, err := c.CreateExclusion(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
+func ExampleConfigClient_UpdateExclusion() {
+ ctx := context.Background()
+ c, err := logging.NewConfigClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &loggingpb.UpdateExclusionRequest{
+ // TODO: Fill request struct fields.
+ }
+ resp, err := c.UpdateExclusion(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
+func ExampleConfigClient_DeleteExclusion() {
+ ctx := context.Background()
+ c, err := logging.NewConfigClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &loggingpb.DeleteExclusionRequest{
+ // TODO: Fill request struct fields.
+ }
+ err = c.DeleteExclusion(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+}
diff --git a/logging/apiv2/doc.go b/logging/apiv2/doc.go
index 77c43c7..1fd4991 100644
--- a/logging/apiv2/doc.go
+++ b/logging/apiv2/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package logging is an experimental, auto-generated package for the
+// Package logging is an auto-generated package for the
// Stackdriver Logging API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// The Stackdriver Logging API lets you write log entries and manage your
// logs, log sinks and logs-based metrics.
//
@@ -28,11 +30,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/logging/apiv2/logging_client.go b/logging/apiv2/logging_client.go
index 4f64ff0..964d752 100644
--- a/logging/apiv2/logging_client.go
+++ b/logging/apiv2/logging_client.go
@@ -30,6 +30,7 @@
loggingpb "google.golang.org/genproto/googleapis/logging/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -98,7 +99,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new logging service v2 client.
@@ -136,7 +137,7 @@
func (c *Client) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ProjectPath returns the path for the project resource.
@@ -162,7 +163,7 @@
// Log entries written shortly before the delete operation might not be
// deleted.
func (c *Client) DeleteLog(ctx context.Context, req *loggingpb.DeleteLogRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteLog[0:len(c.CallOptions.DeleteLog):len(c.CallOptions.DeleteLog)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -172,9 +173,15 @@
return err
}
-// WriteLogEntries writes log entries to Stackdriver Logging.
+// WriteLogEntries ## Log entry resources
+//
+// Writes log entries to Stackdriver Logging. This API method is the
+// only way to send log entries to Stackdriver Logging. This method
+// is used, directly or indirectly, by the Stackdriver Logging agent
+// (fluentd) and all logging libraries configured to use Stackdriver
+// Logging.
func (c *Client) WriteLogEntries(ctx context.Context, req *loggingpb.WriteLogEntriesRequest, opts ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.WriteLogEntries[0:len(c.CallOptions.WriteLogEntries):len(c.CallOptions.WriteLogEntries)], opts...)
var resp *loggingpb.WriteLogEntriesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -192,7 +199,7 @@
// Stackdriver Logging. For ways to export log entries, see
// Exporting Logs (at /logging/docs/export).
func (c *Client) ListLogEntries(ctx context.Context, req *loggingpb.ListLogEntriesRequest, opts ...gax.CallOption) *LogEntryIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListLogEntries[0:len(c.CallOptions.ListLogEntries):len(c.CallOptions.ListLogEntries)], opts...)
it := &LogEntryIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogEntry, string, error) {
@@ -228,7 +235,7 @@
// ListMonitoredResourceDescriptors lists the descriptors for monitored resource types used by Stackdriver
// Logging.
func (c *Client) ListMonitoredResourceDescriptors(ctx context.Context, req *loggingpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListMonitoredResourceDescriptors[0:len(c.CallOptions.ListMonitoredResourceDescriptors):len(c.CallOptions.ListMonitoredResourceDescriptors)], opts...)
it := &MonitoredResourceDescriptorIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) {
@@ -264,7 +271,7 @@
// ListLogs lists the logs in projects, organizations, folders, or billing accounts.
// Only logs that have entries are listed.
func (c *Client) ListLogs(ctx context.Context, req *loggingpb.ListLogsRequest, opts ...gax.CallOption) *StringIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListLogs[0:len(c.CallOptions.ListLogs):len(c.CallOptions.ListLogs)], opts...)
it := &StringIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) {
diff --git a/logging/apiv2/metrics_client.go b/logging/apiv2/metrics_client.go
index e4cc57f..3393290 100644
--- a/logging/apiv2/metrics_client.go
+++ b/logging/apiv2/metrics_client.go
@@ -29,6 +29,7 @@
loggingpb "google.golang.org/genproto/googleapis/logging/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// MetricsCallOptions contains the retry settings for each method of MetricsClient.
@@ -84,7 +85,7 @@
CallOptions *MetricsCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewMetricsClient creates a new metrics service v2 client.
@@ -122,7 +123,7 @@
func (c *MetricsClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// MetricsProjectPath returns the path for the project resource.
@@ -145,7 +146,7 @@
// ListLogMetrics lists logs-based metrics.
func (c *MetricsClient) ListLogMetrics(ctx context.Context, req *loggingpb.ListLogMetricsRequest, opts ...gax.CallOption) *LogMetricIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListLogMetrics[0:len(c.CallOptions.ListLogMetrics):len(c.CallOptions.ListLogMetrics)], opts...)
it := &LogMetricIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogMetric, string, error) {
@@ -180,7 +181,7 @@
// GetLogMetric gets a logs-based metric.
func (c *MetricsClient) GetLogMetric(ctx context.Context, req *loggingpb.GetLogMetricRequest, opts ...gax.CallOption) (*loggingpb.LogMetric, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetLogMetric[0:len(c.CallOptions.GetLogMetric):len(c.CallOptions.GetLogMetric)], opts...)
var resp *loggingpb.LogMetric
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -196,7 +197,7 @@
// CreateLogMetric creates a logs-based metric.
func (c *MetricsClient) CreateLogMetric(ctx context.Context, req *loggingpb.CreateLogMetricRequest, opts ...gax.CallOption) (*loggingpb.LogMetric, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateLogMetric[0:len(c.CallOptions.CreateLogMetric):len(c.CallOptions.CreateLogMetric)], opts...)
var resp *loggingpb.LogMetric
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -212,7 +213,7 @@
// UpdateLogMetric creates or updates a logs-based metric.
func (c *MetricsClient) UpdateLogMetric(ctx context.Context, req *loggingpb.UpdateLogMetricRequest, opts ...gax.CallOption) (*loggingpb.LogMetric, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateLogMetric[0:len(c.CallOptions.UpdateLogMetric):len(c.CallOptions.UpdateLogMetric)], opts...)
var resp *loggingpb.LogMetric
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -228,7 +229,7 @@
// DeleteLogMetric deletes a logs-based metric.
func (c *MetricsClient) DeleteLogMetric(ctx context.Context, req *loggingpb.DeleteLogMetricRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteLogMetric[0:len(c.CallOptions.DeleteLogMetric):len(c.CallOptions.DeleteLogMetric)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
diff --git a/logging/apiv2/mock_test.go b/logging/apiv2/mock_test.go
index 746dcd2..84be19c 100644
--- a/logging/apiv2/mock_test.go
+++ b/logging/apiv2/mock_test.go
@@ -20,6 +20,7 @@
emptypb "github.com/golang/protobuf/ptypes/empty"
monitoredrespb "google.golang.org/genproto/googleapis/api/monitoredres"
loggingpb "google.golang.org/genproto/googleapis/logging/v2"
+ field_maskpb "google.golang.org/genproto/protobuf/field_mask"
)
import (
@@ -197,6 +198,66 @@
return s.resps[0].(*emptypb.Empty), nil
}
+func (s *mockConfigServer) ListExclusions(ctx context.Context, req *loggingpb.ListExclusionsRequest) (*loggingpb.ListExclusionsResponse, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*loggingpb.ListExclusionsResponse), nil
+}
+
+func (s *mockConfigServer) GetExclusion(ctx context.Context, req *loggingpb.GetExclusionRequest) (*loggingpb.LogExclusion, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*loggingpb.LogExclusion), nil
+}
+
+func (s *mockConfigServer) CreateExclusion(ctx context.Context, req *loggingpb.CreateExclusionRequest) (*loggingpb.LogExclusion, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*loggingpb.LogExclusion), nil
+}
+
+func (s *mockConfigServer) UpdateExclusion(ctx context.Context, req *loggingpb.UpdateExclusionRequest) (*loggingpb.LogExclusion, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*loggingpb.LogExclusion), nil
+}
+
+func (s *mockConfigServer) DeleteExclusion(ctx context.Context, req *loggingpb.DeleteExclusionRequest) (*emptypb.Empty, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*emptypb.Empty), nil
+}
+
type mockMetricsServer struct {
// Embed for forward compatibility.
// Tests will keep working if more methods are added
@@ -956,6 +1017,337 @@
t.Errorf("got error code %q, want %q", c, errCode)
}
}
+func TestConfigServiceV2ListExclusions(t *testing.T) {
+ var nextPageToken string = ""
+ var exclusionsElement *loggingpb.LogExclusion = &loggingpb.LogExclusion{}
+ var exclusions = []*loggingpb.LogExclusion{exclusionsElement}
+ var expectedResponse = &loggingpb.ListExclusionsResponse{
+ NextPageToken: nextPageToken,
+ Exclusions: exclusions,
+ }
+
+ mockConfig.err = nil
+ mockConfig.reqs = nil
+
+ mockConfig.resps = append(mockConfig.resps[:0], expectedResponse)
+
+ var formattedParent string = ConfigProjectPath("[PROJECT]")
+ var request = &loggingpb.ListExclusionsRequest{
+ Parent: formattedParent,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.ListExclusions(context.Background(), request).Next()
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockConfig.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ want := (interface{})(expectedResponse.Exclusions[0])
+ got := (interface{})(resp)
+ var ok bool
+
+ switch want := (want).(type) {
+ case proto.Message:
+ ok = proto.Equal(want, got.(proto.Message))
+ default:
+ ok = want == got
+ }
+ if !ok {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestConfigServiceV2ListExclusionsError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockConfig.err = gstatus.Error(errCode, "test error")
+
+ var formattedParent string = ConfigProjectPath("[PROJECT]")
+ var request = &loggingpb.ListExclusionsRequest{
+ Parent: formattedParent,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.ListExclusions(context.Background(), request).Next()
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestConfigServiceV2GetExclusion(t *testing.T) {
+ var name2 string = "name2-1052831874"
+ var description string = "description-1724546052"
+ var filter string = "filter-1274492040"
+ var disabled bool = true
+ var expectedResponse = &loggingpb.LogExclusion{
+ Name: name2,
+ Description: description,
+ Filter: filter,
+ Disabled: disabled,
+ }
+
+ mockConfig.err = nil
+ mockConfig.reqs = nil
+
+ mockConfig.resps = append(mockConfig.resps[:0], expectedResponse)
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var request = &loggingpb.GetExclusionRequest{
+ Name: formattedName,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.GetExclusion(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockConfig.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestConfigServiceV2GetExclusionError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockConfig.err = gstatus.Error(errCode, "test error")
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var request = &loggingpb.GetExclusionRequest{
+ Name: formattedName,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.GetExclusion(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestConfigServiceV2CreateExclusion(t *testing.T) {
+ var name string = "name3373707"
+ var description string = "description-1724546052"
+ var filter string = "filter-1274492040"
+ var disabled bool = true
+ var expectedResponse = &loggingpb.LogExclusion{
+ Name: name,
+ Description: description,
+ Filter: filter,
+ Disabled: disabled,
+ }
+
+ mockConfig.err = nil
+ mockConfig.reqs = nil
+
+ mockConfig.resps = append(mockConfig.resps[:0], expectedResponse)
+
+ var formattedParent string = ConfigProjectPath("[PROJECT]")
+ var exclusion *loggingpb.LogExclusion = &loggingpb.LogExclusion{}
+ var request = &loggingpb.CreateExclusionRequest{
+ Parent: formattedParent,
+ Exclusion: exclusion,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.CreateExclusion(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockConfig.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestConfigServiceV2CreateExclusionError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockConfig.err = gstatus.Error(errCode, "test error")
+
+ var formattedParent string = ConfigProjectPath("[PROJECT]")
+ var exclusion *loggingpb.LogExclusion = &loggingpb.LogExclusion{}
+ var request = &loggingpb.CreateExclusionRequest{
+ Parent: formattedParent,
+ Exclusion: exclusion,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.CreateExclusion(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestConfigServiceV2UpdateExclusion(t *testing.T) {
+ var name2 string = "name2-1052831874"
+ var description string = "description-1724546052"
+ var filter string = "filter-1274492040"
+ var disabled bool = true
+ var expectedResponse = &loggingpb.LogExclusion{
+ Name: name2,
+ Description: description,
+ Filter: filter,
+ Disabled: disabled,
+ }
+
+ mockConfig.err = nil
+ mockConfig.reqs = nil
+
+ mockConfig.resps = append(mockConfig.resps[:0], expectedResponse)
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var exclusion *loggingpb.LogExclusion = &loggingpb.LogExclusion{}
+ var updateMask *field_maskpb.FieldMask = &field_maskpb.FieldMask{}
+ var request = &loggingpb.UpdateExclusionRequest{
+ Name: formattedName,
+ Exclusion: exclusion,
+ UpdateMask: updateMask,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.UpdateExclusion(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockConfig.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestConfigServiceV2UpdateExclusionError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockConfig.err = gstatus.Error(errCode, "test error")
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var exclusion *loggingpb.LogExclusion = &loggingpb.LogExclusion{}
+ var updateMask *field_maskpb.FieldMask = &field_maskpb.FieldMask{}
+ var request = &loggingpb.UpdateExclusionRequest{
+ Name: formattedName,
+ Exclusion: exclusion,
+ UpdateMask: updateMask,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.UpdateExclusion(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestConfigServiceV2DeleteExclusion(t *testing.T) {
+ var expectedResponse *emptypb.Empty = &emptypb.Empty{}
+
+ mockConfig.err = nil
+ mockConfig.reqs = nil
+
+ mockConfig.resps = append(mockConfig.resps[:0], expectedResponse)
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var request = &loggingpb.DeleteExclusionRequest{
+ Name: formattedName,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ err = c.DeleteExclusion(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockConfig.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+}
+
+func TestConfigServiceV2DeleteExclusionError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockConfig.err = gstatus.Error(errCode, "test error")
+
+ var formattedName string = ConfigExclusionPath("[PROJECT]", "[EXCLUSION]")
+ var request = &loggingpb.DeleteExclusionRequest{
+ Name: formattedName,
+ }
+
+ c, err := NewConfigClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ err = c.DeleteExclusion(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+}
func TestMetricsServiceV2ListLogMetrics(t *testing.T) {
var nextPageToken string = ""
var metricsElement *loggingpb.LogMetric = &loggingpb.LogMetric{}
@@ -1032,10 +1424,12 @@
var name string = "name3373707"
var description string = "description-1724546052"
var filter string = "filter-1274492040"
+ var valueExtractor string = "valueExtractor2047672534"
var expectedResponse = &loggingpb.LogMetric{
- Name: name,
- Description: description,
- Filter: filter,
+ Name: name,
+ Description: description,
+ Filter: filter,
+ ValueExtractor: valueExtractor,
}
mockMetrics.err = nil
@@ -1095,10 +1489,12 @@
var name string = "name3373707"
var description string = "description-1724546052"
var filter string = "filter-1274492040"
+ var valueExtractor string = "valueExtractor2047672534"
var expectedResponse = &loggingpb.LogMetric{
- Name: name,
- Description: description,
- Filter: filter,
+ Name: name,
+ Description: description,
+ Filter: filter,
+ ValueExtractor: valueExtractor,
}
mockMetrics.err = nil
@@ -1162,10 +1558,12 @@
var name string = "name3373707"
var description string = "description-1724546052"
var filter string = "filter-1274492040"
+ var valueExtractor string = "valueExtractor2047672534"
var expectedResponse = &loggingpb.LogMetric{
- Name: name,
- Description: description,
- Filter: filter,
+ Name: name,
+ Description: description,
+ Filter: filter,
+ ValueExtractor: valueExtractor,
}
mockMetrics.err = nil
diff --git a/longrunning/autogen/doc.go b/longrunning/autogen/doc.go
index 4958184..d75327a 100644
--- a/longrunning/autogen/doc.go
+++ b/longrunning/autogen/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package longrunning is an experimental, auto-generated package for the
+// Package longrunning is an auto-generated package for the
// Google Long Running Operations API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
//
// Use the client at cloud.google.com/go/longrunning in preference to this.
package longrunning // import "cloud.google.com/go/longrunning/autogen"
@@ -26,11 +28,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/longrunning/autogen/operations_client.go b/longrunning/autogen/operations_client.go
index 80cedf6..232979c 100644
--- a/longrunning/autogen/operations_client.go
+++ b/longrunning/autogen/operations_client.go
@@ -29,6 +29,7 @@
longrunningpb "google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// OperationsCallOptions contains the retry settings for each method of OperationsClient.
@@ -81,7 +82,7 @@
CallOptions *OperationsCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewOperationsClient creates a new operations client.
@@ -127,14 +128,14 @@
func (c *OperationsClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// GetOperation gets the latest state of a long-running operation. Clients can use this
// method to poll the operation result at intervals as recommended by the API
// service.
func (c *OperationsClient) GetOperation(ctx context.Context, req *longrunningpb.GetOperationRequest, opts ...gax.CallOption) (*longrunningpb.Operation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetOperation[0:len(c.CallOptions.GetOperation):len(c.CallOptions.GetOperation)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -154,7 +155,7 @@
// NOTE: the name binding below allows API services to override the binding
// to use different resource name schemes, such as users/*/operations.
func (c *OperationsClient) ListOperations(ctx context.Context, req *longrunningpb.ListOperationsRequest, opts ...gax.CallOption) *OperationIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListOperations[0:len(c.CallOptions.ListOperations):len(c.CallOptions.ListOperations)], opts...)
it := &OperationIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*longrunningpb.Operation, string, error) {
@@ -198,7 +199,7 @@
// an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1,
// corresponding to Code.CANCELLED.
func (c *OperationsClient) CancelOperation(ctx context.Context, req *longrunningpb.CancelOperationRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CancelOperation[0:len(c.CallOptions.CancelOperation):len(c.CallOptions.CancelOperation)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -213,7 +214,7 @@
// operation. If the server doesn't support this method, it returns
// google.rpc.Code.UNIMPLEMENTED.
func (c *OperationsClient) DeleteOperation(ctx context.Context, req *longrunningpb.DeleteOperationRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteOperation[0:len(c.CallOptions.DeleteOperation):len(c.CallOptions.DeleteOperation)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
diff --git a/monitoring/apiv3/doc.go b/monitoring/apiv3/doc.go
index 426f6a5..7dca517 100644
--- a/monitoring/apiv3/doc.go
+++ b/monitoring/apiv3/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package monitoring is an experimental, auto-generated package for the
+// Package monitoring is an auto-generated package for the
// Stackdriver Monitoring API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Manages your Stackdriver Monitoring data and configurations. Most projects
// must be associated with a Stackdriver account, with a few exceptions as
// noted on the individual method pages.
@@ -27,11 +29,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/monitoring/apiv3/group_client.go b/monitoring/apiv3/group_client.go
index d235c85..70becdd 100644
--- a/monitoring/apiv3/group_client.go
+++ b/monitoring/apiv3/group_client.go
@@ -30,6 +30,7 @@
monitoringpb "google.golang.org/genproto/googleapis/monitoring/v3"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// GroupCallOptions contains the retry settings for each method of GroupClient.
@@ -86,7 +87,7 @@
CallOptions *GroupCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewGroupClient creates a new group service client.
@@ -135,7 +136,7 @@
func (c *GroupClient) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// GroupProjectPath returns the path for the project resource.
@@ -158,7 +159,7 @@
// ListGroups lists the existing groups.
func (c *GroupClient) ListGroups(ctx context.Context, req *monitoringpb.ListGroupsRequest, opts ...gax.CallOption) *GroupIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListGroups[0:len(c.CallOptions.ListGroups):len(c.CallOptions.ListGroups)], opts...)
it := &GroupIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoringpb.Group, string, error) {
@@ -193,7 +194,7 @@
// GetGroup gets a single group.
func (c *GroupClient) GetGroup(ctx context.Context, req *monitoringpb.GetGroupRequest, opts ...gax.CallOption) (*monitoringpb.Group, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetGroup[0:len(c.CallOptions.GetGroup):len(c.CallOptions.GetGroup)], opts...)
var resp *monitoringpb.Group
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -209,7 +210,7 @@
// CreateGroup creates a new group.
func (c *GroupClient) CreateGroup(ctx context.Context, req *monitoringpb.CreateGroupRequest, opts ...gax.CallOption) (*monitoringpb.Group, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateGroup[0:len(c.CallOptions.CreateGroup):len(c.CallOptions.CreateGroup)], opts...)
var resp *monitoringpb.Group
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -226,7 +227,7 @@
// UpdateGroup updates an existing group.
// You can change any group attributes except name.
func (c *GroupClient) UpdateGroup(ctx context.Context, req *monitoringpb.UpdateGroupRequest, opts ...gax.CallOption) (*monitoringpb.Group, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateGroup[0:len(c.CallOptions.UpdateGroup):len(c.CallOptions.UpdateGroup)], opts...)
var resp *monitoringpb.Group
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -242,7 +243,7 @@
// DeleteGroup deletes an existing group.
func (c *GroupClient) DeleteGroup(ctx context.Context, req *monitoringpb.DeleteGroupRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteGroup[0:len(c.CallOptions.DeleteGroup):len(c.CallOptions.DeleteGroup)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -254,7 +255,7 @@
// ListGroupMembers lists the monitored resources that are members of a group.
func (c *GroupClient) ListGroupMembers(ctx context.Context, req *monitoringpb.ListGroupMembersRequest, opts ...gax.CallOption) *MonitoredResourceIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListGroupMembers[0:len(c.CallOptions.ListGroupMembers):len(c.CallOptions.ListGroupMembers)], opts...)
it := &MonitoredResourceIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResource, string, error) {
diff --git a/monitoring/apiv3/metric_client.go b/monitoring/apiv3/metric_client.go
index 8b35ce7..24b1422 100644
--- a/monitoring/apiv3/metric_client.go
+++ b/monitoring/apiv3/metric_client.go
@@ -31,6 +31,7 @@
monitoringpb "google.golang.org/genproto/googleapis/monitoring/v3"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// MetricCallOptions contains the retry settings for each method of MetricClient.
@@ -91,7 +92,7 @@
CallOptions *MetricCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewMetricClient creates a new metric service client.
@@ -130,7 +131,7 @@
func (c *MetricClient) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// MetricProjectPath returns the path for the project resource.
@@ -163,7 +164,7 @@
// ListMonitoredResourceDescriptors lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account.
func (c *MetricClient) ListMonitoredResourceDescriptors(ctx context.Context, req *monitoringpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListMonitoredResourceDescriptors[0:len(c.CallOptions.ListMonitoredResourceDescriptors):len(c.CallOptions.ListMonitoredResourceDescriptors)], opts...)
it := &MonitoredResourceDescriptorIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) {
@@ -198,7 +199,7 @@
// GetMonitoredResourceDescriptor gets a single monitored resource descriptor. This method does not require a Stackdriver account.
func (c *MetricClient) GetMonitoredResourceDescriptor(ctx context.Context, req *monitoringpb.GetMonitoredResourceDescriptorRequest, opts ...gax.CallOption) (*monitoredrespb.MonitoredResourceDescriptor, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetMonitoredResourceDescriptor[0:len(c.CallOptions.GetMonitoredResourceDescriptor):len(c.CallOptions.GetMonitoredResourceDescriptor)], opts...)
var resp *monitoredrespb.MonitoredResourceDescriptor
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -214,7 +215,7 @@
// ListMetricDescriptors lists metric descriptors that match a filter. This method does not require a Stackdriver account.
func (c *MetricClient) ListMetricDescriptors(ctx context.Context, req *monitoringpb.ListMetricDescriptorsRequest, opts ...gax.CallOption) *MetricDescriptorIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListMetricDescriptors[0:len(c.CallOptions.ListMetricDescriptors):len(c.CallOptions.ListMetricDescriptors)], opts...)
it := &MetricDescriptorIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*metricpb.MetricDescriptor, string, error) {
@@ -249,7 +250,7 @@
// GetMetricDescriptor gets a single metric descriptor. This method does not require a Stackdriver account.
func (c *MetricClient) GetMetricDescriptor(ctx context.Context, req *monitoringpb.GetMetricDescriptorRequest, opts ...gax.CallOption) (*metricpb.MetricDescriptor, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetMetricDescriptor[0:len(c.CallOptions.GetMetricDescriptor):len(c.CallOptions.GetMetricDescriptor)], opts...)
var resp *metricpb.MetricDescriptor
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -267,7 +268,7 @@
// User-created metric descriptors define
// custom metrics (at /monitoring/custom-metrics).
func (c *MetricClient) CreateMetricDescriptor(ctx context.Context, req *monitoringpb.CreateMetricDescriptorRequest, opts ...gax.CallOption) (*metricpb.MetricDescriptor, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateMetricDescriptor[0:len(c.CallOptions.CreateMetricDescriptor):len(c.CallOptions.CreateMetricDescriptor)], opts...)
var resp *metricpb.MetricDescriptor
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -284,7 +285,7 @@
// DeleteMetricDescriptor deletes a metric descriptor. Only user-created
// custom metrics (at /monitoring/custom-metrics) can be deleted.
func (c *MetricClient) DeleteMetricDescriptor(ctx context.Context, req *monitoringpb.DeleteMetricDescriptorRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteMetricDescriptor[0:len(c.CallOptions.DeleteMetricDescriptor):len(c.CallOptions.DeleteMetricDescriptor)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -296,7 +297,7 @@
// ListTimeSeries lists time series that match a filter. This method does not require a Stackdriver account.
func (c *MetricClient) ListTimeSeries(ctx context.Context, req *monitoringpb.ListTimeSeriesRequest, opts ...gax.CallOption) *TimeSeriesIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListTimeSeries[0:len(c.CallOptions.ListTimeSeries):len(c.CallOptions.ListTimeSeries)], opts...)
it := &TimeSeriesIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoringpb.TimeSeries, string, error) {
@@ -334,7 +335,7 @@
// If any time series could not be written, a corresponding failure message is
// included in the error response.
func (c *MetricClient) CreateTimeSeries(ctx context.Context, req *monitoringpb.CreateTimeSeriesRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateTimeSeries[0:len(c.CallOptions.CreateTimeSeries):len(c.CallOptions.CreateTimeSeries)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
diff --git a/pubsub/apiv1/doc.go b/pubsub/apiv1/doc.go
index c15769b..d34d06e 100644
--- a/pubsub/apiv1/doc.go
+++ b/pubsub/apiv1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package pubsub is an experimental, auto-generated package for the
+// Package pubsub is an auto-generated package for the
// Google Cloud Pub/Sub API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Provides reliable, many-to-many, asynchronous messaging between
// applications.
//
@@ -28,11 +30,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/pubsub/apiv1/publisher_client.go b/pubsub/apiv1/publisher_client.go
index eab21d8..6088dac 100644
--- a/pubsub/apiv1/publisher_client.go
+++ b/pubsub/apiv1/publisher_client.go
@@ -30,6 +30,7 @@
pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// PublisherCallOptions contains the retry settings for each method of PublisherClient.
@@ -67,13 +68,13 @@
{"messaging", "one_plus_delivery"}: {
gax.WithRetry(func() gax.Retryer {
return gax.OnCodes([]codes.Code{
- codes.Canceled,
- codes.Unknown,
- codes.DeadlineExceeded,
- codes.ResourceExhausted,
codes.Aborted,
+ codes.Canceled,
+ codes.DeadlineExceeded,
codes.Internal,
+ codes.ResourceExhausted,
codes.Unavailable,
+ codes.Unknown,
}, gax.Backoff{
Initial: 100 * time.Millisecond,
Max: 60000 * time.Millisecond,
@@ -105,7 +106,7 @@
CallOptions *PublisherCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewPublisherClient creates a new publisher client.
@@ -144,7 +145,7 @@
func (c *PublisherClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// PublisherProjectPath returns the path for the project resource.
@@ -175,7 +176,7 @@
// CreateTopic creates the given topic with the given name.
func (c *PublisherClient) CreateTopic(ctx context.Context, req *pubsubpb.Topic, opts ...gax.CallOption) (*pubsubpb.Topic, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateTopic[0:len(c.CallOptions.CreateTopic):len(c.CallOptions.CreateTopic)], opts...)
var resp *pubsubpb.Topic
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -196,7 +197,7 @@
// corrected in V2. See
// https://cloud.google.com/apis/design/standard_methods#update for details.
func (c *PublisherClient) UpdateTopic(ctx context.Context, req *pubsubpb.UpdateTopicRequest, opts ...gax.CallOption) (*pubsubpb.Topic, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateTopic[0:len(c.CallOptions.UpdateTopic):len(c.CallOptions.UpdateTopic)], opts...)
var resp *pubsubpb.Topic
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -214,7 +215,7 @@
// does not exist. The message payload must not be empty; it must contain
// either a non-empty data field, or at least one attribute.
func (c *PublisherClient) Publish(ctx context.Context, req *pubsubpb.PublishRequest, opts ...gax.CallOption) (*pubsubpb.PublishResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Publish[0:len(c.CallOptions.Publish):len(c.CallOptions.Publish)], opts...)
var resp *pubsubpb.PublishResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -230,7 +231,7 @@
// GetTopic gets the configuration of a topic.
func (c *PublisherClient) GetTopic(ctx context.Context, req *pubsubpb.GetTopicRequest, opts ...gax.CallOption) (*pubsubpb.Topic, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetTopic[0:len(c.CallOptions.GetTopic):len(c.CallOptions.GetTopic)], opts...)
var resp *pubsubpb.Topic
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -246,7 +247,7 @@
// ListTopics lists matching topics.
func (c *PublisherClient) ListTopics(ctx context.Context, req *pubsubpb.ListTopicsRequest, opts ...gax.CallOption) *TopicIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListTopics[0:len(c.CallOptions.ListTopics):len(c.CallOptions.ListTopics)], opts...)
it := &TopicIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*pubsubpb.Topic, string, error) {
@@ -281,7 +282,7 @@
// ListTopicSubscriptions lists the name of the subscriptions for this topic.
func (c *PublisherClient) ListTopicSubscriptions(ctx context.Context, req *pubsubpb.ListTopicSubscriptionsRequest, opts ...gax.CallOption) *StringIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListTopicSubscriptions[0:len(c.CallOptions.ListTopicSubscriptions):len(c.CallOptions.ListTopicSubscriptions)], opts...)
it := &StringIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) {
@@ -320,7 +321,7 @@
// configuration or subscriptions. Existing subscriptions to this topic are
// not deleted, but their topic field is set to _deleted-topic_.
func (c *PublisherClient) DeleteTopic(ctx context.Context, req *pubsubpb.DeleteTopicRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteTopic[0:len(c.CallOptions.DeleteTopic):len(c.CallOptions.DeleteTopic)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
diff --git a/pubsub/apiv1/subscriber_client.go b/pubsub/apiv1/subscriber_client.go
index eb6f380..574c07d 100644
--- a/pubsub/apiv1/subscriber_client.go
+++ b/pubsub/apiv1/subscriber_client.go
@@ -30,6 +30,7 @@
pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// SubscriberCallOptions contains the retry settings for each method of SubscriberClient.
@@ -77,8 +78,8 @@
return gax.OnCodes([]codes.Code{
codes.Canceled,
codes.DeadlineExceeded,
- codes.ResourceExhausted,
codes.Internal,
+ codes.ResourceExhausted,
codes.Unavailable,
}, gax.Backoff{
Initial: 100 * time.Millisecond,
@@ -92,8 +93,8 @@
return gax.OnCodes([]codes.Code{
codes.Canceled,
codes.DeadlineExceeded,
- codes.ResourceExhausted,
codes.Internal,
+ codes.ResourceExhausted,
codes.Unavailable,
}, gax.Backoff{
Initial: 100 * time.Millisecond,
@@ -134,7 +135,7 @@
CallOptions *SubscriberCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewSubscriberClient creates a new subscriber client.
@@ -173,7 +174,7 @@
func (c *SubscriberClient) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// SubscriberProjectPath returns the path for the project resource.
@@ -233,7 +234,7 @@
// The generated name is populated in the returned Subscription object.
// Note that for REST API requests, you must specify a name in the request.
func (c *SubscriberClient) CreateSubscription(ctx context.Context, req *pubsubpb.Subscription, opts ...gax.CallOption) (*pubsubpb.Subscription, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateSubscription[0:len(c.CallOptions.CreateSubscription):len(c.CallOptions.CreateSubscription)], opts...)
var resp *pubsubpb.Subscription
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -249,7 +250,7 @@
// GetSubscription gets the configuration details of a subscription.
func (c *SubscriberClient) GetSubscription(ctx context.Context, req *pubsubpb.GetSubscriptionRequest, opts ...gax.CallOption) (*pubsubpb.Subscription, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetSubscription[0:len(c.CallOptions.GetSubscription):len(c.CallOptions.GetSubscription)], opts...)
var resp *pubsubpb.Subscription
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -270,7 +271,7 @@
// corrected in V2. See
// https://cloud.google.com/apis/design/standard_methods#update for details.
func (c *SubscriberClient) UpdateSubscription(ctx context.Context, req *pubsubpb.UpdateSubscriptionRequest, opts ...gax.CallOption) (*pubsubpb.Subscription, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateSubscription[0:len(c.CallOptions.UpdateSubscription):len(c.CallOptions.UpdateSubscription)], opts...)
var resp *pubsubpb.Subscription
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -286,7 +287,7 @@
// ListSubscriptions lists matching subscriptions.
func (c *SubscriberClient) ListSubscriptions(ctx context.Context, req *pubsubpb.ListSubscriptionsRequest, opts ...gax.CallOption) *SubscriptionIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListSubscriptions[0:len(c.CallOptions.ListSubscriptions):len(c.CallOptions.ListSubscriptions)], opts...)
it := &SubscriptionIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*pubsubpb.Subscription, string, error) {
@@ -325,7 +326,7 @@
// the same name, but the new one has no association with the old
// subscription or its topic unless the same topic is specified.
func (c *SubscriberClient) DeleteSubscription(ctx context.Context, req *pubsubpb.DeleteSubscriptionRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteSubscription[0:len(c.CallOptions.DeleteSubscription):len(c.CallOptions.DeleteSubscription)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -341,7 +342,7 @@
// processing was interrupted. Note that this does not modify the
// subscription-level ackDeadlineSeconds used for subsequent messages.
func (c *SubscriberClient) ModifyAckDeadline(ctx context.Context, req *pubsubpb.ModifyAckDeadlineRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ModifyAckDeadline[0:len(c.CallOptions.ModifyAckDeadline):len(c.CallOptions.ModifyAckDeadline)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -359,7 +360,7 @@
// but such a message may be redelivered later. Acknowledging a message more
// than once will not result in an error.
func (c *SubscriberClient) Acknowledge(ctx context.Context, req *pubsubpb.AcknowledgeRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Acknowledge[0:len(c.CallOptions.Acknowledge):len(c.CallOptions.Acknowledge)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -374,7 +375,7 @@
// there are too many concurrent pull requests pending for the given
// subscription.
func (c *SubscriberClient) Pull(ctx context.Context, req *pubsubpb.PullRequest, opts ...gax.CallOption) (*pubsubpb.PullResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Pull[0:len(c.CallOptions.Pull):len(c.CallOptions.Pull)], opts...)
var resp *pubsubpb.PullResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -401,7 +402,7 @@
// (e.g., a server restart). These should also be retried by the client. Flow
// control can be achieved by configuring the underlying RPC channel.
func (c *SubscriberClient) StreamingPull(ctx context.Context, opts ...gax.CallOption) (pubsubpb.Subscriber_StreamingPullClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.StreamingPull[0:len(c.CallOptions.StreamingPull):len(c.CallOptions.StreamingPull)], opts...)
var resp pubsubpb.Subscriber_StreamingPullClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -422,7 +423,7 @@
// attributes of a push subscription. Messages will accumulate for delivery
// continuously through the call regardless of changes to the PushConfig.
func (c *SubscriberClient) ModifyPushConfig(ctx context.Context, req *pubsubpb.ModifyPushConfigRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ModifyPushConfig[0:len(c.CallOptions.ModifyPushConfig):len(c.CallOptions.ModifyPushConfig)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -434,7 +435,7 @@
// ListSnapshots lists the existing snapshots.
func (c *SubscriberClient) ListSnapshots(ctx context.Context, req *pubsubpb.ListSnapshotsRequest, opts ...gax.CallOption) *SnapshotIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListSnapshots[0:len(c.CallOptions.ListSnapshots):len(c.CallOptions.ListSnapshots)], opts...)
it := &SnapshotIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*pubsubpb.Snapshot, string, error) {
@@ -478,7 +479,7 @@
// The generated name is populated in the returned Snapshot object.
// Note that for REST API requests, you must specify a name in the request.
func (c *SubscriberClient) CreateSnapshot(ctx context.Context, req *pubsubpb.CreateSnapshotRequest, opts ...gax.CallOption) (*pubsubpb.Snapshot, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateSnapshot[0:len(c.CallOptions.CreateSnapshot):len(c.CallOptions.CreateSnapshot)], opts...)
var resp *pubsubpb.Snapshot
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -499,7 +500,7 @@
// corrected in V2. See
// https://cloud.google.com/apis/design/standard_methods#update for details.
func (c *SubscriberClient) UpdateSnapshot(ctx context.Context, req *pubsubpb.UpdateSnapshotRequest, opts ...gax.CallOption) (*pubsubpb.Snapshot, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateSnapshot[0:len(c.CallOptions.UpdateSnapshot):len(c.CallOptions.UpdateSnapshot)], opts...)
var resp *pubsubpb.Snapshot
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -518,7 +519,7 @@
// created with the same name, but the new one has no association with the old
// snapshot or its subscription, unless the same subscription is specified.
func (c *SubscriberClient) DeleteSnapshot(ctx context.Context, req *pubsubpb.DeleteSnapshotRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteSnapshot[0:len(c.CallOptions.DeleteSnapshot):len(c.CallOptions.DeleteSnapshot)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -531,7 +532,7 @@
// Seek seeks an existing subscription to a point in time or to a given snapshot,
// whichever is provided in the request.
func (c *SubscriberClient) Seek(ctx context.Context, req *pubsubpb.SeekRequest, opts ...gax.CallOption) (*pubsubpb.SeekResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Seek[0:len(c.CallOptions.Seek):len(c.CallOptions.Seek)], opts...)
var resp *pubsubpb.SeekResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/spanner/admin/database/apiv1/database_admin_client.go b/spanner/admin/database/apiv1/database_admin_client.go
index b256ebc..ba01a89 100644
--- a/spanner/admin/database/apiv1/database_admin_client.go
+++ b/spanner/admin/database/apiv1/database_admin_client.go
@@ -33,6 +33,7 @@
databasepb "google.golang.org/genproto/googleapis/spanner/admin/database/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// DatabaseAdminCallOptions contains the retry settings for each method of DatabaseAdminClient.
@@ -100,7 +101,7 @@
CallOptions *DatabaseAdminCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewDatabaseAdminClient creates a new database admin client.
@@ -153,7 +154,7 @@
func (c *DatabaseAdminClient) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// DatabaseAdminInstancePath returns the path for the instance resource.
@@ -180,7 +181,7 @@
// ListDatabases lists Cloud Spanner databases.
func (c *DatabaseAdminClient) ListDatabases(ctx context.Context, req *databasepb.ListDatabasesRequest, opts ...gax.CallOption) *DatabaseIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListDatabases[0:len(c.CallOptions.ListDatabases):len(c.CallOptions.ListDatabases)], opts...)
it := &DatabaseIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*databasepb.Database, string, error) {
@@ -222,7 +223,7 @@
// [response][google.longrunning.Operation.response] field type is
// [Database][google.spanner.admin.database.v1.Database], if successful.
func (c *DatabaseAdminClient) CreateDatabase(ctx context.Context, req *databasepb.CreateDatabaseRequest, opts ...gax.CallOption) (*CreateDatabaseOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateDatabase[0:len(c.CallOptions.CreateDatabase):len(c.CallOptions.CreateDatabase)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -240,7 +241,7 @@
// GetDatabase gets the state of a Cloud Spanner database.
func (c *DatabaseAdminClient) GetDatabase(ctx context.Context, req *databasepb.GetDatabaseRequest, opts ...gax.CallOption) (*databasepb.Database, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetDatabase[0:len(c.CallOptions.GetDatabase):len(c.CallOptions.GetDatabase)], opts...)
var resp *databasepb.Database
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -262,7 +263,7 @@
// [metadata][google.longrunning.Operation.metadata] field type is
// [UpdateDatabaseDdlMetadata][google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata]. The operation has no response.
func (c *DatabaseAdminClient) UpdateDatabaseDdl(ctx context.Context, req *databasepb.UpdateDatabaseDdlRequest, opts ...gax.CallOption) (*UpdateDatabaseDdlOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateDatabaseDdl[0:len(c.CallOptions.UpdateDatabaseDdl):len(c.CallOptions.UpdateDatabaseDdl)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -280,7 +281,7 @@
// DropDatabase drops (aka deletes) a Cloud Spanner database.
func (c *DatabaseAdminClient) DropDatabase(ctx context.Context, req *databasepb.DropDatabaseRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DropDatabase[0:len(c.CallOptions.DropDatabase):len(c.CallOptions.DropDatabase)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -294,7 +295,7 @@
// DDL statements. This method does not show pending schema updates, those may
// be queried using the [Operations][google.longrunning.Operations] API.
func (c *DatabaseAdminClient) GetDatabaseDdl(ctx context.Context, req *databasepb.GetDatabaseDdlRequest, opts ...gax.CallOption) (*databasepb.GetDatabaseDdlResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetDatabaseDdl[0:len(c.CallOptions.GetDatabaseDdl):len(c.CallOptions.GetDatabaseDdl)], opts...)
var resp *databasepb.GetDatabaseDdlResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -314,7 +315,7 @@
// Authorization requires spanner.databases.setIamPolicy permission on
// [resource][google.iam.v1.SetIamPolicyRequest.resource].
func (c *DatabaseAdminClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
var resp *iampb.Policy
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -334,7 +335,7 @@
// Authorization requires spanner.databases.getIamPolicy permission on
// [resource][google.iam.v1.GetIamPolicyRequest.resource].
func (c *DatabaseAdminClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
var resp *iampb.Policy
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -355,7 +356,7 @@
// the containing Cloud Spanner instance. Otherwise returns an empty set of
// permissions.
func (c *DatabaseAdminClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
var resp *iampb.TestIamPermissionsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/spanner/admin/database/apiv1/doc.go b/spanner/admin/database/apiv1/doc.go
index 9c56f1e..f5f3c57 100644
--- a/spanner/admin/database/apiv1/doc.go
+++ b/spanner/admin/database/apiv1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package database is an experimental, auto-generated package for the
+// Package database is an auto-generated package for the
// Cloud Spanner Database Admin API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
package database // import "cloud.google.com/go/spanner/admin/database/apiv1"
import (
@@ -24,11 +26,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/spanner/admin/instance/apiv1/doc.go b/spanner/admin/instance/apiv1/doc.go
index 332b695..3cf6c8f 100644
--- a/spanner/admin/instance/apiv1/doc.go
+++ b/spanner/admin/instance/apiv1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package instance is an experimental, auto-generated package for the
+// Package instance is an auto-generated package for the
// Cloud Spanner Instance Admin API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
package instance // import "cloud.google.com/go/spanner/admin/instance/apiv1"
import (
@@ -24,11 +26,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/spanner/admin/instance/apiv1/instance_admin_client.go b/spanner/admin/instance/apiv1/instance_admin_client.go
index 125fc35..6c7392c 100644
--- a/spanner/admin/instance/apiv1/instance_admin_client.go
+++ b/spanner/admin/instance/apiv1/instance_admin_client.go
@@ -33,6 +33,7 @@
instancepb "google.golang.org/genproto/googleapis/spanner/admin/instance/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// InstanceAdminCallOptions contains the retry settings for each method of InstanceAdminClient.
@@ -102,7 +103,7 @@
CallOptions *InstanceAdminCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewInstanceAdminClient creates a new instance admin client.
@@ -171,7 +172,7 @@
func (c *InstanceAdminClient) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// InstanceAdminProjectPath returns the path for the project resource.
@@ -204,7 +205,7 @@
// ListInstanceConfigs lists the supported instance configurations for a given project.
func (c *InstanceAdminClient) ListInstanceConfigs(ctx context.Context, req *instancepb.ListInstanceConfigsRequest, opts ...gax.CallOption) *InstanceConfigIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListInstanceConfigs[0:len(c.CallOptions.ListInstanceConfigs):len(c.CallOptions.ListInstanceConfigs)], opts...)
it := &InstanceConfigIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*instancepb.InstanceConfig, string, error) {
@@ -239,7 +240,7 @@
// GetInstanceConfig gets information about a particular instance configuration.
func (c *InstanceAdminClient) GetInstanceConfig(ctx context.Context, req *instancepb.GetInstanceConfigRequest, opts ...gax.CallOption) (*instancepb.InstanceConfig, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetInstanceConfig[0:len(c.CallOptions.GetInstanceConfig):len(c.CallOptions.GetInstanceConfig)], opts...)
var resp *instancepb.InstanceConfig
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -255,7 +256,7 @@
// ListInstances lists all instances in the given project.
func (c *InstanceAdminClient) ListInstances(ctx context.Context, req *instancepb.ListInstancesRequest, opts ...gax.CallOption) *InstanceIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListInstances[0:len(c.CallOptions.ListInstances):len(c.CallOptions.ListInstances)], opts...)
it := &InstanceIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*instancepb.Instance, string, error) {
@@ -290,7 +291,7 @@
// GetInstance gets information about a particular instance.
func (c *InstanceAdminClient) GetInstance(ctx context.Context, req *instancepb.GetInstanceRequest, opts ...gax.CallOption) (*instancepb.Instance, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetInstance[0:len(c.CallOptions.GetInstance):len(c.CallOptions.GetInstance)], opts...)
var resp *instancepb.Instance
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -344,7 +345,7 @@
// The [response][google.longrunning.Operation.response] field type is
// [Instance][google.spanner.admin.instance.v1.Instance], if successful.
func (c *InstanceAdminClient) CreateInstance(ctx context.Context, req *instancepb.CreateInstanceRequest, opts ...gax.CallOption) (*CreateInstanceOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateInstance[0:len(c.CallOptions.CreateInstance):len(c.CallOptions.CreateInstance)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -405,7 +406,7 @@
// Authorization requires spanner.instances.update permission on
// resource [name][google.spanner.admin.instance.v1.Instance.name].
func (c *InstanceAdminClient) UpdateInstance(ctx context.Context, req *instancepb.UpdateInstanceRequest, opts ...gax.CallOption) (*UpdateInstanceOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.UpdateInstance[0:len(c.CallOptions.UpdateInstance):len(c.CallOptions.UpdateInstance)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -433,7 +434,7 @@
// irrevocably disappear from the API. All data in the databases
// is permanently deleted.
func (c *InstanceAdminClient) DeleteInstance(ctx context.Context, req *instancepb.DeleteInstanceRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteInstance[0:len(c.CallOptions.DeleteInstance):len(c.CallOptions.DeleteInstance)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -449,7 +450,7 @@
// Authorization requires spanner.instances.setIamPolicy on
// [resource][google.iam.v1.SetIamPolicyRequest.resource].
func (c *InstanceAdminClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
var resp *iampb.Policy
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -469,7 +470,7 @@
// Authorization requires spanner.instances.getIamPolicy on
// [resource][google.iam.v1.GetIamPolicyRequest.resource].
func (c *InstanceAdminClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
var resp *iampb.Policy
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -490,7 +491,7 @@
// permission on the containing Google Cloud Project. Otherwise returns an
// empty set of permissions.
func (c *InstanceAdminClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
var resp *iampb.TestIamPermissionsResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/spanner/apiv1/doc.go b/spanner/apiv1/doc.go
index d6bf754..f64f860 100644
--- a/spanner/apiv1/doc.go
+++ b/spanner/apiv1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package spanner is an experimental, auto-generated package for the
+// Package spanner is an auto-generated package for the
// Cloud Spanner API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Cloud Spanner is a managed, mission-critical, globally consistent and
// scalable relational database service.
//
@@ -28,11 +30,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/spanner/apiv1/mock_test.go b/spanner/apiv1/mock_test.go
index dd8a546..bffe7f6 100644
--- a/spanner/apiv1/mock_test.go
+++ b/spanner/apiv1/mock_test.go
@@ -85,6 +85,18 @@
return s.resps[0].(*spannerpb.Session), nil
}
+func (s *mockSpannerServer) ListSessions(ctx context.Context, req *spannerpb.ListSessionsRequest) (*spannerpb.ListSessionsResponse, error) {
+ md, _ := metadata.FromIncomingContext(ctx)
+ if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
+ return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
+ }
+ s.reqs = append(s.reqs, req)
+ if s.err != nil {
+ return nil, s.err
+ }
+ return s.resps[0].(*spannerpb.ListSessionsResponse), nil
+}
+
func (s *mockSpannerServer) DeleteSession(ctx context.Context, req *spannerpb.DeleteSessionRequest) (*emptypb.Empty, error) {
md, _ := metadata.FromIncomingContext(ctx)
if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
@@ -338,6 +350,78 @@
}
_ = resp
}
+func TestSpannerListSessions(t *testing.T) {
+ var nextPageToken string = ""
+ var sessionsElement *spannerpb.Session = &spannerpb.Session{}
+ var sessions = []*spannerpb.Session{sessionsElement}
+ var expectedResponse = &spannerpb.ListSessionsResponse{
+ NextPageToken: nextPageToken,
+ Sessions: sessions,
+ }
+
+ mockSpanner.err = nil
+ mockSpanner.reqs = nil
+
+ mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
+
+ var formattedDatabase string = DatabasePath("[PROJECT]", "[INSTANCE]", "[DATABASE]")
+ var request = &spannerpb.ListSessionsRequest{
+ Database: formattedDatabase,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.ListSessions(context.Background(), request).Next()
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ want := (interface{})(expectedResponse.Sessions[0])
+ got := (interface{})(resp)
+ var ok bool
+
+ switch want := (want).(type) {
+ case proto.Message:
+ ok = proto.Equal(want, got.(proto.Message))
+ default:
+ ok = want == got
+ }
+ if !ok {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestSpannerListSessionsError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockSpanner.err = gstatus.Error(errCode, "test error")
+
+ var formattedDatabase string = DatabasePath("[PROJECT]", "[INSTANCE]", "[DATABASE]")
+ var request = &spannerpb.ListSessionsRequest{
+ Database: formattedDatabase,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.ListSessions(context.Background(), request).Next()
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
func TestSpannerDeleteSession(t *testing.T) {
var expectedResponse *emptypb.Empty = &emptypb.Empty{}
diff --git a/spanner/apiv1/spanner_client.go b/spanner/apiv1/spanner_client.go
index d20a93d..af4ce90 100644
--- a/spanner/apiv1/spanner_client.go
+++ b/spanner/apiv1/spanner_client.go
@@ -17,22 +17,26 @@
package spanner
import (
+ "math"
"time"
"cloud.google.com/go/internal/version"
gax "github.com/googleapis/gax-go"
"golang.org/x/net/context"
+ "google.golang.org/api/iterator"
"google.golang.org/api/option"
"google.golang.org/api/transport"
spannerpb "google.golang.org/genproto/googleapis/spanner/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
type CallOptions struct {
CreateSession []gax.CallOption
GetSession []gax.CallOption
+ ListSessions []gax.CallOption
DeleteSession []gax.CallOption
ExecuteSql []gax.CallOption
ExecuteStreamingSql []gax.CallOption
@@ -79,6 +83,7 @@
return &CallOptions{
CreateSession: retry[[2]string{"default", "idempotent"}],
GetSession: retry[[2]string{"default", "idempotent"}],
+ ListSessions: retry[[2]string{"default", "idempotent"}],
DeleteSession: retry[[2]string{"default", "idempotent"}],
ExecuteSql: retry[[2]string{"default", "idempotent"}],
ExecuteStreamingSql: retry[[2]string{"default", "non_idempotent"}],
@@ -102,7 +107,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new spanner client.
@@ -143,7 +148,7 @@
func (c *Client) SetGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// DatabasePath returns the path for the database resource.
@@ -192,7 +197,7 @@
// Idle sessions can be kept alive by sending a trivial SQL query
// periodically, e.g., "SELECT 1".
func (c *Client) CreateSession(ctx context.Context, req *spannerpb.CreateSessionRequest, opts ...gax.CallOption) (*spannerpb.Session, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.CreateSession[0:len(c.CallOptions.CreateSession):len(c.CallOptions.CreateSession)], opts...)
var resp *spannerpb.Session
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -210,7 +215,7 @@
// This is mainly useful for determining whether a session is still
// alive.
func (c *Client) GetSession(ctx context.Context, req *spannerpb.GetSessionRequest, opts ...gax.CallOption) (*spannerpb.Session, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.GetSession[0:len(c.CallOptions.GetSession):len(c.CallOptions.GetSession)], opts...)
var resp *spannerpb.Session
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -224,9 +229,44 @@
return resp, nil
}
+// ListSessions lists all sessions in a given database.
+func (c *Client) ListSessions(ctx context.Context, req *spannerpb.ListSessionsRequest, opts ...gax.CallOption) *SessionIterator {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.ListSessions[0:len(c.CallOptions.ListSessions):len(c.CallOptions.ListSessions)], opts...)
+ it := &SessionIterator{}
+ it.InternalFetch = func(pageSize int, pageToken string) ([]*spannerpb.Session, string, error) {
+ var resp *spannerpb.ListSessionsResponse
+ req.PageToken = pageToken
+ if pageSize > math.MaxInt32 {
+ req.PageSize = math.MaxInt32
+ } else {
+ req.PageSize = int32(pageSize)
+ }
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.client.ListSessions(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, "", err
+ }
+ return resp.Sessions, resp.NextPageToken, nil
+ }
+ fetch := func(pageSize int, pageToken string) (string, error) {
+ items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
+ if err != nil {
+ return "", err
+ }
+ it.items = append(it.items, items...)
+ return nextPageToken, nil
+ }
+ it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
+ return it
+}
+
// DeleteSession ends a session, releasing server resources associated with it.
func (c *Client) DeleteSession(ctx context.Context, req *spannerpb.DeleteSessionRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.DeleteSession[0:len(c.CallOptions.DeleteSession):len(c.CallOptions.DeleteSession)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -248,7 +288,7 @@
// Larger result sets can be fetched in streaming fashion by calling
// [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
func (c *Client) ExecuteSql(ctx context.Context, req *spannerpb.ExecuteSqlRequest, opts ...gax.CallOption) (*spannerpb.ResultSet, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ExecuteSql[0:len(c.CallOptions.ExecuteSql):len(c.CallOptions.ExecuteSql)], opts...)
var resp *spannerpb.ResultSet
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -268,7 +308,7 @@
// individual row in the result set can exceed 100 MiB, and no
// column value can exceed 10 MiB.
func (c *Client) ExecuteStreamingSql(ctx context.Context, req *spannerpb.ExecuteSqlRequest, opts ...gax.CallOption) (spannerpb.Spanner_ExecuteStreamingSqlClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ExecuteStreamingSql[0:len(c.CallOptions.ExecuteStreamingSql):len(c.CallOptions.ExecuteStreamingSql)], opts...)
var resp spannerpb.Spanner_ExecuteStreamingSqlClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -296,7 +336,7 @@
// Larger result sets can be yielded in streaming fashion by calling
// [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
func (c *Client) Read(ctx context.Context, req *spannerpb.ReadRequest, opts ...gax.CallOption) (*spannerpb.ResultSet, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Read[0:len(c.CallOptions.Read):len(c.CallOptions.Read)], opts...)
var resp *spannerpb.ResultSet
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -316,7 +356,7 @@
// the result set can exceed 100 MiB, and no column value can exceed
// 10 MiB.
func (c *Client) StreamingRead(ctx context.Context, req *spannerpb.ReadRequest, opts ...gax.CallOption) (spannerpb.Spanner_StreamingReadClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.StreamingRead[0:len(c.CallOptions.StreamingRead):len(c.CallOptions.StreamingRead)], opts...)
var resp spannerpb.Spanner_StreamingReadClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -335,7 +375,7 @@
// [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
// side-effect.
func (c *Client) BeginTransaction(ctx context.Context, req *spannerpb.BeginTransactionRequest, opts ...gax.CallOption) (*spannerpb.Transaction, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.BeginTransaction[0:len(c.CallOptions.BeginTransaction):len(c.CallOptions.BeginTransaction)], opts...)
var resp *spannerpb.Transaction
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -358,7 +398,7 @@
// reasons. If Commit returns ABORTED, the caller should re-attempt
// the transaction from the beginning, re-using the same session.
func (c *Client) Commit(ctx context.Context, req *spannerpb.CommitRequest, opts ...gax.CallOption) (*spannerpb.CommitResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Commit[0:len(c.CallOptions.Commit):len(c.CallOptions.Commit)], opts...)
var resp *spannerpb.CommitResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -381,7 +421,7 @@
// transaction was already aborted, or the transaction is not
// found. Rollback never returns ABORTED.
func (c *Client) Rollback(ctx context.Context, req *spannerpb.RollbackRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Rollback[0:len(c.CallOptions.Rollback):len(c.CallOptions.Rollback)], opts...)
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
var err error
@@ -390,3 +430,45 @@
}, opts...)
return err
}
+
+// SessionIterator manages a stream of *spannerpb.Session.
+type SessionIterator struct {
+ items []*spannerpb.Session
+ pageInfo *iterator.PageInfo
+ nextFunc func() error
+
+ // InternalFetch is for use by the Google Cloud Libraries only.
+ // It is not part of the stable interface of this package.
+ //
+ // InternalFetch returns results from a single call to the underlying RPC.
+ // The number of results is no greater than pageSize.
+ // If there are no more results, nextPageToken is empty and err is nil.
+ InternalFetch func(pageSize int, pageToken string) (results []*spannerpb.Session, nextPageToken string, err error)
+}
+
+// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
+func (it *SessionIterator) PageInfo() *iterator.PageInfo {
+ return it.pageInfo
+}
+
+// Next returns the next result. Its second return value is iterator.Done if there are no more
+// results. Once Next returns Done, all subsequent calls will return Done.
+func (it *SessionIterator) Next() (*spannerpb.Session, error) {
+ var item *spannerpb.Session
+ if err := it.nextFunc(); err != nil {
+ return item, err
+ }
+ item = it.items[0]
+ it.items = it.items[1:]
+ return item, nil
+}
+
+func (it *SessionIterator) bufLen() int {
+ return len(it.items)
+}
+
+func (it *SessionIterator) takeBuf() interface{} {
+ b := it.items
+ it.items = nil
+ return b
+}
diff --git a/spanner/apiv1/spanner_client_example_test.go b/spanner/apiv1/spanner_client_example_test.go
index 55ee8d1..e763305 100644
--- a/spanner/apiv1/spanner_client_example_test.go
+++ b/spanner/apiv1/spanner_client_example_test.go
@@ -21,6 +21,7 @@
"cloud.google.com/go/spanner/apiv1"
"golang.org/x/net/context"
+ "google.golang.org/api/iterator"
spannerpb "google.golang.org/genproto/googleapis/spanner/v1"
)
@@ -70,6 +71,30 @@
_ = resp
}
+func ExampleClient_ListSessions() {
+ ctx := context.Background()
+ c, err := spanner.NewClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &spannerpb.ListSessionsRequest{
+ // TODO: Fill request struct fields.
+ }
+ it := c.ListSessions(ctx, req)
+ for {
+ resp, err := it.Next()
+ if err == iterator.Done {
+ break
+ }
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+ }
+}
+
func ExampleClient_DeleteSession() {
ctx := context.Background()
c, err := spanner.NewClient(ctx)
diff --git a/speech/apiv1/doc.go b/speech/apiv1/doc.go
index ceea385..c5ea0e8 100644
--- a/speech/apiv1/doc.go
+++ b/speech/apiv1/doc.go
@@ -16,6 +16,7 @@
// Package speech is an auto-generated package for the
// Google Cloud Speech API.
+
//
// Google Cloud Speech API.
package speech // import "cloud.google.com/go/speech/apiv1"
@@ -25,11 +26,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/speech/apiv1/speech_client.go b/speech/apiv1/speech_client.go
index 0f618ef..cbedcf7 100644
--- a/speech/apiv1/speech_client.go
+++ b/speech/apiv1/speech_client.go
@@ -30,6 +30,7 @@
longrunningpb "google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -85,7 +86,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new speech client.
@@ -134,13 +135,13 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// Recognize performs synchronous speech recognition: receive results after all audio
// has been sent and processed.
func (c *Client) Recognize(ctx context.Context, req *speechpb.RecognizeRequest, opts ...gax.CallOption) (*speechpb.RecognizeResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.Recognize[0:len(c.CallOptions.Recognize):len(c.CallOptions.Recognize)], opts...)
var resp *speechpb.RecognizeResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -159,7 +160,7 @@
// Operation.error or an Operation.response which contains
// a LongRunningRecognizeResponse message.
func (c *Client) LongRunningRecognize(ctx context.Context, req *speechpb.LongRunningRecognizeRequest, opts ...gax.CallOption) (*LongRunningRecognizeOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.LongRunningRecognize[0:len(c.CallOptions.LongRunningRecognize):len(c.CallOptions.LongRunningRecognize)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -178,7 +179,7 @@
// StreamingRecognize performs bidirectional streaming speech recognition: receive results while
// sending audio. This method is only available via the gRPC API (not REST).
func (c *Client) StreamingRecognize(ctx context.Context, opts ...gax.CallOption) (speechpb.Speech_StreamingRecognizeClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.StreamingRecognize[0:len(c.CallOptions.StreamingRecognize):len(c.CallOptions.StreamingRecognize)], opts...)
var resp speechpb.Speech_StreamingRecognizeClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/speech/apiv1beta1/doc.go b/speech/apiv1beta1/doc.go
index 83ba265..fbc9b94 100644
--- a/speech/apiv1beta1/doc.go
+++ b/speech/apiv1beta1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package speech is an experimental, auto-generated package for the
+// Package speech is an auto-generated package for the
// Google Cloud Speech API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Google Cloud Speech API.
package speech // import "cloud.google.com/go/speech/apiv1beta1"
@@ -25,11 +27,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/speech/apiv1beta1/speech_client.go b/speech/apiv1beta1/speech_client.go
index d5e7603..3e2ecbb 100644
--- a/speech/apiv1beta1/speech_client.go
+++ b/speech/apiv1beta1/speech_client.go
@@ -30,6 +30,7 @@
longrunningpb "google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -85,7 +86,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new speech client.
@@ -134,13 +135,13 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// SyncRecognize performs synchronous speech recognition: receive results after all audio
// has been sent and processed.
func (c *Client) SyncRecognize(ctx context.Context, req *speechpb.SyncRecognizeRequest, opts ...gax.CallOption) (*speechpb.SyncRecognizeResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.SyncRecognize[0:len(c.CallOptions.SyncRecognize):len(c.CallOptions.SyncRecognize)], opts...)
var resp *speechpb.SyncRecognizeResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -161,7 +162,7 @@
// Operation.error or an Operation.response which contains
// an AsyncRecognizeResponse message.
func (c *Client) AsyncRecognize(ctx context.Context, req *speechpb.AsyncRecognizeRequest, opts ...gax.CallOption) (*AsyncRecognizeOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AsyncRecognize[0:len(c.CallOptions.AsyncRecognize):len(c.CallOptions.AsyncRecognize)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
@@ -180,7 +181,7 @@
// StreamingRecognize performs bidirectional streaming speech recognition: receive results while
// sending audio. This method is only available via the gRPC API (not REST).
func (c *Client) StreamingRecognize(ctx context.Context, opts ...gax.CallOption) (speechpb.Speech_StreamingRecognizeClient, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.StreamingRecognize[0:len(c.CallOptions.StreamingRecognize):len(c.CallOptions.StreamingRecognize)], opts...)
var resp speechpb.Speech_StreamingRecognizeClient
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/trace/apiv1/doc.go b/trace/apiv1/doc.go
index 4aeb779..4d904c5 100644
--- a/trace/apiv1/doc.go
+++ b/trace/apiv1/doc.go
@@ -14,15 +14,16 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package trace is an experimental, auto-generated package for the
+// Package trace is an auto-generated package for the
// Stackdriver Trace API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Send and retrieve trace data from Stackdriver Trace. Data is generated and
// available by default for all App Engine applications. Data from other
// applications can be written to Stackdriver Trace for display, reporting,
-// and analysis.
-//
-// Use the client at cloud.google.com/go/trace in preference to this.
+// and
+// analysis.
package trace // import "cloud.google.com/go/trace/apiv1"
import (
@@ -30,11 +31,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/trace/apiv1/mock_test.go b/trace/apiv1/mock_test.go
index c69283b..d1b617b 100644
--- a/trace/apiv1/mock_test.go
+++ b/trace/apiv1/mock_test.go
@@ -126,127 +126,6 @@
os.Exit(m.Run())
}
-func TestTraceServicePatchTraces(t *testing.T) {
- var expectedResponse *emptypb.Empty = &emptypb.Empty{}
-
- mockTrace.err = nil
- mockTrace.reqs = nil
-
- mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
-
- var projectId string = "projectId-1969970175"
- var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
- var request = &cloudtracepb.PatchTracesRequest{
- ProjectId: projectId,
- Traces: traces,
- }
-
- c, err := NewClient(context.Background(), clientOpt)
- if err != nil {
- t.Fatal(err)
- }
-
- err = c.PatchTraces(context.Background(), request)
-
- if err != nil {
- t.Fatal(err)
- }
-
- if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
- t.Errorf("wrong request %q, want %q", got, want)
- }
-
-}
-
-func TestTraceServicePatchTracesError(t *testing.T) {
- errCode := codes.PermissionDenied
- mockTrace.err = gstatus.Error(errCode, "test error")
-
- var projectId string = "projectId-1969970175"
- var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
- var request = &cloudtracepb.PatchTracesRequest{
- ProjectId: projectId,
- Traces: traces,
- }
-
- c, err := NewClient(context.Background(), clientOpt)
- if err != nil {
- t.Fatal(err)
- }
-
- err = c.PatchTraces(context.Background(), request)
-
- if st, ok := gstatus.FromError(err); !ok {
- t.Errorf("got error %v, expected grpc error", err)
- } else if c := st.Code(); c != errCode {
- t.Errorf("got error code %q, want %q", c, errCode)
- }
-}
-func TestTraceServiceGetTrace(t *testing.T) {
- var projectId2 string = "projectId2939242356"
- var traceId2 string = "traceId2987826376"
- var expectedResponse = &cloudtracepb.Trace{
- ProjectId: projectId2,
- TraceId: traceId2,
- }
-
- mockTrace.err = nil
- mockTrace.reqs = nil
-
- mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
-
- var projectId string = "projectId-1969970175"
- var traceId string = "traceId1270300245"
- var request = &cloudtracepb.GetTraceRequest{
- ProjectId: projectId,
- TraceId: traceId,
- }
-
- c, err := NewClient(context.Background(), clientOpt)
- if err != nil {
- t.Fatal(err)
- }
-
- resp, err := c.GetTrace(context.Background(), request)
-
- if err != nil {
- t.Fatal(err)
- }
-
- if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
- t.Errorf("wrong request %q, want %q", got, want)
- }
-
- if want, got := expectedResponse, resp; !proto.Equal(want, got) {
- t.Errorf("wrong response %q, want %q)", got, want)
- }
-}
-
-func TestTraceServiceGetTraceError(t *testing.T) {
- errCode := codes.PermissionDenied
- mockTrace.err = gstatus.Error(errCode, "test error")
-
- var projectId string = "projectId-1969970175"
- var traceId string = "traceId1270300245"
- var request = &cloudtracepb.GetTraceRequest{
- ProjectId: projectId,
- TraceId: traceId,
- }
-
- c, err := NewClient(context.Background(), clientOpt)
- if err != nil {
- t.Fatal(err)
- }
-
- resp, err := c.GetTrace(context.Background(), request)
-
- if st, ok := gstatus.FromError(err); !ok {
- t.Errorf("got error %v, expected grpc error", err)
- } else if c := st.Code(); c != errCode {
- t.Errorf("got error code %q, want %q", c, errCode)
- }
- _ = resp
-}
func TestTraceServiceListTraces(t *testing.T) {
var nextPageToken string = ""
var tracesElement *cloudtracepb.Trace = &cloudtracepb.Trace{}
@@ -319,3 +198,124 @@
}
_ = resp
}
+func TestTraceServiceGetTrace(t *testing.T) {
+ var projectId2 string = "projectId2939242356"
+ var traceId2 string = "traceId2987826376"
+ var expectedResponse = &cloudtracepb.Trace{
+ ProjectId: projectId2,
+ TraceId: traceId2,
+ }
+
+ mockTrace.err = nil
+ mockTrace.reqs = nil
+
+ mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
+
+ var projectId string = "projectId-1969970175"
+ var traceId string = "traceId1270300245"
+ var request = &cloudtracepb.GetTraceRequest{
+ ProjectId: projectId,
+ TraceId: traceId,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.GetTrace(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+ if want, got := expectedResponse, resp; !proto.Equal(want, got) {
+ t.Errorf("wrong response %q, want %q)", got, want)
+ }
+}
+
+func TestTraceServiceGetTraceError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockTrace.err = gstatus.Error(errCode, "test error")
+
+ var projectId string = "projectId-1969970175"
+ var traceId string = "traceId1270300245"
+ var request = &cloudtracepb.GetTraceRequest{
+ ProjectId: projectId,
+ TraceId: traceId,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ resp, err := c.GetTrace(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+ _ = resp
+}
+func TestTraceServicePatchTraces(t *testing.T) {
+ var expectedResponse *emptypb.Empty = &emptypb.Empty{}
+
+ mockTrace.err = nil
+ mockTrace.reqs = nil
+
+ mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
+
+ var projectId string = "projectId-1969970175"
+ var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
+ var request = &cloudtracepb.PatchTracesRequest{
+ ProjectId: projectId,
+ Traces: traces,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ err = c.PatchTraces(context.Background(), request)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
+ t.Errorf("wrong request %q, want %q", got, want)
+ }
+
+}
+
+func TestTraceServicePatchTracesError(t *testing.T) {
+ errCode := codes.PermissionDenied
+ mockTrace.err = gstatus.Error(errCode, "test error")
+
+ var projectId string = "projectId-1969970175"
+ var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
+ var request = &cloudtracepb.PatchTracesRequest{
+ ProjectId: projectId,
+ Traces: traces,
+ }
+
+ c, err := NewClient(context.Background(), clientOpt)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ err = c.PatchTraces(context.Background(), request)
+
+ if st, ok := gstatus.FromError(err); !ok {
+ t.Errorf("got error %v, expected grpc error", err)
+ } else if c := st.Code(); c != errCode {
+ t.Errorf("got error code %q, want %q", c, errCode)
+ }
+}
diff --git a/trace/apiv1/trace_client.go b/trace/apiv1/trace_client.go
index 7560c16..e0c4964 100644
--- a/trace/apiv1/trace_client.go
+++ b/trace/apiv1/trace_client.go
@@ -29,13 +29,14 @@
cloudtracepb "google.golang.org/genproto/googleapis/devtools/cloudtrace/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
type CallOptions struct {
- PatchTraces []gax.CallOption
- GetTrace []gax.CallOption
ListTraces []gax.CallOption
+ GetTrace []gax.CallOption
+ PatchTraces []gax.CallOption
}
func defaultClientOptions() []option.ClientOption {
@@ -61,9 +62,9 @@
},
}
return &CallOptions{
- PatchTraces: retry[[2]string{"default", "idempotent"}],
- GetTrace: retry[[2]string{"default", "idempotent"}],
ListTraces: retry[[2]string{"default", "idempotent"}],
+ GetTrace: retry[[2]string{"default", "idempotent"}],
+ PatchTraces: retry[[2]string{"write_sink", "non_idempotent"}],
}
}
@@ -79,7 +80,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new trace service client.
@@ -100,7 +101,7 @@
client: cloudtracepb.NewTraceServiceClient(conn),
}
- c.SetGoogleClientInfo()
+ c.setGoogleClientInfo()
return c, nil
}
@@ -115,50 +116,18 @@
return c.conn.Close()
}
-// SetGoogleClientInfo sets the name and version of the application in
+// setGoogleClientInfo sets the name and version of the application in
// the `x-goog-api-client` header passed on each request. Intended for
// use by Google-written clients.
-func (c *Client) SetGoogleClientInfo(keyval ...string) {
+func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
-}
-
-// PatchTraces sends new traces to Stackdriver Trace or updates existing traces. If the ID
-// of a trace that you send matches that of an existing trace, any fields
-// in the existing trace and its spans are overwritten by the provided values,
-// and any new fields provided are merged with the existing trace data. If the
-// ID does not match, a new trace is created.
-func (c *Client) PatchTraces(ctx context.Context, req *cloudtracepb.PatchTracesRequest, opts ...gax.CallOption) error {
- ctx = insertXGoog(ctx, c.xGoogHeader)
- opts = append(c.CallOptions.PatchTraces[0:len(c.CallOptions.PatchTraces):len(c.CallOptions.PatchTraces)], opts...)
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- _, err = c.client.PatchTraces(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- return err
-}
-
-// GetTrace gets a single trace by its ID.
-func (c *Client) GetTrace(ctx context.Context, req *cloudtracepb.GetTraceRequest, opts ...gax.CallOption) (*cloudtracepb.Trace, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
- opts = append(c.CallOptions.GetTrace[0:len(c.CallOptions.GetTrace):len(c.CallOptions.GetTrace)], opts...)
- var resp *cloudtracepb.Trace
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- resp, err = c.client.GetTrace(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- if err != nil {
- return nil, err
- }
- return resp, nil
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// ListTraces returns of a list of traces that match the specified filter conditions.
func (c *Client) ListTraces(ctx context.Context, req *cloudtracepb.ListTracesRequest, opts ...gax.CallOption) *TraceIterator {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.ListTraces[0:len(c.CallOptions.ListTraces):len(c.CallOptions.ListTraces)], opts...)
it := &TraceIterator{}
it.InternalFetch = func(pageSize int, pageToken string) ([]*cloudtracepb.Trace, string, error) {
@@ -191,6 +160,38 @@
return it
}
+// GetTrace gets a single trace by its ID.
+func (c *Client) GetTrace(ctx context.Context, req *cloudtracepb.GetTraceRequest, opts ...gax.CallOption) (*cloudtracepb.Trace, error) {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.GetTrace[0:len(c.CallOptions.GetTrace):len(c.CallOptions.GetTrace)], opts...)
+ var resp *cloudtracepb.Trace
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ resp, err = c.client.GetTrace(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// PatchTraces sends new traces to Stackdriver Trace or updates existing traces. If the ID
+// of a trace that you send matches that of an existing trace, any fields
+// in the existing trace and its spans are overwritten by the provided values,
+// and any new fields provided are merged with the existing trace data. If the
+// ID does not match, a new trace is created.
+func (c *Client) PatchTraces(ctx context.Context, req *cloudtracepb.PatchTracesRequest, opts ...gax.CallOption) error {
+ ctx = insertMetadata(ctx, c.Metadata)
+ opts = append(c.CallOptions.PatchTraces[0:len(c.CallOptions.PatchTraces):len(c.CallOptions.PatchTraces)], opts...)
+ err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+ var err error
+ _, err = c.client.PatchTraces(ctx, req, settings.GRPC...)
+ return err
+ }, opts...)
+ return err
+}
+
// TraceIterator manages a stream of *cloudtracepb.Trace.
type TraceIterator struct {
items []*cloudtracepb.Trace
diff --git a/trace/apiv1/trace_client_example_test.go b/trace/apiv1/trace_client_example_test.go
index ee885a7..f7cf91c 100644
--- a/trace/apiv1/trace_client_example_test.go
+++ b/trace/apiv1/trace_client_example_test.go
@@ -33,40 +33,6 @@
_ = c
}
-func ExampleClient_PatchTraces() {
- ctx := context.Background()
- c, err := trace.NewClient(ctx)
- if err != nil {
- // TODO: Handle error.
- }
-
- req := &cloudtracepb.PatchTracesRequest{
- // TODO: Fill request struct fields.
- }
- err = c.PatchTraces(ctx, req)
- if err != nil {
- // TODO: Handle error.
- }
-}
-
-func ExampleClient_GetTrace() {
- ctx := context.Background()
- c, err := trace.NewClient(ctx)
- if err != nil {
- // TODO: Handle error.
- }
-
- req := &cloudtracepb.GetTraceRequest{
- // TODO: Fill request struct fields.
- }
- resp, err := c.GetTrace(ctx, req)
- if err != nil {
- // TODO: Handle error.
- }
- // TODO: Use resp.
- _ = resp
-}
-
func ExampleClient_ListTraces() {
ctx := context.Background()
c, err := trace.NewClient(ctx)
@@ -90,3 +56,37 @@
_ = resp
}
}
+
+func ExampleClient_GetTrace() {
+ ctx := context.Background()
+ c, err := trace.NewClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &cloudtracepb.GetTraceRequest{
+ // TODO: Fill request struct fields.
+ }
+ resp, err := c.GetTrace(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+ // TODO: Use resp.
+ _ = resp
+}
+
+func ExampleClient_PatchTraces() {
+ ctx := context.Background()
+ c, err := trace.NewClient(ctx)
+ if err != nil {
+ // TODO: Handle error.
+ }
+
+ req := &cloudtracepb.PatchTracesRequest{
+ // TODO: Fill request struct fields.
+ }
+ err = c.PatchTraces(ctx, req)
+ if err != nil {
+ // TODO: Handle error.
+ }
+}
diff --git a/videointelligence/apiv1beta1/doc.go b/videointelligence/apiv1beta1/doc.go
index 726458f..b53355e 100644
--- a/videointelligence/apiv1beta1/doc.go
+++ b/videointelligence/apiv1beta1/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package videointelligence is an experimental, auto-generated package for the
+// Package videointelligence is an auto-generated package for the
// Google Cloud Video Intelligence API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Google Cloud Video Intelligence API.
package videointelligence // import "cloud.google.com/go/videointelligence/apiv1beta1"
@@ -25,11 +27,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/videointelligence/apiv1beta1/mock_test.go b/videointelligence/apiv1beta1/mock_test.go
index 7615da5..7f1c8be 100644
--- a/videointelligence/apiv1beta1/mock_test.go
+++ b/videointelligence/apiv1beta1/mock_test.go
@@ -118,8 +118,9 @@
Result: &longrunningpb.Operation_Response{Response: any},
})
- var inputUri string = "inputUri1707300727"
- var features []videointelligencepb.Feature = nil
+ var inputUri string = "gs://demomaker/cat.mp4"
+ var featuresElement videointelligencepb.Feature = videointelligencepb.Feature_LABEL_DETECTION
+ var features = []videointelligencepb.Feature{featuresElement}
var request = &videointelligencepb.AnnotateVideoRequest{
InputUri: inputUri,
Features: features,
@@ -163,8 +164,9 @@
},
})
- var inputUri string = "inputUri1707300727"
- var features []videointelligencepb.Feature = nil
+ var inputUri string = "gs://demomaker/cat.mp4"
+ var featuresElement videointelligencepb.Feature = videointelligencepb.Feature_LABEL_DETECTION
+ var features = []videointelligencepb.Feature{featuresElement}
var request = &videointelligencepb.AnnotateVideoRequest{
InputUri: inputUri,
Features: features,
diff --git a/videointelligence/apiv1beta1/video_intelligence_client.go b/videointelligence/apiv1beta1/video_intelligence_client.go
index 552e936..1001d21 100644
--- a/videointelligence/apiv1beta1/video_intelligence_client.go
+++ b/videointelligence/apiv1beta1/video_intelligence_client.go
@@ -30,6 +30,7 @@
longrunningpb "google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -81,7 +82,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new video intelligence service client.
@@ -130,7 +131,7 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// AnnotateVideo performs asynchronous video annotation. Progress and results can be
@@ -138,7 +139,7 @@
// Operation.metadata contains AnnotateVideoProgress (progress).
// Operation.response contains AnnotateVideoResponse (results).
func (c *Client) AnnotateVideo(ctx context.Context, req *videointelligencepb.AnnotateVideoRequest, opts ...gax.CallOption) (*AnnotateVideoOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnnotateVideo[0:len(c.CallOptions.AnnotateVideo):len(c.CallOptions.AnnotateVideo)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/videointelligence/apiv1beta2/doc.go b/videointelligence/apiv1beta2/doc.go
index b214286..8d97aa2 100644
--- a/videointelligence/apiv1beta2/doc.go
+++ b/videointelligence/apiv1beta2/doc.go
@@ -14,9 +14,11 @@
// AUTO-GENERATED CODE. DO NOT EDIT.
-// Package videointelligence is an experimental, auto-generated package for the
+// Package videointelligence is an auto-generated package for the
// Google Cloud Video Intelligence API.
//
+// NOTE: This package is in alpha. It is not stable, and is likely to be subject to changes.
+//
// Google Cloud Video Intelligence API.
package videointelligence // import "cloud.google.com/go/videointelligence/apiv1beta2"
@@ -25,11 +27,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/videointelligence/apiv1beta2/mock_test.go b/videointelligence/apiv1beta2/mock_test.go
index fa6e84c..ddc98fb 100644
--- a/videointelligence/apiv1beta2/mock_test.go
+++ b/videointelligence/apiv1beta2/mock_test.go
@@ -118,12 +118,7 @@
Result: &longrunningpb.Operation_Response{Response: any},
})
- var inputUri string = "inputUri1707300727"
- var features []videointelligencepb.Feature = nil
- var request = &videointelligencepb.AnnotateVideoRequest{
- InputUri: inputUri,
- Features: features,
- }
+ var request *videointelligencepb.AnnotateVideoRequest = &videointelligencepb.AnnotateVideoRequest{}
c, err := NewClient(context.Background(), clientOpt)
if err != nil {
@@ -163,12 +158,7 @@
},
})
- var inputUri string = "inputUri1707300727"
- var features []videointelligencepb.Feature = nil
- var request = &videointelligencepb.AnnotateVideoRequest{
- InputUri: inputUri,
- Features: features,
- }
+ var request *videointelligencepb.AnnotateVideoRequest = &videointelligencepb.AnnotateVideoRequest{}
c, err := NewClient(context.Background(), clientOpt)
if err != nil {
diff --git a/videointelligence/apiv1beta2/video_intelligence_client.go b/videointelligence/apiv1beta2/video_intelligence_client.go
index 4dd4fef..936c093 100644
--- a/videointelligence/apiv1beta2/video_intelligence_client.go
+++ b/videointelligence/apiv1beta2/video_intelligence_client.go
@@ -30,6 +30,7 @@
longrunningpb "google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// CallOptions contains the retry settings for each method of Client.
@@ -81,7 +82,7 @@
CallOptions *CallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewClient creates a new video intelligence service client.
@@ -130,7 +131,7 @@
func (c *Client) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// AnnotateVideo performs asynchronous video annotation. Progress and results can be
@@ -138,7 +139,7 @@
// Operation.metadata contains AnnotateVideoProgress (progress).
// Operation.response contains AnnotateVideoResponse (results).
func (c *Client) AnnotateVideo(ctx context.Context, req *videointelligencepb.AnnotateVideoRequest, opts ...gax.CallOption) (*AnnotateVideoOperation, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.AnnotateVideo[0:len(c.CallOptions.AnnotateVideo):len(c.CallOptions.AnnotateVideo)], opts...)
var resp *longrunningpb.Operation
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
diff --git a/vision/apiv1/doc.go b/vision/apiv1/doc.go
index ba3c99f..c852e15 100644
--- a/vision/apiv1/doc.go
+++ b/vision/apiv1/doc.go
@@ -16,6 +16,7 @@
// Package vision is an auto-generated package for the
// Google Cloud Vision API.
+
//
// Integrates Google Vision features, including image labeling, face, logo,
// and landmark detection, optical character recognition (OCR), and detection
@@ -27,11 +28,15 @@
"google.golang.org/grpc/metadata"
)
-func insertXGoog(ctx context.Context, val []string) context.Context {
- md, _ := metadata.FromOutgoingContext(ctx)
- md = md.Copy()
- md["x-goog-api-client"] = val
- return metadata.NewOutgoingContext(ctx, md)
+func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
+ out, _ := metadata.FromOutgoingContext(ctx)
+ out = out.Copy()
+ for _, md := range mds {
+ for k, v := range md {
+ out[k] = append(out[k], v...)
+ }
+ }
+ return metadata.NewOutgoingContext(ctx, out)
}
// DefaultAuthScopes reports the default set of authentication scopes to use with this package.
diff --git a/vision/apiv1/image_annotator_client.go b/vision/apiv1/image_annotator_client.go
index a7aebd5..5f430fc 100644
--- a/vision/apiv1/image_annotator_client.go
+++ b/vision/apiv1/image_annotator_client.go
@@ -27,6 +27,7 @@
visionpb "google.golang.org/genproto/googleapis/cloud/vision/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
+ "google.golang.org/grpc/metadata"
)
// ImageAnnotatorCallOptions contains the retry settings for each method of ImageAnnotatorClient.
@@ -73,7 +74,7 @@
CallOptions *ImageAnnotatorCallOptions
// The metadata to be sent with each request.
- xGoogHeader []string
+ Metadata metadata.MD
}
// NewImageAnnotatorClient creates a new image annotator client.
@@ -113,12 +114,12 @@
func (c *ImageAnnotatorClient) setGoogleClientInfo(keyval ...string) {
kv := append([]string{"gl-go", version.Go()}, keyval...)
kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogHeader = []string{gax.XGoogHeader(kv...)}
+ c.Metadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
}
// BatchAnnotateImages run image detection and annotation for a batch of images.
func (c *ImageAnnotatorClient) BatchAnnotateImages(ctx context.Context, req *visionpb.BatchAnnotateImagesRequest, opts ...gax.CallOption) (*visionpb.BatchAnnotateImagesResponse, error) {
- ctx = insertXGoog(ctx, c.xGoogHeader)
+ ctx = insertMetadata(ctx, c.Metadata)
opts = append(c.CallOptions.BatchAnnotateImages[0:len(c.CallOptions.BatchAnnotateImages):len(c.CallOptions.BatchAnnotateImages)], opts...)
var resp *visionpb.BatchAnnotateImagesResponse
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {