diff --git a/sdks/storage/models.go b/sdks/storage/models.go index b1dad0c..9a79cd6 100644 --- a/sdks/storage/models.go +++ b/sdks/storage/models.go @@ -128,6 +128,10 @@ type Node struct { LastReportTime *time.Time `db:"LastReportTime" json:"lastReportTime"` } +func (n Node) String() string { + return fmt.Sprintf("%v(%v)", n.Name, n.NodeID) +} + type PinnedObject struct { ObjectID ObjectID `db:"ObjectID" json:"objectID"` NodeID NodeID `db:"NodeID" json:"nodeID"` diff --git a/utils/sync2/sync2.go b/utils/sync2/sync2.go index aa6bd50..8555a3b 100644 --- a/utils/sync2/sync2.go +++ b/utils/sync2/sync2.go @@ -2,12 +2,11 @@ package sync2 import ( "sync" - "sync/atomic" ) func ParallelDo[T any](args []T, fn func(val T, index int) error) error { - err := atomic.Value{} - err.Store((error)(nil)) + lock := sync.Mutex{} + var err error var wg sync.WaitGroup wg.Add(len(args)) @@ -16,10 +15,15 @@ func ParallelDo[T any](args []T, fn func(val T, index int) error) error { defer wg.Done() if e := fn(arg, index); e != nil { - err.CompareAndSwap((error)(nil), e) + lock.Lock() + if err == nil { + err = e + } + lock.Unlock() } }(arg, i) } wg.Wait() - return err.Load().(error) + + return err }