<div dir="ltr">Hello,<div><br></div><div>Maybe the description/title of the patch should reflect latest code changes: "sort=" => "prefer=".</div><div><br></div><div>A. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 28, 2022 at 6:25 PM Sergey Kandaurov <<a href="mailto:pluknet@nginx.com">pluknet@nginx.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"># HG changeset patch<br>
# User Ruslan Ermilov <<a href="mailto:ru@nginx.com" target="_blank">ru@nginx.com</a>><br>
# Date 1645589387 -10800<br>
# Wed Feb 23 07:09:47 2022 +0300<br>
# Node ID e80adbf788f6796c6bdf415938abb19b7aa43e3e<br>
# Parent 04e314eb6b4d20a48c5d7bab0609e1b03b51b406<br>
The "sort=" parameter of the "resolver" directive.<br>
<br>
diff -r 04e314eb6b4d -r e80adbf788f6 src/core/ngx_resolver.c<br>
--- a/src/core/ngx_resolver.c Wed Feb 23 07:08:37 2022 +0300<br>
+++ b/src/core/ngx_resolver.c Wed Feb 23 07:09:47 2022 +0300<br>
@@ -227,6 +227,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_<br>
}<br>
<br>
#if (NGX_HAVE_INET6)<br>
+<br>
if (ngx_strncmp(names[i].data, "ipv4=", 5) == 0) {<br>
<br>
if (ngx_strcmp(&names[i].data[5], "on") == 0) {<br>
@@ -260,6 +261,24 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_<br>
<br>
continue;<br>
}<br>
+<br>
+ if (ngx_strncmp(names[i].data, "prefer=", 7) == 0) {<br>
+<br>
+ if (ngx_strcmp(&names[i].data[7], "ipv4") == 0) {<br>
+ r->prefer = NGX_RESOLVE_PREFER_A;<br>
+<br>
+ } else if (ngx_strcmp(&names[i].data[7], "ipv6") == 0) {<br>
+ r->prefer = NGX_RESOLVE_PREFER_AAAA;<br>
+<br>
+ } else {<br>
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,<br>
+ "invalid parameter: %V", &names[i]);<br>
+ return NULL;<br>
+ }<br>
+<br>
+ continue;<br>
+ }<br>
+<br>
#endif<br>
<br>
ngx_memzero(&u, sizeof(ngx_url_t));<br>
@@ -4250,7 +4269,27 @@ ngx_resolver_export(ngx_resolver_t *r, n<br>
}<br>
<br>
i = 0;<br>
- d = rotate ? ngx_random() % n : 0;<br>
+<br>
+ switch (r->prefer) {<br>
+<br>
+#if (NGX_HAVE_INET6)<br>
+ case NGX_RESOLVE_PREFER_A:<br>
+ d = 0;<br>
+ break;<br>
+<br>
+ case NGX_RESOLVE_PREFER_AAAA:<br>
+ d = rn->naddrs6;<br>
+<br>
+ if (d == n) {<br>
+ d = 0;<br>
+ }<br>
+<br>
+ break;<br>
+#endif<br>
+<br>
+ default:<br>
+ d = rotate ? ngx_random() % n : 0;<br>
+ }<br>
<br>
if (rn->naddrs) {<br>
j = rotate ? ngx_random() % rn->naddrs : 0;<br>
diff -r 04e314eb6b4d -r e80adbf788f6 src/core/ngx_resolver.h<br>
--- a/src/core/ngx_resolver.h Wed Feb 23 07:08:37 2022 +0300<br>
+++ b/src/core/ngx_resolver.h Wed Feb 23 07:09:47 2022 +0300<br>
@@ -36,6 +36,9 @@<br>
<br>
#define NGX_RESOLVER_MAX_RECURSION 50<br>
<br>
+#define NGX_RESOLVE_PREFER_A 1<br>
+#define NGX_RESOLVE_PREFER_AAAA 2<br>
+<br>
<br>
typedef struct ngx_resolver_s ngx_resolver_t;<br>
<br>
@@ -175,6 +178,8 @@ struct ngx_resolver_s {<br>
ngx_queue_t srv_expire_queue;<br>
ngx_queue_t addr_expire_queue;<br>
<br>
+ unsigned prefer:2;<br>
+<br>
unsigned ipv4:1;<br>
<br>
#if (NGX_HAVE_INET6)<br>
<br>
_______________________________________________<br>
nginx-devel mailing list -- <a href="mailto:nginx-devel@nginx.org" target="_blank">nginx-devel@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-devel-leave@nginx.org" target="_blank">nginx-devel-leave@nginx.org</a><br>
</blockquote></div>