Check if package exists before deleting it
authorEd Bartosh <eduard.bartosh@intel.com>
Wed, 2 Oct 2013 15:26:19 +0000 (18:26 +0300)
committerGerrit Code Review <gerrit2@otctools.jf.intel.com>
Wed, 9 Oct 2013 06:23:02 +0000 (23:23 -0700)
job_request tries to delete package from source project when request
is accepted, rejected or revoked. However, in OBS 2.4 this is done by
OBS and package doesn't exist. It caused this traceback in production:
Traceback (most recent call last):
  File "/srv/jenkins/jenkins-scripts/job_request.py", line 313, in <module>
    sys.exit(main())
  File "/srv/jenkins/jenkins-scripts/job_request.py", line 306, in main
    request_accepted(data, gerrit, gitprj)
  File "/srv/jenkins/jenkins-scripts/job_request.py", line 161, in request_accepted
    delete_package(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
  File "/srv/jenkins/jenkins-scripts/job_request.py", line 136, in delete_package
    _bs.delete_package(prj, pkg)
  File "/srv/jenkins/jenkins-scripts/common/buildservice.py", line 383, in delete_package
    core.delete_package(self.apiurl, project, package)
  File "/usr/lib/python2.7/site-packages/osc/core.py", line 4697, in delete_package
    http_DELETE(u)
  File "/usr/lib/python2.7/site-packages/osc/core.py", line 2924, in http_DELETE
    def http_DELETE(*args, **kwargs): return http_request('DELETE', *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/osc/core.py", line 2909, in http_request
    fd = urllib2.urlopen(req, data=data)
  File "/usr/lib64/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib64/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/usr/lib64/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib64/python2.7/urllib2.py", line 432, in error
    result = self._call_chain(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 884, in http_error_401
    url, req, headers)
  File "/usr/lib64/python2.7/urllib2.py", line 859, in http_error_auth_reqed
    response = self.retry_http_basic_auth(host, req, realm)
  File "/usr/lib64/python2.7/urllib2.py", line 872, in retry_http_basic_auth
    return self.parent.open(req, timeout=req.timeout)
  File "/usr/lib64/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/usr/lib64/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib64/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

Change-Id: I2a6b56ba40feecf83eeabb59169ae19b835231d7
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
job_request.py

index dcaf59c..9b1226b 100755 (executable)
@@ -133,7 +133,8 @@ def delete_package(prj, pkg):
     _bs = BuildService(os.getenv('OBS_API_URL'),
                       os.getenv('OBS_API_USERNAME'),
                       os.getenv('OBS_API_PASSWD'))
-    _bs.delete_package(prj, pkg)
+    if _bs.exists(prj, pkg):
+        _bs.delete_package(prj, pkg)
 
 def request_accepted(data, gerrit, gitprj):
     """Do lots of things when request accepted"""