Skip to content

Commit 7cfcd39

Browse files
committed
In thread pool mode rewrite handlers can add/update request headers #284
1 parent 3170cc7 commit 7cfcd39

File tree

8 files changed

+61
-9
lines changed

8 files changed

+61
-9
lines changed

src/java/nginx/clojure/clj/LazyRequestMap.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import nginx.clojure.Stack;
6868
import nginx.clojure.UnknownHeaderHolder;
6969
import nginx.clojure.java.DefinedPrefetch;
70+
import nginx.clojure.java.JavaLazyHeaderMap;
7071
import nginx.clojure.java.NginxJavaRequest;
7172
import nginx.clojure.java.RequestRawMessageAdapter;
7273
import nginx.clojure.java.RequestRawMessageAdapter.RequestOrderedRunnable;
@@ -704,5 +705,12 @@ public void applyDelayed() {
704705
NginxClojureRT.unsafeSetNginxVariable(r, var, prefetchedVariables.get(var));
705706
}
706707
}
708+
709+
if (phase == MiniConstants.NGX_HTTP_REWRITE_PHASE) {
710+
Object headers = array[index(HEADERS) + 1];
711+
if (headers instanceof JavaLazyHeaderMap) {
712+
((JavaLazyHeaderMap)headers).applyDelayed();
713+
}
714+
}
707715
}
708716
}

src/java/nginx/clojure/java/JavaLazyHeaderMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ public void enableSafeCache(String[] headers) {
7777

7878
this.size = safeCache.size();
7979

80-
if ((NGX_HTTP_CLOJURE_GET_HEADER_FLAG_HEADERS_OUT & flag) != 0) {
80+
// if ((NGX_HTTP_CLOJURE_GET_HEADER_FLAG_HEADERS_OUT & flag) != 0) {
8181
updatedHeaders = new LinkedHashSet<>();
82-
}
82+
// }
8383
}
8484

8585
@Override

src/java/nginx/clojure/java/NginxJavaRequest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,5 +580,13 @@ public void applyDelayed() {
580580
NginxClojureRT.unsafeSetNginxVariable(r, var, prefetchedVariables.get(var));
581581
}
582582
}
583+
584+
if (phase == MiniConstants.NGX_HTTP_REWRITE_PHASE) {
585+
Object headers = array[(index(HEADERS) << 1) + 1];
586+
if (headers instanceof JavaLazyHeaderMap) {
587+
((JavaLazyHeaderMap)headers).applyDelayed();
588+
}
589+
}
590+
583591
}
584592
}

test/clojure/nginx/clojure/test_all.clj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
(def ^:dynamic *host* "localhost")
1010
(def ^:dynamic *port* "8080")
11-
(def ^:dynamic *debug* false)
11+
(def ^:dynamic *debug* true)
1212

1313
(def ^:dynamic *http-get* client/get)
1414

