Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

provide a description when we get a rockset error #91

Merged
merged 2 commits into from
Feb 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/resources/collection_mount.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ resource "rockset_collection_mount" "data" {
- `id` (String) Unique ID of this mount, collection path and virtual instance id, joined by a `:`.
- `last_refresh_time` (Number) UNIX timestamp in milliseconds for most recent refresh. Not applicable for live mounts.
- `rrn` (String) RRN of this mount.
- `snapshot_expiration_time` (Number) UNIX timestamp in milliseconds when the snapshot expires.
- `state` (String) Mount state.
- `virtual_instance_rrn` (String) Virtual Instance RRN

Expand Down
12 changes: 6 additions & 6 deletions rockset/data_source_account.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,23 @@ func dataSourceReadRocksetAccount(ctx context.Context, d *schema.ResourceData, m

org, err := rc.GetOrganization(ctx)
if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("account_id", accountID); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("external_id", org.ExternalId); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("organization", org.DisplayName); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("rockset_user", org.RocksetUser); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("clusters", flattenClusterParams(org.Clusters)); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(accountID)
Expand Down
11 changes: 6 additions & 5 deletions rockset/data_source_query_lambda.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package rockset
import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/rockset/rockset-go-client"
Expand Down Expand Up @@ -63,21 +64,21 @@ func dataSourceReadRocksetQueryLambda(ctx context.Context, d *schema.ResourceDat

ql, err := rc.GetQueryLambdaVersionByTag(ctx, ws, name, tag)
if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

v := ql.GetVersion()
if err = d.Set("description", v.GetDescription()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("version", v.GetVersion()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("sql", v.Sql.GetQuery()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("last_executed", v.Stats.GetLastExecuted()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(toID(ws, name))
Expand Down
16 changes: 8 additions & 8 deletions rockset/data_source_query_lambda_tag.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,31 +64,31 @@ func dataSourceReadRocksetQueryLambdaTag(ctx context.Context, d *schema.Resource

ql, err := rc.GetQueryLambdaVersionByTag(ctx, ws, name, tag)
if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("workspace", ws); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("name", name); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("tag", ql.GetTagName()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

v := ql.GetVersion()
if err = d.Set("description", v.GetDescription()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("version", v.GetVersion()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("sql", v.Sql.GetQuery()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("last_executed", v.Stats.GetLastExecuted()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(toID(ws, name))
Expand Down
12 changes: 6 additions & 6 deletions rockset/data_source_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,24 @@ func dataSourceReadRocksetUser(ctx context.Context, d *schema.ResourceData, meta
}

if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("email", user.GetEmail()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("first_name", user.GetFirstName()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("last_name", user.GetLastName()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("roles", user.GetRoles()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("state", user.GetState()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(user.GetEmail())
Expand Down
19 changes: 10 additions & 9 deletions rockset/data_source_virtual_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package rockset

import (
"context"

"github.com/rockset/rockset-go-client"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand Down Expand Up @@ -71,32 +72,32 @@ func dataSourceReadRocksetVirtualInstance(ctx context.Context, d *schema.Resourc

vi, err := rc.GetVirtualInstance(ctx, id)
if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("name", vi.GetName()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("description", vi.GetDescription()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("auto_suspend_seconds", vi.GetAutoSuspendSeconds()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("current_size", vi.GetCurrentSize()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("desired_size", vi.GetDesiredSize()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("default", vi.GetDefaultVi()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("state", vi.GetState()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("enable_remount_on_resume", vi.GetEnableRemountOnResume()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(id)
Expand Down
12 changes: 6 additions & 6 deletions rockset/data_source_workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,23 +56,23 @@ func dataSourceReadRocksetWorkspace(ctx context.Context, d *schema.ResourceData,

ws, err := rc.GetWorkspace(ctx, name)
if err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

if err = d.Set("name", ws.GetName()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("description", ws.GetDescription()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("created_by", ws.GetCreatedBy()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("created_at", ws.GetCreatedAt()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}
if err = d.Set("collection_count", ws.GetCollectionCount()); err != nil {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId(name)
Expand Down
54 changes: 51 additions & 3 deletions rockset/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"net/http"
"os"
"regexp"
"strings"
Expand Down Expand Up @@ -108,7 +109,7 @@ func (c *Config) Client() (interface{}, diag.Diagnostics) {

rc, err := rockset.NewClient(opts...)
if err != nil {
return nil, diag.FromErr(err)
return nil, DiagFromErr(err)
}

return rc, diags
Expand Down Expand Up @@ -205,14 +206,61 @@ func mergeSchemas(mergeOnto map[string]*schema.Schema, toMerge map[string]*schem
func checkForNotFoundError(d *schema.ResourceData, err error) diag.Diagnostics {
var re rockerr.Error
if !errors.As(err, &re) {
return diag.FromErr(err)
return DiagFromErr(err)
}

if !re.IsNotFoundError() {
return diag.FromErr(err)
return DiagFromErr(err)
}

d.SetId("")

return diag.Diagnostics{}
}

func DiagFromErr(err error) diag.Diagnostics {
if err == nil {
return nil
}
d := diag.Diagnostic{
Severity: diag.Error,
Summary: err.Error(),
}

var re rockerr.Error
if errors.As(err, &re) {
var sb strings.Builder
var msgs []string

sb.WriteString(re.GetMessage())
sb.WriteString(": ")

if t, ok := re.GetTypeOk(); ok {
msgs = append(msgs, fmt.Sprintf("Error Type: %s", *t))
}
if re.StatusCode != 0 {
msgs = append(msgs, fmt.Sprintf("HTTP status code (%d) %s", re.StatusCode, http.StatusText(re.StatusCode)))
}
if re.GetTraceId() != "" {
msgs = append(msgs, fmt.Sprintf("Trace ID: %s", re.GetTraceId()))
}
if re.GetErrorId() != "" {
msgs = append(msgs, fmt.Sprintf("Error ID: %s", re.GetErrorId()))
}
if re.GetQueryId() != "" {
msgs = append(msgs, fmt.Sprintf("Query ID: %s", re.GetQueryId()))
}
if re.HasLine() {
msgs = append(msgs, fmt.Sprintf("Line: %d", re.GetLine()))
}
if re.HasColumn() {
msgs = append(msgs, fmt.Sprintf("Column: %d", re.GetColumn()))
}

sb.WriteString(strings.Join(msgs, ", "))

d.Detail = sb.String()
}

return diag.Diagnostics{d}
}
47 changes: 45 additions & 2 deletions rockset/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,25 @@ package rockset
import (
"bytes"
"context"
"errors"
"fmt"
"github.com/rockset/rockset-go-client"
"github.com/stretchr/testify/assert"
"io/ioutil"
"log"
"math/rand"
"net/http"
"os"
"path/filepath"
"strings"
"testing"
"text/template"
"time"

"github.com/rockset/rockset-go-client"
rockerr "github.com/rockset/rockset-go-client/errors"
"github.com/rockset/rockset-go-client/openapi"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/rs/zerolog"
Expand Down Expand Up @@ -252,3 +258,40 @@ func testAccCheckRocksetIntegrationDestroy(resource string) func(*terraform.Stat
return nil
}
}

func TestDiagFromErr(t *testing.T) {
err := rockerr.NewWithStatusCode(errors.New("apierr"), &http.Response{StatusCode: http.StatusConflict})

var re rockerr.Error
require.True(t, errors.As(err, &re))

re.ErrorModel = &openapi.ErrorModel{
Message: openapi.PtrString("api error"),
TraceId: openapi.PtrString("foobar"),
QueryId: openapi.PtrString("queryid"),
ErrorId: openapi.PtrString("errorid"),
Line: openapi.PtrInt32(42),
Column: openapi.PtrInt32(42),
}

tests := []struct {
name string
err error
want string
}{
{"plain error", errors.New("plain error"), ""},
{
"rockset error with http code",
re,
"api error: HTTP status code (409) Conflict, Trace ID: foobar, Error ID: errorid, " +
"Query ID: queryid, Line: 42, Column: 42",
},
}
for _, tst := range tests {
t.Run(tst.name, func(t *testing.T) {
d := DiagFromErr(tst.err)
require.Len(t, d, 1)
assert.Equal(t, tst.want, d[0].Detail)
})
}
}
Loading
Loading