Skip to content

Commit 035eba6

Browse files
committed
ref(scheduler): use observedGeneration instead of resourceVersion for RC readiness
https://github.com/kubernetes/kubernetes/blob/master/docs/devel/api-conventions.md#metadata explains the resourceVersion and generation pretty well resourceVersion is the internal version representation where as generation deals with desired state Some resources report the observedGeneration, which is the generation most recently observed by the component responsible for acting upon changes to the desired state of the resource. This can be used, for instance, to ensure that the reported status reflects the most recent desired status.
1 parent 3d901bf commit 035eba6

1 file changed

Lines changed: 9 additions & 17 deletions

File tree

rootfs/scheduler/__init__.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -930,20 +930,7 @@ def _scale_rc(self, namespace, name, desired):
930930
logger.info("scaling RC {} in Namespace {} from {} to {} replicas".format(name, namespace, current, desired)) # noqa
931931

932932
self._update_rc(namespace, name, rc)
933-
934-
resource_ver = rc['metadata']['resourceVersion']
935-
logger.info("waiting for RC {} to get a newer resource version than {} (30s timeout)".format(name, resource_ver)) # noqa
936-
for waited in range(30):
937-
js_template = self._get_rc(namespace, name).json()
938-
if js_template["metadata"]["resourceVersion"] != resource_ver:
939-
break
940-
941-
if waited > 0 and (waited % 10) == 0:
942-
logger.info("waited {}s so far for a new resource version".format(waited))
943-
944-
time.sleep(1)
945-
946-
logger.info("RC {} has a new resource version {}".format(name, js_template["metadata"]["resourceVersion"])) # noqa
933+
self._wait_for_rc_ready(namespace, name)
947934

948935
# Get application container
949936
container_name = '{}-{}'.format(
@@ -1032,16 +1019,21 @@ def _create_rc(self, namespace, name, image, command, **kwargs): # noqa
10321019

10331020
def _wait_for_rc_ready(self, namespace, name):
10341021
"""
1035-
Waits for status/observedGeneration and metadata/generation to match
1036-
Indicates RC is ready
1022+
Looks at status/observedGeneration and metadata/generation and
1023+
waits for observedGeneration >= generation to happen, indicates RC is ready
1024+
1025+
More information is also available at:
1026+
https://github.com/kubernetes/kubernetes/blob/master/docs/devel/api-conventions.md#metadata
10371027
"""
1028+
logger.debug("waiting for ReplicationController {} to get a newer generation (30s timeout)".format(name)) # noqa
10381029
for _ in range(30):
10391030
try:
10401031
rc = self._get_rc(namespace, name).json()
10411032
if (
10421033
"observedGeneration" in rc["status"] and
1043-
rc["metadata"]["generation"] == rc["status"]["observedGeneration"]
1034+
rc["status"]["observedGeneration"] >= rc["metadata"]["generation"]
10441035
):
1036+
logger.debug("ReplicationController {} got a newer generation (30s timeout)".format(name)) # noqa
10451037
break
10461038

10471039
time.sleep(1)

0 commit comments

Comments
 (0)