1package DBIx::Class::Storage::DBI::Replicated::Replicant; 2 3use Moose::Role; 4requires qw/_query_start/; 5with 'DBIx::Class::Storage::DBI::Replicated::WithDSN'; 6use MooseX::Types::Moose qw/Bool Str/; 7use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI'; 8 9use namespace::clean -except => 'meta'; 10 11=head1 NAME 12 13DBIx::Class::Storage::DBI::Replicated::Replicant - A replicated DBI Storage Role 14 15=head1 SYNOPSIS 16 17This class is used internally by L<DBIx::Class::Storage::DBI::Replicated>. 18 19=head1 DESCRIPTION 20 21Replicants are DBI Storages that follow a master DBI Storage. Typically this 22is accomplished via an external replication system. Please see the documents 23for L<DBIx::Class::Storage::DBI::Replicated> for more details. 24 25This class exists to define methods of a DBI Storage that only make sense when 26it's a classic 'slave' in a pool of slave databases which replicate from a 27given master database. 28 29=head1 ATTRIBUTES 30 31This class defines the following attributes. 32 33=head2 active 34 35This is a boolean which allows you to programmatically activate or deactivate a 36replicant from the pool. This way you can do stuff like disallow a replicant 37when it gets too far behind the master, if it stops replicating, etc. 38 39This attribute DOES NOT reflect a replicant's internal status, i.e. if it is 40properly replicating from a master and has not fallen too many seconds behind a 41reliability threshold. For that, use L</is_replicating> and L</lag_behind_master>. 42Since the implementation of those functions database specific (and not all DBIC 43supported DBs support replication) you should refer your database-specific 44storage driver for more information. 45 46=cut 47 48has 'active' => ( 49 is=>'rw', 50 isa=>Bool, 51 lazy=>1, 52 required=>1, 53 default=>1, 54); 55 56has dsn => (is => 'rw', isa => Str); 57has id => (is => 'rw', isa => Str); 58 59=head2 master 60 61Reference to the master Storage. 62 63=cut 64 65has master => (is => 'rw', isa => DBICStorageDBI, weak_ref => 1); 66 67=head1 METHODS 68 69This class defines the following methods. 70 71=head2 debugobj 72 73Override the debugobj method to redirect this method call back to the master. 74 75=cut 76 77sub debugobj { 78 my $self = shift; 79 80 return $self->master->debugobj; 81} 82 83=head1 ALSO SEE 84 85L<http://en.wikipedia.org/wiki/Replicant>, 86L<DBIx::Class::Storage::DBI::Replicated> 87 88=head1 AUTHOR 89 90John Napiorkowski <john.napiorkowski@takkle.com> 91 92=head1 LICENSE 93 94You may distribute this code under the same terms as Perl itself. 95 96=cut 97 981; 99