This assertion was traced to bugs in UFSStoreState code when using aufs
storage. The primary problem was that UFSStoreState was aggressive
in closing swapout files. They could be closed before any I/Os had
time to complete. The assertion seemed to be caused by a "double
callback" whereby memNodeWriteComplete would get called twice.
Additionally, writes were executed out-of-order in cases where a
write was placed on the pending queue because open hadn't completed
yet. A subsequent write would be given priority even though
the first write was in the pending queue.
Now all writes go into the pending queue. This sucks a little bit,
especially for synchronous storage shcemes such as UFS and cases
where UFSStoreState gets one write request at a time and queueing
is unnecessary.
See additional comments in fs/ufs/store_io_ufs.cc dated 2006-05-24
wessels [Wed, 31 May 2006 03:15:58 +0000 (03:15 +0000)]
Removed comm_accept_check_event() and related code since we have
the AcceptLimiter class which does a better job of deferring new
connections when we start to run out of FDs.
hno [Tue, 30 May 2006 23:31:23 +0000 (23:31 +0000)]
Bug #1554: HTCP RFC compliance
Fix field order to comply with the RFC. Bump minor version to 1 to
make migration easier. New cache-peer option to support old Squid HTCP
implementaitons.
robertc [Mon, 29 May 2006 06:14:59 +0000 (06:14 +0000)]
Add a CacheManager class which provides the cachemanager menu registration facility, and remove all compile time dependencies upon cachemgrRegister from squid outside of main.cc. This allows much simpler tests, as modules exporting cache mgr information no longer drag in all of squid via cache_manager.cc.
wessels [Sat, 27 May 2006 01:58:37 +0000 (01:58 +0000)]
cosmetic: The debug message "WARNING! Your cache is running out of
filedescriptors" appears in two places. I changed it to debugs()
macro with HERE argument to differentiate the two messages.
wessels [Wed, 24 May 2006 00:24:41 +0000 (00:24 +0000)]
Fix NULL pointer access with asyncio when Squid starts up over the disk
space limit.
We used to call squidaio_init() from DiskThreadsDiskFile::operator new.
But this only gets called when opening a file. If the first transaction
is to unlink a file, squidaio will be uninitialized.
I didn't see any other good places to call squidaio_init(). For now
I am calling it from within the squidaio module itself at the
start of each open, unlink/truncate, and stat call.
wessels [Tue, 23 May 2006 06:30:21 +0000 (06:30 +0000)]
Added "self" refcounted Pointer parameters to StoreIOState's STRCB, STFNCB,
and STIOCB callback functions. This is so that the StoreIOState
refcount doesn't go to zero during one of these callbacks.
wessels [Tue, 23 May 2006 01:58:51 +0000 (01:58 +0000)]
Merged storeIOState and StoreIOState into a single StoreIOState
class. Previously, StoreIOState was just a refcounted storeIOState.
I had concerns that mixed use of refcounted and non-refcounted
StoreIOState may be leading to cases where the object gets referenced
via the old-style pointer after the refcounted version had its count
go to zero and the memory was freed. This came about while
investigating bugzilla #1465.
removed StoreIOState-related prototypes from protos.h, and removed
some typedefs from typedefs.h.
Modified STFNCB (storeSwapInFileNotify, storeSwapOutFileNotify) and
STIOCB (storeSwapOutFileClosed, storeSwapInFileClosed) so that they
no longer take StoreIOState arguments. Their "data" arguments
easily lead to the corresponding StoreIOState. The only thing we
really lose here is the ability to assert that "data->sio" equals
the passed StoreIOState.
hno [Sat, 20 May 2006 19:15:14 +0000 (19:15 +0000)]
Minor cleanup of the meta TLV format to not add the incorrect STORE_META_END
at the end of the list (list ends by it's size). STORE_META_END has changed
a number of times over the history, and we have never cared about it but some
external tools (i.e. purge) apparently beleives what they read in the docs..
wessels [Sat, 20 May 2006 06:11:59 +0000 (06:11 +0000)]
Made stream outputting more consistent in Mem::PoolReport. Use a
const char * for the column delimiter instead of repeating "\t "
on each line. Always put the delimiter at the end of the (source code) line.
wessels [Sat, 20 May 2006 06:05:02 +0000 (06:05 +0000)]
Try to clean up cachemgr 'mem' output. Don't need to double up on
'%' now that we're not using printf. Use std::setprecision() on some
fields so they don't show up as "1e+01" etc.
wessels [Fri, 19 May 2006 02:31:12 +0000 (02:31 +0000)]
The patch for bug #1499 included debugging statments where printf tokens
did not match time_t type on FreeBSD. The time_t variables are now cast
in debugging calls.