Hi Rainer and Mladen,

I made the paketSize port to tomcat 5.5 tree. Now, I start some testing and ...

- I have successfull send more than 8k to the client with a download request. But I must patch o.a.c.connector.Response and AjpAprProcessor.SocketOutputBuffer and JkInputStream to set correct outputbuffer size. Currenty I'm not port this back to tomcat 6.0.x!

- second use case: Test a post file upload
mod_jk don't send more then 8k at a fileupload request!

use case: - ( Sorry for the long description)

Send a http POST file upload

--
Request:

POST /fileupload/fileuploaddemo.jsp HTTP/1.1
Accept: */*
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=246F48F8E1C82B3EB7B800EEDA3256BB.node01
Referer: http://127.0.0.1:2090/fileupload/fileuploaddemo.htm
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3
Content-Length: 16832
Content-Type: multipart/form-data; boundary=----------0xKhTmLbOuNdArY
Connection: keep-alive
Host: 127.0.0.1:2090

------------0xKhTmLbOuNdArY
Content-Disposition: form-data; name="name"

16k.bin-5
------------0xKhTmLbOuNdArY
Content-Disposition: form-data; name="myimage"; filename="16k-5.bin"
Content-Type: application/macbinary

∏i}sÕå 94^~>às›7˚Ñ3à=µ˚≈aµÓ¥‹Ç1Î;A˛4Ô˚7ÿé{>+W¡/@ŒòΩƒn€;XP√nfi $çÈé!˘Ç∑ä[†|¡oHœsØ„Œ∑#E<§ Ì>Ï4Ñ‘¨GçOl‡∑Ã≥˙QA7fÈïéP∞ÚU nk£(X∆Qj‰®6Ód ∞èd"_<µü°|µ«Tªı;… ª.œ•Œ›iüfl⁄¨Û»´^§ÁÚZGG±Úò√'?;HÛ€Õ¬fl§ΩKÆ}drxwLXá lzoçæ9— ˜√Yt‡®ÇànÓÏJ´JÈ0∑ê≠2=B1§wt≠´›— òà-9‘Ÿ√¶áÚÈXTµ^=AscËeCEîp— Ã,SÀ˙fiYã?∏"∂ûM.Ûi¸êƒõRìÊÏ·àO0ß$r¥ÛWé≈^xw>g'[EMAIL PROTECTED] [EMAIL PROTECTED]'é q"Ò≠îÙ® E’q˜ÒÕRπb≠·ß}ìR>!6. \V¿Y¿[cÁ~RÅ_TÛd0¢2mºY1}fi`5A†—{•Lúî¢ ÁO35∑bµJ‹¯–"∑ÂJkï7LWÄ,ôœÚŒ*¨äŸ2RÅe∞÷ã∞9Èê›Õ†‚ /fi√då& ·X®`cõÄê∫n‹(˙‚§ê…[–{ˇØTÓˇ-ƒ#J `mHwƒ¡#·ˇ∆ô!˝p™°6èÈØ* ±LVç©”LÄîAmHvÀ√ ®%bÁ8ˆ^ "IB›—[gÍ¿Ã/˜«˛ ih}ÿꈡxÔ [EMAIL PROTECTED]| ŸI]FƒÍæ9Âı≤ä§á;aÑ“ 'rŒ|˘k\Y:U∂–ú¡¥ëãCO›tËBzQ0Ñfi{ù˘ïóo®9˚ñ– dÉX’”òôÏq†ú›¿¯Ès¸·ËûÌWÎñM£{Ñ-¡ùm®YÑ0|y»èÚ(SµÑ˛ñ,tr‰Z©tÛ£ëµ⁄¥] ì.∂óÈπ:ÁS.ä0Z«{iQ&Õ9†ˇcØ·◊d§kÚG [EMAIL PROTECTED]
>…
%ÙHbzw^÷+?Ä7êÀ2ó“\dûBÓáçÛf‘3( ([á˝b⁄⁄ä¯RtZ…⁄ô,
“ bÌ>ˆ∑w•t)bì¢ ◊êBÉN P~;ú„c†5éF˝d7c96D%√<¢éä…©Z—˚·¸æ6<û √˝˛zO·Ø98W{ Ñ!‡ÍpG[∑©cîTHÊü7Ëj¯ò ƒ•N•"›" ¶L›tÄ:˝Œ8Ç $∞õŒ2üˆBT–Ú}É=Z™“®¶ ·„€dÉêµ§àÆ LJHN°^>—ï#∑Ôfl˙–1Ä‹·ãµ≤à≥‚ ÔÜ>7¿`⁄ç´êR¥ƒ∆’·M΄¡ßr~ˆ ±Ú>ˆ°Er∏$Õûv`¸)„¿2mÃg\a?¨t◊ êΩwñœ°F—.-ñ¡k¥Ö¨ıGå€="b/è€∏dÕ◊ „5ÛÀu”%˜å]üÓä)¨>˜‚üór≤iGè»ımâØe¿é¬øòmªr©<?±•âÂñÊäë∞ïå¯"O¶¶o§¸– ƒ†ŸË‡›iflZëzÿ¿ ç'√+¨˘*Ÿ¸»§=⁄õ‡$G}T÷/πŸ˝†$°A8-„Vêfi≈…Ä¥x’7C߀M] ˛âj=ºã÷C±|§:[EMAIL PROTECTED])AúéBÁz–v≥å« òÚneNít0ÏÅJS˙j∏Ï£öIg RöAÖ0ã`¨ë +vTù¶4À⁄ظ¢°¨¥ùZs´Ô\ñ±¢≥ìÔ“`˘ºmLWˆ∏fi0E°˝Æ-C)•; ¨àÀˇ„ı¢æs~D6k ´‰ M"€Â/0ÚÑ∏n9`Khb™ÊÊ‹3ïOfiÍe? ôÏÇ_I[ªß £Ñ¿¿“Øflµ›Ö·∑¸ú·ÖVıR◊îp ÿi‹-ˆ¨¸'0QÛ∏Nz∂≠Q€oÓ–$ç{ØÉ eùP^"œÚX˛`ÓxQ1µû)f˘;™ ¿sÔ√A>Ω£¡ˇ±Õî©NZñ⁄IUÌòl†¸\#‘∂çî¶fl”>™- ˘Ïø'aË “!~=ã¥M?õ`ΩÁ‚e ÂÒBa3”¨Ï≤K”Á ˚M”ñ¯‚/çú˚’"˛%“˝ìÒ6N∫§–æ/a§$ „ih∑ZøBfiw*;Ø≈H¬äûÕfiÊ …¢ S”lÑŒD™;j≠¿“Ø^aÜ&VÛJ˙‚Ö<c~a¸N‡[&fcvY Ôm~ãæø÷¥0ÎÒxø €•ÜF®fiπ|{BTyT6£ØX¨ÍØÁ|È •Zã∞™Œ/ ¶Eâ‹U|ë≤°∂ ÑËmR‡ç<π√Z√ër4`ı% â0Ò∞sÚ‡)8›T±∫o–√©Ÿ˝ÄHΩ‡sܺ"À•ú≈•µËfcÌ≤=Túùûı%‰üxf61„µïnZÀyV ‚7¢?^ 3˚lZu<VdzºBˆ<¥}€/i¡Vœvd€˚œLg˙Ŭ„lEØÊoc6K 9vâà*3ªßNÈ"›(ÂXRÒ`` ÿ˘Ω•Ÿ”d<[EMAIL PROTECTED] áØnΩt,x∆úêÑ"”ÍÌ^0LD#'F-˜[‹SíÜ{§˛˚Ó }{ô’ıjÍ}qñ),Dn¿><ìËÀX —nì¨'˚^Wâfl)±Æ˛U3µâü;B∑}¬2ñ Oóû£$ì^— Ì≥ùK‹≤®ÅÑ,.Úß] ÖN≤G«åCmC%:19¿Óö7tımg´lâ§Ñø^hÚwDOḭ̀_%Ñûd»G1bÒ,ç—$õ}aÛöQ=§æ≤7Ü [≠kÛŸÒ¥ùD}(∏7^∏~ãk$Ø?ıZGÁNü˘$ÿÂ0ı∆Hpiº±KÑ)Jx˙¢™ÁƒS¶Çàp— VƒX"Êë ¥ã‡© Ú†‡ã∞n^çÔv36yn
)

== SNIP ==


== mod_jk log analyse: ===

a)Apache  -> JK_AJP13_FORWARD_REQUEST -> Tomcat )
jk_ajp_common.c (893): sending to ajp13 pos=4 len=450 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message:: jk_ajp_common.c (893): 0000 12 34 01 BE 02 04 00 08 48 54 54 50 2F 31 2E 31
- .4......HTTP/1.1
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message::

b) only 8k are sent (Apache  -> DATA -> Tomcat )
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_send_request::jk_ajp_common.c
(1273): request body to send 16832 - request body to resend 0
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_read_into_msg_buff::jk_ajp_co
mmon.c (1098): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_read_fully_from_server::jk_aj
p_common.c (1052): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_read_into_msg_buff::jk_ajp_co
mmon.c (1135): exit
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_connection_tcp_send_message::
jk_ajp_common.c (889): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message::
jk_ajp_common.c (893): sending to ajp13 pos=4 len=8192 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message:: jk_ajp_common.c (893): 0000 12 34 1F FC 1F FA 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
- .4....----------

== max is 16 k ==

c) Tomcat answer please send more packet size max 16k (Apache <- JK_AJP13_GET_BODY_CHUNK <- Tomcat ) Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_get_message::j
k_ajp_common.c (1029): received from ajp13 pos=0 len=3 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_get_message::j k_ajp_common.c (1029): 0000 06 3F FA 00 00 00 00 00 00 00 00 00 00 00 00 00
- .?..............
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_connection_tcp_get_message::j
k_ajp_common.c (1035): exit

d) but only 8k are sent again (Apache  -> DATA -> Tomcat )
...
k_ajp_common.c (1029): received from ajp13 pos=0 len=3 max=16384

[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_process_callback::jk_ajp_comm
on.c (1461): exit
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace] ajp_connection_tcp_send_message::
jk_ajp_common.c (889): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message::
jk_ajp_common.c (893): sending to ajp13 pos=4 len=8192 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug] ajp_connection_tcp_send_message:: jk_ajp_common.c (893): 0000 12 34 1F FC 1F FA FB F7 CE A6 2F AC 2B FF 23 42
- .4......../.+.#B

e) Tomcat answer, please send more with packet size 16k (Apache <- JK_AJP13_GET_BODY_CHUNK <- Tomcat )
...
f) rest are send (Apache  -> DATA -> Tomcat )
...
g) tomcat response header and body are send
...
h) Tomcat send end response

OK, but why mod_jk don't use configured max packet size?

===

==== mod_jk 1.2.20 config

<IfModule !mod_jk.c>
  LoadModule jk_module "modules/mod_jk.so"
</IfModule>
JkShmFile "logs/mod_jk.shm"

JkLogFile "logs/mod_jk.log"
JkLogLevel trace

JKWorkerProperty worker.list=loadbalancer,jkstatus
JKWorkerProperty worker.node01.port=7309
JKWorkerProperty worker.node01.host=localhost
JKWorkerProperty worker.node01.type=ajp13
JKWorkerProperty worker.node01.max_packet_size=16384
JKWorkerProperty worker.loadbalancer.balance_workers=node01
JKWorkerProperty worker.loadbalancer.type=lb
JKWorkerProperty worker.jkstatus.type=status
JkMount /jkstatus jkstatus
JkMount /last* loadbalancer
JkMount /fileupload* loadbalancer

====

search at mod_jk source and found following hardcoded size cutter:
====

jk_ajp_common.c

L1444:
 case JK_AJP13_GET_BODY_CHUNK:
        {
            int len = (int)jk_b_get_int(msg);

            if (len < 0) {
                len = 0;
            }
            if (len > AJP13_MAX_SEND_BODY_SZ) {
                len = AJP13_MAX_SEND_BODY_SZ;

The size at tomcat SEND_BODY message are cut to default and not to worker max_paket_size

Why the first send body not use the worker max_packet_size:

L1341 ??
       if (ae->left_bytes_to_send > 0) {
            int len = ae->left_bytes_to_send;
            if (len > AJP13_MAX_SEND_BODY_SZ) {
                len = AJP13_MAX_SEND_BODY_SZ;

Other fix length setting found at  L1101
read_buf += AJP_HEADER_LEN; /* leave some space for the buffer headers */ read_buf += AJP_HEADER_SZ_LEN; /* leave some space for the read length */

    /* Pick the max size since we don't know the content_length */
    if (r->is_chunked && len == 0) {
        len = AJP13_MAX_SEND_BODY_SZ;
    }

Wrong or right?

Regards
Peter



Reply via email to