diff --git a/repo/object_manager_test.go b/repo/object_manager_test.go index caad72bf6..2b32f0157 100644 --- a/repo/object_manager_test.go +++ b/repo/object_manager_test.go @@ -12,6 +12,7 @@ "reflect" "runtime/debug" "testing" + "time" "github.com/kopia/kopia/auth" @@ -190,6 +191,30 @@ func TestPackingSimple(t *testing.T) { verify(t, repo, oid1a, []byte(content1), "packed-object-1") verify(t, repo, oid2a, []byte(content2), "packed-object-2") verify(t, repo, oid3a, []byte(content3), "packed-object-3") + + if err := repo.Optimize(time.Now().Add(10 * time.Second)); err != nil { + t.Errorf("optimize error: %v", err) + } + data, repo = setupTestWithData(t, data, func(n *NewRepositoryOptions) { + n.MaxPackFileLength = 10000 + n.MaxPackedContentLength = 10000 + }) + + verify(t, repo, oid1a, []byte(content1), "packed-object-1") + verify(t, repo, oid2a, []byte(content2), "packed-object-2") + verify(t, repo, oid3a, []byte(content3), "packed-object-3") + + if err := repo.Optimize(time.Now().Add(-10 * time.Second)); err != nil { + t.Errorf("optimize error: %v", err) + } + data, repo = setupTestWithData(t, data, func(n *NewRepositoryOptions) { + n.MaxPackFileLength = 10000 + n.MaxPackedContentLength = 10000 + }) + + verify(t, repo, oid1a, []byte(content1), "packed-object-1") + verify(t, repo, oid2a, []byte(content2), "packed-object-2") + verify(t, repo, oid3a, []byte(content3), "packed-object-3") } func verifyIndirectBlock(t *testing.T, r *Repository, oid ObjectID) { diff --git a/repo/pack_manager.go b/repo/pack_manager.go index 8d616d06d..1c9c5eaae 100644 --- a/repo/pack_manager.go +++ b/repo/pack_manager.go @@ -345,7 +345,7 @@ func (p *packManager) Compact(cutoffTime time.Time) error { return err } - if len(blockIDs) < parallelFetches { + if len(blockIDs) <= 1 { log.Printf("skipping index compaction - the number of segments %v is too low", len(blockIDs)) return nil }