… | |
… | |
186 | } |
186 | } |
187 | |
187 | |
188 | sub _push_queue { |
188 | sub _push_queue { |
189 | my ($self, $queue) = @_; |
189 | my ($self, $queue) = @_; |
190 | |
190 | |
191 | warn "oush @$queue\n";#d# |
|
|
192 | shift @$queue; |
191 | shift @$queue; |
193 | $queue->[0]($self, AnyEvent::Util::guard { $self->_push_queue ($queue) }) |
192 | $queue->[0]($self, AnyEvent::Util::guard { $self->_push_queue ($queue) }) |
194 | if @$queue; |
193 | if @$queue; |
195 | } |
194 | } |
196 | |
195 | |
… | |
… | |
215 | my $done_cb = sub { |
214 | my $done_cb = sub { |
216 | $kv{pkt_type} = $type; |
215 | $kv{pkt_type} = $type; |
217 | |
216 | |
218 | my $on = $self->{on}; |
217 | my $on = $self->{on}; |
219 | for (0 .. $#$on) { |
218 | for (0 .. $#$on) { |
220 | unless (my $res = $on->[$_]($type, \%kv, $rdata)) { |
219 | unless (my $res = $on->[$_]($self, $type, \%kv, $rdata)) { |
221 | splice @$on, $_, 1 unless defined $res; |
220 | splice @$on, $_, 1 unless defined $res; |
222 | return; |
221 | return; |
223 | } |
222 | } |
224 | } |
223 | } |
225 | |
224 | |
… | |
… | |
368 | =cut |
367 | =cut |
369 | |
368 | |
370 | _txn list_persistent_requests => sub { |
369 | _txn list_persistent_requests => sub { |
371 | my ($self, $cv) = @_; |
370 | my ($self, $cv) = @_; |
372 | |
371 | |
|
|
372 | $self->serialise (list_persistent_requests => sub { |
|
|
373 | my ($self, $guard) = @_; |
|
|
374 | |
373 | my %res; |
375 | my %res; |
374 | |
376 | |
375 | $self->send_msg ("list_persistent_requests"); |
377 | $self->send_msg ("list_persistent_requests"); |
376 | |
378 | |
377 | push @{ $self->{queue} }, sub { |
379 | $self->on (sub { |
378 | my ($self, $type, $kv, $rdata) = @_; |
380 | my ($self, $type, $kv, $rdata) = @_; |
379 | |
381 | |
|
|
382 | $guard if 0; |
|
|
383 | |
380 | if ($type eq "end_list_persistent_requests") { |
384 | if ($type eq "end_list_persistent_requests") { |
381 | $cv->(\%res); |
385 | $cv->(\%res); |
|
|
386 | return; |
|
|
387 | } else { |
|
|
388 | my $id = $kv->{identifier}; |
|
|
389 | |
|
|
390 | if ($type =~ /^persistent_(get|put|put_dir)$/) { |
|
|
391 | $res{$id} = { |
|
|
392 | type => $1, |
|
|
393 | %{ $res{$id} }, |
|
|
394 | %$kv, |
|
|
395 | }; |
|
|
396 | } elsif ($type eq "simple_progress") { |
|
|
397 | delete $kv->{pkt_type}; # save memory |
|
|
398 | push @{ $res{delete $kv->{identifier}}{simple_progress} }, $kv; |
|
|
399 | } else { |
|
|
400 | $res{delete $kv->{identifier}}{delete $kv->{pkt_type}} = $kv; |
|
|
401 | } |
|
|
402 | } |
|
|
403 | |
382 | 1 |
404 | 1 |
383 | } else { |
|
|
384 | my $id = $kv->{identifier}; |
|
|
385 | |
|
|
386 | if ($type =~ /^persistent_(get|put|put_dir)$/) { |
|
|
387 | $res{$id} = { |
|
|
388 | type => $1, |
|
|
389 | %{ $res{$id} }, |
|
|
390 | %$kv, |
|
|
391 | }; |
|
|
392 | } elsif ($type eq "simple_progress") { |
|
|
393 | delete $kv->{pkt_type}; # save memory |
|
|
394 | push @{ $res{delete $kv->{identifier}}{simple_progress} }, $kv; |
|
|
395 | } else { |
|
|
396 | $res{delete $kv->{identifier}}{delete $kv->{pkt_type}} = $kv; |
|
|
397 | } |
|
|
398 | 0 |
|
|
399 | } |
405 | }); |
400 | }; |
406 | }); |
401 | }; |
407 | }; |
402 | |
408 | |
403 | =item $cv = $fcp->remove_request ($global, $identifier) |
409 | =item $cv = $fcp->remove_request ($global, $identifier) |
404 | |
410 | |
405 | =item $status = $fcp->remove_request_sync ($global, $identifier) |
411 | =item $status = $fcp->remove_request_sync ($global, $identifier) |
… | |
… | |
516 | directory => $remote, |
522 | directory => $remote, |
517 | want_read_directory => $want_read ? "true" : "false", |
523 | want_read_directory => $want_read ? "true" : "false", |
518 | want_write_directory => $want_write ? "true" : "false", |
524 | want_write_directory => $want_write ? "true" : "false", |
519 | ); |
525 | ); |
520 | $self->on (sub { |
526 | $self->on (sub { |
521 | my ($type, $kv) = @_; |
527 | my ($self, $type, $kv) = @_; |
522 | |
528 | |
523 | if ($type eq "test_dda_reply") { |
529 | if ($type eq "test_dda_reply") { |
524 | # the filenames are all relative to the server-side directory, |
530 | # the filenames are all relative to the server-side directory, |
525 | # which might or might not match $remote anymore, so we |
531 | # which might or might not match $remote anymore, so we |
526 | # need to rewrite the paths to be relative to $local |
532 | # need to rewrite the paths to be relative to $local |
… | |
… | |
552 | } |
558 | } |
553 | |
559 | |
554 | $self->send_msg (test_dda_response => %response); |
560 | $self->send_msg (test_dda_response => %response); |
555 | |
561 | |
556 | $self->on (sub { |
562 | $self->on (sub { |
557 | my ($type, $kv) = @_; |
563 | my ($self, $type, $kv) = @_; |
558 | |
564 | |
559 | $guard if 0; # reference |
565 | $guard if 0; # reference |
560 | |
566 | |
561 | if ($type eq "test_dda_complete") { |
567 | if ($type eq "test_dda_complete") { |
562 | $cv->( |
568 | $cv->( |