Skip to content

Commit

Permalink
metabase: add benchmarks for precommit constraint
Browse files Browse the repository at this point in the history
Change-Id: I4a01da1196504a695db98f5d249ba1bcce9ceff3
  • Loading branch information
egonelbre committed Jan 17, 2024
1 parent ee3570e commit 573e7c7
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
23 changes: 23 additions & 0 deletions satellite/metabase/precommit_expose_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2024 Storj Labs, Inc.
// See LICENSE for copying information.

package metabase

import (
"context"
)

// PrecommitConstraint exposes precommitConstraint for testing.
type PrecommitConstraint precommitConstraint

// PrecommitConstraintResult exposes precommitConstraintResult for testing.
type PrecommitConstraintResult precommitConstraintResult

// StmtRow exposes stmtRow for testing.
type StmtRow stmtRow

// PrecommitConstraint exposes precommitConstraint for testing.
func (db *DB) PrecommitConstraint(ctx context.Context, opts PrecommitConstraint, tx StmtRow) (result PrecommitConstraintResult, err error) {
r, err := db.precommitConstraint(ctx, precommitConstraint(opts), tx)
return PrecommitConstraintResult(r), err
}
71 changes: 71 additions & 0 deletions satellite/metabase/precommit_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// Copyright (C) 2020 Storj Labs, Inc.
// See LICENSE for copying information.

package metabase_test

import (
"strconv"
"testing"

"github.com/stretchr/testify/require"

"storj.io/common/testcontext"
"storj.io/storj/satellite/metabase"
"storj.io/storj/satellite/metabase/metabasetest"
)

func BenchmarkPrecommitConstraint(b *testing.B) {
metabasetest.Bench(b, func(ctx *testcontext.Context, b *testing.B, db *metabase.DB) {
baseObj := metabasetest.RandObjectStream()

for i := 0; i < 500; i++ {
metabasetest.CreateObject(ctx, b, db, metabasetest.RandObjectStream(), 0)
}

for i := 0; i < 10; i++ {
baseObj.ObjectKey = metabase.ObjectKey("foo/" + strconv.Itoa(i))
metabasetest.CreateObject(ctx, b, db, baseObj, 0)

baseObj.ObjectKey = metabase.ObjectKey("foo/prefixA/" + strconv.Itoa(i))
metabasetest.CreateObject(ctx, b, db, baseObj, 0)

baseObj.ObjectKey = metabase.ObjectKey("foo/prefixB/" + strconv.Itoa(i))
metabasetest.CreateObject(ctx, b, db, baseObj, 0)
}

for i := 0; i < 50; i++ {
baseObj.ObjectKey = metabase.ObjectKey("boo/foo" + strconv.Itoa(i) + "/object")
metabasetest.CreateObject(ctx, b, db, baseObj, 0)
}

b.Run("unversioned", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := db.PrecommitConstraint(ctx, metabase.PrecommitConstraint{
Location: metabase.ObjectLocation{
ProjectID: baseObj.ProjectID,
BucketName: baseObj.BucketName,
ObjectKey: "foo/5",
},
Versioned: false,
DisallowDelete: false,
}, db.UnderlyingTagSQL())
require.NoError(b, err)
}
})

b.Run("versioned", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := db.PrecommitConstraint(ctx, metabase.PrecommitConstraint{
Location: metabase.ObjectLocation{
ProjectID: baseObj.ProjectID,
BucketName: baseObj.BucketName,
ObjectKey: "foo/5",
},
Versioned: true,
DisallowDelete: false,
}, db.UnderlyingTagSQL())
require.NoError(b, err)
}
})
})
}

0 comments on commit 573e7c7

Please sign in to comment.