changed the way args are passed to a storage, should make it easier to use existing...
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Replicated / Balancer / Random.pm
CommitLineData
cb6ec758 1package DBIx::Class::Storage::DBI::Replicated::Balancer::Random;
2
3use List::Util qw(shuffle);
4use Moose;
5extends 'DBIx::Class::Storage::DBI::Replicated::Balancer';
6
7=head1 NAME
8
9DBIx::Class::Storage::DBI::Replicated::Balancer; A Software Load Balancer
10
11=head1 SYNOPSIS
12
13This class is used internally by L<DBIx::Class::Storage::DBI::Replicated>. You
14shouldn't need to create instances of this class.
15
16=head1 DESCRIPTION
17
18Given a pool (L<DBIx::Class::Storage::DBI::Replicated::Pool>) of replicated
19database's (L<DBIx::Class::Storage::DBI::Replicated::Replicant>), defines a
20method by which query load can be spread out across each replicant in the pool.
21
22This Balancer uses L<List::Util> keyword 'shuffle' to randomly pick an active
23replicant from the associated pool. This may or may not be random enough for
24you, patches welcome.
25
26=head1 ATTRIBUTES
27
28This class defines the following attributes.
29
30=head1 METHODS
31
32This class defines the following methods.
33
34=head2 next_storage
35
36Returns an active replicant at random. Please note that due to the nature of
37the word 'random' this means it's possible for a particular active replicant to
38be requested several times in a row.
39
40=cut
41
42sub next_storage {
106d5f3b 43 my $self = shift @_;
44 my $next = (shuffle($self->pool->active_replicants))[0];
45 return $next ? $next : $self->master;
cb6ec758 46}
47
cb6ec758 48=head1 AUTHOR
49
50John Napiorkowski <john.napiorkowski@takkle.com>
51
52=head1 LICENSE
53
54You may distribute this code under the same terms as Perl itself.
55
56=cut
57
581;