for example via a use_backend rule or in sample expressions. Some proxies
options are also incompatible with runtime deletion. Currently, this is the
case when deprecated dispatch or option transparent are used. Also, a backend
- cannot be removed if there is a stick-table declared in it.
+ cannot be removed if there is a stick-table declared in it. Finally, it is
+ impossible for now to remove a backend if QUIC servers were present in it.
This command is restricted and can only be issued on sockets configured for
level "admin". Moreover, this feature is still considered in development so it
#ifdef USE_QUIC
#ifdef HAVE_OPENSSL_QUIC_CLIENT_SUPPORT
if (srv_is_quic(newsrv)) {
+ /* TODO QUIC is currently incompatible with dynamic
+ * backends deletion. Please fix this before removing
+ * QUIC BE experimental status.
+ */
if (!experimental_directives_allowed) {
ha_alert("QUIC is experimental for server '%s',"
" must be allowed via a global 'expose-experimental-directives'\n",
}
srv->ssl_ctx.alpn_len = strlen(srv->ssl_ctx.alpn_str);
}
+
+ /* Deletion of backend when QUIC servers were used is currently
+ * not implemented. This is because quic_conn instances
+ * directly references its parent proxy via <prx_counters>
+ * member.
+ *
+ * TODO lift this restriction by ensuring safe access on proxy
+ * counters or via refcount.
+ */
+ srv->proxy->flags |= PR_FL_NON_PURGEABLE;
#else
ha_alert("QUIC protocol selected but support not compiled in (check build options).\n");
return ERR_ALERT | ERR_FATAL;