in mysqloperator/controller/group_monitor.py [0:0]
def on_view_change(self, view_id: Optional[str]) -> None:
members = shellutils.query_members(self.session)
self.handler(self.cluster, members, view_id != self.last_view_id)
self.last_view_id = view_id
primary = None
force_reconnect = False
for member_id, role, status, view_id, endpoint, version in members:
if self.last_primary_id == member_id and role != "PRIMARY":
force_reconnect = True
break
if role == "PRIMARY" and not primary:
primary = member_id
self.last_primary_id = primary
# force reconnection if the PRIMARY changed or we're not connected to the PRIMARY
if self.target_not_primary or force_reconnect:
self.logger.info(f"PRIMARY changed for {self.cluster.namespace}/{self.cluster.name}")
if self.session:
self.session.close()
self.session = None