diff --git a/exporter/exporterhelper/internal/persistent_storage.go b/exporter/exporterhelper/internal/persistent_storage.go index 214e9f4d92f..321dfddea67 100644 --- a/exporter/exporterhelper/internal/persistent_storage.go +++ b/exporter/exporterhelper/internal/persistent_storage.go @@ -349,13 +349,14 @@ func (pcs *persistentContiguousStorage) itemDispatchingStart(ctx context.Context // itemDispatchingFinish removes the item from the list of currently dispatched items and deletes it from the persistent queue func (pcs *persistentContiguousStorage) itemDispatchingFinish(ctx context.Context, index itemIndex) error { - var updatedDispatchedItems []itemIndex - for _, it := range pcs.currentlyDispatchedItems { - if it != index { - updatedDispatchedItems = append(updatedDispatchedItems, it) + lenCDI := len(pcs.currentlyDispatchedItems) + for i := 0; i < lenCDI; i++ { + if pcs.currentlyDispatchedItems[i] == index { + pcs.currentlyDispatchedItems[i] = pcs.currentlyDispatchedItems[lenCDI-1] + pcs.currentlyDispatchedItems = pcs.currentlyDispatchedItems[:lenCDI-1] + break } } - pcs.currentlyDispatchedItems = updatedDispatchedItems setOp := storage.SetOperation(currentlyDispatchedItemsKey, itemIndexArrayToBytes(pcs.currentlyDispatchedItems)) deleteOp := storage.DeleteOperation(getItemKey(index)) diff --git a/exporter/exporterhelper/internal/persistent_storage_test.go b/exporter/exporterhelper/internal/persistent_storage_test.go index 66ea4e06f45..d90a4b1f6b2 100644 --- a/exporter/exporterhelper/internal/persistent_storage_test.go +++ b/exporter/exporterhelper/internal/persistent_storage_test.go @@ -235,7 +235,7 @@ func TestPersistentStorage_CurrentlyProcessedItems(t *testing.T) { } // The queue should be now empty - requireCurrentlyDispatchedItemsEqual(t, newPs, nil) + requireCurrentlyDispatchedItemsEqual(t, newPs, []itemIndex{}) assert.Eventually(t, func() bool { return newPs.size() == 0 }, 5*time.Second, 10*time.Millisecond)