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

feat: Warehouse redesign part2 #2887

Merged
merged 32 commits into from
Jun 27, 2024
Merged
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5f51414
Add resource monitor tests
sfc-gh-asawicki Jun 13, 2024
1430189
Add tests for setting/unsetting comment
sfc-gh-asawicki Jun 13, 2024
7d1bbe7
Prove problems with unsets
sfc-gh-asawicki Jun 13, 2024
e62dfb6
Add better log
sfc-gh-asawicki Jun 13, 2024
9d9e839
Add more UNSET tests
sfc-gh-asawicki Jun 13, 2024
29bc467
Add missing test step
sfc-gh-asawicki Jun 14, 2024
4494dfe
Solve TODOs in integration tests
sfc-gh-asawicki Jun 18, 2024
5fda1f7
Add conditional suspension
sfc-gh-asawicki Jun 18, 2024
1317275
Change initially suspended logic
sfc-gh-asawicki Jun 18, 2024
2dd7a93
Adjust state upgrader and the description
sfc-gh-asawicki Jun 18, 2024
7793982
Make basic test case run
sfc-gh-asawicki Jun 24, 2024
3cd20b3
Add resource monitor
sfc-gh-asawicki Jun 24, 2024
f29dc9d
Test import after empty config
sfc-gh-asawicki Jun 24, 2024
7db7f20
Add two migration test cases
sfc-gh-asawicki Jun 24, 2024
95b19a6
Handle more migration cases
sfc-gh-asawicki Jun 24, 2024
ec8867c
Handle more migration cases continuation
sfc-gh-asawicki Jun 24, 2024
02a9fed
Add more validation tests
sfc-gh-asawicki Jun 24, 2024
e5de872
Add test for current warehouse drift
sfc-gh-asawicki Jun 24, 2024
ff3392b
Remove snowflakechecks todo
sfc-gh-asawicki Jun 24, 2024
091cadb
Test int behavior
sfc-gh-asawicki Jun 24, 2024
389177e
Run pre-push
sfc-gh-asawicki Jun 24, 2024
9442a0a
Update migration notes
sfc-gh-asawicki Jun 25, 2024
d95b136
Fix auto resume test
sfc-gh-asawicki Jun 25, 2024
376002b
Change resource monitor to id
sfc-gh-asawicki Jun 25, 2024
1b8e1c4
Fix after review and add import check for zero values
sfc-gh-asawicki Jun 25, 2024
5f1eff8
Handle a few more cases
sfc-gh-asawicki Jun 25, 2024
81f6c40
Fix defaults test
sfc-gh-asawicki Jun 25, 2024
7e49dc0
Run make pre-push
sfc-gh-asawicki Jun 25, 2024
6ed1ece
Bump the timeout for tests
sfc-gh-asawicki Jun 26, 2024
32396a8
Merge branch 'main' into warehouse-redesign-part2
sfc-gh-asawicki Jun 26, 2024
f10d668
Merge with show output schemas
sfc-gh-asawicki Jun 26, 2024
2e6ee5e
Use Name() for account object identifiers in show output
sfc-gh-asawicki Jun 27, 2024
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
Prev Previous commit
Next Next commit
Add more UNSET tests
sfc-gh-asawicki committed Jun 24, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 9d9e8392caeb4d015abc95159fb0b420dc47946a
7 changes: 6 additions & 1 deletion pkg/acceptance/helpers/warehouse_client.go
Original file line number Diff line number Diff line change
@@ -43,9 +43,14 @@ func (c *WarehouseClient) CreateWarehouse(t *testing.T) (*sdk.Warehouse, func())
func (c *WarehouseClient) CreateWarehouseWithOptions(t *testing.T, id sdk.AccountObjectIdentifier, opts *sdk.CreateWarehouseOptions) (*sdk.Warehouse, func()) {
t.Helper()
ctx := context.Background()

err := c.client().Create(ctx, id, opts)
require.NoError(t, err)
return &sdk.Warehouse{Name: id.Name()}, c.DropWarehouseFunc(t, id)

warehouse, err := c.client().ShowByID(ctx, id)
require.NoError(t, err)

return warehouse, c.DropWarehouseFunc(t, id)
}

