Make image updates independent

If we're missing an image, only rebuild that one image.

Change-Id: Id27b1351469e65ebe0fc29f2e962ddf04aded5d9
This commit is contained in:
James E. Blair 2013-10-10 14:37:49 -07:00
parent b2367d88a6
commit 6d5b40ce6e
2 changed files with 16 additions and 18 deletions

View File

@ -126,12 +126,7 @@ class NodePoolCmd(object):
image = provider.images[self.args.image]
with self.pool.getDB().getSession() as session:
snap_image = session.createSnapshotImage(
provider_name=provider.name,
image_name=image.name)
t = nodepool.ImageUpdater(self.pool, provider, image,
snap_image.id)
t.start()
t = self.updateImage(session, provider, image)
t.join()
def alien_list(self):

View File

@ -961,7 +961,6 @@ class NodePool(threading.Thread):
def checkForMissingImages(self, session):
# If we are missing an image, run the image update function
# outside of its schedule.
missing = False
for target in self.config.targets.values():
for image in target.images.values():
for provider in image.providers.values():
@ -975,9 +974,7 @@ class NodePool(threading.Thread):
if not found:
self.log.warning("Missing image %s on %s" %
(image.name, provider.name))
missing = True
if missing:
self.updateImages(session)
self.updateImage(session, provider, image)
def _doUpdateImages(self):
try:
@ -991,14 +988,20 @@ class NodePool(threading.Thread):
# images.
for provider in self.config.providers.values():
for image in provider.images.values():
snap_image = session.createSnapshotImage(
provider_name=provider.name,
image_name=image.name)
t = ImageUpdater(self, provider, image, snap_image.id)
t.start()
# Enough time to give them different timestamps (versions)
# Just to keep things clearer.
time.sleep(2)
self.updateImage(session, provider, image)
def updateImage(self, session, provider, image):
provider = self.config.providers[provider.name]
image = provider.images[image.name]
snap_image = session.createSnapshotImage(
provider_name=provider.name,
image_name=image.name)
t = ImageUpdater(self, provider, image, snap_image.id)
t.start()
# Enough time to give them different timestamps (versions)
# Just to keep things clearer.
time.sleep(2)
return t
def launchNode(self, session, provider, image, target):
provider = self.config.providers[provider.name]