my $keytag = $self->load_tag( $keyloc );
my ($subloc, $is_deleted, $offset) = $self->find_keyloc( $keytag );
- if ( @transactions ) {
+ if ( $subloc && !$is_deleted && @transactions ) {
my $old_value = $self->read_from_loc( $subloc, $orig_key );
my $old_size = $self->_length_needed( $old_value, $plain_key );
my $offset = 1;
for my $trans_id ( @transactions ) {
$fileobj->print_at( $keytag->{offset} + $self->{key_size} * $offset++,
- pack( $self->{long_pack}, -1 ),
+ pack( $self->{long_pack}, 0 ),
pack( 'C C', $trans_id, 1 ),
);
}
else {
my $keytag = $self->load_tag( $keyloc );
my ($subloc, $is_deleted) = $self->find_keyloc( $keytag );
- if (!$subloc) {
+ if (!$subloc && !$is_deleted) {
($subloc, $is_deleted) = $self->find_keyloc( $keytag, 0 );
}
if ( $subloc && !$is_deleted ) {
my ($subloc, $is_deleted, $offset) = $self->find_keyloc( $keytag );
$fileobj->print_at( $keytag->{offset} + $offset,
- pack($self->{long_pack}, -1 ),
+ pack($self->{long_pack}, 0 ),
pack( 'C C', $fileobj->transaction_id, 1 ),
);
}
my ($keyloc) = $self->_find_in_buckets( $tag, $md5 );
my $keytag = $self->load_tag( $keyloc );
my ($subloc, $is_deleted, $offset) = $self->find_keyloc( $keytag );
- if ( !$subloc ) {
+ if ( !$subloc && !$is_deleted ) {
($subloc, $is_deleted, $offset) = $self->find_keyloc( $keytag, 0 );
}
return ($subloc && !$is_deleted) && 1;
my $keytag = $self->load_tag( $keyloc );
my ($subloc, $is_deleted) = $self->find_keyloc( $keytag );
- if ( $subloc == 0 ) {
+ if ( $subloc == 0 && !$is_deleted ) {
($subloc, $is_deleted) = $self->find_keyloc( $keytag, 0 );
}
next if $is_deleted;