From 7f558b9f42a865d7f1b7d358dadbeeb121519c5c Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Wed, 9 Feb 2022 13:54:25 +0000 Subject: [PATCH] jobs benchmarks --- internal/scheduler/scheduler_test.go | 39 +++++++++++ internal/state/jobs_test.go | 99 ++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) diff --git a/internal/scheduler/scheduler_test.go b/internal/scheduler/scheduler_test.go index 7295214c2..7870abbda 100644 --- a/internal/scheduler/scheduler_test.go +++ b/internal/scheduler/scheduler_test.go @@ -65,6 +65,45 @@ func TestScheduler_basic(t *testing.T) { } } +func BenchmarkScheduler_EnqueueAndWaitForJob(b *testing.B) { + ss, err := state.NewStateStore() + if err != nil { + b.Fatal(err) + } + + tmpDir := b.TempDir() + ctx := context.Background() + + s := NewScheduler(&closedDirJobs{js: ss.JobStore}, 1) + s.Start(ctx) + b.Cleanup(func() { + s.Stop() + }) + + ids := make(job.IDs, 0) + for i := 0; i < b.N; i++ { + i := i + dirPath := filepath.Join(tmpDir, fmt.Sprintf("folder-%d", i)) + + newId, err := ss.JobStore.EnqueueJob(job.Job{ + Func: func(c context.Context) error { + return nil + }, + Dir: document.DirHandleFromPath(dirPath), + Type: "test-type", + }) + if err != nil { + b.Fatal(err) + } + ids = append(ids, newId) + } + + err = ss.JobStore.WaitForJobs(ctx, ids...) + if err != nil { + b.Fatal(err) + } +} + func TestScheduler_defer(t *testing.T) { ss, err := state.NewStateStore() if err != nil { diff --git a/internal/state/jobs_test.go b/internal/state/jobs_test.go index f40987108..57e182c3d 100644 --- a/internal/state/jobs_test.go +++ b/internal/state/jobs_test.go @@ -3,7 +3,11 @@ package state import ( "context" "errors" + "fmt" + "io/ioutil" "log" + "os" + "path/filepath" "sort" "testing" "time" @@ -59,6 +63,101 @@ func TestJobStore_EnqueueJob(t *testing.T) { } } +func BenchmarkJobStore_EnqueueJob_basic(b *testing.B) { + ss, err := NewStateStore() + if err != nil { + b.Fatal(err) + } + + tmpDir := b.TempDir() + + for i := 0; i < b.N; i++ { + i := i + dirPath := filepath.Join(tmpDir, fmt.Sprintf("folder-%d", i)) + + _, err := ss.JobStore.EnqueueJob(job.Job{ + Func: func(c context.Context) error { + return nil + }, + Dir: document.DirHandleFromPath(dirPath), + Type: "test-type", + }) + if err != nil { + b.Fatal(err) + } + } + + ids, err := ss.JobStore.ListQueuedJobs() + if err != nil { + b.Fatal(err) + } + + if len(ids) != b.N { + b.Fatalf("expected %d jobs, %d given", b.N, len(ids)) + } +} + +func TestJobStore_EnqueueJob_verify(t *testing.T) { + ss, err := NewStateStore() + if err != nil { + t.Fatal(err) + } + ss.SetLogger(testLogger()) + + tmpDir := t.TempDir() + + jobCount := 50 + + for i := 0; i < jobCount; i++ { + i := i + dirPath := filepath.Join(tmpDir, fmt.Sprintf("folder-%d", i)) + + _, err := ss.JobStore.EnqueueJob(job.Job{ + Func: func(c context.Context) error { + return nil + }, + Dir: document.DirHandleFromPath(dirPath), + Type: "test-type", + }) + if err != nil { + t.Fatal(err) + } + } + + ids, err := ss.JobStore.ListQueuedJobs() + if err != nil { + t.Fatal(err) + } + + if len(ids) != jobCount { + t.Fatalf("expected %d jobs, %d given", jobCount, len(ids)) + } + + for _, id := range ids { + err := ss.JobStore.FinishJob(id, nil) + if err != nil { + t.Error(err) + } + } + + ids, err = ss.JobStore.allJobs() + if err != nil { + t.Fatal(err) + } + + if len(ids) != 0 { + t.Fatalf("expected %d jobs, %d given", 0, len(ids)) + } +} + +func testLogger() *log.Logger { + if testing.Verbose() { + return log.New(os.Stdout, "", log.LstdFlags|log.Lshortfile) + } + + return log.New(ioutil.Discard, "", 0) +} + func TestJobStore_DequeueJobsForDir(t *testing.T) { ss, err := NewStateStore() if err != nil {