From 73e0d8c213766eee606518df646e99629cd18269 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sun, 16 Feb 2014 21:59:10 +0400 Subject: [PATCH] Attempt to lower memory pressure a bit. --- debian/remote.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/debian/remote.go b/debian/remote.go index 774e5055..d3669b1f 100644 --- a/debian/remote.go +++ b/debian/remote.go @@ -359,10 +359,19 @@ func (repo *RemoteRepo) Download(d utils.Downloader, packageCollection *PackageC d.GetProgress().InitBar(int64(list.Len()), false) packageCollection.db.StartBatch() + count := 0 // Save package meta information to DB err := list.ForEach(func(p *Package) error { d.GetProgress().AddBar(1) + count++ + if count > 1000 { + err := packageCollection.db.FinishBatch() + if err != nil { + return err + } + packageCollection.db.StartBatch() + } return packageCollection.Update(p) }) if err != nil { @@ -380,7 +389,7 @@ func (repo *RemoteRepo) Download(d utils.Downloader, packageCollection *PackageC // Build download queue queued := make(map[string]PackageDownloadTask, list.Len()) - count := 0 + count = 0 downloadSize := int64(0) err = list.ForEach(func(p *Package) error { @@ -405,6 +414,10 @@ func (repo *RemoteRepo) Download(d utils.Downloader, packageCollection *PackageC return fmt.Errorf("unable to build download queue: %s", err) } + repo.packageRefs = NewPackageRefListFromPackageList(list) + // free up package list, we don't need it after this point + list = nil + d.GetProgress().Printf("Download queue: %d items, %.2f GiB size\n", count, float64(downloadSize)/(1024.0*1024.0*1024.0)) d.GetProgress().InitBar(downloadSize, true) @@ -434,7 +447,6 @@ func (repo *RemoteRepo) Download(d utils.Downloader, packageCollection *PackageC } repo.LastDownloadDate = time.Now() - repo.packageRefs = NewPackageRefListFromPackageList(list) return nil }