From 3e601ea2cbdd44cecae77e659263c4afdf41363a Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sat, 19 Oct 2019 04:07:24 +0300 Subject: [PATCH] Fixing stupid memory leak caused by excessive pointer dereference. --- magnetico-migrator.go | 10 ++++------ old/sqlite.go | 11 ++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/magnetico-migrator.go b/magnetico-migrator.go index 3e164a5..424983a 100644 --- a/magnetico-migrator.go +++ b/magnetico-migrator.go @@ -11,13 +11,12 @@ import ( "go.uber.org/zap" "gopkg.in/alecthomas/kingpin.v2" "net/url" - "time" ) var ( goDatabaseUrl = kingpin.Flag("go-database", "magneticod Go version database URL.").Short('g').String() pyDatabaseUrl = kingpin.Flag("py-database", "Python version database URL.").Short('p').Required().String() - chunkSize = kingpin.Flag("chunk-size", "How many torrents to retrieve from old DB at once").Short('c').Default("50").Uint64() + chunkSize = kingpin.Flag("chunk-size", "How many torrents to retrieve from old DB at once").Short('c').Default("200").Uint64() progress pb.ProgressBar ) @@ -46,16 +45,15 @@ func main() { } defer pyDatabase.Close() - torrentsTotal, err := old.GetNumberOfTorrents(*pyDatabase) + torrentsTotal, err := old.GetNumberOfTorrents(pyDatabase) if err != nil { zap.L().Panic("Couldn't count torrents", zap.Error(err)) } progress = *pb.Full.New(int(torrentsTotal)) - progress.SetRefreshRate(time.Second) progress.Start() - err = mergeDatabases(*pyDatabase, goDatabase) + err = mergeDatabases(pyDatabase, goDatabase) if err != nil { logger.Error("Error while processing data", zap.Error(err)) } @@ -63,7 +61,7 @@ func main() { progress.Finish() } -func mergeDatabases(pyDb sql.DB, goDb persistence.Database) error { +func mergeDatabases(pyDb *sql.DB, goDb persistence.Database) error { maxId, err := old.GetLastTorrentId(pyDb) if err != nil { zap.L().Fatal("Error while getting last torrent ID from old database") diff --git a/old/sqlite.go b/old/sqlite.go index eecb420..df81ef6 100644 --- a/old/sqlite.go +++ b/old/sqlite.go @@ -16,10 +16,11 @@ type TorrentData struct { func OpenSqliteDb(url_ url.URL) (*sql.DB, error) { url_.Scheme = "" + return sql.Open("sqlite3", url_.String()) } -func GetNumberOfTorrents(db sql.DB) (uint, error) { +func GetNumberOfTorrents(db *sql.DB) (uint, error) { rows, err := db.Query("SELECT COUNT(id) FROM torrents;") if err != nil { return 0, err @@ -43,7 +44,7 @@ func GetNumberOfTorrents(db sql.DB) (uint, error) { } } -func GetLastTorrentId(db sql.DB) (uint64, error) { +func GetLastTorrentId(db *sql.DB) (uint64, error) { rows, err := db.Query("SELECT MAX(id) FROM torrents;") if err != nil { return 0, err @@ -67,8 +68,8 @@ func GetLastTorrentId(db sql.DB) (uint64, error) { } } -func GetTorrentsChunk(db sql.DB, fromId uint64, size uint64) ([]TorrentData, error) { - chunk := make([]TorrentData, 0) +func GetTorrentsChunk(db *sql.DB, fromId uint64, size uint64) ([]TorrentData, error) { + chunk := make([]TorrentData, 0, size) // Selecting torrents tRows, err := db.Query(` @@ -106,7 +107,7 @@ func GetTorrentsChunk(db sql.DB, fromId uint64, size uint64) ([]TorrentData, err return chunk, nil } -func GetFilesForTorrent(pyDb sql.DB, torrent persistence.TorrentMetadata) ([]persistence.File, error) { +func GetFilesForTorrent(pyDb *sql.DB, torrent persistence.TorrentMetadata) ([]persistence.File, error) { files := make([]persistence.File, 0) // Selecting files for torrent