func (c *WarehouseClient) DropWarehouseFunc(t *testing.T, id sdk.AccountObjectIdentifier) func() {
128 changes: 88 additions & 40 deletions pkg/sdk/testint/warehouses_integration_test.go
Original file line number Diff line number Diff line change
@@ -11,9 +11,11 @@ import (
"github.com/stretchr/testify/require"
)

// TODO [SNOW-1348102 - next PR]: more unset tests
// TODO [SNOW-1348102 - next PR]: test how suspension.resuming works for different states
// TODO [this PR]: set/unset parameters
// TODO [this PR]: get rid of the precreated warehouses on the top level
// TODO [this PR]: show -> showbyid in multiple tests
// TODO [this PR]: test WaitForCompletion (which version we use inside the resource?)
func TestInt_Warehouses(t *testing.T) {
client := testClient(t)
ctx := testContext(t)
@@ -186,63 +188,77 @@ func TestInt_Warehouses(t *testing.T) {
})

t.Run("alter: set and unset", func(t *testing.T) {
createOptions := &sdk.CreateWarehouseOptions{
Comment: sdk.String("test comment"),
MaxClusterCount: sdk.Int(10),
}
id := testClientHelper().Ids.RandomAccountObjectIdentifier()
// new warehouse created on purpose
warehouse, warehouseCleanup := testClientHelper().Warehouse.CreateWarehouseWithOptions(t, id, createOptions)
warehouse, warehouseCleanup := testClientHelper().Warehouse.CreateWarehouse(t)
t.Cleanup(warehouseCleanup)

assert.Equal(t, sdk.WarehouseSizeXSmall, warehouse.Size)
assert.Equal(t, 1, warehouse.MaxClusterCount)
assert.Equal(t, 1, warehouse.MinClusterCount)
assert.Equal(t, sdk.ScalingPolicyStandard, warehouse.ScalingPolicy)
assert.Equal(t, 600, warehouse.AutoSuspend)
assert.Equal(t, true, warehouse.AutoResume)
assert.Equal(t, "null", warehouse.ResourceMonitor)
assert.Equal(t, "", warehouse.Comment)
assert.Equal(t, false, warehouse.EnableQueryAcceleration)
assert.Equal(t, 8, warehouse.QueryAccelerationMaxScaleFactor)

alterOptions := &sdk.AlterWarehouseOptions{
// WarehouseType omitted on purpose - it requires suspending the warehouse (separate test cases)
// WaitForCompletion omitted on purpose - separate test case
Set: &sdk.WarehouseSet{
ResourceMonitor: resourceMonitor.ID(),
WarehouseSize: &sdk.WarehouseSizeMedium,
AutoSuspend: sdk.Int(1234),
EnableQueryAcceleration: sdk.Bool(true),
WarehouseSize: &sdk.WarehouseSizeMedium,
MaxClusterCount: sdk.Int(3),
MinClusterCount: sdk.Int(2),
ScalingPolicy: sdk.Pointer(sdk.ScalingPolicyEconomy),
AutoSuspend: sdk.Int(1234),
AutoResume: sdk.Bool(false),
ResourceMonitor: resourceMonitor.ID(),
Comment: sdk.String("new comment"),
EnableQueryAcceleration: sdk.Bool(true),
QueryAccelerationMaxScaleFactor: sdk.Int(2),
},
}
err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions)
require.NoError(t, err)
warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{
Like: &sdk.Like{
Pattern: sdk.String(warehouse.Name),
},
})
assert.Equal(t, 1, len(warehouses))
result := warehouses[0]

warehouseAfterSet, err := client.Warehouses.ShowByID(ctx, warehouse.ID())
require.NoError(t, err)
assert.Equal(t, sdk.WarehouseSizeMedium, result.Size)
assert.Equal(t, true, result.EnableQueryAcceleration)
assert.Equal(t, 1234, result.AutoSuspend)
assert.Equal(t, "test comment", result.Comment)
assert.Equal(t, 10, result.MaxClusterCount)
assert.Equal(t, sdk.WarehouseSizeMedium, warehouseAfterSet.Size)
assert.Equal(t, 3, warehouseAfterSet.MaxClusterCount)
assert.Equal(t, 2, warehouseAfterSet.MinClusterCount)
assert.Equal(t, sdk.ScalingPolicyEconomy, warehouseAfterSet.ScalingPolicy)
assert.Equal(t, 1234, warehouseAfterSet.AutoSuspend)
assert.Equal(t, false, warehouseAfterSet.AutoResume)
assert.Equal(t, resourceMonitor.ID().Name(), warehouseAfterSet.ResourceMonitor)
assert.Equal(t, "new comment", warehouseAfterSet.Comment)
assert.Equal(t, true, warehouseAfterSet.EnableQueryAcceleration)
assert.Equal(t, 2, warehouseAfterSet.QueryAccelerationMaxScaleFactor)

alterOptions = &sdk.AlterWarehouseOptions{
// WarehouseSize omitted on purpose - UNSET is not supported for warehouse size
// WarehouseType, ScalingPolicy, AutoSuspend, and AutoResume omitted on purpose - UNSET do not work correctly
// WaitForCompletion omitted on purpose - separate test case
Unset: &sdk.WarehouseUnset{
ResourceMonitor: sdk.Bool(true),
Comment: sdk.Bool(true),
MaxClusterCount: sdk.Bool(true),
MaxClusterCount: sdk.Bool(true),
MinClusterCount: sdk.Bool(true),
ResourceMonitor: sdk.Bool(true),
Comment: sdk.Bool(true),
EnableQueryAcceleration: sdk.Bool(true),
QueryAccelerationMaxScaleFactor: sdk.Bool(true),
},
}
err = client.Warehouses.Alter(ctx, id, alterOptions)
err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions)
require.NoError(t, err)

