use Data::Dump qw/dump/;
-my ( $riak_url, $dbi ) = @ARGV;
+my ( $riak_url, $table, $dbi ) = @ARGV;
$riak_url ||= 'http://10.60.0.92:8098';
-$dbi ||= 'DBI:mysql:dbname=koha;host=10.60.0.10;port=3306';
-my @tables = qw(
-biblioitems
-biblio
-);
+$table ||= 'biblioitems';
+$dbi ||= 'DBI:mysql:dbname=koha;host=10.60.0.10;port=3306';
-my $limit;
-$limit = $ENV{LIMIT} if $ENV{LIMIT};
+my $batch_size = 1000;
my $dbh = DBI->connect($dbi,"","") || die $DBI::errstr;
my $riak = RiakSearch->new( $riak_url );
+#$riak->{args} = 'w=2';
-warn $riak->request( 'GET' => '/koha.marcxml' );
sub riak_search_kv_hook {
- $riak->request( 'PUT' => shift, { props => {
+ my $bucket = shift;
+ $riak->request( 'PUT' => $bucket, { props => {
precommit => [ { mod => 'riak_search_kv_hook', fun => 'precommit' } ],
# precommit => [],
# last_write_wins => 'true',
}
});
+ warn "riak_search_kv_hook $bucket ", $riak->request( 'GET' => '/koha.marcxml' );
}
riak_search_kv_hook 'koha.marcxml';
+riak_search_kv_hook "koha.$table";
-foreach my $table ( @tables ) {
+my $offset = 0;
+while(1) {
+
+ my $limit = "LIMIT $batch_size OFFSET $offset";
+ warn "SELECT * FROM $table $limit\n";
my $sth = $dbh->prepare(qq{ select * from $table $limit}) || die $dbh->errstr();
$sth->execute || die $sth->errstr();
print "import ", $sth->rows, " rows from $table pk:",dump( @pk ),"...\n";
- riak_search_kv_hook "koha.$table";
-
while (my $row = $sth->fetchrow_hashref() ) {
my $key = join('_', map { $row->{$_} } @pk);
# warn "## $key ",dump($row);
my $headers;
- $headers->{Link} = qq|</riak/koha.biblio/$biblionumber>; riaktag="biblio"|
- if $biblionumber && $key !~ m/biblionumber/;
+ foreach my $reference ( qw(biblio biblioitem) ) {
+ my $col = $reference . 'number';
+ next if $key =~ m/$col/;
+ my $number = $row->{$col} || next;
+ push @{ $headers->{Link} }, qq|</riak/koha.$reference/$number>; riaktag="$reference"|;
+ }
$riak->request( 'PUT' => "/koha.$table/$key", $row, $headers );
}
+ $offset += $sth->rows;
+ last if $sth->rows < $batch_size;
+
}
+
+warn "END total_rows $offset\n";