diff --git a/internal/reader/psync.go b/internal/reader/psync.go index 436ce39..0a43b0b 100644 --- a/internal/reader/psync.go +++ b/internal/reader/psync.go @@ -154,15 +154,20 @@ func (r *psyncReader) saveRDB() { } // read rdb - var readTotal int64 = 0 - buf := make([]byte, 32*1024*1024) - for readTotal < length { - n, err := r.rd.Read(buf) + remainder := length + const bufSize int64 = 32 * 1024 * 1024 // 32MB + buf := make([]byte, bufSize) + for remainder != 0 { + readOnce := bufSize + if remainder < readOnce { + readOnce = remainder + } + n, err := r.rd.Read(buf[:readOnce]) if err != nil { log.PanicError(err) } - readTotal += int64(n) - statistics.UpdateRDBReceivedSize(readTotal) + remainder -= int64(n) + statistics.UpdateRDBReceivedSize(length - remainder) _, err = rdbFileHandle.Write(buf[:n]) if err != nil { log.PanicError(err) @@ -172,7 +177,7 @@ func (r *psyncReader) saveRDB() { if err != nil { log.PanicError(err) } - log.Infof("save RDB finished. address=[%s], total_bytes=[%d]", r.address, readTotal) + log.Infof("save RDB finished. address=[%s], total_bytes=[%d]", r.address, length) } func (r *psyncReader) saveAOF(rd io.Reader) {