@@ -671,7 +671,8 @@
671671
(debug-println "=================javarewriteheaders=============================")
672672
(is (= 200 (:status r)))
673673
(is (= "Good!" (b "jwt-token")))
674-
(is (= "gzip" (b "Accept-Encoding")))))
674+
(is (= nil (b "User-Agent")))
675+
(is (or (= "gzip" (b "Accept-Encoding")) (= "gzip" (b "accept-encoding"))))))
675676
(testing "/cljrewrite/headers"
676677
(let [r (client/get (str "http://" *host* ":" *port* "/cljrewrite/headers") {:follow-redirects false})
677678
h (:headers r)
@@ -681,7 +682,7 @@
681682
(is (= 200 (:status r)))
682683
(is (= "Good!" (b "jwt-token")))
683684
(is (= nil (b "User-Agent")))
684-
(is (= "gzip" (b "Accept-Encoding")))))
685+
(is (or (= "gzip" (b "Accept-Encoding")) (= "gzip" (b "accept-encoding"))))))
685686
(testing "rewrite proxy pass"
686687
(let [r (client/get (str "http://" *host* ":" *port* "/uptest") {:follow-redirects false})
687688
h (:headers r)

test/java/nginx/clojure/java/RewriteHandlerTestSet4NginxJavaRingHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ public static class HeadersRewriteHandler implements NginxJavaRingHandler {
4242
@Override
4343
public Object[] invoke(Map<String, Object> request) throws IOException {
4444
Map<String, String> requestHeaders = (Map<String, String>) request.get(HEADERS);
45+
requestHeaders.remove("User-Agent");
4546
requestHeaders.put("jwt-token", "Good!");
46-
requestHeaders.put("accept-encoding", "gzip");
47+
requestHeaders.remove("Accept-Encoding");
48+
requestHeaders.put("Accept-Encoding", "gzip");
4749
return Constants.PHASE_DONE;
4850
}
4951

test/nginx-working-dir/conf/nginx-coroutine-jdk19.conf

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,11 @@ http {
241241
content_handler_property file testfiles/wcp.html;
242242
send_timeout 10s;
243243
}
244+
245+
location /java/loadheader {
246+
content_handler_type java;
247+
content_handler_name 'nginx.clojure.java.Loadstress$HeaderEchoHanlder';
248+
}
244249

245250
location /groovy {
246251
content_handler_type 'groovy';
@@ -390,7 +395,13 @@ http {
390395
rewrite_handler_property continueToContentHandler true;
391396
content_handler_name 'nginx.clojure.java.RewriteHandlerTestSet4NginxJavaRingHandler$SimpleVarHandler';
392397
}
393-
398+
399+
location /cljrewrite/headers {
400+
rewrite_handler_type clojure;
401+
rewrite_handler_name nginx.clojure.rewrite-handler-for-test/headers-more;
402+
proxy_pass http://localhost:8080/java/loadheader;
403+
}
404+
394405
set $myup "";
395406
set $mypath "";
396407
location /uptest {

test/nginx-working-dir/conf/nginx-coroutine.conf

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,11 @@ http {
231231
content_handler_property file testfiles/wcp.html;
232232
send_timeout 10s;
233233
}
234+
235+
location /java/loadheader {
236+
content_handler_type java;
237+
content_handler_name 'nginx.clojure.java.Loadstress$HeaderEchoHanlder';
238+
}
234239

235240
location /groovy {
236241
content_handler_type 'groovy';
@@ -318,7 +323,7 @@ http {
318323
location /javarewriteheaders {
319324
handler_type 'java';
320325
rewrite_handler_name 'nginx.clojure.java.RewriteHandlerTestSet4NginxJavaRingHandler$HeadersRewriteHandler';
321-
proxy_pass http://localhost:8080/java/loadheader;
326+
proxy_pass http://127.0.0.1:8080/java/loadheader;
322327
}
323328

324329
location /javarewritebybodyproxy {
@@ -380,6 +385,12 @@ http {
380385
rewrite_handler_property continueToContentHandler true;
381386
content_handler_name 'nginx.clojure.java.RewriteHandlerTestSet4NginxJavaRingHandler$SimpleVarHandler';
382387
}
388+
389+
location /cljrewrite/headers {
390+
rewrite_handler_type clojure;
391+
rewrite_handler_name nginx.clojure.rewrite-handler-for-test/headers-more;
392+
proxy_pass http://localhost:8080/java/loadheader;
393+
}
383394

384395
set $myup "";
385396
set $mypath "";

test/nginx-working-dir/conf/nginx-threadpool.conf

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,11 @@ http {
233233
content_handler_property file testfiles/wcp.html;
234234
send_timeout 10s;
235235
}
236+
237+
location /java/loadheader {
238+
content_handler_type java;
239+
content_handler_name 'nginx.clojure.java.Loadstress$HeaderEchoHanlder';
240+
}
236241

237242
location /groovy {
238243
content_handler_type 'groovy';
@@ -320,7 +325,7 @@ http {
320325
location /javarewriteheaders {
321326
handler_type 'java';
322327
rewrite_handler_name 'nginx.clojure.java.RewriteHandlerTestSet4NginxJavaRingHandler$HeadersRewriteHandler';
323-
proxy_pass http://localhost:8080/java/loadheader;
328+
proxy_pass http://127.0.0.1:8080/java/loadheader;
324329
}
325330

326331
location /javarewritebybodyproxy {
@@ -382,6 +387,12 @@ http {
382387
rewrite_handler_property continueToContentHandler true;
383388
content_handler_name 'nginx.clojure.java.RewriteHandlerTestSet4NginxJavaRingHandler$SimpleVarHandler';
384389
}
390+
391+
location /cljrewrite/headers {
392+
rewrite_handler_type clojure;
393+
rewrite_handler_name nginx.clojure.rewrite-handler-for-test/headers-more;
394+
proxy_pass http://localhost:8080/java/loadheader;
395+
}
385396

386397
set $myup "";
387398
set $mypath "";

0 commit comments

Comments
 (0)