From 8afb05a8a51948f44e93527de65847a6f1305050 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 3 Nov 2020 15:16:57 +1100 Subject: [PATCH] sqlite storage: Batch writes synchronously instead of buffering them first --- storage/sqlite/sqlite-storage.go | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/storage/sqlite/sqlite-storage.go b/storage/sqlite/sqlite-storage.go index 8c2a770e..c0e59ccb 100644 --- a/storage/sqlite/sqlite-storage.go +++ b/storage/sqlite/sqlite-storage.go @@ -325,33 +325,33 @@ func providerWriter(writes <-chan writeRequest, pool ConnPool) { if !ok { return } - buf := []writeRequest{first} - buffer: - for { - select { - case wr, ok := <-writes: - if !ok { - break buffer - } - buf = append(buf, wr) - default: - break buffer - } - } + buf := []chan<- struct{}{first.done} var cantFail error func() { conn := pool.Get(context.TODO()) defer pool.Put(conn) defer sqlitex.Save(conn)(&cantFail) - for _, wr := range buf { - wr.query(conn) + first.query(conn) + for { + select { + case wr, ok := <-writes: + if ok { + buf = append(buf, wr.done) + wr.query(conn) + continue + } + default: + } + break } }() + // Not sure what to do if this failed. if cantFail != nil { panic(cantFail) } - for _, wr := range buf { - close(wr.done) + // Signal done after we know the transaction succeeded. + for _, done := range buf { + close(done) } //log.Printf("batched %v write queries", len(buf)) } -- 2.48.1