diff --git a/store.go b/store.go index 00a4aa4..79efb11 100644 --- a/store.go +++ b/store.go @@ -106,6 +106,7 @@ func New(databasePath string, options ...StoreOption) (*Store, error) { } } storeInstance.startBackgroundPurge(purgeContext) + storeInstance.cleanUpOrphanedWorkspaces(defaultWorkspaceStateDirectory) return storeInstance, nil } diff --git a/workspace.go b/workspace.go index 47cb3a5..ac1f8b8 100644 --- a/workspace.go +++ b/workspace.go @@ -133,6 +133,12 @@ func (storeInstance *Store) RecoverOrphans(stateDirectory string) []*Workspace { return workspaces } +func (storeInstance *Store) cleanUpOrphanedWorkspaces(stateDirectory string) { + for _, orphanWorkspace := range storeInstance.RecoverOrphans(stateDirectory) { + orphanWorkspace.Discard() + } +} + // Put appends one entry to the workspace buffer. // Usage example: `err := workspace.Put("like", map[string]any{"user": "@alice", "post": "video_123"})` func (workspace *Workspace) Put(kind string, data map[string]any) error { diff --git a/workspace_test.go b/workspace_test.go index 4e95d4c..2b9aedd 100644 --- a/workspace_test.go +++ b/workspace_test.go @@ -182,3 +182,22 @@ func TestWorkspace_RecoverOrphans_Good(t *testing.T) { orphans[0].Discard() assert.False(t, testFilesystem().Exists(workspaceFilePath(stateDirectory, "orphan-session"))) } + +func TestWorkspace_New_Good_CleansUpOrphanedWorkspaces(t *testing.T) { + stateDirectory := useWorkspaceStateDirectory(t) + requireCoreOK(t, testFilesystem().EnsureDir(stateDirectory)) + + orphanDatabasePath := workspaceFilePath(stateDirectory, "orphan-session") + orphanDatabase, err := openWorkspaceDatabase(orphanDatabasePath) + require.NoError(t, err) + require.NoError(t, orphanDatabase.Close()) + assert.True(t, testFilesystem().Exists(orphanDatabasePath)) + + storeInstance, err := New(":memory:") + require.NoError(t, err) + defer storeInstance.Close() + + assert.False(t, testFilesystem().Exists(orphanDatabasePath)) + assert.False(t, testFilesystem().Exists(orphanDatabasePath+"-wal")) + assert.False(t, testFilesystem().Exists(orphanDatabasePath+"-shm")) +}