X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBM%2FDeep%2FEngine%2FSector%2FBucketList.pm;h=36537aaf3526ff94977818b62a1be5f42b9e180c;hb=badf847ca0fd2a37bf21caf92454a92d568e3ccf;hp=b3bd6b21344824c03e8565938c59188555fbf9ec;hpb=80656ce3c356053e563c882733b5bf66307c9c20;p=dbsrgits%2FDBM-Deep.git diff --git a/lib/DBM/Deep/Engine/Sector/BucketList.pm b/lib/DBM/Deep/Engine/Sector/BucketList.pm index b3bd6b2..36537aa 100644 --- a/lib/DBM/Deep/Engine/Sector/BucketList.pm +++ b/lib/DBM/Deep/Engine/Sector/BucketList.pm @@ -35,11 +35,17 @@ sub clear { sub size { my $self = shift; - unless ( $self->{size} ) { - # Base + numbuckets * bucketsize - $self->{size} = $self->base_size + $self->engine->max_buckets * $self->bucket_size; + if ( ref($self) ) { + unless ( $self->{size} ) { + # Base + numbuckets * bucketsize + $self->{size} = $self->base_size + $self->engine->max_buckets * $self->bucket_size; + } + return $self->{size}; + } + else { + my $e = shift; + return $self->base_size($e) + $e->max_buckets * $self->bucket_size($e); } - return $self->{size}; } sub free_meth { return '_add_free_blist_sector' } @@ -80,13 +86,20 @@ sub free { sub bucket_size { my $self = shift; - unless ( $self->{bucket_size} ) { - my $e = $self->engine; - # Key + head (location) + transactions (location + staleness-counter) + if ( ref($self) ) { + unless ( $self->{bucket_size} ) { + my $e = $self->engine; + # Key + head (location) + transactions (location + staleness-counter) + my $location_size = $e->byte_size + $e->byte_size + ($e->num_txns - 1) * ($e->byte_size + $DBM::Deep::Engine::STALE_SIZE); + $self->{bucket_size} = $e->hash_size + $location_size; + } + return $self->{bucket_size}; + } + else { + my $e = shift; my $location_size = $e->byte_size + $e->byte_size + ($e->num_txns - 1) * ($e->byte_size + $DBM::Deep::Engine::STALE_SIZE); - $self->{bucket_size} = $e->hash_size + $location_size; + return $e->hash_size + $location_size; } - return $self->{bucket_size}; } # XXX This is such a poor hack. I need to rethink this code.