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 MooseX::Types::Moose qw/Num Int ClassName HashRef/;
-use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI';
+use DBIx::Class::_Types qw(HashRef Number Integer LoadableClass DBICStorageDBI);
use Try::Tiny;
-use namespace::clean -except => 'meta';
+use namespace::clean;
=head1 NAME
has 'maximum_lag' => (
is=>'rw',
- isa=>Num,
- required=>1,
+ isa=>Number,
lazy=>1,
- default=>0,
+ default=>sub { 0 },
);
=head2 last_validated
has 'last_validated' => (
is=>'rw',
- isa=>Int,
+ isa=>Integer,
reader=>'last_validated',
writer=>'_last_validated',
lazy=>1,
- default=>0,
+ default=>sub { 0 },
);
=head2 replicant_type ($classname)
has 'replicant_type' => (
is=>'ro',
- isa=>ClassName,
+ isa=>LoadableClass,
required=>1,
default=>'DBIx::Class::Storage::DBI',
handles=>{
has 'replicants' => (
is=>'rw',
- traits => ['Hash'],
- isa=>HashRef['Object'],
+ isa=>HashRef,
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,
+ isa => Integer,
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->_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);
=cut
-__PACKAGE__->meta->make_immutable;
-
1;