(p []byte)
| 244 | } |
| 245 | |
| 246 | func (w *progressReader) Read(p []byte) (int, error) { |
| 247 | n, err := w.reader.Read(p) |
| 248 | if n <= 0 || w.state == nil { |
| 249 | return n, err |
| 250 | } |
| 251 | |
| 252 | written := int64(n) |
| 253 | w.written += written |
| 254 | w.pending += written |
| 255 | if w.pending >= w.batchSize { |
| 256 | w.flushWithTime(time.Now()) |
| 257 | return n, err |
| 258 | } |
| 259 | |
| 260 | if w.batchInterval > 0 { |
| 261 | // Check wall-clock interval periodically to avoid calling time.Now on every read. |
| 262 | w.readChecks++ |
| 263 | if w.readChecks >= 8 { |
| 264 | now := time.Now() |
| 265 | if now.Sub(w.lastFlush) >= w.batchInterval { |
| 266 | w.flushWithTime(now) |
| 267 | } |
| 268 | w.readChecks = 0 |
| 269 | } |
| 270 | } |
| 271 | |
| 272 | return n, err |
| 273 | } |
| 274 | |
| 275 | func (w *progressReader) Flush() { |
| 276 | w.flushWithTime(time.Now()) |
no test coverage detected