Skip Menu |
 

This queue is for tickets about the KiokuDB-Backend-BDB CPAN distribution.

Report information
The Basics
Id: 46371
Status: new
Priority: 0/
Queue: KiokuDB-Backend-BDB

People
Owner: Nobody in particular
Requestors: j.borevich [...] gmail.com
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: (no value)
Fixed in: 0.14



Subject: Secondary indices not cleared aftter deleting objects (KiokudDB::Backend::DBD::GIN)
Download (untitled) / with headers
text/plain 2.1k
Secondary indices not cleared aftter deleting objects (KiokudDB::Backend::DBD::GIN) perl version: 5.8.8 os version: Linux fireball 2.6.18-6-686 #1 SMP Tue Jun 17 21:31:27 UTC 2008 i686 GNU/Linux KiokuDB version: 0.27 KiokiDB::Backend::BDB version: 0.14 BerkeleyDB (perl package) version: 0.38 BerkeleyDB version: 4.7.25 Execute following code: { package App::Object; use Moose; has indexed_field => ( is => 'rw', isa => 'Int' ); __PACKAGE__->meta->make_immutable; 1; } package main; use KiokuDB; use Search::GIN::Extract::Callback; my $dir = KiokuDB->connect( "bdb-gin:dir=~/tmp/db/", create => 1, extract => Search::GIN::Extract::Callback->new(extract => sub { my ( $object, $extractor, @args) = @_; my $index = {}; if ( $object->isa('App::Object') ){ $index->{indexed_field} = $object->indexed_field; } return $index; }) ); { my $scope = $dir->new_scope; my $obj = new App::Object indexed_field => 123; $dir->store($obj); $dir->delete($obj); } Then in shell: # ~/bin/db_dump -p gin_index VERSION=3 format=print type=btree duplicates=1 dupsort=1 db_pagesize=4096 HEADER=END indexed_field:123 E41BB608-4A08-11DE-8F2D-9288FFEE0A87 DATA=END # ~/bin/db_dump -p gin_index VERSION=3 format=print type=btree duplicates=1 dupsort=1 db_pagesize=4096 HEADER=END indexed_field:123 E41BB608-4A08-11DE-8F2D-9288FFEE0A87 DATA=END Simplest way i found to fix this bug is to add method modifiler (before delete). In KiokuDB::Backend::DBD::GIN : before delete => sub { my ( $self, @entries ) = @_; if ( $self->extract ) { foreach my $entry ( @entries ) { if ($entry->has_object){ my @keys = $self->extract_values( $entry->object, entry => $entry ); if ( @keys ) { my $d = $entry->backend_data || $entry- Show quoted text
>backend_data({});
$d->{keys} = \@keys; $keys{$entry->id} = \@keys; } } } } }; Possible there is better way to fix this problem.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.