From 8ccc8b6c0547206efa60c447c59d2ac4cf08f5cb Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Fri, 26 Sep 2025 11:49:57 +0100 Subject: [PATCH] appview/models: fix logic issue when converting label record -> label ops the ordering of ops should be deletes first followed by additions, in order for ingestions to be idempotent. after every optimistic update the the DB, we ingest the same record via the firehose. an ordering difference resulted in certain additions being marked as no-ops when in reality, it should be an addition followed by a deletion. Signed-off-by: oppiliappan --- appview/models/label.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/appview/models/label.go b/appview/models/label.go index 7c985696..076801e8 100644 --- a/appview/models/label.go +++ b/appview/models/label.go @@ -232,17 +232,18 @@ func LabelOpsFromRecord(did, rkey string, record tangled.LabelOp) []LabelOp { } var ops []LabelOp - for _, o := range record.Add { + // deletes first, then additions + for _, o := range record.Delete { if o != nil { op := mkOp(o) - op.Operation = LabelOperationAdd + op.Operation = LabelOperationDel ops = append(ops, op) } } - for _, o := range record.Delete { + for _, o := range record.Add { if o != nil { op := mkOp(o) - op.Operation = LabelOperationDel + op.Operation = LabelOperationAdd ops = append(ops, op) } } -- 2.51.2