From 6a2519c1525d7da303a6fbe283055835fbdf931c Mon Sep 17 00:00:00 2001 From: Yen-Cheng Chou Date: Mon, 30 Sep 2019 00:02:42 -0400 Subject: [PATCH] Mark cred retrieval error as recoverable error. The Client should not drop the sample because the credential cannot be retrieved. Once the credential is set correctly, client should try to resend the samples. --- stackdriver/client.go | 2 +- stackdriver/client_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/stackdriver/client.go b/stackdriver/client.go index 8a9a9e02..22dd7a15 100644 --- a/stackdriver/client.go +++ b/stackdriver/client.go @@ -112,7 +112,7 @@ func (c *Client) getConnection(ctx context.Context) (*grpc.ClientConn, error) { if useAuth { rpcCreds, err := oauth.NewApplicationDefault(context.Background(), MonitoringWriteScope) if err != nil { - return nil, err + return nil, recoverableError{err} } tlsCreds := credentials.NewTLS(&tls.Config{}) dopts = append(dopts, diff --git a/stackdriver/client_test.go b/stackdriver/client_test.go index 297e464a..925b0852 100644 --- a/stackdriver/client_test.go +++ b/stackdriver/client_test.go @@ -43,6 +43,32 @@ func newLocalListener() net.Listener { return l } +func TestStoreErrorHandlingOnCredentialRetrieval(t *testing.T) { + listener := newLocalListener() + grpcServer := grpc.NewServer() + monitoring.RegisterMetricServiceServer(grpcServer, &metricServiceServer{nil}) + go grpcServer.Serve(listener) + defer grpcServer.Stop() + + serverURL, err := url.Parse("https://" + listener.Addr().String()) + if err != nil { + t.Fatal(err) + } + + c := NewClient(&ClientConfig{ + URL: serverURL, + Timeout: time.Second, + }) + err = c.Store(&monitoring.CreateTimeSeriesRequest{ + TimeSeries: []*monitoring.TimeSeries{ + &monitoring.TimeSeries{}, + }, + }) + if _, recoverable := err.(recoverableError); !recoverable { + t.Errorf("expected recoverableError in error %v", err) + } +} + func TestStoreErrorHandlingOnTimeout(t *testing.T) { listener := newLocalListener() grpcServer := grpc.NewServer()