)]}'
{"glance/scrubber.py":[{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"0354e1b4500560acc349293aa6d3ab90ae0c116f","unresolved":false,"context_lines":[{"line_number":215,"context_line":"CONF.register_opts(scrubber_opts)"},{"line_number":216,"context_line":"CONF.import_opt(\u0027metadata_encryption_key\u0027, \u0027glance.common.config\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"daemon_mode \u003d False"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class ScrubDBQueue(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_b2dc73e5","line":218,"updated":"2016-10-06 16:22:44.000000000","message":"I keep looking at this and debating whether or not the solution becomes unnecessarily complicated when the use of a global var is replaced by other options (standard error handling or using a scoped var).","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ae65938bdcb46dbff9acc4b25c2482cb324ea9a8","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _run(self, application):"},{"line_number":371,"context_line":"        LOG.debug(\"Running application\")"},{"line_number":372,"context_line":"        self.daemon_pool.spawn_n(application.run, self.event)"},{"line_number":373,"context_line":"        eventlet.spawn_after(self.wakeup_time, self._run, application)"},{"line_number":374,"context_line":"        LOG.debug(\"Next run scheduled in %s seconds\", self.wakeup_time)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_7f9f6703","line":372,"updated":"2016-10-11 13:23:18.000000000","message":"Here, you would then add \"daemon_mode\u003dTrue\" as a parameter to be passed to run","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ae65938bdcb46dbff9acc4b25c2482cb324ea9a8","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class Scrubber(object):"},{"line_number":378,"context_line":"    def __init__(self, store_api):"},{"line_number":379,"context_line":"        LOG.info(_LI(\"Initializing scrubber with configuration: %s\"),"},{"line_number":380,"context_line":"                 six.text_type({\u0027registry_host\u0027: CONF.registry_host,"},{"line_number":381,"context_line":"                                \u0027registry_port\u0027: CONF.registry_port}))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_9fa43b58","line":378,"updated":"2016-10-11 13:23:18.000000000","message":"Actually, Alexander, I think this can be done differently, without storing it here.","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"7b3a91d8079ee8a569f0587072934620a8e90ed7","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class Scrubber(object):"},{"line_number":378,"context_line":"    def __init__(self, store_api):"},{"line_number":379,"context_line":"        LOG.info(_LI(\"Initializing scrubber with configuration: %s\"),"},{"line_number":380,"context_line":"                 six.text_type({\u0027registry_host\u0027: CONF.registry_host,"},{"line_number":381,"context_line":"                                \u0027registry_port\u0027: CONF.registry_port}))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_f46d78cd","line":378,"range":{"start_line":378,"start_character":23,"end_line":378,"end_character":32},"updated":"2016-10-10 21:50:26.000000000","message":"Why not add a \"daemon\" parameter here and pass it from cmd/scrubber.py?","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ae65938bdcb46dbff9acc4b25c2482cb324ea9a8","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                 six.text_type({\u0027registry_host\u0027: CONF.registry_host,"},{"line_number":381,"context_line":"                                \u0027registry_port\u0027: CONF.registry_port}))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self.store_api \u003d store_api"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        registry.configure_registry_client()"},{"line_number":386,"context_line":"        registry.configure_registry_admin_creds()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_bf89ffcc","line":383,"updated":"2016-10-11 13:23:18.000000000","message":"You can default an attribute here to False, e.g.,\n\n    self.daemon_mode \u003d False","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ae65938bdcb46dbff9acc4b25c2482cb324ea9a8","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            delete_jobs[image_id].append((image_id, loc_id, loc_uri))"},{"line_number":425,"context_line":"        return delete_jobs"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def run(self, event\u003dNone):"},{"line_number":428,"context_line":"        delete_jobs \u003d self._get_delete_jobs()"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if delete_jobs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_df86b3b8","line":427,"updated":"2016-10-11 13:23:18.000000000","message":"You could add a paraemeter here, daemon_mode\u003dFalse. And you can say:\n\n    if self.daemon_mode is not daemon_mode:\n        self.daemon_mode \u003d daemon_mode","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ae65938bdcb46dbff9acc4b25c2482cb324ea9a8","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _scrub_image(self, image_id, delete_jobs):"},{"line_number":434,"context_line":"        if len(delete_jobs) \u003d\u003d 0:"},{"line_number":435,"context_line":"            if daemon_mode:"},{"line_number":436,"context_line":"                return"},{"line_number":437,"context_line":"            else:"},{"line_number":438,"context_line":"                raise SystemExit(\u0027Can not get scrub jobs from queue\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_ff9377f8","line":435,"updated":"2016-10-11 13:23:18.000000000","message":"Then this becomes\n\n    if self.daemon_mode:","commit_id":"9960d04abc1c5cef3d423e9513e3461d7c8e2f55"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"3ef33520fe4bc516101d9aa9a2e13a79bd3a943b","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        return delete_jobs"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def run(self, event\u003dNone, daemon_mode\u003dFalse):"},{"line_number":425,"context_line":"        if daemon_mode:"},{"line_number":426,"context_line":"            self.daemon_mode \u003d True"},{"line_number":427,"context_line":"        delete_jobs \u003d self._get_delete_jobs()"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        if delete_jobs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_76f869e6","line":426,"range":{"start_line":425,"start_character":0,"end_line":426,"end_character":35},"updated":"2016-10-11 15:40:31.000000000","message":"Why not simply: \"self.daemon_mode \u003d daemon_mode\"?","commit_id":"4248959c3b032e3806d09f946c9a48275d5016d8"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"774abe39c98932aa896f19267959de1bc7f5a6a4","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        return delete_jobs"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def run(self, event\u003dNone, daemon_mode\u003dFalse):"},{"line_number":425,"context_line":"        if daemon_mode:"},{"line_number":426,"context_line":"            self.daemon_mode \u003d True"},{"line_number":427,"context_line":"        delete_jobs \u003d self._get_delete_jobs()"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        if delete_jobs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_76ece9c7","line":426,"range":{"start_line":425,"start_character":0,"end_line":426,"end_character":35},"in_reply_to":"fa6399be_76f869e6","updated":"2016-10-11 15:54:32.000000000","message":"Yes. \nThanks Alex.","commit_id":"4248959c3b032e3806d09f946c9a48275d5016d8"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"d7db5f66f6d371e37ad1c33a7f0087c63216a366","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            records \u003d self.db_queue.get_all_locations()"},{"line_number":412,"context_line":"        except Exception as err:"},{"line_number":413,"context_line":"            LOG.error(_LE(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":414,"context_line":"                      encodeutils.exception_to_unicode(err))"},{"line_number":415,"context_line":"            return {}"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        delete_jobs \u003d {}"},{"line_number":418,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_68187285","line":415,"range":{"start_line":413,"start_character":1,"end_line":415,"end_character":21},"updated":"2016-11-15 21:00:40.000000000","message":"The reported problem is here. Looks like scrubber was using keystone v3, which seems to be unavailable, resulting in a failure to fetch the images that need scrubbing. And, finally the scrubber exits successfully when it should have exited with a non-zero exit code. \n\nKeeping the reason for failure aside, the scenario here is that when scrubber fails to fetch images for scrubbing due to an error, it should be reflected in the exit code. So, why don\u0027t we exit right here when we see the error vs what we are doing now in _scrub_image?\n\n_scrub_image is called for each image that is available to scrub. So, if we failed to fetch any images, why even call that method?","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"87609cb56eef87835287fa6b7da73bd0d52db2f5","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            records \u003d self.db_queue.get_all_locations()"},{"line_number":412,"context_line":"        except Exception as err:"},{"line_number":413,"context_line":"            LOG.error(_LE(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":414,"context_line":"                      encodeutils.exception_to_unicode(err))"},{"line_number":415,"context_line":"            return {}"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        delete_jobs \u003d {}"},{"line_number":418,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_75577bca","line":415,"range":{"start_line":413,"start_character":1,"end_line":415,"end_character":21},"in_reply_to":"7a77a97e_5a6c6e08","updated":"2016-11-22 01:13:04.000000000","message":"from the function \"run()\" to _get_delete_jobs() completes and returns I mean.","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fde28c4f832ca26d27de8fcda981dd0a29fb983d","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            records \u003d self.db_queue.get_all_locations()"},{"line_number":412,"context_line":"        except Exception as err:"},{"line_number":413,"context_line":"            LOG.error(_LE(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":414,"context_line":"                      encodeutils.exception_to_unicode(err))"},{"line_number":415,"context_line":"            return {}"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        delete_jobs \u003d {}"},{"line_number":418,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_5a6c6e08","line":415,"range":{"start_line":413,"start_character":1,"end_line":415,"end_character":21},"in_reply_to":"7a77a97e_68187285","updated":"2016-11-22 01:00:47.000000000","message":"Hemanth, while i completely agree to that, there is a problem with doing that. \nSo, our existing functional tests are written such that when the scrubber is started and the run method in line 424 is called, the functional tests go through a series of method calls that emulate starting a server, waiting for it to complete and then asserting stuff.\nThe code here in [1] calls an utils function [2] that waits for the process to complete and throws an error due to a difference in exit code. [3] This is for a scrubber in non daemon mode. However, if I attempt to edit the code to change the exit code for non daemon mode in the functional tests, i run into segmentation faults, not permitting us to accommodate that. \n\n[1] https://github.com/openstack/glance/blob/master/glance/tests/functional/__init__.py#L187-L189\n[2] https://github.com/openstack/glance/blob/master/glance/tests/utils.py#L235-L252\n[3] http://paste.openstack.org/show/589987/\n\nBut if we do a system exit after the call to the function \"run()\" is completed and returns, this whole scenario can be avoided while we also address the bug.","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"71585b98776442a4d55df08405f4390d549c73a1","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        try:"},{"line_number":411,"context_line":"            records \u003d self.db_queue.get_all_locations()"},{"line_number":412,"context_line":"        except Exception as err:"},{"line_number":413,"context_line":"            LOG.error(_LE(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":414,"context_line":"                      encodeutils.exception_to_unicode(err))"},{"line_number":415,"context_line":"            return {}"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        delete_jobs \u003d {}"},{"line_number":418,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_95d13a5a","line":415,"range":{"start_line":413,"start_character":1,"end_line":415,"end_character":21},"in_reply_to":"7a77a97e_75577bca","updated":"2016-12-02 20:09:45.000000000","message":"The last sentence does not hold. Sorry.\nAt any reachable point, the exit 1 that we do, fails a bunch of functional tests as in [1], the correction of which results in segfaults.\n[1] http://paste.openstack.org/show/589987/","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"d7db5f66f6d371e37ad1c33a7f0087c63216a366","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def _scrub_image(self, image_id, delete_jobs):"},{"line_number":432,"context_line":"        if len(delete_jobs) \u003d\u003d 0:"},{"line_number":433,"context_line":"            if self.daemon_mode:"},{"line_number":434,"context_line":"                return"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                raise SystemExit(\u0027Can not get scrub jobs from queue\u0027)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        LOG.info(_LI(\"Scrubbing image %(id)s from %(count)d locations.\"),"},{"line_number":439,"context_line":"                 {\u0027id\u0027: image_id, \u0027count\u0027: len(delete_jobs)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_be5c8426","line":436,"range":{"start_line":433,"start_character":0,"end_line":436,"end_character":69},"updated":"2016-11-15 21:00:40.000000000","message":"Continuing with my earlier comment...\n\nWhat we are checking here is whether a given image has any locations to scrub. This is a different and unrelated case. From what I see in the code, if an image doesn\u0027t have locations that can be scrubbed, it won\u0027t even appear in the list. It is very unlikely that we reach here and there are no locations to scrub.\n\nUnless I misunderstand what\u0027s happening here, this won\u0027t fix the reported problem. Even with this change, if we reproduce the error, the scrubber will still exit with a zero exit-code and here\u0027s why. \n\n_get_delete_jobs will still return {} and at line 426 above, delete_jobs is empty. So, the if condition at line 428 is not satisfied and _scrub_image is not even called. And, scrubber will exit successfully.","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fde28c4f832ca26d27de8fcda981dd0a29fb983d","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def _scrub_image(self, image_id, delete_jobs):"},{"line_number":432,"context_line":"        if len(delete_jobs) \u003d\u003d 0:"},{"line_number":433,"context_line":"            if self.daemon_mode:"},{"line_number":434,"context_line":"                return"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                raise SystemExit(\u0027Can not get scrub jobs from queue\u0027)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        LOG.info(_LI(\"Scrubbing image %(id)s from %(count)d locations.\"),"},{"line_number":439,"context_line":"                 {\u0027id\u0027: image_id, \u0027count\u0027: len(delete_jobs)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_ba08222f","line":436,"range":{"start_line":433,"start_character":0,"end_line":436,"end_character":69},"in_reply_to":"7a77a97e_be5c8426","updated":"2016-11-22 01:00:47.000000000","message":"As per my comment on lines 413-415, since we cannot do a system exit on a method that was called by run(), we can address the bug by skipping the conditional check on line 428. So _scrub_image() will be called anyway. And inside _scrub_image() we can check if we have any jobs to scrub and raise our system exit as it is now. \nSubmitting a patch with line 428 removed.\nThanks. Let me know what you think.","commit_id":"1d3ca355cf2c091039048666a7634f48d622fa76"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ea4fa71d536ba8644d9b28bbb01e2e0001113ef8","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _run(self, application):"},{"line_number":367,"context_line":"        LOG.debug(\"Running application\")"},{"line_number":368,"context_line":"        self.daemon_pool.spawn_n(application.run, self.event)"},{"line_number":369,"context_line":"        eventlet.spawn_after(self.wakeup_time, self._run, application)"},{"line_number":370,"context_line":"        LOG.debug(\"Next run scheduled in %s seconds\", self.wakeup_time)"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_ef4ca278","line":368,"updated":"2017-01-12 18:05:05.000000000","message":"Here application would be \"Scrubber\" right? Does this handle the RuntimeException for us?","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ee0fa62b05f993c548c1aa9c0600c69f89e77881","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _run(self, application):"},{"line_number":367,"context_line":"        LOG.debug(\"Running application\")"},{"line_number":368,"context_line":"        self.daemon_pool.spawn_n(application.run, self.event)"},{"line_number":369,"context_line":"        eventlet.spawn_after(self.wakeup_time, self._run, application)"},{"line_number":370,"context_line":"        LOG.debug(\"Next run scheduled in %s seconds\", self.wakeup_time)"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_01f298d2","line":368,"updated":"2017-01-13 14:23:08.000000000","message":"So, operators will be the ones looking at those stack traces, yes? With my operator hat on, stack traces are useless except to provide to developers in bug reports when something looks broken (which is what seeing a stack trace makes me think).","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"d16cb65e451914401972f7b34e2f27403030c7e2","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _run(self, application):"},{"line_number":367,"context_line":"        LOG.debug(\"Running application\")"},{"line_number":368,"context_line":"        self.daemon_pool.spawn_n(application.run, self.event)"},{"line_number":369,"context_line":"        eventlet.spawn_after(self.wakeup_time, self._run, application)"},{"line_number":370,"context_line":"        LOG.debug(\"Next run scheduled in %s seconds\", self.wakeup_time)"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_2ff3ef9f","line":368,"in_reply_to":"7a3c09a3_01f298d2","updated":"2017-01-13 20:09:42.000000000","message":"True. Agreed.","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"7548e7205f7781e106e9f135d95c74f2b1a492bc","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _run(self, application):"},{"line_number":367,"context_line":"        LOG.debug(\"Running application\")"},{"line_number":368,"context_line":"        self.daemon_pool.spawn_n(application.run, self.event)"},{"line_number":369,"context_line":"        eventlet.spawn_after(self.wakeup_time, self._run, application)"},{"line_number":370,"context_line":"        LOG.debug(\"Next run scheduled in %s seconds\", self.wakeup_time)"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_6f543254","line":368,"in_reply_to":"9a57fde8_ef4ca278","updated":"2017-01-12 18:21:31.000000000","message":"Yeah. so spawn_n from greeenpool, which is a pool of the greenthreads, prints a stacktrace of the exception if one is raised.","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ee0fa62b05f993c548c1aa9c0600c69f89e77881","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            # exit 1 will occur."},{"line_number":414,"context_line":"            msg \u003d (_(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":415,"context_line":"                   encodeutils.exception_to_unicode(err))"},{"line_number":416,"context_line":"            raise RuntimeError(msg)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        delete_jobs \u003d {}"},{"line_number":419,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_21ef94e9","line":416,"updated":"2017-01-13 14:23:08.000000000","message":"I would rather\n\n     LOG.critical(_LC(\"Can not get scrub jobs from queue: %s\"), encodeutils.exception_to_unicode(err))\n     raise exc.FailedToGetScrubberJobs()\n\nI think we should do something to stop the exception being displayed to the user (I don\u0027t think SystemExit will work that way from a greenthread). If we can\u0027t minimize the visibility of the stack trace to an operator, then simply using a descriptively named exception would make this easier for operators by being easier to Google. \"RuntimeError\" will give them far too many results.","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"ea4fa71d536ba8644d9b28bbb01e2e0001113ef8","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            # exit 1 will occur."},{"line_number":414,"context_line":"            msg \u003d (_(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":415,"context_line":"                   encodeutils.exception_to_unicode(err))"},{"line_number":416,"context_line":"            raise RuntimeError(msg)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        delete_jobs \u003d {}"},{"line_number":419,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_0f52c613","line":416,"updated":"2017-01-12 18:05:05.000000000","message":"So, this will raise a RuntimeError, and stack-trace for the user? That\u0027s far from ideal in my opinion. Does anything catch the exception and provide more useful error messaging to the user?","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"d16cb65e451914401972f7b34e2f27403030c7e2","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            # exit 1 will occur."},{"line_number":414,"context_line":"            msg \u003d (_(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":415,"context_line":"                   encodeutils.exception_to_unicode(err))"},{"line_number":416,"context_line":"            raise RuntimeError(msg)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        delete_jobs \u003d {}"},{"line_number":419,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_8f306358","line":416,"in_reply_to":"7a3c09a3_21ef94e9","updated":"2017-01-13 20:09:42.000000000","message":"Done","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"7548e7205f7781e106e9f135d95c74f2b1a492bc","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            # exit 1 will occur."},{"line_number":414,"context_line":"            msg \u003d (_(\"Can not get scrub jobs from queue: %s\") %"},{"line_number":415,"context_line":"                   encodeutils.exception_to_unicode(err))"},{"line_number":416,"context_line":"            raise RuntimeError(msg)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        delete_jobs \u003d {}"},{"line_number":419,"context_line":"        for image_id, loc_id, loc_uri in records:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_affc5a3f","line":416,"in_reply_to":"9a57fde8_0f52c613","updated":"2017-01-12 18:21:31.000000000","message":"Same comment as above. spawn_n handles the RunTimeError if raised and prints it with stack trace.\nGave RunTimeError as I felt it was appropriate to error at run time for this issue of not able to fetch jobs to scrub from the queue. \nNow I am wondering if we can raise a SystemExit(msg).\nEither way, the stack trace is made available which is why I removed the LOG.error(...)","commit_id":"87e6d311f01b32a5811956bb40ad71f21e62ddab"}],"glance/tests/functional/__init__.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        self.api_protocol \u003d \u0027http\u0027"},{"line_number":604,"context_line":"        self.api_port, api_sock \u003d test_utils.get_unused_port_and_socket()"},{"line_number":605,"context_line":"        self.registry_port, reg_sock \u003d test_utils.get_unused_port_and_socket()"},{"line_number":606,"context_line":"        self.include_scrubber \u003d True"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        self.tracecmd \u003d tracecmd_osmap.get(platform.system())"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_a8d91224","line":606,"updated":"2017-01-30 22:40:56.000000000","message":"I see you have set the default to true and set this to false in multiple tests in test_images file. I do not get the intent right away, are we testing scrubber for specific scrubber operations and those not related to images? if so this should be default false.\n\nif you have specific reason or pattern which needs to be followed, I highly recommend you to add a note for which cases this needs to be true and or set to false (whichever is expected out of the developer explicitly). in the current state, this flag will be rather easy to miss out from the  developer or reviewer perspective in case new classes are to be added.","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"cfc3fd4a6d366afc8832081d8cdc24dd364ae982","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        self.api_protocol \u003d \u0027http\u0027"},{"line_number":604,"context_line":"        self.api_port, api_sock \u003d test_utils.get_unused_port_and_socket()"},{"line_number":605,"context_line":"        self.registry_port, reg_sock \u003d test_utils.get_unused_port_and_socket()"},{"line_number":606,"context_line":"        self.include_scrubber \u003d True"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        self.tracecmd \u003d tracecmd_osmap.get(platform.system())"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_28b44280","line":606,"in_reply_to":"3a461143_a8d91224","updated":"2017-01-30 22:47:42.000000000","message":"Nikhil, Please see Steve Lewis\u0027 comment on PS #7. A bunch of tests were failing cos while trying to fix the bug by doing an exit 1.\nHence this change here which causes the tests needing scrubber alone to use scrubber.","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"}],"glance/tests/unit/test_scrubber.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"cfb4d9c841c28eb4e3923ceb2432af04c64c18f2","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.mox.StubOutWithMock(glance_store, \"delete_from_backend\")"},{"line_number":124,"context_line":"        glance_store.delete_from_backend(uri, mox.IgnoreArg()).AndReturn(\u0027\u0027)"},{"line_number":125,"context_line":"        self.mox.ReplayAll()"},{"line_number":126,"context_line":"        self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class TestScrubDBQueue(test_utils.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_cc37e4e1","line":126,"updated":"2016-10-11 16:10:52.000000000","message":"Can you add tests that assert that when daemon_mode\u003dTrue is passed to Scrubber.run that SystemExit is *not* raised?","commit_id":"10f54b52b9a246dff109931d634800984efd52b4"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"f174f0633d4b517a21b0a7c912b0b041559afffa","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        glance_store.delete_from_backend(uri, mox.IgnoreArg()).AndReturn(\u0027\u0027)"},{"line_number":125,"context_line":"        self.mox.ReplayAll()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # Ensure that scrubber exits with exit code 1 when not in daemon mode"},{"line_number":128,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dFalse)"},{"line_number":129,"context_line":"        self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_e4b03cf7","line":127,"updated":"2016-10-11 17:40:01.000000000","message":"nit: split this into it\u0027s own test","commit_id":"d10a2a8c524de4579769a16c58ccb2cac511a784"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"f174f0633d4b517a21b0a7c912b0b041559afffa","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dFalse)"},{"line_number":129,"context_line":"        self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # Ensure that scrubber does not exit when in daemon mode"},{"line_number":132,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dTrue)"},{"line_number":133,"context_line":"        scrub._scrub_image(id, [])"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_44a008a0","line":131,"updated":"2016-10-11 17:40:01.000000000","message":"nit: split this into it\u0027s own test","commit_id":"d10a2a8c524de4579769a16c58ccb2cac511a784"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"cc3441729c3ead6292492a1f566018bc69d26e8a","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dd_mode)"},{"line_number":128,"context_line":"        if d_mode:"},{"line_number":129,"context_line":"            scrub._scrub_image(id, [])"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_88be7cd2","line":129,"updated":"2016-10-12 19:51:54.000000000","message":"I would actually do something similar to Alexander\u0027s suggestion\n\n    if not d_mode:\n        self.assertRaises(...)\n        return\n    try:\n        scrub._scrub_image(id, [])\n    except SystemExit:\n        self.fail(\"We expected this to not raise a SystemExit but it did.\")","commit_id":"91ef9c98d222f9636b3815ffb86ea71357e585bf"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"864943d9f688248363a7e32a13d8d365abc654fa","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dd_mode)"},{"line_number":128,"context_line":"        if d_mode:"},{"line_number":129,"context_line":"            scrub._scrub_image(id, [])"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_859f45b3","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":38},"updated":"2016-10-12 19:11:18.000000000","message":"Should we explicitly check for SystemExit not being raised here?\n\ntry:\n    scrub.scrub_image(id, [])\nexcept SystemExit:\n    self.fail(\"...\")","commit_id":"91ef9c98d222f9636b3815ffb86ea71357e585bf"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"a12735d64b56bede5cbfbca0e4b502462ab6b1bc","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dd_mode)"},{"line_number":128,"context_line":"        if d_mode:"},{"line_number":129,"context_line":"            scrub._scrub_image(id, [])"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_4590cdec","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":38},"in_reply_to":"fa6399be_859f45b3","updated":"2016-10-12 19:34:35.000000000","message":"If a SystemExit is raised in the _scrub_image call, the exception will bubble out of the if clause and cause the test to fail with an exception. The failure message won\u0027t be great but it won\u0027t cause a false positive.\n\nAFAIK, this is the python convention for this.","commit_id":"91ef9c98d222f9636b3815ffb86ea71357e585bf"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"6b7cba7ab3520072fb04feb5215279e39535e75a","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        scrub.run(event\u003dNone, daemon_mode\u003dd_mode)"},{"line_number":128,"context_line":"        if d_mode:"},{"line_number":129,"context_line":"            scrub._scrub_image(id, [])"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            self.assertRaises(SystemExit, scrub._scrub_image, id, [])"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_cfa956e1","line":129,"in_reply_to":"fa6399be_88be7cd2","updated":"2016-10-12 22:28:36.000000000","message":"Done","commit_id":"91ef9c98d222f9636b3815ffb86ea71357e585bf"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"a1057d34fd78490cfb03b597353782049b9aa652","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1a6eadb0_f0945ee9","updated":"2016-12-20 04:05:22.000000000","message":"I see no need for the change to this file anymore.","commit_id":"5e9b0ab373222460473df12e0f99b75075948508"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        id \u003d \u0027helloworldid\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        scrub \u003d scrubber.Scrubber(glance_store)"},{"line_number":121,"context_line":"        scrub.registry \u003d self.mox.CreateMockAnything()"},{"line_number":122,"context_line":"        scrub.registry.get_image(id).AndReturn({\u0027status\u0027: \u0027pending_delete\u0027})"},{"line_number":123,"context_line":"        scrub.registry.update_image(id, {\u0027status\u0027: \u0027deleted\u0027})"},{"line_number":124,"context_line":"        self.mox.StubOutWithMock(glance_store, \"delete_from_backend\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_0832265f","line":121,"range":{"start_line":121,"start_character":25,"end_line":121,"end_character":34},"updated":"2017-01-30 22:40:56.000000000","message":"oh gosh no!!\n\nplease use mock for all new tests needed to be mocked and are being introduced or are to be introduced.","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fd159539c852de19ebe7d9354e820327aa97b5bf","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        id \u003d \u0027helloworldid\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        scrub \u003d scrubber.Scrubber(glance_store)"},{"line_number":121,"context_line":"        scrub.registry \u003d self.mox.CreateMockAnything()"},{"line_number":122,"context_line":"        scrub.registry.get_image(id).AndReturn({\u0027status\u0027: \u0027pending_delete\u0027})"},{"line_number":123,"context_line":"        scrub.registry.update_image(id, {\u0027status\u0027: \u0027deleted\u0027})"},{"line_number":124,"context_line":"        self.mox.StubOutWithMock(glance_store, \"delete_from_backend\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_23b2a306","line":121,"range":{"start_line":121,"start_character":25,"end_line":121,"end_character":34},"in_reply_to":"3a461143_0832265f","updated":"2017-01-30 23:53:13.000000000","message":"Done","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"}],"releasenotes/notes/scrubber-exit-e5d77f6f1a38ffb7.yaml":[{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"76163ce945d88d8dea424cf357fefb4bf678901e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will exit with status zero."},{"line_number":9,"context_line":"    * If configured to work in non-daemon mode, Scrubber"},{"line_number":10,"context_line":"      will error out at run time."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a6eadb0_c0268615","line":10,"range":{"start_line":9,"start_character":6,"end_line":10,"end_character":33},"updated":"2016-12-20 20:36:14.000000000","message":"I think this message needs to be made more clear. \"Error out at run time\" seems like an undesirable condition and may cause confusion as to why this behavior was introduced. Suggest: \"Scrubber will exit with a non-zero status when there are no more jobs to fetch.\"","commit_id":"a76a789c68944edb8475a9375925513fa76a0031"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"4cb1003ef70de7f0d05cd0c73b8d6f20f5cc72e4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will exit with status zero."},{"line_number":9,"context_line":"    * If configured to work in non-daemon mode, Scrubber"},{"line_number":10,"context_line":"      will error out at run time."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a6eadb0_2b51dbd8","line":10,"range":{"start_line":9,"start_character":6,"end_line":10,"end_character":33},"in_reply_to":"1a6eadb0_0b4c1f6f","updated":"2016-12-20 20:57:46.000000000","message":"Thanks for correcting me Steve. After a more careful reading of the title sentence, I now think this actually conveys the right information.","commit_id":"a76a789c68944edb8475a9375925513fa76a0031"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"e7b7b279fde9343ceb076b0bc36c4fac72e018b2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will exit with status zero."},{"line_number":9,"context_line":"    * If configured to work in non-daemon mode, Scrubber"},{"line_number":10,"context_line":"      will error out at run time."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a6eadb0_0b4c1f6f","line":10,"range":{"start_line":9,"start_character":6,"end_line":10,"end_character":33},"in_reply_to":"1a6eadb0_c0268615","updated":"2016-12-20 20:51:59.000000000","message":"That is an incorrect suggestion. We don\u0027t want a non-zero status when there are no jobs. We only wan a non-zero status when there is an error fetching jobs.\n\nThat said, this could likely be reworded, and changed from an other category to a bug fix category. I\u0027ll leave that to be determined.","commit_id":"a76a789c68944edb8475a9375925513fa76a0031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"524be41f4e00220a235779adba732f019ad920b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7a3c09a3_16aff581","line":11,"updated":"2017-01-16 14:24:09.000000000","message":"It would be helpful to be more specific here, something like:\n\n* If configured to work in daemon mode, Scrubber will log an error message at level critical, and exit with status zero (as it does now)\n* If configured to work in non-daemon mode, Scrubber will log an error message at level critical and exit with status 1.","commit_id":"936ab76df9a65d5759fff30df253bd8a58debb06"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"6aaed33db4bce5230c3bb5bb492457ade4ad8a59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7a3c09a3_d0e2872e","line":11,"in_reply_to":"7a3c09a3_16aff581","updated":"2017-01-17 18:23:22.000000000","message":"There is an error in the above and in the suggestion.\n\nIn daemon mode the scrubber will log the critical error and end the current run but the process does not exit. I assumed that was an acceptable behavior, as the error is recoverable if either the registry service is brought up or the config is fixed and the scrubber service gets a reload/restart signal.\n\nIf that is an acceptable behavior, than let\u0027s fix the note to reflect that the scrubber will not exit in daemon mode on this failure.","commit_id":"936ab76df9a65d5759fff30df253bd8a58debb06"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ce0b1ac3abcc992d29309fa60de7a06fa83a21ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7a3c09a3_b6a17048","line":11,"in_reply_to":"7a3c09a3_d0e2872e","updated":"2017-01-17 19:51:38.000000000","message":"I thought it was kind of weird that the daemon would exit, the whole point of a daemon is to have it persist across runs.  So that behavior is definitely acceptable.","commit_id":"936ab76df9a65d5759fff30df253bd8a58debb06"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_68280ae3","line":4,"range":{"start_line":4,"start_character":39,"end_line":4,"end_character":48},"updated":"2017-01-30 22:40:56.000000000","message":"behavior is the American spelling","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_883e1626","line":4,"range":{"start_line":4,"start_character":25,"end_line":4,"end_character":28},"updated":"2017-01-30 22:40:56.000000000","message":"in the","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fd159539c852de19ebe7d9354e820327aa97b5bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_2397033b","line":4,"range":{"start_line":4,"start_character":39,"end_line":4,"end_character":48},"in_reply_to":"3a461143_68280ae3","updated":"2017-01-30 23:53:13.000000000","message":":D Thanks.","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fd159539c852de19ebe7d9354e820327aa97b5bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_439c0f5d","line":4,"range":{"start_line":4,"start_character":25,"end_line":4,"end_character":28},"in_reply_to":"3a461143_883e1626","updated":"2017-01-30 23:53:13.000000000","message":"Done","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will log an error message at level critical, but"},{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_e87a3af0","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":52},"updated":"2017-01-30 22:40:56.000000000","message":"the Scrubber","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fd159539c852de19ebe7d9354e820327aa97b5bf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Please note a change in Scrubber\u0027s behaviour in case"},{"line_number":5,"context_line":"    of job fetching errors:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will log an error message at level critical, but"},{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, Scrubber"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_63a58ba0","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":52},"in_reply_to":"3a461143_e87a3af0","updated":"2017-01-30 23:53:13.000000000","message":"Done","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2f04d443299b6dd2c7a6baceea0f421c656603c9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will log an error message at level critical, but"},{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, Scrubber"},{"line_number":11,"context_line":"      will log an error message at level critical and exit"},{"line_number":12,"context_line":"      with status one."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_2881a2c3","line":10,"range":{"start_line":10,"start_character":48,"end_line":10,"end_character":56},"updated":"2017-01-30 22:40:56.000000000","message":"the Scrubber","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"fd159539c852de19ebe7d9354e820327aa97b5bf","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    * If configured to work in daemon mode, Scrubber"},{"line_number":8,"context_line":"      will log an error message at level critical, but"},{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, Scrubber"},{"line_number":11,"context_line":"      will log an error message at level critical and exit"},{"line_number":12,"context_line":"      with status one."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3a461143_c3a8ff79","line":10,"range":{"start_line":10,"start_character":48,"end_line":10,"end_character":56},"in_reply_to":"3a461143_2881a2c3","updated":"2017-01-30 23:53:13.000000000","message":"Done","commit_id":"730cd9f185200bc15657b3b1ceea7792482851b3"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"f8068f0e5f7b1e722843ea185c60eb3f7e648e19","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * If configured to work in daemon mode, the Scrubber"},{"line_number":8,"context_line":"      will log an error message at level critical, but"},{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, the Scrubber"},{"line_number":11,"context_line":"      will log an error message at level critical and exit"},{"line_number":12,"context_line":"      with status one."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3a461143_df65081e","line":9,"range":{"start_line":9,"start_character":31,"end_line":9,"end_character":32},"updated":"2017-01-31 21:24:41.000000000","message":"for the typical style period is not used in bullet points","commit_id":"91434be160634759407c26c099754ae4e2353958"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"f8068f0e5f7b1e722843ea185c60eb3f7e648e19","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      will not exit the process."},{"line_number":10,"context_line":"    * If configured to work in non-daemon mode, the Scrubber"},{"line_number":11,"context_line":"      will log an error message at level critical and exit"},{"line_number":12,"context_line":"      with status one."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3a461143_1f6cf006","line":12,"range":{"start_line":12,"start_character":21,"end_line":12,"end_character":22},"updated":"2017-01-31 21:24:41.000000000","message":"ditto","commit_id":"91434be160634759407c26c099754ae4e2353958"}]}
