Skip to content
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
8 changes: 8 additions & 0 deletions .changelog/bf2d083eb544421e9c0542e73951e635.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"id": "bf2d083e-b544-421e-9c05-42e73951e635",
"type": "bugfix",
"description": "Adjust the initial sizes of each middleware phase to avoid some unnecessary reallocation.",
"modules": [
"."
]
}
14 changes: 8 additions & 6 deletions middleware/ordered_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ type orderedIDs struct {
items map[string]ider
}

const baseOrderedItems = 5
// selected based on the general upper bound of # of middlewares in each step
// in the downstream aws-sdk-go-v2
const baseOrderedItems = 8

func newOrderedIDs() *orderedIDs {
func newOrderedIDs(cap int) *orderedIDs {
return &orderedIDs{
order: newRelativeOrder(),
items: make(map[string]ider, baseOrderedItems),
order: newRelativeOrder(cap),
items: make(map[string]ider, cap),
}
}

Expand Down Expand Up @@ -141,9 +143,9 @@ type relativeOrder struct {
order []string
}

func newRelativeOrder() *relativeOrder {
func newRelativeOrder(cap int) *relativeOrder {
return &relativeOrder{
order: make([]string, 0, baseOrderedItems),
order: make([]string, 0, cap),
}
}

Expand Down
14 changes: 7 additions & 7 deletions middleware/ordered_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
)

func TestOrderedIDsAdd(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Add(&mockIder{"second"}, After))
Expand All @@ -31,7 +31,7 @@ func TestOrderedIDsAdd(t *testing.T) {
}

func TestOrderedIDsInsert(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Insert(&mockIder{"third"}, "first", After))
Expand Down Expand Up @@ -63,7 +63,7 @@ func TestOrderedIDsInsert(t *testing.T) {
}

func TestOrderedIDsGet(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Add(&mockIder{"second"}, After))
Expand All @@ -83,7 +83,7 @@ func TestOrderedIDsGet(t *testing.T) {
}

func TestOrderedIDsSwap(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Add(&mockIder{"second"}, After))
Expand Down Expand Up @@ -119,7 +119,7 @@ func TestOrderedIDsSwap(t *testing.T) {
}

func TestOrderedIDsRemove(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)
firstIder := &mockIder{"first"}
noError(t, o.Add(firstIder, After))
noError(t, o.Insert(&mockIder{"third"}, "first", After))
Expand All @@ -144,7 +144,7 @@ func TestOrderedIDsRemove(t *testing.T) {
}

func TestOrderedIDsClear(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Add(&mockIder{"second"}, After))
Expand All @@ -161,7 +161,7 @@ func TestOrderedIDsClear(t *testing.T) {
}

func TestOrderedIDsGetOrder(t *testing.T) {
o := newOrderedIDs()
o := newOrderedIDs(10)

noError(t, o.Add(&mockIder{"first"}, After))
noError(t, o.Add(&mockIder{"second"}, After))
Expand Down
2 changes: 1 addition & 1 deletion middleware/step_build.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ type BuildStep struct {
// initialization added to it.
func NewBuildStep() *BuildStep {
return &BuildStep{
ids: newOrderedIDs(),
ids: newOrderedIDs(baseOrderedItems),
}
}

Expand Down
3 changes: 2 additions & 1 deletion middleware/step_deserialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ type DeserializeStep struct {
// initialization added to it.
func NewDeserializeStep() *DeserializeStep {
return &DeserializeStep{
ids: newOrderedIDs(),
// downstream SDK typically has larger Deserialize step
ids: newOrderedIDs(baseOrderedItems * 2),
}
}

Expand Down
3 changes: 2 additions & 1 deletion middleware/step_finalize.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ type FinalizeStep struct {
// initialization added to it.
func NewFinalizeStep() *FinalizeStep {
return &FinalizeStep{
ids: newOrderedIDs(),
// downstream SDK typically has larger Finalize step
ids: newOrderedIDs(baseOrderedItems * 2),
}
}

Expand Down
2 changes: 1 addition & 1 deletion middleware/step_initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ type InitializeStep struct {
// initialization added to it.
func NewInitializeStep() *InitializeStep {
return &InitializeStep{
ids: newOrderedIDs(),
ids: newOrderedIDs(baseOrderedItems),
}
}

Expand Down
2 changes: 1 addition & 1 deletion middleware/step_serialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ type SerializeStep struct {
// serialize the input parameters into.
func NewSerializeStep(newRequest func() interface{}) *SerializeStep {
return &SerializeStep{
ids: newOrderedIDs(),
ids: newOrderedIDs(baseOrderedItems),
newRequest: newRequest,
}
}
Expand Down