diff --git a/store.go b/store.go index d856f23..8a2ce6d 100644 --- a/store.go +++ b/store.go @@ -156,6 +156,7 @@ func newStoreFromConfig(operation string, config StoreConfig) (*Store, error) { } storeInstance.startBackgroundPurge() + storeInstance.cleanUpOrphanedWorkspaces(defaultWorkspaceStateDirectory) return storeInstance, nil } diff --git a/workspace.go b/workspace.go index bcaac4a..f1f0e8f 100644 --- a/workspace.go +++ b/workspace.go @@ -159,6 +159,17 @@ func discoverOrphanWorkspacePaths(stateDirectory string) []string { return orphanPaths } +func (storeInstance *Store) cleanUpOrphanedWorkspaces(stateDirectory string) { + if storeInstance == nil { + return + } + + for _, orphanWorkspace := range storeInstance.RecoverOrphans(stateDirectory) { + _ = orphanWorkspace.Aggregate() + orphanWorkspace.Discard() + } +} + func workspaceNameFromPath(stateDirectory, databasePath string) string { relativePath := core.TrimPrefix(databasePath, joinPath(stateDirectory, "")) return core.TrimSuffix(relativePath, ".duckdb") diff --git a/workspace_test.go b/workspace_test.go index 319d48c..2ae88f1 100644 --- a/workspace_test.go +++ b/workspace_test.go @@ -184,7 +184,7 @@ func TestWorkspace_RecoverOrphans_Good(t *testing.T) { assert.False(t, testFilesystem().Exists(workspaceFilePath(stateDirectory, "orphan-session"))) } -func TestWorkspace_New_Good_PreservesOrphanedWorkspacesUntilRecovered(t *testing.T) { +func TestWorkspace_New_Good_CleansUpOrphanedWorkspaces(t *testing.T) { stateDirectory := useWorkspaceStateDirectory(t) requireCoreOK(t, testFilesystem().EnsureDir(stateDirectory)) @@ -198,11 +198,7 @@ func TestWorkspace_New_Good_PreservesOrphanedWorkspacesUntilRecovered(t *testing require.NoError(t, err) defer storeInstance.Close() - assert.True(t, testFilesystem().Exists(orphanDatabasePath)) - - orphans := storeInstance.RecoverOrphans(stateDirectory) - require.Len(t, orphans, 1) - orphans[0].Discard() - assert.False(t, testFilesystem().Exists(orphanDatabasePath)) + assert.False(t, testFilesystem().Exists(orphanDatabasePath+"-wal")) + assert.False(t, testFilesystem().Exists(orphanDatabasePath+"-shm")) }