Hi,
driven by a wrong undestand of proxy_cache’s keys_zone parameter I have
set it to a very high value:
proxy_cache_path /tmp/cache levels=2:2:2 keys_zone=cache:10000m
max_size=50g inactive=5m;
What happens is that 10G should be 10485760000, not 1895825408:
Breakpoint 3, ngx_http_file_cache_set_slot (cf=0xbfffef58,
cmd=0x80ee980, conf=0x0) at src/http/ngx_http_file_cache.c:1598
(gdb) p s
$1 = {len = 6, data = 0x811e2a3 "10000m"}
1598 size = ngx_parse_size(&s);
(gdb) p size
$2 = 1895825408
(gdb) n
1599 if (size > 8191) {
(gdb) n
1600 continue;
(gdb) quit
Even being an unreasonable value for in-memory cache, shouldn’t this
unexpected result be avoided?
Posted at Nginx Forum:
Hi,
On 18/01/2011 16:20, Igor S. wrote:
10485760000 is 0x271000000 in hex. On 32-bit platform it’s truncated to
0x71000000, i.e., 1895825408. Yes, it should be checked.
Also, would it not be better to use off64_t or some other larger type
for storing the max_size of the cache (or indeed for parsing off’s in
general)? I’m not sure about all Posix systems, but on Debian off_t is
long int, hence a 32-bit value on 32-bit systems. I’ve not checked in
the code, but I’m assuming that the max size of a file cache on 32-bit
systems may then be 2GB.
Marcus.
On Tue, Jan 18, 2011 at 08:35:10AM -0500, caruccio wrote:
What happens is that 10G should be 10485760000, not 1895825408:
1599 if (size > 8191) {
(gdb) n
1600 continue;
(gdb) quit
[/code]
Even being an unreasonable value for in-memory cache, shouldn’t this
unexpected result be avoided?
10485760000 is 0x271000000 in hex. On 32-bit platform it’s truncated to
0x71000000, i.e., 1895825408. Yes, it should be checked.
–
Igor S.
http://sysoev.ru/en/
On Tue, Jan 18, 2011 at 04:29:16PM +0200, Eugaia wrote:
the code, but I’m assuming that the max size of a file cache on 32-bit
systems may then be 2GB.
nginx uses 64-bit offsets on Linux with
#define _FILE_OFFSET_BITS 64
–
Igor S.
http://sysoev.ru/en/
On 18/01/2011 16:40, Igor S. wrote:
general)? I’m not sure about all Posix systems, but on Debian off_t is
long int, hence a 32-bit value on 32-bit systems. I’ve not checked in
the code, but I’m assuming that the max size of a file cache on 32-bit
systems may then be 2GB.
nginx uses 64-bit offsets on Linux with
#define _FILE_OFFSET_BITS 64
Right.
Thanks,
Marcus.