DBD-Patroni
view release on metacpan or search on metacpan
$dbh->disconnect;
```
## Connection Attributes
All Patroni attributes can be specified either in the DSN string or in the attributes hash. Attributes hash takes precedence.
| Attribute | Description | Default |
|-----------|-------------|---------|
| `patroni_url` | Comma-separated Patroni REST API endpoints | **required** |
| `patroni_lb` | Load balancing mode: `round_robin`, `random`, `leader_only` | `round_robin` |
| `patroni_timeout` | HTTP timeout for Patroni API calls (seconds) | `3` |
Example with all attributes in DSN:
```perl
my $dbh = DBI->connect(
"dbi:Patroni:dbname=mydb;patroni_url=http://host:8008/cluster;patroni_lb=random;patroni_timeout=5",
$user, $password
);
```
lib/DBD/Patroni.pm view on Meta::CPAN
Patroni-specific parameters can be in the DSN or attributes hash.
Attributes hash takes precedence.
=head1 CONNECTION ATTRIBUTES
=over 4
=item patroni_url (required)
Comma-separated list of Patroni REST API endpoints.
=item patroni_lb
Load balancing mode: C<round_robin> (default), C<random>, or C<leader_only>.
=item patroni_timeout
HTTP timeout in seconds for Patroni API calls. Default: 3
=back
t/03-failover.t view on Meta::CPAN
}
return undef;
}
# Helper to trigger failover via Patroni API
sub trigger_failover {
my ($new_leader) = @_;
my $ua = LWP::UserAgent->new( timeout => 10 );
# Find current leader's API endpoint
my $info = get_cluster_info();
return 0 unless $info && $info->{leader};
my $leader_host = $info->{leader}{host};
my $failover_url = "http://${leader_host}:8008/failover";
my $resp = $ua->post(
$failover_url,
'Content-Type' => 'application/json',
Content => encode_json( { candidate => $new_leader } ),
( run in 0.561 second using v1.01-cache-2.11-cpan-7de36a11506 )