From 0fcd262b4578908974c1b25191df2c85dc05e74f Mon Sep 17 00:00:00 2001 From: Travis Patterson Date: Fri, 11 Mar 2022 10:37:49 -0700 Subject: [PATCH] Revert only the API surface area while keeping everything else --- .../operations/storage/logs-deletion.md | 25 ++++++++-------- pkg/loki/modules.go | 6 ++-- .../compactor/deletion/delete_request.go | 18 ++++++----- .../compactor/deletion/delete_request_test.go | 22 +++++++------- .../deletion/delete_requests_manager_test.go | 30 +++++++++---------- .../deletion/delete_requests_store.go | 26 +++++++++------- .../deletion/delete_requests_store_test.go | 12 ++++---- .../compactor/deletion/request_handler.go | 17 ++++++----- 8 files changed, 82 insertions(+), 74 deletions(-) diff --git a/docs/sources/operations/storage/logs-deletion.md b/docs/sources/operations/storage/logs-deletion.md index d2708f422169d..5347c39338f0b 100644 --- a/docs/sources/operations/storage/logs-deletion.md +++ b/docs/sources/operations/storage/logs-deletion.md @@ -28,23 +28,23 @@ The Compactor exposes endpoints to allow for the deletion of log entries from sp ### Request log entry deletion ``` -POST /loki/api/v1/delete -PUT /loki/api/v1/delete +POST /loki/api/admin/delete +PUT /loki/api/admin/delete ``` Query parameters: -* `query=`: A label matcher argument that identifies the streams from which to delete. This argument must be provided. +* `match[]=`: Repeated label matcher argument that identifies the streams from which to delete. At least one `match[]` argument must be provided. * `start=`: A timestamp that identifies the start of the time window within which entries will be deleted. If not specified, defaults to 0, the Unix Epoch time. * `end=`: A timestamp that identifies the end of the time window within which entries will be deleted. If not specified, defaults to the current time. A 204 response indicates success. -URL encode the `query` parameter. This sample form of a cURL command URL encodes `query={foo="bar"}`: +URL encode the `match[]` parameter. This sample form of a cURL command URL encodes `match[]={foo="bar"}`: ``` curl -g -X POST \ - 'http://127.0.0.1:3100/loki/api/v1/delete?query={foo="bar"}&start=1591616227&end=1591619692' \ + 'http://127.0.0.1:3100/loki/api/admin/delete?match[]={foo="bar"}&start=1591616227&end=1591619692' \ -H 'x-scope-orgid: 1' ``` @@ -53,14 +53,14 @@ curl -g -X POST \ List the existing delete requests using the following API: ``` -GET /loki/api/v1/delete +GET /loki/api/admin/delete ``` Sample form of a cURL command: ``` curl -X GET \ - /loki/api/v1/delete \ + /loki/api/admin/delete \ -H 'x-scope-orgid: ' ``` @@ -68,24 +68,23 @@ This endpoint returns both processed and unprocessed requests. It does not list ### Request cancellation of a delete request -Loki allows cancellation of delete requests until the requests are picked up for processing. It is controlled by the `delete_request_cancel_period` YAML configuration or the equivalent command line option when invoking Loki. - Cancel a delete request using this Compactor endpoint: ``` -DELETE /loki/api/v1/delete +POST /loki/api/admin/cancel_delete_request +PUT /loki/api/admin/cancel_delete_request ``` Query parameters: -* `request_id=`: Identifies the delete request to cancel; IDs are found using the GET method on this endpoint. +* `request_id=`: Identifies the delete request to cancel; IDs are found using the `delete` endpoint. A 204 response indicates success. Sample form of a cURL command: ``` -curl -X DELETE \ - '/loki/api/v1/delete?request_id=' \ +curl -X POST \ + '/loki/api/admin/cancel_delete_request?request_id=' \ -H 'x-scope-orgid: ' ``` diff --git a/pkg/loki/modules.go b/pkg/loki/modules.go index 4b1ae908710e0..aa7a979e3be48 100644 --- a/pkg/loki/modules.go +++ b/pkg/loki/modules.go @@ -722,9 +722,9 @@ func (t *Loki) initCompactor() (services.Service, error) { t.Server.HTTP.Path("/compactor/ring").Methods("GET", "POST").Handler(t.compactor) if t.Cfg.CompactorConfig.RetentionEnabled && t.compactor.DeleteMode == deletion.V1 { - t.Server.HTTP.Path("/loki/api/v1/delete").Methods("PUT", "POST").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.AddDeleteRequestHandler))) - t.Server.HTTP.Path("/loki/api/v1/delete").Methods("GET").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.GetAllDeleteRequestsHandler))) - t.Server.HTTP.Path("/loki/api/v1/delete").Methods("DELETE").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.CancelDeleteRequestHandler))) + t.Server.HTTP.Path("/loki/api/admin/delete").Methods("PUT", "POST").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.AddDeleteRequestHandler))) + t.Server.HTTP.Path("/loki/api/admin/delete").Methods("GET").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.GetAllDeleteRequestsHandler))) + t.Server.HTTP.Path("/loki/api/admin/cancel_delete_request").Methods("PUT", "POST").Handler(t.HTTPAuthMiddleware.Wrap(http.HandlerFunc(t.compactor.DeleteRequestsHandler.CancelDeleteRequestHandler))) } return t.compactor, nil diff --git a/pkg/storage/stores/shipper/compactor/deletion/delete_request.go b/pkg/storage/stores/shipper/compactor/deletion/delete_request.go index 765f2f0736f03..da232bd4153c0 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/delete_request.go +++ b/pkg/storage/stores/shipper/compactor/deletion/delete_request.go @@ -11,7 +11,7 @@ type DeleteRequest struct { RequestID string `json:"request_id"` StartTime model.Time `json:"start_time"` EndTime model.Time `json:"end_time"` - Query string `json:"logql_requests"` + Queries []string `json:"logql_requests"` Status DeleteRequestStatus `json:"status"` CreatedAt model.Time `json:"created_at"` @@ -19,13 +19,17 @@ type DeleteRequest struct { matchers []*labels.Matcher `json:"-"` } -func (d *DeleteRequest) AddQuery(logQL string) error { - d.Query = logQL - matchers, err := parseDeletionQuery(logQL) - if err != nil { - return err +func (d *DeleteRequest) AddQueries(queries []string) error { + d.Queries = queries + for _, query := range queries { + matchers, err := parseDeletionQuery(query) + if err != nil { + return err + } + + d.matchers = append(d.matchers, matchers...) } - d.matchers = matchers + return nil } diff --git a/pkg/storage/stores/shipper/compactor/deletion/delete_request_test.go b/pkg/storage/stores/shipper/compactor/deletion/delete_request_test.go index 68a5acbf885a5..136550a9bdd24 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/delete_request_test.go +++ b/pkg/storage/stores/shipper/compactor/deletion/delete_request_test.go @@ -16,7 +16,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { now := model.Now() user1 := "user1" - lbls := `{foo="bar", fizz="buzz"}` + lbls := []string{`{foo="bar", fizz="buzz"}`} chunkEntry := retention.ChunkEntry{ ChunkRef: retention.ChunkRef{ @@ -24,7 +24,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { From: now.Add(-3 * time.Hour), Through: now.Add(-time.Hour), }, - Labels: mustParseLabel(lbls), + Labels: mustParseLabel(lbls[0]), } type resp struct { @@ -43,7 +43,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-3 * time.Hour), EndTime: now.Add(-time.Hour), - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: true, @@ -56,7 +56,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-3 * time.Hour), EndTime: now.Add(-2 * time.Hour), - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: true, @@ -74,7 +74,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-2 * time.Hour), EndTime: now, - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: true, @@ -92,7 +92,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-2 * time.Hour), EndTime: now, - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: true, @@ -110,7 +110,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-(2*time.Hour + 30*time.Minute)), EndTime: now.Add(-(time.Hour + 30*time.Minute)), - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: true, @@ -132,7 +132,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: user1, StartTime: now.Add(-12 * time.Hour), EndTime: now.Add(-10 * time.Hour), - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: false, @@ -144,7 +144,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: "user1", StartTime: now.Add(-3 * time.Hour), EndTime: now.Add(-time.Hour), - Query: `{foo1="bar"}`, + Queries: []string{`{foo1="bar"}`}, }, expectedResp: resp{ isDeleted: false, @@ -156,7 +156,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { UserID: "user2", StartTime: now.Add(-3 * time.Hour), EndTime: now.Add(-time.Hour), - Query: lbls, + Queries: lbls, }, expectedResp: resp{ isDeleted: false, @@ -164,7 +164,7 @@ func TestDeleteRequest_IsDeleted(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - require.NoError(t, tc.deleteRequest.AddQuery(tc.deleteRequest.Query)) + require.NoError(t, tc.deleteRequest.AddQueries(tc.deleteRequest.Queries)) isDeleted, nonDeletedIntervals := tc.deleteRequest.IsDeleted(chunkEntry) require.Equal(t, tc.expectedResp.isDeleted, isDeleted) require.Equal(t, tc.expectedResp.nonDeletedIntervals, nonDeletedIntervals) diff --git a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_manager_test.go b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_manager_test.go index ec025c7b7e5d4..69cbbad1be851 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_manager_test.go +++ b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_manager_test.go @@ -26,7 +26,7 @@ func (m mockDeleteRequestsStore) UpdateStatus(ctx context.Context, userID, reque return nil } -func (m mockDeleteRequestsStore) AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, LogQLRequest string) error { +func (m mockDeleteRequestsStore) AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, LogQLRequest []string) error { panic("implement me") } @@ -90,7 +90,7 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: "different-user", - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-24 * time.Hour), EndTime: now, }, @@ -105,7 +105,7 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-24 * time.Hour), EndTime: now, }, @@ -120,7 +120,7 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-48 * time.Hour), EndTime: now.Add(-24 * time.Hour), }, @@ -135,13 +135,13 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-48 * time.Hour), EndTime: now.Add(-24 * time.Hour), }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-12 * time.Hour), EndTime: now, }, @@ -156,25 +156,25 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-13 * time.Hour), EndTime: now.Add(-11 * time.Hour), }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-10 * time.Hour), EndTime: now.Add(-8 * time.Hour), }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-6 * time.Hour), EndTime: now.Add(-5 * time.Hour), }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-2 * time.Hour), EndTime: now, }, @@ -202,13 +202,13 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-13 * time.Hour), EndTime: now.Add(-6 * time.Hour), }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-8 * time.Hour), EndTime: now, }, @@ -223,19 +223,19 @@ func TestDeleteRequestsManager_Expired(t *testing.T) { deleteRequestsFromStore: []DeleteRequest{ { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-12 * time.Hour), EndTime: now.Add(-6*time.Hour) - 1, }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-6 * time.Hour), EndTime: now.Add(-4*time.Hour) - 1, }, { UserID: testUserID, - Query: lblFoo.String(), + Queries: []string{lblFoo.String()}, StartTime: now.Add(-4 * time.Hour), EndTime: now, }, diff --git a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store.go b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store.go index 29cce480b89c6..6c23eaec3f781 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store.go +++ b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store.go @@ -27,6 +27,8 @@ const ( StatusReceived DeleteRequestStatus = "received" StatusProcessed DeleteRequestStatus = "processed" + separator = "\000" // separator for series selectors in delete requests + deleteRequestID indexType = "1" deleteRequestDetails indexType = "2" @@ -37,7 +39,7 @@ const ( var ErrDeleteRequestNotFound = errors.New("could not find matching delete request") type DeleteRequestsStore interface { - AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, logQLRequest string) error + AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, logQLRequests []string) error GetDeleteRequestsByStatus(ctx context.Context, status DeleteRequestStatus) ([]DeleteRequest, error) GetAllDeleteRequestsForUser(ctx context.Context, userID string) ([]DeleteRequest, error) UpdateStatus(ctx context.Context, userID, requestID string, newStatus DeleteRequestStatus) error @@ -66,14 +68,14 @@ func (ds *deleteRequestsStore) Stop() { } // AddDeleteRequest creates entries for a new delete request. -func (ds *deleteRequestsStore) AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, logQLRequest string) error { - _, err := ds.addDeleteRequest(ctx, userID, model.Now(), startTime, endTime, logQLRequest) +func (ds *deleteRequestsStore) AddDeleteRequest(ctx context.Context, userID string, startTime, endTime model.Time, logQLRequests []string) error { + _, err := ds.addDeleteRequest(ctx, userID, model.Now(), startTime, endTime, logQLRequests) return err } // addDeleteRequest is also used for tests to create delete requests with different createdAt time. -func (ds *deleteRequestsStore) addDeleteRequest(ctx context.Context, userID string, createdAt, startTime, endTime model.Time, logQLRequest string) ([]byte, error) { - requestID := generateUniqueID(userID, logQLRequest) +func (ds *deleteRequestsStore) addDeleteRequest(ctx context.Context, userID string, createdAt, startTime, endTime model.Time, logQLRequests []string) ([]byte, error) { + requestID := generateUniqueID(userID, logQLRequests) for { _, err := ds.GetDeleteRequest(ctx, userID, string(requestID)) @@ -86,7 +88,7 @@ func (ds *deleteRequestsStore) addDeleteRequest(ctx context.Context, userID stri // we have a collision here, lets recreate a new requestID and check for collision time.Sleep(time.Millisecond) - requestID = generateUniqueID(userID, logQLRequest) + requestID = generateUniqueID(userID, logQLRequests) } // userID, requestID @@ -97,10 +99,10 @@ func (ds *deleteRequestsStore) addDeleteRequest(ctx context.Context, userID stri writeBatch := ds.indexClient.NewWriteBatch() writeBatch.Add(DeleteRequestsTableName, string(deleteRequestID), []byte(userIDAndRequestID), []byte(StatusReceived)) - // Add another entry with additional details like creation time, time range of delete request and the logQL requests in value + // Add another entry with additional details like creation time, time range of delete request and selectors in value rangeValue := fmt.Sprintf("%x:%x:%x", int64(createdAt), int64(startTime), int64(endTime)) writeBatch.Add(DeleteRequestsTableName, fmt.Sprintf("%s:%s", deleteRequestDetails, userIDAndRequestID), - []byte(rangeValue), []byte(logQLRequest)) + []byte(rangeValue), []byte(strings.Join(logQLRequests, separator))) err := ds.indexClient.BatchWrite(ctx, writeBatch) if err != nil { @@ -197,7 +199,7 @@ func (ds *deleteRequestsStore) queryDeleteRequests(ctx context.Context, deleteQu return false } - err = deleteRequest.AddQuery(string(itr.Value())) + err = deleteRequest.AddQueries(strings.Split(string(itr.Value()), separator)) if err != nil { parseError = err return false @@ -261,7 +263,7 @@ func parseDeleteRequestTimestamps(rangeValue []byte, deleteRequest DeleteRequest } // An id is useful in managing delete requests -func generateUniqueID(orgID string, logQLRequest string) []byte { +func generateUniqueID(orgID string, logQLRequests []string) []byte { uniqueID := fnv.New32() _, _ = uniqueID.Write([]byte(orgID)) @@ -269,7 +271,9 @@ func generateUniqueID(orgID string, logQLRequest string) []byte { binary.LittleEndian.PutUint64(timeNow, uint64(time.Now().UnixNano())) _, _ = uniqueID.Write(timeNow) - _, _ = uniqueID.Write([]byte(logQLRequest)) + for _, req := range logQLRequests { + _, _ = uniqueID.Write([]byte(req)) + } return encodeUniqueID(uniqueID.Sum32()) } diff --git a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store_test.go b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store_test.go index 8f6f227a4fd6c..13373d684c010 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store_test.go +++ b/pkg/storage/stores/shipper/compactor/deletion/delete_requests_store_test.go @@ -30,7 +30,7 @@ func TestDeleteRequestsStore(t *testing.T) { StartTime: now.Add(-i * time.Hour), EndTime: now.Add(-i * time.Hour).Add(30 * time.Minute), CreatedAt: now.Add(-i * time.Hour).Add(30 * time.Minute), - Query: fmt.Sprintf(`{foo="%d", user="%s"}`, i, user1), + Queries: []string{fmt.Sprintf(`{foo="%d", user="%s"}`, i, user1)}, Status: StatusReceived, }) user2ExpectedRequests = append(user2ExpectedRequests, DeleteRequest{ @@ -38,7 +38,7 @@ func TestDeleteRequestsStore(t *testing.T) { StartTime: now.Add(-i * time.Hour), EndTime: now.Add(-(i + 1) * time.Hour), CreatedAt: now.Add(-(i + 1) * time.Hour), - Query: fmt.Sprintf(`{foo="%d", user="%s"}`, i, user2), + Queries: []string{fmt.Sprintf(`{foo="%d", user="%s"}`, i, user2)}, Status: StatusReceived, }) } @@ -66,11 +66,11 @@ func TestDeleteRequestsStore(t *testing.T) { user1ExpectedRequests[i].CreatedAt, user1ExpectedRequests[i].StartTime, user1ExpectedRequests[i].EndTime, - user1ExpectedRequests[i].Query, + user1ExpectedRequests[i].Queries, ) require.NoError(t, err) user1ExpectedRequests[i].RequestID = string(requestID) - require.NoError(t, user1ExpectedRequests[i].AddQuery(user1ExpectedRequests[i].Query)) + require.NoError(t, user1ExpectedRequests[i].AddQueries(user1ExpectedRequests[i].Queries)) requestID, err = testDeleteRequestsStore.(*deleteRequestsStore).addDeleteRequest( context.Background(), @@ -78,11 +78,11 @@ func TestDeleteRequestsStore(t *testing.T) { user2ExpectedRequests[i].CreatedAt, user2ExpectedRequests[i].StartTime, user2ExpectedRequests[i].EndTime, - user2ExpectedRequests[i].Query, + user2ExpectedRequests[i].Queries, ) require.NoError(t, err) user2ExpectedRequests[i].RequestID = string(requestID) - require.NoError(t, user2ExpectedRequests[i].AddQuery(user2ExpectedRequests[i].Query)) + require.NoError(t, user2ExpectedRequests[i].AddQueries(user2ExpectedRequests[i].Queries)) } // get all requests with StatusReceived and see if they have expected values diff --git a/pkg/storage/stores/shipper/compactor/deletion/request_handler.go b/pkg/storage/stores/shipper/compactor/deletion/request_handler.go index d1f8e636757bf..d7500f87cff50 100644 --- a/pkg/storage/stores/shipper/compactor/deletion/request_handler.go +++ b/pkg/storage/stores/shipper/compactor/deletion/request_handler.go @@ -43,16 +43,17 @@ func (dm *DeleteRequestHandler) AddDeleteRequestHandler(w http.ResponseWriter, r } params := r.URL.Query() - query := params.Get("query") - if len(query) == 0 { - serverutil.JSONError(w, http.StatusBadRequest, "query not set") + matches := params["match[]"] + if len(matches) == 0 { + serverutil.JSONError(w, http.StatusBadRequest, "selectors not set") return } - _, err = parseDeletionQuery(query) - if err != nil { - serverutil.JSONError(w, http.StatusBadRequest, err.Error()) - return + for _, match := range matches { + if _, err := parseDeletionQuery(match); err != nil { + serverutil.JSONError(w, http.StatusBadRequest, err.Error()) + return + } } startParam := params.Get("start") @@ -86,7 +87,7 @@ func (dm *DeleteRequestHandler) AddDeleteRequestHandler(w http.ResponseWriter, r return } - if err := dm.deleteRequestsStore.AddDeleteRequest(ctx, userID, model.Time(startTime), model.Time(endTime), query); err != nil { + if err := dm.deleteRequestsStore.AddDeleteRequest(ctx, userID, model.Time(startTime), model.Time(endTime), matches); err != nil { level.Error(util_log.Logger).Log("msg", "error adding delete request to the store", "err", err) serverutil.JSONError(w, http.StatusInternalServerError, err.Error()) return