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