Re: [squid-users] swap.state and perl unpack question

From: OTR Comm <otrcomm@dont-contact.us>
Date: Sun, 07 Mar 2004 12:42:01 -0700

Hello,

> please note that field alignment applies as per the requirements your
> platform so there may be padding between smaller and larger fields. On x86
> this padding is seen between the op and swap_file_number fields.

I am on an x86 machine.

>
> Detailed layout on x86: offset(length)
>
> 0(1) char op;
> 1(3) char padding[3]
> 4(4) int swap_file_number;
> 8(4) time_t timestamp;
> 12(4) time_t lastref;
> 16(4) time_t expires;
> 20(4) time_t lastmod;
> 24(4) size_t swap_file_sz;
> 28(2) u_short refcount;
> 30(2) u_short flags;
> 32(16) unsigned char key[MD5_DIGEST_CHARS];
>

I still cant't read the swap.state records properly.

I now have in code:

$binary_layout = "A1 x3 i l l l l l s s A16";
$recordlen = length pack $binary_layout, "";

open SWAP_STATE, "<$swap_state";

if ( ! read SWAP_STATE, $record, $recordlen ) {
  print "Failed to read initial record in $swap_state\n";
  die;
}

($metaop,$metapad,$metafilenum,$metatimestamp,$metalastref,$metaexpires,$metalastmod,
$metafilesz,$metarefcount,$metaflags,$metakey) = unpack $binary_layout,
$record;

print DEBUG "binary_layout: $binary_layout\n";
print DEBUG "recordlen: $recordlen\n";
print DEBUG "metaop: $metaop\n";
print DEBUG "metafilenum: $metafilenum\n";
print DEBUG "metatimestamp: $metatimestamp\n";
print DEBUG "metalastref: $metalastref\n";
print DEBUG "metaexpires: $metaexpires\n";
print DEBUG "metalastmod: $metalastmod\n";

and for output I get I get:

binary_layout: A1 x3 i l l l l l s s A16
recordlen: 48
metaop:
metafilenum: 1076866014
metatimestamp: 1076866015
metalastref: -1
metaexpires: 1062471704
metalastmod: 5992

Obviously I have done something wrong, but I can't see it. Could
someone help please?

>
> Most if not all of this information is also logged in swap.log where you
> also have access to the URL etc, provided it's known by Squid at the
> time.

I would rather use the swap.state data since it has more information,
but I looked at using swap.log.

I didn't have the cache_swap_log option set in squid.conf, but I turned
it on and pointed to /usr/local/squid/var/logs/swap.log

I restarted (not reloaded) squid and swap.log.00 got created. When it
first got created, it had the same size as my swap.state file, but as
soon as I went to some sites not cached, the swap.log file updated, but
the swap.state file remained unchanged (both size and timestamp). Are
swap.log and swap.state mutually exclusive?

Now, I restarted squid again, and still the swap.state file remained
unchanged. So it appears that if I have swap.log enabled, swap.state is
not updated, right? If not, how/when is swap.state updated?

Also, what is the binary layout for the swap.log?

Thanks,

Murrah Boswell
Received on Sun Mar 07 2004 - 12:42:10 MST

This archive was generated by hypermail pre-2.1.9 : Thu Apr 01 2004 - 12:00:01 MST