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