I'd like to propose adding the following symbols to the API, to make it possible for remap plugins to do next-hop parent selection:
enum TSHostStatus enum TSHostStatusReason TSReturnCode TSHostnameIsSelf(const char *hostname); TSReturnCode TSHostStatusGet(const char *hostname, const size_t hostname_len, TSHostStatus *status, unsigned int *reason); void TSHostStatusSet(const char *hostname, const size_t hostname_len, TSHostStatus status, const unsigned int down_time, const unsigned int reason); struct TSResponseAction; void TSHttpTxnResponseActionSet(TSHttpTxn txnp, TSResponseAction action); void TSHttpTxnResponseActionGet(TSHttpTxn txnp, TSResponseAction *action); I have a PR to do this, as well as a plugin for ConsistentHash parent selection: https://github.com/apache/trafficserver/pull/7467 All new symbols except the ResponseAction ones expose existing things in core which are necessary for parent selection. The ResponseAction struct is a small C struct with the data necessary to do parent selection, essentially everything that's a function in Strategies today. In a nutshell, everything in core (HttpTransact.cc) that was `if (strategy) { } else { /* old parent */ }` becomes `if (response_action.handled) { } else if (strategy) { } else { /* old parent */ }`. This supersedes my previous proposal. The previous proposal was a small core change, but had the downside of not being a real Remap plugin, and not having access to Continuations, Hooks, etc. The alternative seemed to be large core State Machine changes. I believe this is the best of both worlds: a small core change, while still being a real plugin with access to continuations and hooks. The advantage is immediately evident: in the plugin, all the per-transaction hash data is moved into the plugin and stored in the continuation, out of core (ParentResult). Which means less logic in core, and ParentResult can be deleted if parent.config and core strategies are removed. This was impossible with the previous method of dropping the strategy object into core. Feedback welcome, please vote, thanks!