Merge "Update references of build "number" to "id""
This commit is contained in:
commit
b2c6017d34
@ -548,7 +548,7 @@ class CleanupWorker(BaseWorker):
|
||||
# images. We're about to start deleting files, so
|
||||
# make sure that the dib image state reflects that.
|
||||
if build.state != zk.DELETING:
|
||||
with self._zk.imageBuildNumberLock(
|
||||
with self._zk.imageBuildIdLock(
|
||||
image, build.id, blocking=False
|
||||
):
|
||||
build.state = zk.DELETING
|
||||
|
@ -266,7 +266,7 @@ class NodePoolCmd(NodepoolApp):
|
||||
uploads = []
|
||||
for image in provider.diskimages:
|
||||
# Build list of provider images as recorded in ZK
|
||||
for bnum in self.zk.getBuildNumbers(image):
|
||||
for bnum in self.zk.getBuildIds(image):
|
||||
uploads.extend(
|
||||
self.zk.getUploads(image, bnum,
|
||||
provider.name,
|
||||
@ -325,8 +325,8 @@ class NodePoolCmd(NodepoolApp):
|
||||
self.list(node_id=node.id)
|
||||
|
||||
def dib_image_delete(self):
|
||||
(image, build_num) = self.args.id.rsplit('-', 1)
|
||||
build = self.zk.getBuild(image, build_num)
|
||||
(image, build_id) = self.args.id.rsplit('-', 1)
|
||||
build = self.zk.getBuild(image, build_id)
|
||||
if not build:
|
||||
print("Build %s not found" % self.args.id)
|
||||
return
|
||||
|
@ -204,7 +204,7 @@ def dib_image_list(zk):
|
||||
for image_name in zk.getImageNames():
|
||||
image_paused[image_name] = \
|
||||
zk.getImagePaused(image_name)
|
||||
for build_no in zk.getBuildNumbers(image_name):
|
||||
for build_no in zk.getBuildIds(image_name):
|
||||
build = zk.getBuild(image_name, build_no)
|
||||
if build:
|
||||
builds.append(build)
|
||||
@ -263,7 +263,7 @@ def image_list(zk):
|
||||
uploads = zk.getCachedImageUploads()
|
||||
else:
|
||||
for image_name in zk.getImageNames():
|
||||
for build_no in zk.getBuildNumbers(image_name):
|
||||
for build_no in zk.getBuildIds(image_name):
|
||||
for provider in zk.getBuildProviders(image_name, build_no):
|
||||
for upload_no in zk.getImageUploadNumbers(
|
||||
image_name, build_no, provider):
|
||||
|
@ -673,7 +673,7 @@ class DBTestCase(BaseTestCase):
|
||||
self.waitForConfig(pool)
|
||||
actual_uploads = set()
|
||||
for image_name in self.zk.getImageNames():
|
||||
for build_no in self.zk.getBuildNumbers(image_name):
|
||||
for build_no in self.zk.getBuildIds(image_name):
|
||||
for provider in self.zk.getBuildProviders(
|
||||
image_name, build_no):
|
||||
for upload_no in self.zk.getImageUploadNumbers(
|
||||
|
@ -112,29 +112,29 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
with self.zk.imageBuildLock(image, blocking=True, timeout=1):
|
||||
pass
|
||||
|
||||
def test_imageBuildNumberLock(self):
|
||||
path = self.zk._imageBuildNumberLockPath("ubuntu-trusty", "0000")
|
||||
with self.zk.imageBuildNumberLock(
|
||||
def test_imageBuildIdLock(self):
|
||||
path = self.zk._imageBuildIdLockPath("ubuntu-trusty", "0000")
|
||||
with self.zk.imageBuildIdLock(
|
||||
"ubuntu-trusty", "0000", blocking=False
|
||||
):
|
||||
self.assertIsNotNone(self.zk.kazoo_client.exists(path))
|
||||
|
||||
def test_imageBuildNumberLock_exception_nonblocking(self):
|
||||
def test_imageBuildIdLock_exception_nonblocking(self):
|
||||
image = "ubuntu-trusty"
|
||||
bnum = "0000000000"
|
||||
with self.zk.imageBuildNumberLock(image, bnum, blocking=False):
|
||||
with self.zk.imageBuildIdLock(image, bnum, blocking=False):
|
||||
with testtools.ExpectedException(
|
||||
npe.ZKLockException, "Did not get lock on .*"
|
||||
):
|
||||
with self.zk.imageBuildNumberLock(image, bnum, blocking=False):
|
||||
with self.zk.imageBuildIdLock(image, bnum, blocking=False):
|
||||
pass
|
||||
|
||||
def test_imageBuildNumberLock_exception_blocking(self):
|
||||
def test_imageBuildIdLock_exception_blocking(self):
|
||||
image = "ubuntu-trusty"
|
||||
bnum = "0000000000"
|
||||
with self.zk.imageBuildNumberLock(image, bnum, blocking=False):
|
||||
with self.zk.imageBuildIdLock(image, bnum, blocking=False):
|
||||
with testtools.ExpectedException(npe.TimeoutException):
|
||||
with self.zk.imageBuildNumberLock(
|
||||
with self.zk.imageBuildIdLock(
|
||||
image, bnum, blocking=True, timeout=1
|
||||
):
|
||||
pass
|
||||
@ -271,22 +271,22 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
orig_data.builder_id = 'ABC-123'
|
||||
orig_data.state = zk.READY
|
||||
with self.zk.imageBuildLock(image, blocking=True, timeout=1):
|
||||
build_num = self.zk.storeBuild(image, orig_data)
|
||||
build_id = self.zk.storeBuild(image, orig_data)
|
||||
|
||||
data = self.zk.getBuild(image, build_num)
|
||||
data = self.zk.getBuild(image, build_id)
|
||||
self.assertEqual(orig_data.builder, data.builder)
|
||||
self.assertEqual(orig_data.builder_id, data.builder_id)
|
||||
self.assertEqual(orig_data.state, data.state)
|
||||
self.assertEqual(orig_data.state_time, data.state_time)
|
||||
self.assertEqual(build_num, data.id)
|
||||
self.assertEqual(build_id, data.id)
|
||||
self.assertEqual(self.zk.getImageNames(), ["ubuntu-trusty"])
|
||||
self.assertEqual(self.zk.getBuildNumbers("ubuntu-trusty"), [build_num])
|
||||
self.assertEqual(self.zk.getBuildIds("ubuntu-trusty"), [build_id])
|
||||
|
||||
def test_getImageNames_not_found(self):
|
||||
self.assertEqual(self.zk.getImageNames(), [])
|
||||
|
||||
def test_getBuildNumbers_not_found(self):
|
||||
self.assertEqual(self.zk.getBuildNumbers("ubuntu-trusty"), [])
|
||||
def test_getBuildIds_not_found(self):
|
||||
self.assertEqual(self.zk.getBuildIds("ubuntu-trusty"), [])
|
||||
|
||||
def test_getBuildProviders_not_found(self):
|
||||
self.assertEqual(self.zk.getBuildProviders(
|
||||
@ -314,14 +314,14 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
|
||||
def test_storeImageUpload_invalid_build(self):
|
||||
image = "ubuntu-trusty"
|
||||
build_number = "0000000001"
|
||||
build_id = uuid.uuid4().hex
|
||||
provider = "rax"
|
||||
orig_data = zk.ImageUpload()
|
||||
|
||||
with testtools.ExpectedException(
|
||||
npe.ZKException, "Cannot find build .*"
|
||||
):
|
||||
self.zk.storeImageUpload(image, build_number, provider, orig_data)
|
||||
self.zk.storeImageUpload(image, build_id, provider, orig_data)
|
||||
|
||||
def test_store_and_get_image_upload(self):
|
||||
image = "ubuntu-trusty"
|
||||
@ -331,10 +331,10 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
orig_data.state = zk.READY
|
||||
orig_data.format = "qcow2"
|
||||
|
||||
build_number = self.zk.storeBuild(image, zk.ImageBuild())
|
||||
upload_id = self.zk.storeImageUpload(image, build_number, provider,
|
||||
build_id = self.zk.storeBuild(image, zk.ImageBuild())
|
||||
upload_id = self.zk.storeImageUpload(image, build_id, provider,
|
||||
orig_data)
|
||||
data = self.zk.getImageUpload(image, build_number, provider, upload_id)
|
||||
data = self.zk.getImageUpload(image, build_id, provider, upload_id)
|
||||
|
||||
self.assertEqual(upload_id, data.id)
|
||||
self.assertEqual(orig_data.external_id, data.external_id)
|
||||
@ -342,10 +342,10 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
self.assertEqual(orig_data.state_time, data.state_time)
|
||||
self.assertEqual(orig_data.format, data.format)
|
||||
self.assertEqual(self.zk.getBuildProviders("ubuntu-trusty",
|
||||
build_number),
|
||||
build_id),
|
||||
[provider])
|
||||
self.assertEqual(self.zk.getImageUploadNumbers("ubuntu-trusty",
|
||||
build_number,
|
||||
build_id,
|
||||
provider),
|
||||
[upload_id])
|
||||
|
||||
@ -364,20 +364,20 @@ class TestZooKeeper(tests.DBTestCase):
|
||||
|
||||
def test_buildLock_orphan(self):
|
||||
image = "ubuntu-trusty"
|
||||
build_number = "0000000003"
|
||||
build_id = uuid.uuid4().hex
|
||||
|
||||
path = self.zk._imageBuildNumberLockPath(image, build_number)
|
||||
path = self.zk._imageBuildIdLockPath(image, build_id)
|
||||
|
||||
# Pretend we still think the image build exists
|
||||
# (e.g. multiple cleanup workers itertating over builds)
|
||||
with self.zk.imageBuildNumberLock(image, build_number, blocking=False):
|
||||
# We now created an empty build number node
|
||||
with self.zk.imageBuildIdLock(image, build_id, blocking=False):
|
||||
# We now created an empty build id node
|
||||
pass
|
||||
|
||||
self.assertIsNotNone(self.zk.kazoo_client.exists(path))
|
||||
|
||||
# Should not throw an exception because of the empty upload
|
||||
self.assertIsNone(self.zk.getBuild(image, build_number))
|
||||
self.assertIsNone(self.zk.getBuild(image, build_id))
|
||||
|
||||
def test_getMostRecentBuilds(self):
|
||||
image = "ubuntu-trusty"
|
||||
|
@ -1085,17 +1085,17 @@ class ImageCache(NodepoolTreeCache):
|
||||
|
||||
def objectFromDict(self, d, key):
|
||||
if len(key) == 4:
|
||||
image, build_number, provider, upload_number = key
|
||||
image, build_id, provider, upload_number = key
|
||||
return ImageUpload.fromDict(d,
|
||||
build_number,
|
||||
build_id,
|
||||
provider,
|
||||
image,
|
||||
upload_number)
|
||||
elif len(key) == 2:
|
||||
image, build_number = key
|
||||
image, build_id = key
|
||||
return ImageBuild.fromDict(d,
|
||||
image,
|
||||
build_number)
|
||||
build_id)
|
||||
elif len(key) == 1:
|
||||
image = key[0]
|
||||
return Image(image)
|
||||
@ -1276,8 +1276,8 @@ class ZooKeeper(ZooKeeperBase):
|
||||
image = parts[1]
|
||||
return (image,)
|
||||
|
||||
def _imageBuildNumberPath(self, image, build_number):
|
||||
return "%s/%s" % (self._imageBuildsPath(image), build_number)
|
||||
def _imageBuildIdPath(self, image, build_id):
|
||||
return "%s/%s" % (self._imageBuildsPath(image), build_id)
|
||||
|
||||
def _parseImageBuildPath(self, path):
|
||||
if not path.startswith(self.IMAGE_ROOT):
|
||||
@ -1295,16 +1295,16 @@ class ZooKeeper(ZooKeeperBase):
|
||||
def _imageBuildLockPath(self, image):
|
||||
return "%s/lock" % self._imageBuildsPath(image)
|
||||
|
||||
def _imageBuildNumberLockPath(self, image, build_number):
|
||||
return "%s/lock" % self._imageBuildNumberPath(image, build_number)
|
||||
def _imageBuildIdLockPath(self, image, build_id):
|
||||
return "%s/lock" % self._imageBuildIdPath(image, build_id)
|
||||
|
||||
def _imageProviderPath(self, image, build_number):
|
||||
def _imageProviderPath(self, image, build_id):
|
||||
return "%s/%s/providers" % (self._imageBuildsPath(image),
|
||||
build_number)
|
||||
build_id)
|
||||
|
||||
def _imageUploadPath(self, image, build_number, provider):
|
||||
def _imageUploadPath(self, image, build_id, provider):
|
||||
return "%s/%s/providers/%s/images" % (self._imageBuildsPath(image),
|
||||
build_number,
|
||||
build_id,
|
||||
provider)
|
||||
|
||||
def _parseImageUploadPath(self, path):
|
||||
@ -1322,14 +1322,14 @@ class ZooKeeper(ZooKeeperBase):
|
||||
upload = parts[7]
|
||||
return image, build, provider, upload
|
||||
|
||||
def _imageUploadLockPath(self, image, build_number, provider):
|
||||
return "%s/lock" % self._imageUploadPath(image, build_number,
|
||||
def _imageUploadLockPath(self, image, build_id, provider):
|
||||
return "%s/lock" % self._imageUploadPath(image, build_id,
|
||||
provider)
|
||||
|
||||
def _imageUploadNumberLockPath(self, image, build_number, provider,
|
||||
def _imageUploadNumberLockPath(self, image, build_id, provider,
|
||||
upload_number):
|
||||
return "%s/%s/lock" % (
|
||||
self._imageUploadPath(image, build_number, provider),
|
||||
self._imageUploadPath(image, build_id, provider),
|
||||
upload_number)
|
||||
|
||||
def _launcherPath(self, launcher):
|
||||
@ -1406,9 +1406,9 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return lock
|
||||
|
||||
def _getImageBuildNumberLock(self, image, build_number,
|
||||
blocking=True, timeout=None):
|
||||
lock_path = self._imageBuildNumberLockPath(image, build_number)
|
||||
def _getImageBuildIdLock(self, image, build_id,
|
||||
blocking=True, timeout=None):
|
||||
lock_path = self._imageBuildIdLockPath(image, build_id)
|
||||
try:
|
||||
lock = Lock(self.kazoo_client, lock_path)
|
||||
have_lock = lock.acquire(blocking, timeout)
|
||||
@ -1417,8 +1417,8 @@ class ZooKeeper(ZooKeeperBase):
|
||||
"Timeout trying to acquire lock %s" % lock_path)
|
||||
except kze.NoNodeError:
|
||||
have_lock = False
|
||||
self.log.error("Image build number not found for locking: %s, %s",
|
||||
build_number, image)
|
||||
self.log.error("Image build id not found for locking: %s, %s",
|
||||
build_id, image)
|
||||
|
||||
# If we aren't blocking, it's possible we didn't get the lock
|
||||
# because someone else has it.
|
||||
@ -1427,9 +1427,9 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return lock
|
||||
|
||||
def _getImageUploadNumberLock(self, image, build_number, provider,
|
||||
def _getImageUploadNumberLock(self, image, build_id, provider,
|
||||
upload_number, blocking=True, timeout=None):
|
||||
lock_path = self._imageUploadNumberLockPath(image, build_number,
|
||||
lock_path = self._imageUploadNumberLockPath(image, build_id,
|
||||
provider, upload_number)
|
||||
try:
|
||||
lock = Lock(self.kazoo_client, lock_path)
|
||||
@ -1441,7 +1441,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
have_lock = False
|
||||
self.log.error("Image upload number %s not found for locking: "
|
||||
"%s, %s, %s",
|
||||
upload_number, build_number, provider, image)
|
||||
upload_number, build_id, provider, image)
|
||||
|
||||
# If we aren't blocking, it's possible we didn't get the lock
|
||||
# because someone else has it.
|
||||
@ -1450,9 +1450,9 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return lock
|
||||
|
||||
def _getImageUploadLock(self, image, build_number, provider,
|
||||
def _getImageUploadLock(self, image, build_id, provider,
|
||||
blocking=True, timeout=None):
|
||||
lock_path = self._imageUploadLockPath(image, build_number, provider)
|
||||
lock_path = self._imageUploadLockPath(image, build_id, provider)
|
||||
try:
|
||||
lock = Lock(self.kazoo_client, lock_path)
|
||||
have_lock = lock.acquire(blocking, timeout)
|
||||
@ -1462,7 +1462,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
except kze.NoNodeError:
|
||||
have_lock = False
|
||||
self.log.error("Image upload not found for locking: %s, %s, %s",
|
||||
build_number, provider, image)
|
||||
build_id, provider, image)
|
||||
|
||||
# If we aren't blocking, it's possible we didn't get the lock
|
||||
# because someone else has it.
|
||||
@ -1540,17 +1540,17 @@ class ZooKeeper(ZooKeeperBase):
|
||||
lock.release()
|
||||
|
||||
@contextmanager
|
||||
def imageBuildNumberLock(self, image, build_number,
|
||||
blocking=True, timeout=None):
|
||||
def imageBuildIdLock(self, image, build_id,
|
||||
blocking=True, timeout=None):
|
||||
'''
|
||||
Context manager to use for locking _specific_ image builds.
|
||||
|
||||
Obtains a write lock for the specified image build number. This is
|
||||
used for locking a build number during the cleanup phase of the
|
||||
Obtains a write lock for the specified image build id. This is
|
||||
used for locking a build id during the cleanup phase of the
|
||||
builder.
|
||||
|
||||
:param str image: Name of the image
|
||||
:param str build_number: The image build number to lock.
|
||||
:param str build_id: The image build id to lock.
|
||||
:param bool blocking: Whether or not to block on trying to
|
||||
acquire the lock
|
||||
:param int timeout: When blocking, how long to wait for the lock
|
||||
@ -1562,15 +1562,15 @@ class ZooKeeper(ZooKeeperBase):
|
||||
'''
|
||||
lock = None
|
||||
try:
|
||||
lock = self._getImageBuildNumberLock(image, build_number,
|
||||
blocking, timeout)
|
||||
lock = self._getImageBuildIdLock(image, build_id,
|
||||
blocking, timeout)
|
||||
yield
|
||||
finally:
|
||||
if lock:
|
||||
lock.release()
|
||||
|
||||
@contextmanager
|
||||
def imageUploadLock(self, image, build_number, provider,
|
||||
def imageUploadLock(self, image, build_id, provider,
|
||||
blocking=True, timeout=None):
|
||||
'''
|
||||
Context manager to use for locking image uploads.
|
||||
@ -1578,7 +1578,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
Obtains a write lock for the specified image upload.
|
||||
|
||||
:param str image: Name of the image.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param bool blocking: Whether or not to block on trying to
|
||||
acquire the lock
|
||||
@ -1591,7 +1591,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
'''
|
||||
lock = None
|
||||
try:
|
||||
lock = self._getImageUploadLock(image, build_number, provider,
|
||||
lock = self._getImageUploadLock(image, build_id, provider,
|
||||
blocking, timeout)
|
||||
yield
|
||||
finally:
|
||||
@ -1683,13 +1683,13 @@ class ZooKeeper(ZooKeeperBase):
|
||||
except kze.NoNodeError:
|
||||
pass
|
||||
|
||||
def getBuildNumbers(self, image):
|
||||
def getBuildIds(self, image):
|
||||
'''
|
||||
Retrieve the builds available for an image.
|
||||
|
||||
:param str image: The image name.
|
||||
|
||||
:returns: A list of image build numbers or the empty list.
|
||||
:returns: A list of image build ids or the empty list.
|
||||
'''
|
||||
path = self._imageBuildsPath(image)
|
||||
|
||||
@ -1700,17 +1700,17 @@ class ZooKeeper(ZooKeeperBase):
|
||||
builds = [x for x in builds if x != 'lock']
|
||||
return builds
|
||||
|
||||
def getBuildProviders(self, image, build_number):
|
||||
def getBuildProviders(self, image, build_id):
|
||||
'''
|
||||
Retrieve the providers which have uploads for an image build.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
|
||||
:returns: A list of provider names or the empty list.
|
||||
|
||||
'''
|
||||
path = self._imageProviderPath(image, build_number)
|
||||
path = self._imageProviderPath(image, build_id)
|
||||
|
||||
try:
|
||||
providers = self.kazoo_client.get_children(path)
|
||||
@ -1719,18 +1719,18 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return sorted(providers)
|
||||
|
||||
def getImageUploadNumbers(self, image, build_number, provider):
|
||||
def getImageUploadNumbers(self, image, build_id, provider):
|
||||
'''
|
||||
Retrieve upload numbers for a provider and image build.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
|
||||
:returns: A list of upload numbers or the empty list.
|
||||
|
||||
'''
|
||||
path = self._imageUploadPath(image, build_number, provider)
|
||||
path = self._imageUploadPath(image, build_id, provider)
|
||||
|
||||
try:
|
||||
uploads = self.kazoo_client.get_children(path)
|
||||
@ -1740,16 +1740,16 @@ class ZooKeeper(ZooKeeperBase):
|
||||
uploads = [x for x in uploads if x != 'lock']
|
||||
return uploads
|
||||
|
||||
def getBuild(self, image, build_number):
|
||||
def getBuild(self, image, build_id):
|
||||
'''
|
||||
Retrieve the image build data.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
|
||||
:returns: An ImageBuild object, or None if not found.
|
||||
'''
|
||||
path = self._imageBuildsPath(image) + "/%s" % build_number
|
||||
path = self._imageBuildsPath(image) + "/%s" % build_id
|
||||
|
||||
try:
|
||||
data, stat = self.kazoo_client.get(path)
|
||||
@ -1758,7 +1758,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
try:
|
||||
d = ImageBuild.fromDict(self._bytesToDict(data),
|
||||
image, build_number)
|
||||
image, build_id)
|
||||
except json.decoder.JSONDecodeError:
|
||||
self.log.exception('Error loading json data from image build %s',
|
||||
path)
|
||||
@ -1832,7 +1832,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
builds.sort(key=lambda x: x.state_time, reverse=True)
|
||||
return builds[:count]
|
||||
|
||||
def storeBuild(self, image, build_data, build_number=None):
|
||||
def storeBuild(self, image, build_data, build_id=None):
|
||||
'''
|
||||
Store the image build data.
|
||||
|
||||
@ -1841,40 +1841,40 @@ class ZooKeeper(ZooKeeperBase):
|
||||
The build data is expected to be represented as a dict. This dict may
|
||||
contain any data, as appropriate.
|
||||
|
||||
If a build number is not supplied, then a new build node/number is
|
||||
created. The new build number is available in the return value.
|
||||
If a build id is not supplied, then a new build node/id is
|
||||
created. The new build id is available in the return value.
|
||||
|
||||
.. important: You should have the image locked before calling this
|
||||
method.
|
||||
|
||||
:param str image: The image name for which we have data.
|
||||
:param ImageBuild build_data: The build data.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
|
||||
:returns: A string for the build number that was updated.
|
||||
:returns: A string for the build id that was updated.
|
||||
'''
|
||||
# Append trailing / so the sequence node is created as a child node.
|
||||
build_path = self._imageBuildsPath(image) + "/"
|
||||
|
||||
if build_number is None:
|
||||
build_number = uuid.uuid4().hex
|
||||
path = build_path + build_number
|
||||
if build_id is None:
|
||||
build_id = uuid.uuid4().hex
|
||||
path = build_path + build_id
|
||||
self.kazoo_client.create(
|
||||
path,
|
||||
value=build_data.serialize(),
|
||||
makepath=True)
|
||||
else:
|
||||
path = build_path + build_number
|
||||
path = build_path + build_id
|
||||
self.kazoo_client.set(path, build_data.serialize())
|
||||
|
||||
return build_number
|
||||
return build_id
|
||||
|
||||
def getImageUpload(self, image, build_number, provider, upload_number):
|
||||
def getImageUpload(self, image, build_id, provider, upload_number):
|
||||
'''
|
||||
Retrieve the image upload data.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param str upload_number: The image upload number.
|
||||
|
||||
@ -1882,7 +1882,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
:raises: ZKException if the image upload path is not found.
|
||||
'''
|
||||
path = self._imageUploadPath(image, build_number, provider)
|
||||
path = self._imageUploadPath(image, build_id, provider)
|
||||
path = path + "/%s" % upload_number
|
||||
|
||||
try:
|
||||
@ -1892,7 +1892,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
try:
|
||||
d = ImageUpload.fromDict(self._bytesToDict(data),
|
||||
build_number,
|
||||
build_id,
|
||||
provider,
|
||||
image,
|
||||
upload_number)
|
||||
@ -1903,12 +1903,12 @@ class ZooKeeper(ZooKeeperBase):
|
||||
d.stat = stat
|
||||
return d
|
||||
|
||||
def getUploads(self, image, build_number, provider, states=None):
|
||||
def getUploads(self, image, build_id, provider, states=None):
|
||||
'''
|
||||
Retrieve all image upload data matching any given states.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param list states: A list of upload state values to match against.
|
||||
A value of None will disable state matching and just return
|
||||
@ -1916,7 +1916,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
:returns: A list of ImageUpload objects.
|
||||
'''
|
||||
path = self._imageUploadPath(image, build_number, provider)
|
||||
path = self._imageUploadPath(image, build_id, provider)
|
||||
|
||||
try:
|
||||
uploads = self.kazoo_client.get_children(path)
|
||||
@ -1927,7 +1927,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
for upload in uploads:
|
||||
if upload == 'lock':
|
||||
continue
|
||||
data = self.getImageUpload(image, build_number, provider, upload)
|
||||
data = self.getImageUpload(image, build_id, provider, upload)
|
||||
if not data:
|
||||
continue
|
||||
if states is None:
|
||||
@ -1937,7 +1937,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return matches
|
||||
|
||||
def getMostRecentBuildImageUploads(self, count, image, build_number,
|
||||
def getMostRecentBuildImageUploads(self, count, image, build_id,
|
||||
provider, state=None):
|
||||
'''
|
||||
Retrieve the most recent image upload data with the given state.
|
||||
@ -1945,7 +1945,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
:param int count: A count of the most recent uploads to return.
|
||||
Use None for all uploads.
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param str state: The image upload state to match on. Use None to
|
||||
ignore state.
|
||||
@ -1958,7 +1958,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
if state:
|
||||
states = [state]
|
||||
|
||||
uploads = self.getUploads(image, build_number, provider, states)
|
||||
uploads = self.getUploads(image, build_id, provider, states)
|
||||
if not uploads:
|
||||
return []
|
||||
|
||||
@ -1983,8 +1983,8 @@ class ZooKeeper(ZooKeeperBase):
|
||||
if cached:
|
||||
uploads = self.getCachedImageUploads()
|
||||
else:
|
||||
for build_number in self.getBuildNumbers(image):
|
||||
path = self._imageUploadPath(image, build_number, provider)
|
||||
for build_id in self.getBuildIds(image):
|
||||
path = self._imageUploadPath(image, build_id, provider)
|
||||
try:
|
||||
upload_numbers = self.kazoo_client.get_children(path)
|
||||
except kze.NoNodeError:
|
||||
@ -1994,7 +1994,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
if upload_number == 'lock': # skip the upload lock node
|
||||
continue
|
||||
data = self.getImageUpload(
|
||||
image, build_number, provider, upload_number)
|
||||
image, build_id, provider, upload_number)
|
||||
if not data or data.state != state:
|
||||
continue
|
||||
uploads.append(data)
|
||||
@ -2023,7 +2023,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
raise RuntimeError("Caching not enabled")
|
||||
return self._image_cache.getUploads()
|
||||
|
||||
def storeImageUpload(self, image, build_number, provider, image_data,
|
||||
def storeImageUpload(self, image, build_id, provider, image_data,
|
||||
upload_number=None):
|
||||
'''
|
||||
Store the built image's upload data for the given provider.
|
||||
@ -2038,7 +2038,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
return value.
|
||||
|
||||
:param str image: The image name for which we have data.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param ImageUpload image_data: The image data we want to store.
|
||||
:param str upload_number: The image upload number to update.
|
||||
@ -2051,14 +2051,14 @@ class ZooKeeper(ZooKeeperBase):
|
||||
build_path = self._imageBuildsPath(image)
|
||||
if not self.kazoo_client.exists(build_path):
|
||||
raise npe.ZKException(
|
||||
"Cannot find build %s of image %s" % (build_number, image)
|
||||
"Cannot find build %s of image %s" % (build_id, image)
|
||||
)
|
||||
|
||||
# Generate a path for the upload. This doesn't have to exist yet
|
||||
# since we'll create new provider/upload ID znodes automatically.
|
||||
# Append trailing / so the sequence node is created as a child node.
|
||||
upload_path = self._imageUploadPath(
|
||||
image, build_number, provider) + "/"
|
||||
image, build_id, provider) + "/"
|
||||
|
||||
if upload_number is None:
|
||||
path = self.kazoo_client.create(
|
||||
@ -2087,12 +2087,12 @@ class ZooKeeper(ZooKeeperBase):
|
||||
return False
|
||||
|
||||
def _latestImageBuildStat(self, image):
|
||||
builds = self.getBuildNumbers(image)
|
||||
builds = self.getBuildIds(image)
|
||||
if not builds:
|
||||
return
|
||||
|
||||
latest_build, *_ = builds
|
||||
builds_path = self._imageBuildNumberPath(image, latest_build)
|
||||
builds_path = self._imageBuildIdPath(image, latest_build)
|
||||
return self.kazoo_client.exists(builds_path)
|
||||
|
||||
def getBuildRequest(self, image):
|
||||
@ -2143,7 +2143,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
except kze.NoNodeError:
|
||||
pass
|
||||
|
||||
def deleteBuild(self, image, build_number):
|
||||
def deleteBuild(self, image, build_id):
|
||||
'''
|
||||
Delete an image build from ZooKeeper.
|
||||
|
||||
@ -2151,17 +2151,17 @@ class ZooKeeper(ZooKeeperBase):
|
||||
node can be deleted.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number to delete.
|
||||
:param str build_id: The image build id to delete.
|
||||
|
||||
:returns: True if the build is successfully deleted or did not exist,
|
||||
False if the provider uploads still exist.
|
||||
'''
|
||||
path = self._imageBuildsPath(image)
|
||||
path = path + "/%s" % build_number
|
||||
path = path + "/%s" % build_id
|
||||
|
||||
# Verify that no upload znodes exist.
|
||||
for prov in self.getBuildProviders(image, build_number):
|
||||
if self.getImageUploadNumbers(image, build_number, prov):
|
||||
for prov in self.getBuildProviders(image, build_id):
|
||||
if self.getImageUploadNumbers(image, build_id, prov):
|
||||
return False
|
||||
|
||||
try:
|
||||
@ -2172,16 +2172,16 @@ class ZooKeeper(ZooKeeperBase):
|
||||
|
||||
return True
|
||||
|
||||
def deleteUpload(self, image, build_number, provider, upload_number):
|
||||
def deleteUpload(self, image, build_id, provider, upload_number):
|
||||
'''
|
||||
Delete an image upload from ZooKeeper.
|
||||
|
||||
:param str image: The image name.
|
||||
:param str build_number: The image build number.
|
||||
:param str build_id: The image build id.
|
||||
:param str provider: The provider name owning the image.
|
||||
:param str upload_number: The image upload number to delete.
|
||||
'''
|
||||
path = self._imageUploadPath(image, build_number, provider)
|
||||
path = self._imageUploadPath(image, build_id, provider)
|
||||
path = path + "/%s" % upload_number
|
||||
try:
|
||||
# NOTE: Need to do recursively to remove lock znodes
|
||||
@ -2834,8 +2834,8 @@ class ZooKeeper(ZooKeeperBase):
|
||||
provider_builds = {}
|
||||
image_names = self.getImageNames()
|
||||
for image in image_names:
|
||||
build_numbers = self.getBuildNumbers(image)
|
||||
for build in build_numbers:
|
||||
build_ids = self.getBuildIds(image)
|
||||
for build in build_ids:
|
||||
providers = self.getBuildProviders(image, build)
|
||||
for p in providers:
|
||||
if p == provider_name:
|
||||
@ -2855,8 +2855,8 @@ class ZooKeeper(ZooKeeperBase):
|
||||
provider_uploads = {}
|
||||
image_names = self.getImageNames()
|
||||
for image in image_names:
|
||||
build_numbers = self.getBuildNumbers(image)
|
||||
for build in build_numbers:
|
||||
build_ids = self.getBuildIds(image)
|
||||
for build in build_ids:
|
||||
# If this build is not valid for this provider, move along.
|
||||
if provider_name not in self.getBuildProviders(image, build):
|
||||
continue
|
||||
@ -2928,7 +2928,7 @@ class ZooKeeper(ZooKeeperBase):
|
||||
if paused:
|
||||
paused_path = self._imagePausePath(image_name)
|
||||
ret[paused_path] = ''
|
||||
for build_no in self.getBuildNumbers(image_name):
|
||||
for build_no in self.getBuildIds(image_name):
|
||||
build_path = self._imageBuildsPath(image_name) + "/" + build_no
|
||||
try:
|
||||
build_data, stat = self.kazoo_client.get(build_path)
|
||||
|
Loading…
x
Reference in New Issue
Block a user