Commit | Line | Data |
26ab719a |
1 | package DBIx::Class::Storage::DBI::Replicated::Replicant; |
2 | |
de5dc9ef |
3 | use Moose::Role; |
edbf2778 |
4 | requires qw/_query_start/; |
ee356d00 |
5 | with 'DBIx::Class::Storage::DBI::Replicated::WithDSN'; |
0bd8e058 |
6 | use MooseX::Types::Moose qw/Bool Str/; |
cea43436 |
7 | use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI'; |
41916570 |
8 | |
9 | use namespace::clean -except => 'meta'; |
26ab719a |
10 | |
11 | =head1 NAME |
12 | |
21fc4719 |
13 | DBIx::Class::Storage::DBI::Replicated::Replicant - A replicated DBI Storage Role |
26ab719a |
14 | |
15 | =head1 SYNOPSIS |
16 | |
de5dc9ef |
17 | This class is used internally by L<DBIx::Class::Storage::DBI::Replicated>. |
d4daee7b |
18 | |
26ab719a |
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 | |
50336325 |
33 | =head2 active |
34 | |
35 | This is a boolean which allows you to programmatically activate or deactivate a |
48580715 |
36 | replicant from the pool. This way you can do stuff like disallow a replicant |
37 | when it gets too far behind the master, if it stops replicating, etc. |
50336325 |
38 | |
9c748388 |
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 |
5529838f |
41 | reliability threshold. For that, use |
42 | L<DBIx::Class::Storage::DBI::Replicated/is_replicating> and |
43 | L<DBIx::Class::Storage::DBI::Replicated/lag_behind_master>. |
9c748388 |
44 | Since the implementation of those functions database specific (and not all DBIC |
48580715 |
45 | supported DBs support replication) you should refer your database-specific |
9c748388 |
46 | storage driver for more information. |
47 | |
50336325 |
48 | =cut |
49 | |
50 | has 'active' => ( |
64cdad22 |
51 | is=>'rw', |
41916570 |
52 | isa=>Bool, |
64cdad22 |
53 | lazy=>1, |
54 | required=>1, |
55 | default=>1, |
50336325 |
56 | ); |
57 | |
ede99b9f |
58 | has dsn => (is => 'rw', isa => Str); |
59 | has id => (is => 'rw', isa => Str); |
0bd8e058 |
60 | |
cea43436 |
61 | =head2 master |
62 | |
63 | Reference to the master Storage. |
64 | |
65 | =cut |
66 | |
67 | has master => (is => 'rw', isa => DBICStorageDBI, weak_ref => 1); |
68 | |
26ab719a |
69 | =head1 METHODS |
70 | |
71 | This class defines the following methods. |
72 | |
edbf2778 |
73 | =head2 debugobj |
74 | |
75 | Override the debugobj method to redirect this method call back to the master. |
76 | |
77 | =cut |
78 | |
79 | sub debugobj { |
cea43436 |
80 | my $self = shift; |
81 | |
82 | return $self->master->debugobj; |
edbf2778 |
83 | } |
84 | |
e515254d |
85 | =head1 ALSO SEE |
86 | |
ee356d00 |
87 | L<http://en.wikipedia.org/wiki/Replicant>, |
88 | L<DBIx::Class::Storage::DBI::Replicated> |
e515254d |
89 | |
a2bd3796 |
90 | =head1 FURTHER QUESTIONS? |
26ab719a |
91 | |
a2bd3796 |
92 | Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>. |
26ab719a |
93 | |
a2bd3796 |
94 | =head1 COPYRIGHT AND LICENSE |
26ab719a |
95 | |
a2bd3796 |
96 | This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE> |
97 | by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can |
98 | redistribute it and/or modify it under the same terms as the |
99 | L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>. |
26ab719a |
100 | |
50336325 |
101 | =cut |
102 | |
41916570 |
103 | 1; |