converted replicant to a role so that we can apply it after ensure_connected properly...
[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
5 =head1 NAME
6
7 DBIx::Class::Storage::DBI::Replicated::Replicant; A replicated DBI Storage Role
8
9 =head1 SYNOPSIS
10
11 This class is used internally by L<DBIx::Class::Storage::DBI::Replicated>.
12     
13 =head1 DESCRIPTION
14
15 Replicants are DBI Storages that follow a master DBI Storage.  Typically this
16 is accomplished via an external replication system.  Please see the documents
17 for L<DBIx::Class::Storage::DBI::Replicated> for more details.
18
19 This class exists to define methods of a DBI Storage that only make sense when
20 it's a classic 'slave' in a pool of slave databases which replicate from a
21 given master database.
22
23 =head1 ATTRIBUTES
24
25 This class defines the following attributes.
26
27 =head2 active
28
29 This is a boolean which allows you to programmatically activate or deactivate a
30 replicant from the pool.  This way to you do stuff like disallow a replicant
31 when it get's too far behind the master, if it stops replicating, etc.
32
33 This attribute DOES NOT reflect a replicant's internal status, i.e. if it is
34 properly replicating from a master and has not fallen too many seconds behind a
35 reliability threshold.  For that, use L</is_replicating>  and L</lag_behind_master>.
36 Since the implementation of those functions database specific (and not all DBIC
37 supported DB's support replication) you should refer your database specific
38 storage driver for more information.
39
40 =cut
41
42 has 'active' => (
43     is=>'rw',
44     isa=>'Bool',
45     lazy=>1,
46     required=>1,
47     default=>1,
48 );
49
50 =head1 METHODS
51
52 This class defines the following methods.
53
54 =head2 after: _query_start
55
56 advice iof the _query_start method to add more debuggin
57
58 =cut
59
60 around '_query_start' => sub {
61         my ($method, $self, $sql, @bind) = @_;
62         my $dsn = $self->connect_info->[0];
63         $self->$method("DSN: $dsn SQL: $sql", @bind);
64 };
65
66
67 =head1 AUTHOR
68
69 John Napiorkowski <john.napiorkowski@takkle.com>
70
71 =head1 LICENSE
72
73 You may distribute this code under the same terms as Perl itself.
74
75 =cut
76
77 1;