Skip to content

Commit f2972f1

Browse files
sumslimSumeet Rai
and
Sumeet Rai
authored
feat: Optimize delete asset memory usage (#85)
* invoke removal of cancel func after deletion from ES * remove redundant cancel func storage * added support for sync.Map to cancel and delete function within context * resolved comments --------- Co-authored-by: Sumeet Rai <[email protected]>
1 parent c62d999 commit f2972f1

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

core/asset/service.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package asset
33
import (
44
"context"
55
"fmt"
6+
"sync"
67
"time"
78

89
"github.com/google/uuid"
@@ -20,9 +21,8 @@ type Service struct {
2021
worker Worker
2122
logger log.Logger
2223
config Config
23-
cancelFnList []func()
24-
25-
assetOpCounter metric.Int64Counter
24+
cancelFnMap *sync.Map
25+
assetOpCounter metric.Int64Counter
2626
}
2727

2828
//go:generate mockery --name=Worker -r --case underscore --with-expecter --structname Worker --filename worker_mock.go --output=./mocks
@@ -58,15 +58,17 @@ func NewService(deps ServiceDeps) (service *Service, cancel func()) {
5858
worker: deps.Worker,
5959
logger: deps.Logger,
6060
config: deps.Config,
61-
cancelFnList: make([]func(), 0),
62-
63-
assetOpCounter: assetOpCounter,
61+
cancelFnMap: new(sync.Map),
62+
assetOpCounter: assetOpCounter,
6463
}
6564

6665
return newService, func() {
67-
for i := range newService.cancelFnList {
68-
newService.cancelFnList[i]()
69-
}
66+
newService.cancelFnMap.Range(func(_, value interface{}) bool {
67+
if cancelFn, ok := value.(func()); ok {
68+
cancelFn()
69+
}
70+
return true
71+
})
7072
}
7173
}
7274

@@ -154,8 +156,13 @@ func (s *Service) DeleteAssets(ctx context.Context, request DeleteAssetsRequest)
154156

155157
if !request.DryRun && total > 0 {
156158
newCtx, cancel := context.WithTimeout(context.Background(), s.config.DeleteAssetsTimeout)
157-
s.cancelFnList = append(s.cancelFnList, cancel)
158-
go s.executeDeleteAssets(newCtx, deleteSQLExpr)
159+
cancelID := uuid.New().String()
160+
s.cancelFnMap.Store(cancelID, cancel)
161+
go func(id string) {
162+
s.executeDeleteAssets(newCtx, deleteSQLExpr)
163+
cancel()
164+
s.cancelFnMap.Delete(id)
165+
}(cancelID)
159166
}
160167

161168
return uint32(total), nil

0 commit comments

Comments
 (0)