Skip to content

Commit 74eaec1

Browse files
committed
fix(gateway): keep refreshing identities route-visible
1 parent 705ff67 commit 74eaec1

2 files changed

Lines changed: 14 additions & 4 deletions

File tree

lib/codex_pooler/gateway/routing/candidate_eligibility.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibility do
9696
PoolUpstreamAssignment.disabled_health_status(),
9797
PoolUpstreamAssignment.errored_health_status()
9898
]
99+
@visible_identity_statuses [
100+
UpstreamIdentity.active_status(),
101+
UpstreamIdentity.refreshing_status()
102+
]
99103

100104
@type candidate :: {PoolUpstreamAssignment.t(), UpstreamIdentity.t()}
101105
@type gateway_error :: Contracts.gateway_error()
@@ -392,7 +396,6 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibility do
392396
else
393397
assignment_active_status = PoolUpstreamAssignment.active_status()
394398
assignment_eligible_status = PoolUpstreamAssignment.eligible_status()
395-
identity_active_status = UpstreamIdentity.active_status()
396399

397400
Repo.all(
398401
from assignment in PoolUpstreamAssignment,
@@ -402,7 +405,7 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibility do
402405
assignment.id in ^assignment_ids and assignment.status == ^assignment_active_status and
403406
assignment.eligibility_status == ^assignment_eligible_status and
404407
assignment.health_status not in ^@health_excluded and
405-
identity.status == ^identity_active_status and
408+
identity.status in ^@visible_identity_statuses and
406409
(is_nil(assignment.cooldown_until) or assignment.cooldown_until <= ^timestamp),
407410
order_by: [asc: assignment.created_at, asc: assignment.id],
408411
select: {assignment, identity}

test/codex_pooler/gateway/routing/candidate_eligibility_test.exs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibilityTest do
5757
active = upstream_assignment_fixture(pool, %{})
5858
disabled = upstream_assignment_fixture(pool, %{assignment_status: "disabled"})
5959
stale_identity = upstream_assignment_fixture(pool, %{identity_status: "refresh_due"})
60+
refreshing_identity = upstream_assignment_fixture(pool, %{identity_status: "refreshing"})
6061

6162
visible_model =
6263
model_fixture(pool, %{
@@ -65,7 +66,8 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibilityTest do
6566
"source_assignment_ids" => [
6667
active.assignment.id,
6768
disabled.assignment.id,
68-
stale_identity.assignment.id
69+
stale_identity.assignment.id,
70+
refreshing_identity.assignment.id
6971
]
7072
}
7173
})
@@ -83,7 +85,12 @@ defmodule CodexPooler.Gateway.Routing.CandidateEligibilityTest do
8385
refute Enum.any?(context.visible_models, &(&1.id == hidden_model.id))
8486

8587
assert {:ok, candidates} = CandidateEligibility.routable_candidates(context, visible_model)
86-
assert candidate_ids(candidates) == [active.assignment.id]
88+
89+
assert candidate_ids(candidates) == [
90+
active.assignment.id,
91+
refreshing_identity.assignment.id
92+
]
93+
8794
refute disabled.assignment.id in candidate_ids(candidates)
8895
refute stale_identity.assignment.id in candidate_ids(candidates)
8996

0 commit comments

Comments
 (0)