mirror of https://github.com/grafana/loki
Results cache fix improvements (#7444)
Move middleware to someplace more sensible and incorporate feedback missed in the review for this.pull/7446/head
parent
b59277b472
commit
c1bccac141
@ -0,0 +1,30 @@ |
||||
package queryrangebase |
||||
|
||||
import ( |
||||
"net/http" |
||||
|
||||
"github.com/grafana/dskit/tenant" |
||||
"github.com/weaveworks/common/middleware" |
||||
) |
||||
|
||||
const ( |
||||
// ResultsCacheGenNumberHeaderName holds name of the header we want to set in http response
|
||||
ResultsCacheGenNumberHeaderName = "Results-Cache-Gen-Number" |
||||
) |
||||
|
||||
func CacheGenNumberHeaderSetterMiddleware(cacheGenNumbersLoader CacheGenNumberLoader) middleware.Interface { |
||||
return middleware.Func(func(next http.Handler) http.Handler { |
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
||||
userIDs, err := tenant.TenantIDs(r.Context()) |
||||
if err != nil { |
||||
http.Error(w, err.Error(), http.StatusUnauthorized) |
||||
return |
||||
} |
||||
|
||||
cacheGenNumber := cacheGenNumbersLoader.GetResultsCacheGenNumber(userIDs) |
||||
|
||||
w.Header().Set(ResultsCacheGenNumberHeaderName, cacheGenNumber) |
||||
next.ServeHTTP(w, r) |
||||
}) |
||||
}) |
||||
} |
@ -0,0 +1,33 @@ |
||||
package queryrangebase |
||||
|
||||
import ( |
||||
"context" |
||||
"net/http" |
||||
"net/http/httptest" |
||||
"testing" |
||||
|
||||
"github.com/weaveworks/common/user" |
||||
|
||||
"github.com/stretchr/testify/assert" |
||||
) |
||||
|
||||
func TestCacheGenNumberHeaderSetterMiddleware(t *testing.T) { |
||||
ctx := user.InjectOrgID(context.Background(), "fake") |
||||
req, _ := http.NewRequestWithContext(ctx, "GET", "http://testing.com", nil) |
||||
w := httptest.NewRecorder() |
||||
loader := &fakeGenNumberLoader{genNumber: "test-header-value"} |
||||
|
||||
mware := CacheGenNumberHeaderSetterMiddleware(loader). |
||||
Wrap(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {})) |
||||
mware.ServeHTTP(w, req) |
||||
|
||||
assert.Equal(t, w.Header().Get(ResultsCacheGenNumberHeaderName), "test-header-value") |
||||
} |
||||
|
||||
type fakeGenNumberLoader struct { |
||||
genNumber string |
||||
} |
||||
|
||||
func (l *fakeGenNumberLoader) GetResultsCacheGenNumber(tenantIDs []string) string { |
||||
return l.genNumber |
||||
} |
Loading…
Reference in new issue