From 6c3b08b6d06287f2b659d5a791a7921e82e17654 Mon Sep 17 00:00:00 2001
From: Edward Welch <edward.welch@grafana.com>
Date: Wed, 8 May 2019 10:11:36 -0400
Subject: [PATCH] Close all chunks before flushing. Moved the check for already
 closed to make sure we honor this check when `immediate` flushing is
 requested

---
 pkg/ingester/flush.go | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/pkg/ingester/flush.go b/pkg/ingester/flush.go
index 7bdeae54..d056d25d 100644
--- a/pkg/ingester/flush.go
+++ b/pkg/ingester/flush.go
@@ -196,17 +196,20 @@ func (i *Ingester) collectChunksToFlush(instance *instance, fp model.Fingerprint
 	var result []*chunkDesc
 	for j := range stream.chunks {
 		if immediate || i.shouldFlushChunk(&stream.chunks[j]) {
-			result = append(result, &stream.chunks[j])
+			// Ensure no more writes happen to this chunk.
+			if !stream.chunks[j].closed {
+				stream.chunks[j].closed = true
+			}
+			// Flush this chunk if it hasn't already been successfully flushed.
+			if stream.chunks[j].flushed.IsZero() {
+				result = append(result, &stream.chunks[j])
+			}
 		}
 	}
 	return result, stream.labels
 }
 
 func (i *Ingester) shouldFlushChunk(chunk *chunkDesc) bool {
-	if !chunk.flushed.IsZero() {
-		return false
-	}
-
 	// Append should close the chunk when the a new one is added.
 	if chunk.closed {
 		return true
-- 
GitLab