X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated%2FReplicant.pm;h=a541e7df2129d6ed80a7b872a29a84988ceb9d9e;hb=48580715af3072905f2c71dc27e7f70f21a11338;hp=59ac66ed2a89635c089e54acc3013dacaae3289c;hpb=9c748388f02532cfa13d1d96c6b4b1ffefd9c76b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated/Replicant.pm b/lib/DBIx/Class/Storage/DBI/Replicated/Replicant.pm index 59ac66e..a541e7d 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated/Replicant.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated/Replicant.pm @@ -1,17 +1,21 @@ package DBIx::Class::Storage::DBI::Replicated::Replicant; -use Moose; -extends 'DBIx::Class::Storage::DBI', 'Moose::Object'; +use Moose::Role; +requires qw/_query_start/; +with 'DBIx::Class::Storage::DBI::Replicated::WithDSN'; +use MooseX::Types::Moose qw/Bool Str/; +use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI'; + +use namespace::clean -except => 'meta'; =head1 NAME -DBIx::Class::Storage::DBI::Replicated::Replicant; A replicated DBI Storage +DBIx::Class::Storage::DBI::Replicated::Replicant - A replicated DBI Storage Role =head1 SYNOPSIS -This class is used internally by L. You -shouldn't need to create instances of this class. - +This class is used internally by L. + =head1 DESCRIPTION Replicants are DBI Storages that follow a master DBI Storage. Typically this @@ -29,66 +33,58 @@ This class defines the following attributes. =head2 active This is a boolean which allows you to programmatically activate or deactivate a -replicant from the pool. This way to you do stuff like disallow a replicant -when it get's too far behind the master, if it stops replicating, etc. +replicant from the pool. This way you can do stuff like disallow a replicant +when it gets too far behind the master, if it stops replicating, etc. This attribute DOES NOT reflect a replicant's internal status, i.e. if it is properly replicating from a master and has not fallen too many seconds behind a reliability threshold. For that, use L and L. Since the implementation of those functions database specific (and not all DBIC -supported DB's support replication) you should refer your database specific +supported DBs support replication) you should refer your database-specific storage driver for more information. =cut has 'active' => ( - is=>'rw', - isa=>'Bool', - lazy=>1, - required=>1, - default=>1, + is=>'rw', + isa=>Bool, + lazy=>1, + required=>1, + default=>1, ); -=head1 METHODS +has dsn => (is => 'rw', isa => Str); +has id => (is => 'rw', isa => Str); -This class defines the following methods. +=head2 master -=head2 after: _query_start - -advice iof the _query_start method to add more debuggin +Reference to the master Storage. =cut -around '_query_start' => sub { - my ($method, $self, $sql, @bind) = @_; - my $dsn = $self->connect_info->[0]; - $self->$method("DSN: $dsn SQL: $sql", @bind); -}; - -=head2 is_replicating - -A boolean that reports if a particular L is set to -replicate from a master database. Default is false, which is the result -returned by databases that don't support replication. +has master => (is => 'rw', isa => DBICStorageDBI, weak_ref => 1); -=cut +=head1 METHODS -sub is_replicating { - my $self = shift @_; -} +This class defines the following methods. -=head2 lag_behind_master +=head2 debugobj -Returns a number that represents a certain amount of lag behind a master db -when a given storage is replicating. The number is database dependent, but -starts at zero, which is the default, and increases with the amount of lag. +Override the debugobj method to redirect this method call back to the master. =cut -sub lag_behind_master { - my $self = shift @_; +sub debugobj { + my $self = shift; + + return $self->master->debugobj; } +=head1 ALSO SEE + +L, +L + =head1 AUTHOR John Napiorkowski @@ -99,4 +95,4 @@ You may distribute this code under the same terms as Perl itself. =cut -1; \ No newline at end of file +1;