|
8 | 8 | "os" |
9 | 9 | "path/filepath" |
10 | 10 | "regexp" |
11 | | - "runtime" |
| 11 | + "runtime/debug" |
12 | 12 | "sort" |
13 | 13 | "strings" |
14 | 14 | "sync" |
@@ -139,7 +139,7 @@ func processRepos( |
139 | 139 | rs *model.RepositoryResultSet, |
140 | 140 | stars map[string]uint32, |
141 | 141 | ) <-chan *repositoryData { |
142 | | - logrus.WithField("workers", runtime.NumCPU()).Info("start processing repos") |
| 142 | + logrus.WithField("workers", workers).Info("start processing repos") |
143 | 143 | start := time.Now() |
144 | 144 | defer func() { |
145 | 145 | logrus.WithField("elapsed", time.Since(start)).Debug("finished processing repos") |
@@ -240,27 +240,34 @@ func (p *processor) process() (*repositoryData, error) { |
240 | 240 |
|
241 | 241 | mut := p.locker.lock(head.String()) |
242 | 242 | mut.Lock() |
243 | | - tx, err := p.txer.Begin(context.TODO(), plumbing.NewHash(head.String())) |
244 | | - if err != nil { |
245 | | - mut.Unlock() |
246 | | - return nil, fmt.Errorf("can't start transaction: %s", err) |
247 | | - } |
248 | 243 |
|
249 | | - p.repo, err = git.Open(tx.Storer(), nil) |
250 | | - if err != nil { |
251 | | - mut.Unlock() |
252 | | - return nil, fmt.Errorf("can't open git repo: %s", err) |
253 | | - } |
| 244 | + var data *repositoryData |
| 245 | + err := func() error { |
| 246 | + defer mut.Unlock() |
| 247 | + |
| 248 | + tx, err := p.txer.Begin(context.TODO(), plumbing.NewHash(head.String())) |
| 249 | + if err != nil { |
| 250 | + return fmt.Errorf("can't start transaction: %s", err) |
| 251 | + } |
| 252 | + defer tx.Rollback() |
| 253 | + |
| 254 | + p.repo, err = git.Open(tx.Storer(), nil) |
| 255 | + if err != nil { |
| 256 | + return fmt.Errorf("can't open git repo: %s", err) |
| 257 | + } |
| 258 | + |
| 259 | + data, err = p.data() |
| 260 | + if err != nil { |
| 261 | + return fmt.Errorf("unable to get repo data: %s", err) |
| 262 | + } |
| 263 | + |
| 264 | + return nil |
| 265 | + }() |
254 | 266 |
|
255 | | - data, err := p.data() |
256 | 267 | if err != nil { |
257 | | - mut.Unlock() |
258 | | - return nil, fmt.Errorf("unable to get repo data: %s", err) |
| 268 | + return nil, err |
259 | 269 | } |
260 | 270 |
|
261 | | - mut.Unlock() |
262 | | - _ = tx.Rollback() |
263 | | - |
264 | 271 | log = log.WithField("url", data.URL) |
265 | 272 | var sumOfSivaSizes int64 |
266 | 273 | for init := range inits { |
@@ -333,6 +340,7 @@ func (p *processor) process() (*repositoryData, error) { |
333 | 340 | data.SivaFiles = sivaFiles(inits) |
334 | 341 | data.Size = sumOfSivaSizes |
335 | 342 |
|
| 343 | + debug.FreeOSMemory() |
336 | 344 | return data, nil |
337 | 345 | } |
338 | 346 |
|
|
0 commit comments