warehouses, err = client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{
Like: &sdk.Like{
Pattern: sdk.String(warehouse.Name),
},
})
warehouseAfterUnset, err := client.Warehouses.ShowByID(ctx, warehouse.ID())
require.NoError(t, err)
assert.Equal(t, 1, len(warehouses))
result = warehouses[0]
assert.Equal(t, warehouse.Name, result.Name)
assert.Equal(t, "", result.Comment)
assert.Equal(t, 1, result.MaxClusterCount)
assert.Equal(t, sdk.WarehouseSizeMedium, result.Size)
assert.Equal(t, true, result.EnableQueryAcceleration)
assert.Equal(t, 1234, result.AutoSuspend)
assert.Equal(t, 1, warehouseAfterUnset.MaxClusterCount)
assert.Equal(t, 1, warehouseAfterUnset.MinClusterCount)
assert.Equal(t, "null", warehouseAfterUnset.ResourceMonitor)
assert.Equal(t, "", warehouseAfterUnset.Comment)
assert.Equal(t, false, warehouseAfterUnset.EnableQueryAcceleration)
assert.Equal(t, 8, warehouseAfterUnset.QueryAccelerationMaxScaleFactor)
})

t.Run("alter: prove problems with unset auto suspend", func(t *testing.T) {
@@ -277,6 +293,38 @@ func TestInt_Warehouses(t *testing.T) {
require.ErrorContains(t, err, "invalid type of property 'null' for 'WAREHOUSE_TYPE'")
})

t.Run("alter: prove problems with unset scaling policy", func(t *testing.T) {
// new warehouse created on purpose
warehouse, warehouseCleanup := testClientHelper().Warehouse.CreateWarehouse(t)
t.Cleanup(warehouseCleanup)

alterOptions := &sdk.AlterWarehouseOptions{
Unset: &sdk.WarehouseUnset{ScalingPolicy: sdk.Bool(true)},
}
err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions)
// TODO [SNOW-1473453]: change when UNSET starts working correctly (expecting to unset to default scaling policy STANDARD)
require.Error(t, err)
require.ErrorContains(t, err, "invalid type of property 'null' for 'SCALING_POLICY'")
})

t.Run("alter: prove problems with unset auto resume", func(t *testing.T) {
// new warehouse created on purpose
warehouse, warehouseCleanup := testClientHelper().Warehouse.CreateWarehouse(t)
t.Cleanup(warehouseCleanup)

alterOptions := &sdk.AlterWarehouseOptions{
Unset: &sdk.WarehouseUnset{AutoResume: sdk.Bool(true)},
}
err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions)
require.NoError(t, err)

returnedWarehouse, err := client.Warehouses.ShowByID(ctx, warehouse.ID())
require.NoError(t, err)
// TODO [SNOW-1473453]: change when UNSET starts working correctly (expecting to unset to default auto resume TRUE)
//assert.Equal(t, true, returnedWarehouse.AutoResume)
assert.Equal(t, false, returnedWarehouse.AutoResume)
})

t.Run("alter: rename", func(t *testing.T) {
// new warehouse created on purpose
warehouse, warehouseCleanup := testClientHelper().Warehouse.CreateWarehouse(t)
7 changes: 4 additions & 3 deletions pkg/sdk/warehouses.go
Original file line number Diff line number Diff line change
@@ -397,9 +397,10 @@ type Warehouse struct {
Comment string
EnableQueryAcceleration bool
QueryAccelerationMaxScaleFactor int
ResourceMonitor string
ScalingPolicy ScalingPolicy
OwnerRoleType string
// TODO [this PR]: change type to identifier
ResourceMonitor string
ScalingPolicy ScalingPolicy
OwnerRoleType string
}

type warehouseDBRow struct {