Problem
label-balancing.order applies to all traffic on a chain. methods.enable/disable only allow/deny a method per upstream. There's no way to say "this method should prefer a specific label group." That forces all-or-nothing: send everything to premium (expensive), or let methods only archive/premium nodes serve reliably fall onto public upstreams, where they fail, return null, or hit pruned state.
This is acute in non-production where you want cheap public upstreams for ordinary traffic, but a handful of methods (debug_traceBlockByNumber, trace_*, wide eth_getLogs, historical eth_call/eth_getBalance) must reach archive. Today the workaround is routing the whole app at premium, or keeping a separate provider outside nodecore which undercuts adopting nodecore as the single ingress.
Proposal
Add a per-method override of label-balancing order, matched by method name/pattern (consistent with rate-limit rule matching), definable globally and per-chain:
upstream-config:
label-balancing:
order: [public, premium]
method-label-balancing:
- pattern: "debug_.*|trace_.*"
order: [premium] # prefer premium for these methods
pass-on-error: false # stay within premium; don't fall back to public
Matching methods use the overridden order; everything else uses the default. pass-on-error reuses existing fallthrough semantics so operators choose prefer-vs-pin.
nodecore already lets methods influence upstream selection: sticky routing pins filter methods to their creating upstream, and methods carry a logical group field. This proposal extends those existing constructs with a group/label target.
Why it matters
nodecore becomes the single ingress for mixed public/premium infra without app-side provider routing: public-tier cost on the ~95% of traffic that's fine there, guaranteed archive/premium for the few methods that require it.
Problem
label-balancing.order applies to all traffic on a chain. methods.enable/disable only allow/deny a method per upstream. There's no way to say "this method should prefer a specific label group." That forces all-or-nothing: send everything to premium (expensive), or let methods only archive/premium nodes serve reliably fall onto public upstreams, where they fail, return null, or hit pruned state.
This is acute in non-production where you want cheap public upstreams for ordinary traffic, but a handful of methods (debug_traceBlockByNumber, trace_*, wide eth_getLogs, historical eth_call/eth_getBalance) must reach archive. Today the workaround is routing the whole app at premium, or keeping a separate provider outside nodecore which undercuts adopting nodecore as the single ingress.
Proposal
Add a per-method override of label-balancing order, matched by method name/pattern (consistent with rate-limit rule matching), definable globally and per-chain:
nodecore already lets methods influence upstream selection: sticky routing pins filter methods to their creating upstream, and methods carry a logical group field. This proposal extends those existing constructs with a group/label target.
Why it matters
nodecore becomes the single ingress for mixed public/premium infra without app-side provider routing: public-tier cost on the ~95% of traffic that's fine there, guaranteed archive/premium for the few methods that require it.