Hi! I've taken a look at the code related to object caching and found out only two places where this restriction (hard coded to 32K) is actually applied:
1) DiscIO/IpcIoFile.cc: when Squid worker pushes an i/o request to disker via IpcIoFile::push() and disker handles that request with DiskerHandleRequest(). IpcIoMsg object contains the memory page for i/o. Before and after i/o plain byte arrays are used for data storage. So why not to use an array of pages for i/o here instead of one single page? We know the exact object size here so we can easily calculate the number of pages needed to load/store and object. 2) Shared memory (MemStore, shm): Squid stores a map 'store_key - MemStoreMap::Extras', where MemStoreMap::Extras contains a memory page with stored data. Just like with IPC I/O, we could use an array of pages here and adapt MemStore::copyToShm() and MemStore::copyFromShm() functions. Are there any other places where Ipc::Mem::pageSize() restriction takes effect? I think all Squid users are interested in caching large objects. In particular, 32K is too small even to cache a GIF with a cute kitty! -- Best wishes, Alexander Komyagin
