From e79ffb3fccea133be8571e2e0f63d1469122fcbf Mon Sep 17 00:00:00 2001 From: Boidushya Date: Tue, 3 Nov 2026 01:32:22 +0530 Subject: [PATCH] fix(binilink): treat queued ingress replies as accepted --- services/binilink/client.go | 3 +++ services/binilink/client_test.go | 1 + stats/persist.go | 2 ++ stats/stats.go | 4 ++++ stats/stats_test.go | 12 ++++++------ stats/store.go | 1 + 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/services/binilink/client.go b/services/binilink/client.go index e21dcd6..55daa23 100644 --- a/services/binilink/client.go +++ b/services/binilink/client.go @@ -15,6 +15,7 @@ type Outcome string const ( OutcomeLinked Outcome = "linked" + OutcomeQueued Outcome = "queued" OutcomeExists Outcome = "exists" OutcomeConflict Outcome = "conflict" OutcomeUnresolved Outcome = "unresolved" @@ -67,6 +68,8 @@ func Post(client *http.Client, baseURL, key, userAgent, videoID, appleTrackID st switch resp.StatusCode { case http.StatusCreated: return OutcomeLinked, 0, "" + case http.StatusAccepted: + return OutcomeQueued, 0, "" case http.StatusOK: return OutcomeExists, 0, "" case http.StatusConflict: diff --git a/services/binilink/client_test.go b/services/binilink/client_test.go index 2a1cee0..4c87d34 100644 --- a/services/binilink/client_test.go +++ b/services/binilink/client_test.go @@ -16,6 +16,7 @@ func TestPostClassifiesStatus(t *testing.T) { want Outcome }{ {http.StatusCreated, OutcomeLinked}, + {http.StatusAccepted, OutcomeQueued}, {http.StatusOK, OutcomeExists}, {http.StatusConflict, OutcomeConflict}, {http.StatusNotFound, OutcomeUnresolved}, diff --git a/stats/persist.go b/stats/persist.go index 77ce362..11859d1 100644 --- a/stats/persist.go +++ b/stats/persist.go @@ -29,6 +29,7 @@ func (s *Stats) Serialize() PersistedStats { LRCRedFlagErrors: s.LRCRedFlagErrors.Load(), BiniLinkSent: s.BiniLinkSent.Load(), BiniLinkLinked: s.BiniLinkLinked.Load(), + BiniLinkQueued: s.BiniLinkQueued.Load(), BiniLinkExists: s.BiniLinkExists.Load(), BiniLinkConflict: s.BiniLinkConflict.Load(), BiniLinkUnresolved: s.BiniLinkUnresolved.Load(), @@ -77,6 +78,7 @@ func (s *Stats) Restore(p PersistedStats) { s.LRCRedFlagErrors.Store(p.LRCRedFlagErrors) s.BiniLinkSent.Store(p.BiniLinkSent) s.BiniLinkLinked.Store(p.BiniLinkLinked) + s.BiniLinkQueued.Store(p.BiniLinkQueued) s.BiniLinkExists.Store(p.BiniLinkExists) s.BiniLinkConflict.Store(p.BiniLinkConflict) s.BiniLinkUnresolved.Store(p.BiniLinkUnresolved) diff --git a/stats/stats.go b/stats/stats.go index 2eb99f6..c3281a3 100644 --- a/stats/stats.go +++ b/stats/stats.go @@ -38,6 +38,7 @@ type Stats struct { // BiniLink YouTube ingress BiniLinkSent atomic.Int64 BiniLinkLinked atomic.Int64 + BiniLinkQueued atomic.Int64 BiniLinkExists atomic.Int64 BiniLinkConflict atomic.Int64 BiniLinkUnresolved atomic.Int64 @@ -296,6 +297,8 @@ func (s *Stats) RecordBiniLink(outcome string) { switch outcome { case "linked": s.BiniLinkLinked.Add(1) + case "queued": + s.BiniLinkQueued.Add(1) case "exists": s.BiniLinkExists.Add(1) case "conflict": @@ -499,6 +502,7 @@ func (s *Stats) Snapshot() map[string]interface{} { "binilink": map[string]interface{}{ "sent": s.BiniLinkSent.Load(), "linked": s.BiniLinkLinked.Load(), + "queued": s.BiniLinkQueued.Load(), "exists": s.BiniLinkExists.Load(), "conflict": s.BiniLinkConflict.Load(), "unresolved": s.BiniLinkUnresolved.Load(), diff --git a/stats/stats_test.go b/stats/stats_test.go index b5219a4..470ef37 100644 --- a/stats/stats_test.go +++ b/stats/stats_test.go @@ -45,29 +45,29 @@ func TestLRCRedCounters_PersistRoundTrip(t *testing.T) { func TestRecordBiniLink(t *testing.T) { s := newStats() - for _, outcome := range []string{"linked", "linked", "exists", "conflict", "unresolved", "no_isrc", "invalid", "retry"} { + for _, outcome := range []string{"linked", "linked", "queued", "exists", "conflict", "unresolved", "no_isrc", "invalid", "retry"} { s.RecordBiniLink(outcome) } got := []int64{ - s.BiniLinkSent.Load(), s.BiniLinkLinked.Load(), s.BiniLinkExists.Load(), + s.BiniLinkSent.Load(), s.BiniLinkLinked.Load(), s.BiniLinkQueued.Load(), s.BiniLinkExists.Load(), s.BiniLinkConflict.Load(), s.BiniLinkUnresolved.Load(), s.BiniLinkErrors.Load(), } - want := []int64{8, 2, 1, 1, 2, 2} + want := []int64{9, 2, 1, 1, 1, 2, 2} for i := range want { if got[i] != want[i] { - t.Fatalf("sent/linked/exists/conflict/unresolved/errors = %v, want %v", got, want) + t.Fatalf("sent/linked/queued/exists/conflict/unresolved/errors = %v, want %v", got, want) } } } func TestBiniLinkCounters_PersistRoundTrip(t *testing.T) { s := newStats() - for _, outcome := range []string{"linked", "exists", "conflict", "unresolved", "retry"} { + for _, outcome := range []string{"linked", "queued", "exists", "conflict", "unresolved", "retry"} { s.RecordBiniLink(outcome) } restored := newStats() restored.Restore(s.Serialize()) - if restored.BiniLinkSent.Load() != 5 || restored.BiniLinkLinked.Load() != 1 || restored.BiniLinkExists.Load() != 1 || + if restored.BiniLinkSent.Load() != 6 || restored.BiniLinkLinked.Load() != 1 || restored.BiniLinkQueued.Load() != 1 || restored.BiniLinkExists.Load() != 1 || restored.BiniLinkConflict.Load() != 1 || restored.BiniLinkUnresolved.Load() != 1 || restored.BiniLinkErrors.Load() != 1 { t.Fatal("round-trip lost binilink counters") } diff --git a/stats/store.go b/stats/store.go index a00031f..366fba6 100644 --- a/stats/store.go +++ b/stats/store.go @@ -53,6 +53,7 @@ type PersistedStats struct { LRCRedFlagErrors int64 `json:"lrcred_flag_errors"` BiniLinkSent int64 `json:"binilink_sent"` BiniLinkLinked int64 `json:"binilink_linked"` + BiniLinkQueued int64 `json:"binilink_queued"` BiniLinkExists int64 `json:"binilink_exists"` BiniLinkConflict int64 `json:"binilink_conflict"` BiniLinkUnresolved int64 `json:"binilink_unresolved"`