From 631a3f4e6c4d5fd67e4de07613abe63be949a760 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Mon, 24 Mar 2025 00:37:50 +0530 Subject: [PATCH] [server][core][fs] filesystem.runInTx --- server/internal/core/fs/copy_move.go | 11 ++++------- server/internal/core/fs/create.go | 13 +++++-------- server/internal/core/fs/filesystem.go | 6 ++++++ server/internal/core/fs/resource_delete.go | 7 +++---- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/server/internal/core/fs/copy_move.go b/server/internal/core/fs/copy_move.go index ed7b09c7..7600840c 100644 --- a/server/internal/core/fs/copy_move.go +++ b/server/internal/core/fs/copy_move.go @@ -54,8 +54,7 @@ func (r Resource) Move(target string, conflictResolution ResourceBindConflictRes var res Resource var deleted = false - return res, deleted, r.f.db.WithTx(r.f.ctx, func(dbh *db.DbHandler) error { - f := r.f.withDb(dbh) + return res, deleted, r.f.runInTx(func(f filesystem) error { if conflictResolution == ResourceBindConflictResolutionOverwrite || conflictResolution == ResourceBindConflictResolutionDelete { if _, err := destParent.DeleteChildRecursive(destName, true); err == nil { deleted = true @@ -117,9 +116,7 @@ func (r Resource) Copy(target string, id uuid.UUID, recursive bool, conflictReso var root db.Resource created := false deleted := false - err = r.f.db.WithTx(r.f.ctx, func(dbh *db.DbHandler) error { - f := r.f.withDb(dbh) - + err = r.f.runInTx(func(f filesystem) error { root, created, deleted, err = f.createResource( id, destParent.ID(), @@ -166,14 +163,14 @@ func (r Resource) Copy(target string, id uuid.UUID, recursive bool, conflictReso } } - if _, err := dbh.CreateResources(f.ctx, children); err != nil { + if _, err := f.db.CreateResources(f.ctx, children); err != nil { return err } if err := f.db.RecomputePermissions(r.f.ctx, id); err != nil { return err } if created { - return dbh.UpdateResourceModified(f.ctx, destParent.ID()) + return f.db.UpdateResourceModified(f.ctx, destParent.ID()) } return nil }) diff --git a/server/internal/core/fs/create.go b/server/internal/core/fs/create.go index 24c6ea69..91fe3039 100644 --- a/server/internal/core/fs/create.go +++ b/server/internal/core/fs/create.go @@ -51,17 +51,16 @@ func (r Resource) CreateMemberResource(name string, id uuid.UUID, dir bool, conf } var result db.Resource var created bool - err := r.f.db.WithTx(r.f.ctx, func(d *db.DbHandler) error { + err := r.f.runInTx(func(f filesystem) error { var err error parent := r.ID() - f := r.f.withDb(d) if result, created, _, err = f.createResource(id, parent, name, dir, 0, emptyContentType, emptyContentSHA256, conflictResolution); err != nil { return err } else if created { - if err := f.db.RecomputePermissions(r.f.ctx, id); err != nil { + if err := f.db.RecomputePermissions(f.ctx, id); err != nil { return err } - return d.UpdateResourceModified(r.f.ctx, parent) + return f.db.UpdateResourceModified(f.ctx, parent) } return nil }) @@ -97,8 +96,7 @@ func (f filesystem) createResource( contentSHA256 string, conflictResolution ResourceBindConflictResolution, ) (res db.Resource, created, deleted bool, err error) { - err = f.db.WithTx(f.ctx, func(d *db.DbHandler) error { - f := f.withDb(d) + err = f.runInTx(func(f filesystem) error { res, err = f.db.CreateResource(f.ctx, db.CreateResourceParams{ ID: id, Parent: &parent, @@ -129,8 +127,7 @@ func (f filesystem) createResource( counter := 1 for { name := fmt.Sprintf("%s (%d)%s", basename, counter, ext) - err = f.db.WithTx(f.ctx, func(d *db.DbHandler) error { - f := f.withDb(d) + err = f.runInTx(func(f filesystem) error { res, err = f.db.CreateResource(f.ctx, db.CreateResourceParams{ ID: id, Parent: &parent, diff --git a/server/internal/core/fs/filesystem.go b/server/internal/core/fs/filesystem.go index 070c55e2..2f2a3766 100644 --- a/server/internal/core/fs/filesystem.go +++ b/server/internal/core/fs/filesystem.go @@ -56,3 +56,9 @@ func (f filesystem) RunInTx(fn func(FileSystem) error) error { return fn(f.WithDb(db)) }) } + +func (f filesystem) runInTx(fn func(filesystem) error) error { + return f.db.WithTx(f.ctx, func(db *db.DbHandler) error { + return fn(f.withDb(db)) + }) +} diff --git a/server/internal/core/fs/resource_delete.go b/server/internal/core/fs/resource_delete.go index 5f2d8a0d..515720b6 100644 --- a/server/internal/core/fs/resource_delete.go +++ b/server/internal/core/fs/resource_delete.go @@ -106,8 +106,7 @@ func (r Resource) RestoreDeleted(parentPathOrUUID string, name string, autoRenam return } - err = r.f.db.WithTx(r.f.ctx, func(d *db.DbHandler) error { - f := r.f.withDb(d) + err = r.f.runInTx(func(f filesystem) error { if p.id != *r.parentID || r.name != name { if update, err := f.db.UpdateResourceNameParent(f.ctx, db.UpdateResourceNameParentParams{ID: r.ID(), Name: name, Parent: p.id}); err != nil { if strings.Contains(err.Error(), "unique_member_resource_name") { @@ -136,13 +135,13 @@ func (r Resource) RestoreDeleted(parentPathOrUUID string, name string, autoRenam func (f filesystem) deleteRecursive(id, parent uuid.UUID, softDelete, preserveRoot bool) error { var ids uuid.UUIDs - err := f.db.WithTx(f.ctx, func(d *db.DbHandler) error { + err := f.runInTx(func(f filesystem) error { var err error if _, ids, err = f.markDeleted(id, softDelete, preserveRoot); err != nil { return err } - return d.UpdateResourceModified(f.ctx, parent) + return f.db.UpdateResourceModified(f.ctx, parent) }) if err == nil && !softDelete {