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<DBIx::Class::Storage::DBI::Replicated>. You
-shouldn't need to create instances of this class.
-
+This class is used internally by L<DBIx::Class::Storage::DBI::Replicated>.
+
=head1 DESCRIPTION
Replicants are DBI Storages that follow a master DBI Storage. Typically this
=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</is_replicating> and L</lag_behind_master>.
+reliability threshold. For that, use
+L<DBIx::Class::Storage::DBI::Replicated/is_replicating> and
+L<DBIx::Class::Storage::DBI::Replicated/lag_behind_master>.
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<DBIx::Class::Storage::DBI> 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<http://en.wikipedia.org/wiki/Replicant>,
+L<DBIx::Class::Storage::DBI::Replicated>
+
=head1 AUTHOR
John Napiorkowski <john.napiorkowski@takkle.com>
=cut
-1;
\ No newline at end of file
+1;