package DBIx::Class::Storage::DBI::Replicated::Pool;
-use Moose;
+use Moo;
use DBIx::Class::Storage::DBI::Replicated::Replicant;
use List::Util 'sum';
use Scalar::Util 'reftype';
use DBI ();
-use Carp::Clan qw/^DBIx::Class/;
-use MooseX::Types::Moose qw/Num Int ClassName HashRef/;
+use Types::Standard qw/Num Int ClassName HashRef Object/;
use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI';
use Try::Tiny;
=head1 DESCRIPTION
In a replicated storage type, there is at least one replicant to handle the
-read-only traffic. The Pool class manages this replicant, or list of
+read-only traffic. The Pool class manages this replicant, or list of
replicants, and gives some methods for querying information about their status.
=head1 ATTRIBUTES
has 'maximum_lag' => (
is=>'rw',
isa=>Num,
- required=>1,
lazy=>1,
default=>0,
);
default=>'DBIx::Class::Storage::DBI',
handles=>{
'create_replicant' => 'new',
- },
+ },
);
=head2 replicants
has 'replicants' => (
is=>'rw',
- traits => ['Hash'],
- isa=>HashRef['Object'],
+ isa=>HashRef[Object],
default=>sub {{}},
- handles => {
- 'set_replicant' => 'set',
- 'get_replicant' => 'get',
- 'has_replicants' => 'is_empty',
- 'num_replicants' => 'count',
- 'delete_replicant' => 'delete',
- 'all_replicant_storages' => 'values',
- },
);
-around has_replicants => sub {
- my ($orig, $self) = @_;
- return !$self->$orig;
-};
+sub set_replicant { $_[0]->replicants->{$_[1]} = $_[2] }
+sub get_replicant { $_[0]->replicants->{$_[1]} }
+sub has_replicants { !!keys %{$_[0]->replicants} }
+sub num_replicants { 0+keys %{$_[0]->replicants} }
+sub delete_replicant { delete $_[0]->replicants->{$_[1]} }
+sub all_replicant_storages { values %{$_[0]->replicants} }
has next_unknown_replicant_id => (
is => 'rw',
- traits => ['Counter'],
isa => Int,
default => 1,
- handles => {
- 'inc_unknown_replicant_id' => 'inc',
- },
);
+sub inc_unknown_replicant_id {
+ my ($self) = @_;
+ $self->next_unknown_replicant_id($self->next_unknown_replicant_id + 1);
+}
+
=head2 master
Reference to the master Storage.
}
$replicant->id($key);
- $self->set_replicant($key => $replicant);
+ $self->set_replicant($key => $replicant);
push @newly_created, $replicant;
}
$replicant->_determine_driver
});
- Moose::Meta::Class->initialize(ref $replicant);
-
- DBIx::Class::Storage::DBI::Replicated::Replicant->meta->apply($replicant);
+ Moo::Role->apply_roles_to_object(
+ $replicant,
+ 'DBIx::Class::Storage::DBI::Replicated::Replicant',
+ );
# link back to master
$replicant->master($self->master);
if($lag_behind_master <= $self->maximum_lag) {
$replicant->active(1);
} else {
- $replicant->active(0);
+ $replicant->active(0);
}
- }
+ }
} else {
$replicant->active(0);
}
$replicant->active(0);
}
}
- ## Mark that we completed this validation.
- $self->_last_validated(time);
+ ## Mark that we completed this validation.
+ $self->_last_validated(time);
}
-=head1 AUTHOR
+=head1 FURTHER QUESTIONS?
-John Napiorkowski <john.napiorkowski@takkle.com>
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
-=head1 LICENSE
+=head1 COPYRIGHT AND LICENSE
-You may distribute this code under the same terms as Perl itself.
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
=cut
-__PACKAGE__->meta->make_immutable;
-
1;