DBD-Patroni
view release on metacpan or search on metacpan
t/03-failover.t view on Meta::CPAN
}
# Wait for all replicas to be running
sub wait_for_replicas {
my $max_attempts = shift || 60;
for my $i ( 1 .. $max_attempts ) {
my $info = get_cluster_info();
next unless $info;
# Count nodes that are running or streaming (replicas in sync)
my @ready =
grep { $_->{state} eq 'running' || $_->{state} eq 'streaming' }
@{ $info->{members} };
if ( @ready >= 3 ) {
diag("All 3 nodes are ready");
return 1;
}
# Show all states for debugging
my $states =
join( ", ", map { "$_->{name}:$_->{state}" } @{ $info->{members} } );
t/03-failover.t view on Meta::CPAN
# Get cluster state and trigger failover
my $info = get_cluster_info();
my $old_leader = $info->{leader}{host};
diag("Current leader before cached failover: $old_leader");
my @replicas = @{ $info->{replicas} };
skip "Need at least one replica for cached failover test", 4
unless @replicas;
# Find a replica that is ready (running or streaming)
my ($ready_replica) =
grep { $_->{state} eq 'running' || $_->{state} eq 'streaming' } @replicas;
skip "No ready replica for failover", 4 unless $ready_replica;
my $new_leader = $ready_replica->{name};
diag("Triggering failover to: $new_leader");
my $failover_ok = trigger_failover($new_leader);
ok( $failover_ok, 'Failover triggered for cached test' );
# Wait for failover
t/03-failover.t view on Meta::CPAN
$dbh->disconnect;
};
# Test 6: Verify cluster state (informational - cluster may still be recovering)
subtest 'Verify cluster state after tests' => sub {
my $info = get_cluster_info();
ok( $info, 'Cluster is accessible' );
ok( $info->{leader}, 'Cluster has a leader' );
# Count running or streaming nodes
my $ready = grep { $_->{state} eq 'running' || $_->{state} eq 'streaming' }
@{ $info->{members} };
diag("Final cluster state:");
diag( " Leader: " . $info->{leader}{host} );
diag(" Ready members: $ready");
for my $m ( @{ $info->{members} } ) {
diag(" $m->{name}: $m->{state}");
}
# After failover, some nodes may still be recovering - just check we have a leader
( run in 0.473 second using v1.01-cache-2.11-cpan-140bd7fdf52 )