Update references of build "number" to "id"
This follows the previous change and is intended to have little or no behavior changes (only a few unit tests are updated to use different placeholder values). It updates all textual references of build numbers to build ids to better reflect that they are UUIDs instead of integers. Change-Id: I04b5eec732918f5b9b712f8caab2ea4ec90e9a9f
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user