From ae03653afcbbe1ef74b9c2f603caf4c3f2071e2a Mon Sep 17 00:00:00 2001 From: Ann Kamyshnikova Date: Fri, 6 Mar 2020 15:20:50 +0400 Subject: [PATCH] Pick stale amphora randomly Avoid getting the same amphora all the time if its loadbalancer stuck in PENDING state and could not be failovered. Story: 2007340 Task: 38877 Change-Id: I2f680a00be695c3828166e6803882765af79b79e (cherry picked from commit 0f7d03feca4e3a4796c9c1a5a55d8da2adc44ebd) --- octavia/db/repositories.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/octavia/db/repositories.py b/octavia/db/repositories.py index 650bf923c3..e1e1bbfbde 100644 --- a/octavia/db/repositories.py +++ b/octavia/db/repositories.py @@ -30,6 +30,7 @@ from oslo_utils import uuidutils from sqlalchemy.orm import joinedload from sqlalchemy.orm import noload from sqlalchemy.orm import subqueryload +from sqlalchemy.sql import func from octavia.common import constants as consts from octavia.common import data_models @@ -1466,7 +1467,8 @@ class AmphoraHealthRepository(BaseRepository): amp = session.query(self.model_class).with_for_update().filter_by( busy=False).filter( - self.model_class.last_update < expired_time).first() + self.model_class.last_update < expired_time).order_by( + func.random()).first() if amp is None: return None