@@ -1643,35 +1643,48 @@ impl PoolCoordinator {
1643
1643
1644
1644
let mut pconn = primary. get ( ) . map_err ( |_| StoreError :: DatabaseUnavailable ) ?;
1645
1645
1646
- let pools : Vec < _ > = states
1646
+ let states : Vec < _ > = states
1647
1647
. into_iter ( )
1648
1648
. filter ( |pool| pool. needs_setup ( ) )
1649
1649
. collect ( ) ;
1650
+ if states. is_empty ( ) {
1651
+ return Ok ( 0 ) ;
1652
+ }
1650
1653
1651
1654
// Everything here happens under the migration lock. Anything called
1652
1655
// from here should not try to get that lock, otherwise the process
1653
1656
// will deadlock
1654
1657
debug ! ( self . logger, "Waiting for migration lock" ) ;
1655
1658
let res = with_migration_lock ( & mut pconn, |_| async {
1656
1659
debug ! ( self . logger, "Migration lock acquired" ) ;
1660
+
1661
+ // While we were waiting for the migration lock, another thread
1662
+ // might have already run this
1663
+ let states: Vec < _ > = states
1664
+ . into_iter ( )
1665
+ . filter ( |pool| pool. needs_setup ( ) )
1666
+ . collect ( ) ;
1667
+ if states. is_empty ( ) {
1668
+ debug ! ( self . logger, "No pools to set up" ) ;
1669
+ return Ok ( 0 ) ;
1670
+ }
1671
+
1657
1672
primary. drop_cross_shard_views ( ) ?;
1658
1673
1659
- let migrated = migrate ( & pools , self . servers . as_ref ( ) ) . await ?;
1674
+ let migrated = migrate ( & states , self . servers . as_ref ( ) ) . await ?;
1660
1675
1661
1676
let propagated = propagate ( & self , migrated) . await ?;
1662
1677
1663
1678
primary. create_cross_shard_views ( & self . servers ) ?;
1664
- Ok ( propagated)
1665
- } )
1666
- . await ;
1667
- debug ! ( self . logger, "Database setup finished" ) ;
1668
1679
1669
- // Mark all pool states that we set up completely as ready
1670
- res. map ( |states| {
1671
- for state in & states {
1680
+ for state in & propagated {
1672
1681
state. set_ready ( ) ;
1673
1682
}
1674
- states . len ( )
1683
+ Ok ( propagated . len ( ) )
1675
1684
} )
1685
+ . await ;
1686
+ debug ! ( self . logger, "Database setup finished" ) ;
1687
+
1688
+ res
1676
1689
}
1677
1690
}
0 commit comments