)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"afe2bfdd8d54961a9cd43f9be701adca1401b900","unresolved":false,"context_lines":[{"line_number":4475,"context_line":"                       \u0027host\u0027: nodes,"},{"line_number":4476,"context_line":"                       \u0027cleaned\u0027: False}"},{"line_number":4477,"context_line":"            for instance in instance_obj.InstanceList.get_by_filters("},{"line_number":4478,"context_line":"                context, filters, columns_to_join\u003d[\u0027system_metadata\u0027]):"},{"line_number":4479,"context_line":"                attempts \u003d instance.system_metadata.get(\u0027clean_attempts\u0027, 0)"},{"line_number":4480,"context_line":"                if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4481,"context_line":"                    instance.system_metadata[\u0027clean_attempts\u0027] \u003d attempts + 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Frho%3D","line":4478,"updated":"2013-07-13 15:05:14.000000000","message":"s/columns_to_join/expected_attributes/","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f229b16445709db797e98c32bb7d654964c598c5","unresolved":false,"context_lines":[{"line_number":4475,"context_line":"                       \u0027host\u0027: nodes,"},{"line_number":4476,"context_line":"                       \u0027cleaned\u0027: False}"},{"line_number":4477,"context_line":"            for instance in instance_obj.InstanceList.get_by_filters("},{"line_number":4478,"context_line":"                context, filters, columns_to_join\u003d[\u0027system_metadata\u0027]):"},{"line_number":4479,"context_line":"                attempts \u003d instance.system_metadata.get(\u0027clean_attempts\u0027, 0)"},{"line_number":4480,"context_line":"                if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4481,"context_line":"                    instance.system_metadata[\u0027clean_attempts\u0027] \u003d attempts + 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FrMs%3D","line":4478,"in_reply_to":"AAAAP3%2F%2Frho%3D","updated":"2013-07-14 01:00:45.000000000","message":"Done","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"afe2bfdd8d54961a9cd43f9be701adca1401b900","unresolved":false,"context_lines":[{"line_number":4478,"context_line":"                context, filters, columns_to_join\u003d[\u0027system_metadata\u0027]):"},{"line_number":4479,"context_line":"                attempts \u003d instance.system_metadata.get(\u0027clean_attempts\u0027, 0)"},{"line_number":4480,"context_line":"                if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4481,"context_line":"                    instance.system_metadata[\u0027clean_attempts\u0027] \u003d attempts + 1"},{"line_number":4482,"context_line":"                    self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Frhc%3D","line":4481,"updated":"2013-07-13 15:05:14.000000000","message":"You need an instance.save() here","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f229b16445709db797e98c32bb7d654964c598c5","unresolved":false,"context_lines":[{"line_number":4478,"context_line":"                context, filters, columns_to_join\u003d[\u0027system_metadata\u0027]):"},{"line_number":4479,"context_line":"                attempts \u003d instance.system_metadata.get(\u0027clean_attempts\u0027, 0)"},{"line_number":4480,"context_line":"                if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4481,"context_line":"                    instance.system_metadata[\u0027clean_attempts\u0027] \u003d attempts + 1"},{"line_number":4482,"context_line":"                    self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FrMo%3D","line":4481,"in_reply_to":"AAAAP3%2F%2Frhc%3D","updated":"2013-07-14 01:00:45.000000000","message":"Done","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":4513,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4514,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4515,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4516,"context_line":"        if CONF.instance_delete_interval \u003e 0:"},{"line_number":4517,"context_line":"            LOG.debug(_(\u0027Cleaning up deleted instances\u0027))"},{"line_number":4518,"context_line":"            filters \u003d {\u0027deleted\u0027: True,"},{"line_number":4519,"context_line":"                       \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FiBc%3D","line":4516,"updated":"2013-07-16 22:05:14.000000000","message":"We\u0027ve made a few attempts to avoid this pattern. It just increases the nesting level for the whole function for no reason. Can you change this to:\n\n  if interval \u003d\u003d 0:\n      return\n\n?","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":4513,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4514,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4515,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4516,"context_line":"        if CONF.instance_delete_interval \u003e 0:"},{"line_number":4517,"context_line":"            LOG.debug(_(\u0027Cleaning up deleted instances\u0027))"},{"line_number":4518,"context_line":"            filters \u003d {\u0027deleted\u0027: True,"},{"line_number":4519,"context_line":"                       \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh2I%3D","line":4516,"in_reply_to":"AAAAP3%2F%2FiBc%3D","updated":"2013-07-17 04:24:59.000000000","message":"Done","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":147,"context_line":"               help\u003d\u0027Time in seconds before a shelved instance is eligible \u0027"},{"line_number":148,"context_line":"                    \u0027for removing from a host.  -1 never offload, 0 offload \u0027"},{"line_number":149,"context_line":"                    \u0027when shelved\u0027),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027instance_delete_interval\u0027,"},{"line_number":151,"context_line":"               default\u003d300,"},{"line_number":152,"context_line":"               help\u003d(\u0027Interval in seconds for retrying failed instance file \u0027"},{"line_number":153,"context_line":"                     \u0027deletes\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvTI%3D","line":150,"updated":"2013-07-24 06:07:43.000000000","message":"would it be worth considering having this variable below in line 193 - with the instance_cleaning_ops?","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":147,"context_line":"               help\u003d\u0027Time in seconds before a shelved instance is eligible \u0027"},{"line_number":148,"context_line":"                    \u0027for removing from a host.  -1 never offload, 0 offload \u0027"},{"line_number":149,"context_line":"                    \u0027when shelved\u0027),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027instance_delete_interval\u0027,"},{"line_number":151,"context_line":"               default\u003d300,"},{"line_number":152,"context_line":"               help\u003d(\u0027Interval in seconds for retrying failed instance file \u0027"},{"line_number":153,"context_line":"                     \u0027deletes\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvOI%3D","line":150,"in_reply_to":"AAAAQn%2F%2FvTI%3D","updated":"2013-07-24 21:23:22.000000000","message":"I wanted to keep all the interval options together. I suspect its much of a muchness.","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    cfg.IntOpt(\u0027instance_delete_interval\u0027,"},{"line_number":151,"context_line":"               default\u003d300,"},{"line_number":152,"context_line":"               help\u003d(\u0027Interval in seconds for retrying failed instance file \u0027"},{"line_number":153,"context_line":"                     \u0027deletes\u0027))"},{"line_number":154,"context_line":"]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"timeout_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2Ffdg%3D","line":153,"updated":"2013-07-30 10:47:05.000000000","message":"Is it worth saying 0 disables this operation? I guess thats the usual thing.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a093c331ccd19f05368ada2cb647579d6af6b690","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    cfg.IntOpt(\u0027instance_delete_interval\u0027,"},{"line_number":151,"context_line":"               default\u003d300,"},{"line_number":152,"context_line":"               help\u003d(\u0027Interval in seconds for retrying failed instance file \u0027"},{"line_number":153,"context_line":"                     \u0027deletes\u0027))"},{"line_number":154,"context_line":"]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"timeout_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfXM%3D","line":153,"in_reply_to":"AAAAQn%2F%2FfYg%3D","updated":"2013-07-30 11:00:21.000000000","message":"Sure.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    cfg.IntOpt(\u0027instance_delete_interval\u0027,"},{"line_number":151,"context_line":"               default\u003d300,"},{"line_number":152,"context_line":"               help\u003d(\u0027Interval in seconds for retrying failed instance file \u0027"},{"line_number":153,"context_line":"                     \u0027deletes\u0027))"},{"line_number":154,"context_line":"]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"timeout_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfYg%3D","line":153,"in_reply_to":"AAAAQn%2F%2Ffdg%3D","updated":"2013-07-30 10:56:28.000000000","message":"I don\u0027t think its worth it given that holds true for all periodic tasks. It seems redundant.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":4796,"context_line":"        self.driver.manage_image_cache(context, filtered_instances)"},{"line_number":4797,"context_line":""},{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfaQ%3D","line":4799,"updated":"2013-07-30 10:47:05.000000000","message":"I couldn\u0027t find a test for this new code, did I just miss it?","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a5d3113cc02e286b78c47b17ed2789fd64bfc03e","unresolved":false,"context_lines":[{"line_number":4796,"context_line":"        self.driver.manage_image_cache(context, filtered_instances)"},{"line_number":4797,"context_line":""},{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfTY%3D","line":4799,"in_reply_to":"AAAAQn%2F%2FfYM%3D","updated":"2013-07-30 11:58:48.000000000","message":"Done","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":4796,"context_line":"        self.driver.manage_image_cache(context, filtered_instances)"},{"line_number":4797,"context_line":""},{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfYM%3D","line":4799,"in_reply_to":"AAAAQn%2F%2FfaQ%3D","updated":"2013-07-30 10:56:28.000000000","message":"Hmmm, I might have missed it. I will check.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"},{"line_number":4803,"context_line":""},{"line_number":4804,"context_line":"        LOG.debug(_(\u0027Cleaning up deleted instances\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfaU%3D","line":4801,"updated":"2013-07-30 10:47:05.000000000","message":"I guess the decorator doesn\u0027t cover this case for you.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a093c331ccd19f05368ada2cb647579d6af6b690","unresolved":false,"context_lines":[{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"},{"line_number":4803,"context_line":""},{"line_number":4804,"context_line":"        LOG.debug(_(\u0027Cleaning up deleted instances\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfW0%3D","line":4801,"in_reply_to":"AAAAQn%2F%2FfYU%3D","updated":"2013-07-30 11:00:21.000000000","message":"OK","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":4798,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.instance_delete_interval)"},{"line_number":4799,"context_line":"    def _run_pending_deletes(self, context):"},{"line_number":4800,"context_line":"        \"\"\"Retry any pending instance file deletes.\"\"\""},{"line_number":4801,"context_line":"        if CONF.instance_delete_interval \u003d\u003d 0:"},{"line_number":4802,"context_line":"            return"},{"line_number":4803,"context_line":""},{"line_number":4804,"context_line":"        LOG.debug(_(\u0027Cleaning up deleted instances\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfYU%3D","line":4801,"in_reply_to":"AAAAQn%2F%2FfaU%3D","updated":"2013-07-30 10:56:28.000000000","message":"I don\u0027t think it does. This just apes other existing periodic tasks.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":4819,"context_line":"                         \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":4820,"context_line":"                         instance\u003dinstance)"},{"line_number":4821,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4822,"context_line":"                self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfbI%3D","line":4822,"updated":"2013-07-30 10:47:05.000000000","message":"For drivers where this does nothing it seems like a lot of extra work. I think this should this be off by default?\n\nIn fact in those driver, the count is never incremented, and cleaned doesn\u0027t go to True, so the above db call just gets bigger and bigger over time, I think? That seems bad.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a5d3113cc02e286b78c47b17ed2789fd64bfc03e","unresolved":false,"context_lines":[{"line_number":4819,"context_line":"                         \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":4820,"context_line":"                         instance\u003dinstance)"},{"line_number":4821,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4822,"context_line":"                self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfVo%3D","line":4822,"in_reply_to":"AAAAQn%2F%2FfW4%3D","updated":"2013-07-30 11:58:48.000000000","message":"Done","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a093c331ccd19f05368ada2cb647579d6af6b690","unresolved":false,"context_lines":[{"line_number":4819,"context_line":"                         \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":4820,"context_line":"                         instance\u003dinstance)"},{"line_number":4821,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4822,"context_line":"                self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfW4%3D","line":4822,"in_reply_to":"AAAAQn%2F%2FfYQ%3D","updated":"2013-07-30 11:00:21.000000000","message":"Cool, that sounds neater.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":4819,"context_line":"                         \u0027max\u0027: CONF.maximum_instance_delete_attempts},"},{"line_number":4820,"context_line":"                         instance\u003dinstance)"},{"line_number":4821,"context_line":"            if attempts \u003c CONF.maximum_instance_delete_attempts:"},{"line_number":4822,"context_line":"                self.driver.delete_instance_files(instance)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfYQ%3D","line":4822,"in_reply_to":"AAAAQn%2F%2FfbI%3D","updated":"2013-07-30 10:56:28.000000000","message":"That\u0027s a good catch. The simplest thing might just be to have a default implementation which sets the values to something which indicates to stop.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"}],"nova/conductor/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"42a95fd3b7dac12f668fb4a3991343be9e572374","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def instance_get_all_by_host_requiring_reap(self, context, host):"},{"line_number":155,"context_line":"        return jsonutils.to_primitive("},{"line_number":156,"context_line":"            self.db.instance_get_all_by_host_requiring_reap(context, host))"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @rpc_common.client_exceptions(exception.MigrationNotFound)"},{"line_number":159,"context_line":"    def migration_get(self, context, migration_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzXU%3D","line":156,"updated":"2013-07-11 07:13:31.000000000","message":"This method should be added to the Instance object, instead of conductor.  And then call Instance.get_all_by_host_requiring_reap() where needed.","commit_id":"5363d5500e8c9fe7fa6890db7c653c8a4ff1702d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"afe2bfdd8d54961a9cd43f9be701adca1401b900","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                   \u0027instance_type_id\u0027, \u0027root_device_name\u0027, \u0027launched_on\u0027,"},{"line_number":49,"context_line":"                   \u0027progress\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":50,"context_line":"                   \u0027default_swap_device\u0027, \u0027root_device_name\u0027,"},{"line_number":51,"context_line":"                   \u0027system_metadata\u0027, \u0027updated_at\u0027, \u0027cleaned\u0027,"},{"line_number":52,"context_line":"                   ]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Fields that we want to convert back into a datetime object."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FrhQ%3D","line":51,"updated":"2013-07-13 15:05:14.000000000","message":"No need to do this unless you\u0027re using the antiquated instance_update() method on conductor.","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f229b16445709db797e98c32bb7d654964c598c5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                   \u0027instance_type_id\u0027, \u0027root_device_name\u0027, \u0027launched_on\u0027,"},{"line_number":49,"context_line":"                   \u0027progress\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":50,"context_line":"                   \u0027default_swap_device\u0027, \u0027root_device_name\u0027,"},{"line_number":51,"context_line":"                   \u0027system_metadata\u0027, \u0027updated_at\u0027, \u0027cleaned\u0027,"},{"line_number":52,"context_line":"                   ]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Fields that we want to convert back into a datetime object."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FrMk%3D","line":51,"in_reply_to":"AAAAP3%2F%2FrhQ%3D","updated":"2013-07-14 01:00:45.000000000","message":"Done.\n\nAlso, LOL. \"antiquated\" after what, one release?","commit_id":"15ab21a22f9db353e29445e4051c770e727bdf5f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                   \u0027instance_type_id\u0027, \u0027root_device_name\u0027, \u0027launched_on\u0027,"},{"line_number":49,"context_line":"                   \u0027progress\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":50,"context_line":"                   \u0027default_swap_device\u0027, \u0027root_device_name\u0027,"},{"line_number":51,"context_line":"                   \u0027system_metadata\u0027, \u0027updated_at\u0027,"},{"line_number":52,"context_line":"                   ]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Fields that we want to convert back into a datetime object."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FiBA%3D","line":51,"updated":"2013-07-16 22:05:14.000000000","message":"Random (now) unrelated change.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                   \u0027instance_type_id\u0027, \u0027root_device_name\u0027, \u0027launched_on\u0027,"},{"line_number":49,"context_line":"                   \u0027progress\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":50,"context_line":"                   \u0027default_swap_device\u0027, \u0027root_device_name\u0027,"},{"line_number":51,"context_line":"                   \u0027system_metadata\u0027, \u0027updated_at\u0027,"},{"line_number":52,"context_line":"                   ]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Fields that we want to convert back into a datetime object."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh14%3D","line":51,"in_reply_to":"AAAAP3%2F%2FiBA%3D","updated":"2013-07-17 04:24:59.000000000","message":"Done","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb1ed2dfc7beff9c0f63a1af363ab67abb6d1fa","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        else:"},{"line_number":1781,"context_line":"            cleaned \u003d or_("},{"line_number":1782,"context_line":"                models.Instance.cleaned \u003d\u003d 0,"},{"line_number":1783,"context_line":"                models.Instance.cleaned \u003d\u003d None"},{"line_number":1784,"context_line":"                )"},{"line_number":1785,"context_line":"            query_prefix \u003d query_prefix.filter(cleaned)"},{"line_number":1786,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FtmQ%3D","line":1783,"updated":"2013-07-24 16:16:33.000000000","message":"Your migration and model don\u0027t include nullable\u003dTrue, so I assume that defaults to False. If so, and since you have the default, is the check for NULL here still needed? The comment above this if block is (IIRC) outdated, so maybe this is too.","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"d4a7266e299ef1232cfac68db2de868b866030f0","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        else:"},{"line_number":1781,"context_line":"            cleaned \u003d or_("},{"line_number":1782,"context_line":"                models.Instance.cleaned \u003d\u003d 0,"},{"line_number":1783,"context_line":"                models.Instance.cleaned \u003d\u003d None"},{"line_number":1784,"context_line":"                )"},{"line_number":1785,"context_line":"            query_prefix \u003d query_prefix.filter(cleaned)"},{"line_number":1786,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Fo08%3D","line":1783,"in_reply_to":"AAAAQn%2F%2FtmQ%3D","updated":"2013-07-26 03:47:49.000000000","message":"Done","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"}],"nova/db/sqlalchemy/migrate_repo/versions/201_add_instance_cleaned.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    shadow_instances \u003d Table(\u0027shadow_instances\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    cleaned_column \u003d Column(\u0027cleaned\u0027, Integer)"},{"line_number":26,"context_line":"    instances.create_column(cleaned_column)"},{"line_number":27,"context_line":"    shadow_instances.create_column(cleaned_column.copy())"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh%2Fo%3D","line":25,"updated":"2013-07-16 22:05:14.000000000","message":"Shouldn\u0027t this match the definition in Instance? i.e. include Nullable?\n\nI don\u0027t really understand why this can\u0027t default\u003d0 to avoid the nullable.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    shadow_instances \u003d Table(\u0027shadow_instances\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    cleaned_column \u003d Column(\u0027cleaned\u0027, Integer)"},{"line_number":26,"context_line":"    instances.create_column(cleaned_column)"},{"line_number":27,"context_line":"    shadow_instances.create_column(cleaned_column.copy())"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FhDw%3D","line":25,"in_reply_to":"AAAAP3%2F%2Fh%2Fo%3D","updated":"2013-07-17 04:24:59.000000000","message":"I thought it was faster for the migration this way, but I must confess that having actually tested it now I can\u0027t see a speed difference. I have therefore changed this.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"}],"nova/db/sqlalchemy/migrate_repo/versions/204_add_instance_cleaned.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                           values(cleaned\u003d1))"},{"line_number":35,"context_line":"    migrate_engine.execute(shadow_instances.update()."},{"line_number":36,"context_line":"                           where(shadow_instances.c.deleted \u003e 0)."},{"line_number":37,"context_line":"                           values(cleaned\u003d1))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2Ffag%3D","line":37,"updated":"2013-07-30 10:47:05.000000000","message":"This totally makes sense, I just worry about drivers that don\u0027t need to use the cleaned value, what happens to them? all the old deleted things are marked with a 1 but all the new ones are left with a zero?","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a093c331ccd19f05368ada2cb647579d6af6b690","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                           values(cleaned\u003d1))"},{"line_number":35,"context_line":"    migrate_engine.execute(shadow_instances.update()."},{"line_number":36,"context_line":"                           where(shadow_instances.c.deleted \u003e 0)."},{"line_number":37,"context_line":"                           values(cleaned\u003d1))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfWs%3D","line":37,"in_reply_to":"AAAAQn%2F%2FfX4%3D","updated":"2013-07-30 11:00:21.000000000","message":"Sounds good.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                           values(cleaned\u003d1))"},{"line_number":35,"context_line":"    migrate_engine.execute(shadow_instances.update()."},{"line_number":36,"context_line":"                           where(shadow_instances.c.deleted \u003e 0)."},{"line_number":37,"context_line":"                           values(cleaned\u003d1))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfX4%3D","line":37,"in_reply_to":"AAAAQn%2F%2Ffag%3D","updated":"2013-07-30 10:56:28.000000000","message":"I think I\u0027ll fix this in the base implementation of the driver interface.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"beb2b2871ace4c8a24538d8ee848ac9c84de8ea6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    shadow_instances.create_column(cleaned_column.copy())"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    cleaned_index \u003d Index(\u0027instances_cleaned_idx\u0027, instances.c.cleaned)"},{"line_number":30,"context_line":"    cleaned_index.create(migrate_engine)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    migrate_engine.execute(instances.update()."},{"line_number":33,"context_line":"                           where(instances.c.deleted \u003e 0)."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FcNA%3D","line":30,"updated":"2013-07-31 06:45:12.000000000","message":"Wouldn\u0027t you want an index for host+deleted+cleaned instead of just \u0027cleaned\u0027 ?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"be79b3bf921be7fd99cdc6b1e533cfc05357851a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    shadow_instances.create_column(cleaned_column.copy())"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    cleaned_index \u003d Index(\u0027instances_cleaned_idx\u0027, instances.c.cleaned)"},{"line_number":30,"context_line":"    cleaned_index.create(migrate_engine)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    migrate_engine.execute(instances.update()."},{"line_number":33,"context_line":"                           where(instances.c.deleted \u003e 0)."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FUQw%3D","line":30,"in_reply_to":"AAAAQn%2F%2FcNA%3D","updated":"2013-08-02 01:55:03.000000000","message":"Done","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"e15f571dc4441c0b30749bae2776933a63ccafac","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    cell_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    # Records whether an instance has been deleted from disk"},{"line_number":280,"context_line":"    cleaned \u003d Column(Integer, default\u003d0)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"class InstanceInfoCache(BASE, NovaBase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2FyRw%3D","line":280,"updated":"2013-07-23 09:05:46.000000000","message":"please add nullable here","commit_id":"62933fe3701ea0c85ee38a0ae388fc7fd18d5b44"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"22cd62fb0257b079e4c5b65155b5ba1f43e1d44f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    cell_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    # Records whether an instance has been deleted from disk"},{"line_number":285,"context_line":"    cleaned \u003d Column(Integer, default\u003d0)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"class InstanceInfoCache(BASE, NovaBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FfH8%3D","line":285,"updated":"2013-07-31 11:01:49.000000000","message":"+1 why not Boolean here? If there is a good reason, it might be worth a NOTE.\n\nAlso, everything else is nullable, I guess this one should be the same?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"beb2b2871ace4c8a24538d8ee848ac9c84de8ea6","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    cell_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    # Records whether an instance has been deleted from disk"},{"line_number":285,"context_line":"    cleaned \u003d Column(Integer, default\u003d0)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"class InstanceInfoCache(BASE, NovaBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FcMI%3D","line":285,"updated":"2013-07-31 06:45:12.000000000","message":"Noticed you\u0027re using Integer even though the code is currently all treating it like a bool.  Is this just to future-proof in case there may be other uses of this?  Maybe a comment about such would be worthwhile?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"be79b3bf921be7fd99cdc6b1e533cfc05357851a","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    cell_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    # Records whether an instance has been deleted from disk"},{"line_number":285,"context_line":"    cleaned \u003d Column(Integer, default\u003d0)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"class InstanceInfoCache(BASE, NovaBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FUQo%3D","line":285,"in_reply_to":"AAAAQn%2F%2FZUk%3D","updated":"2013-08-02 01:55:03.000000000","message":"Int also allows me to pack other state into this later, so it seemed more flexible at the time. Do people think this is a big enough deal to block on?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6d1b8dfcee2676775177543934c880395887c5c9","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    cell_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    # Records whether an instance has been deleted from disk"},{"line_number":285,"context_line":"    cleaned \u003d Column(Integer, default\u003d0)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"class InstanceInfoCache(BASE, NovaBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FZUk%3D","line":285,"in_reply_to":"AAAAQn%2F%2FfH8%3D","updated":"2013-07-31 20:20:24.000000000","message":"I don\u0027t think this should be nullable, since we just have to check for three states instead of two (and because I think we have too many nullable fields already).\n\nThe reason for int seems to be \"because everything else uses int\". I seem to recall asking for it to be boolean earlier and some other reason coming up for it.","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"}],"nova/objects/instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class Instance(base.NovaObject):"},{"line_number":41,"context_line":"    # Version 1.0: Initial version"},{"line_number":42,"context_line":"    # Version 1.1: Added info_cache"},{"line_number":43,"context_line":"    # Version 1.2: Added security_groups"},{"line_number":44,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh9A%3D","line":43,"updated":"2013-07-16 22:05:14.000000000","message":"You need to update the version when you change the object.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class Instance(base.NovaObject):"},{"line_number":41,"context_line":"    # Version 1.0: Initial version"},{"line_number":42,"context_line":"    # Version 1.1: Added info_cache"},{"line_number":43,"context_line":"    # Version 1.2: Added security_groups"},{"line_number":44,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FhC8%3D","line":43,"in_reply_to":"AAAAP3%2F%2Fh9A%3D","updated":"2013-07-17 04:24:59.000000000","message":"Done","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \u0027fault\u0027: obj_utils.nested_object_or_none("},{"line_number":122,"context_line":"            instance_fault.InstanceFault),"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \u0027cleaned\u0027: obj_utils.int_or_none,"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh%2FI%3D","line":124,"updated":"2013-07-16 22:05:14.000000000","message":"Can this be a boolean that we translate similar to deleted? We definitely want to try to avoid bringing DBisms up to the object layer.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \u0027fault\u0027: obj_utils.nested_object_or_none("},{"line_number":122,"context_line":"            instance_fault.InstanceFault),"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \u0027cleaned\u0027: obj_utils.int_or_none,"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FhCg%3D","line":124,"in_reply_to":"AAAAP3%2F%2Fh%2FI%3D","updated":"2013-07-17 04:24:59.000000000","message":"Done","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            elif field \u003d\u003d \u0027deleted\u0027:"},{"line_number":193,"context_line":"                instance.deleted \u003d db_inst[\u0027deleted\u0027] \u003d\u003d db_inst[\u0027id\u0027]"},{"line_number":194,"context_line":"            elif field \u003d\u003d \u0027cleaned\u0027:"},{"line_number":195,"context_line":"                instance.cleaned \u003d db_inst[\u0027cleaned\u0027] \u003d\u003d 1"},{"line_number":196,"context_line":"            else:"},{"line_number":197,"context_line":"                instance[field] \u003d db_inst[field]"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh%2FA%3D","line":195,"updated":"2013-07-16 22:05:14.000000000","message":"Seems like we\u0027re treating it like a boolean anyway...","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            elif field \u003d\u003d \u0027deleted\u0027:"},{"line_number":193,"context_line":"                instance.deleted \u003d db_inst[\u0027deleted\u0027] \u003d\u003d db_inst[\u0027id\u0027]"},{"line_number":194,"context_line":"            elif field \u003d\u003d \u0027cleaned\u0027:"},{"line_number":195,"context_line":"                instance.cleaned \u003d db_inst[\u0027cleaned\u0027] \u003d\u003d 1"},{"line_number":196,"context_line":"            else:"},{"line_number":197,"context_line":"                instance[field] \u003d db_inst[field]"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FhCc%3D","line":195,"in_reply_to":"AAAAP3%2F%2Fh%2FA%3D","updated":"2013-07-17 04:24:59.000000000","message":"So true...","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            elif field \u003d\u003d \u0027deleted\u0027:"},{"line_number":220,"context_line":"                instance.deleted \u003d db_inst[\u0027deleted\u0027] \u003d\u003d db_inst[\u0027id\u0027]"},{"line_number":221,"context_line":"            elif field \u003d\u003d \u0027cleaned\u0027:"},{"line_number":222,"context_line":"                instance.cleaned \u003d db_inst[\u0027cleaned\u0027] \u003d\u003d 1"},{"line_number":223,"context_line":"            else:"},{"line_number":224,"context_line":"                instance[field] \u003d db_inst[field]"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvP4%3D","line":222,"updated":"2013-07-24 06:07:43.000000000","message":"if this is bool then why not use True instead of 1?","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            elif field \u003d\u003d \u0027deleted\u0027:"},{"line_number":220,"context_line":"                instance.deleted \u003d db_inst[\u0027deleted\u0027] \u003d\u003d db_inst[\u0027id\u0027]"},{"line_number":221,"context_line":"            elif field \u003d\u003d \u0027cleaned\u0027:"},{"line_number":222,"context_line":"                instance.cleaned \u003d db_inst[\u0027cleaned\u0027] \u003d\u003d 1"},{"line_number":223,"context_line":"            else:"},{"line_number":224,"context_line":"                instance[field] \u003d db_inst[field]"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvNs%3D","line":222,"in_reply_to":"AAAAQn%2F%2FvP4%3D","updated":"2013-07-24 21:23:22.000000000","message":"Its an int in the database to keep our options open later.","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        # Cleaned needs to be turned back into an int here"},{"line_number":352,"context_line":"        if \u0027cleaned\u0027 in updates:"},{"line_number":353,"context_line":"            if updates[\u0027cleaned\u0027]:"},{"line_number":354,"context_line":"                updates[\u0027cleaned\u0027] \u003d 1"},{"line_number":355,"context_line":"            else:"},{"line_number":356,"context_line":"                updates[\u0027cleaned\u0027] \u003d 0"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvPw%3D","line":354,"updated":"2013-07-24 06:07:43.000000000","message":"1 \u003d\u003e True","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            if updates[\u0027cleaned\u0027]:"},{"line_number":354,"context_line":"                updates[\u0027cleaned\u0027] \u003d 1"},{"line_number":355,"context_line":"            else:"},{"line_number":356,"context_line":"                updates[\u0027cleaned\u0027] \u003d 0"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if expected_task_state is not None:"},{"line_number":359,"context_line":"            updates[\u0027expected_task_state\u0027] \u003d expected_task_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvPs%3D","line":356,"updated":"2013-07-24 06:07:43.000000000","message":"0 \u003d\u003e False","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            if updates[\u0027cleaned\u0027]:"},{"line_number":354,"context_line":"                updates[\u0027cleaned\u0027] \u003d 1"},{"line_number":355,"context_line":"            else:"},{"line_number":356,"context_line":"                updates[\u0027cleaned\u0027] \u003d 0"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if expected_task_state is not None:"},{"line_number":359,"context_line":"            updates[\u0027expected_task_state\u0027] \u003d expected_task_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvNo%3D","line":356,"in_reply_to":"AAAAQn%2F%2FvPs%3D","updated":"2013-07-24 21:23:22.000000000","message":"See above.","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb1ed2dfc7beff9c0f63a1af363ab67abb6d1fa","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            if updates[\u0027cleaned\u0027]:"},{"line_number":354,"context_line":"                updates[\u0027cleaned\u0027] \u003d 1"},{"line_number":355,"context_line":"            else:"},{"line_number":356,"context_line":"                updates[\u0027cleaned\u0027] \u003d 0"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if expected_task_state is not None:"},{"line_number":359,"context_line":"            updates[\u0027expected_task_state\u0027] \u003d expected_task_state"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Ftl0%3D","line":356,"updated":"2013-07-24 16:16:33.000000000","message":"Just a note, you could do this:\n\n  updates[\u0027cleaned\u0027] \u003d int(updates[\u0027cleaned\u0027])","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"}],"nova/tests/api/openstack/fakes.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                  limit\u003dNone, marker\u003dNone,"},{"line_number":472,"context_line":"                  launched_at\u003dtimeutils.utcnow(),"},{"line_number":473,"context_line":"                  terminated_at\u003dtimeutils.utcnow(),"},{"line_number":474,"context_line":"                  availability_zone\u003d\u0027\u0027, cleaned\u003dNone):"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    if user_id is None:"},{"line_number":477,"context_line":"        user_id \u003d \u0027fake_user\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvPM%3D","line":474,"updated":"2013-07-24 06:07:43.000000000","message":"Should this have a boolean value here instead of None?","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                  limit\u003dNone, marker\u003dNone,"},{"line_number":472,"context_line":"                  launched_at\u003dtimeutils.utcnow(),"},{"line_number":473,"context_line":"                  terminated_at\u003dtimeutils.utcnow(),"},{"line_number":474,"context_line":"                  availability_zone\u003d\u0027\u0027, cleaned\u003dNone):"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    if user_id is None:"},{"line_number":477,"context_line":"        user_id \u003d \u0027fake_user\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvKY%3D","line":474,"in_reply_to":"AAAAQn%2F%2FvPM%3D","updated":"2013-07-24 21:23:22.000000000","message":"Fair point. I will fix this.","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"}],"nova/tests/db/test_migrations.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"                           \u0027report_count\u0027: 5, \u0027topic\u0027: \u0027topic2\u0027, \u0027deleted\u0027: 0})"},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"    def _pre_upgrade_197(self, engine):"},{"line_number":1954,"context_line":""},{"line_number":1955,"context_line":"        abuilds \u003d db_utils.get_table(engine, \u0027agent_builds\u0027)"},{"line_number":1956,"context_line":"        data \u003d ["},{"line_number":1957,"context_line":"            {\u0027hypervisor\u0027: \u0027hyper1\u0027, \u0027os\u0027: \u0027os1\u0027, \u0027architecture\u0027: \u0027arch1\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh%2BU%3D","line":1954,"updated":"2013-07-16 22:05:14.000000000","message":"Random stray whitespace damage :(","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"                           \u0027report_count\u0027: 5, \u0027topic\u0027: \u0027topic2\u0027, \u0027deleted\u0027: 0})"},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"    def _pre_upgrade_197(self, engine):"},{"line_number":1954,"context_line":""},{"line_number":1955,"context_line":"        abuilds \u003d db_utils.get_table(engine, \u0027agent_builds\u0027)"},{"line_number":1956,"context_line":"        data \u003d ["},{"line_number":1957,"context_line":"            {\u0027hypervisor\u0027: \u0027hyper1\u0027, \u0027os\u0027: \u0027os1\u0027, \u0027architecture\u0027: \u0027arch1\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FhBs%3D","line":1954,"in_reply_to":"AAAAP3%2F%2Fh%2BU%3D","updated":"2013-07-17 04:24:59.000000000","message":"Oh, rebase error from all those version number bumps.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6997fd987780ef56d6db65cde67413c7b551653c","unresolved":false,"context_lines":[{"line_number":2164,"context_line":"                          {\u0027name\u0027: \u0027cell_transport_123\u0027, \u0027deleted\u0027: 0})"},{"line_number":2165,"context_line":""},{"line_number":2166,"context_line":"    def _pre_upgrade_201(self, engine):"},{"line_number":2167,"context_line":"        return None"},{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":"    def _check_201(self, engine, data):"},{"line_number":2170,"context_line":"        self.assertColumnExists(engine, \u0027instances\u0027, \u0027cleaned\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fh%2BE%3D","line":2167,"updated":"2013-07-16 22:05:14.000000000","message":"The point of these tests are to make sure there is data in the database before the migration and that it\u0027s correct after the migration :)","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":2164,"context_line":"                          {\u0027name\u0027: \u0027cell_transport_123\u0027, \u0027deleted\u0027: 0})"},{"line_number":2165,"context_line":""},{"line_number":2166,"context_line":"    def _pre_upgrade_201(self, engine):"},{"line_number":2167,"context_line":"        return None"},{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":"    def _check_201(self, engine, data):"},{"line_number":2170,"context_line":"        self.assertColumnExists(engine, \u0027instances\u0027, \u0027cleaned\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fg%2F0%3D","line":2167,"in_reply_to":"AAAAP3%2F%2Fh%2BE%3D","updated":"2013-07-17 04:24:59.000000000","message":"Fixed.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"29c2d2abe7f0551dfe11b7454ead70bff242d007","unresolved":false,"context_lines":[{"line_number":2209,"context_line":"            self.assertEqual(2, id_2[\u0027deleted\u0027])"},{"line_number":2210,"context_line":"            self.assertEqual(1, id_2[\u0027cleaned\u0027])"},{"line_number":2211,"context_line":""},{"line_number":2212,"context_line":"    def _post_downgrade_200(self, engine):"},{"line_number":2213,"context_line":"        self.assertColumnNotExists(engine, \u0027instances\u0027, \u0027cleaned\u0027)"},{"line_number":2214,"context_line":"        self.assertColumnNotExists(engine, \u0027shadow_instances\u0027, \u0027cleaned\u0027)"},{"line_number":2215,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2FydM%3D","line":2212,"updated":"2013-07-23 08:25:32.000000000","message":"`_post_downgrade_201`, I guess","commit_id":"62933fe3701ea0c85ee38a0ae388fc7fd18d5b44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb1ed2dfc7beff9c0f63a1af363ab67abb6d1fa","unresolved":false,"context_lines":[{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"            id_2 \u003d get_(instances, 651)"},{"line_number":2400,"context_line":"            self.assertEqual(2, id_2[\u0027deleted\u0027])"},{"line_number":2401,"context_line":"            self.assertEqual(1, id_2[\u0027cleaned\u0027])"},{"line_number":2402,"context_line":""},{"line_number":2403,"context_line":"    def _post_downgrade_203(self, engine):"},{"line_number":2404,"context_line":"        self.assertColumnNotExists(engine, \u0027instances\u0027, \u0027cleaned\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Ftk0%3D","line":2401,"updated":"2013-07-24 16:16:33.000000000","message":"This too seems to indicate that the column isn\u0027t nullable and properly gets \u003d0 after the migration.","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"}],"nova/tests/objects/test_instance.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"e15f571dc4441c0b30749bae2776933a63ccafac","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        self.mox.ReplayAll()"},{"line_number":300,"context_line":"        inst \u003d instance.Instance.get_by_uuid(ctxt, fake_uuid)"},{"line_number":301,"context_line":"        # NOTE(mikal): Make sure it\u0027s actually a bool"},{"line_number":302,"context_line":"        self.assertEqual(inst.cleaned, False)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def test_get_cleaned(self):"},{"line_number":305,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2FyTc%3D","line":302,"updated":"2013-07-23 09:05:46.000000000","message":"nit: Use isinstance to check types\n\n\u003e\u003e\u003e 1 \u003d\u003d True\n\nTrue\n\n\u003e\u003e\u003e isinstance(1, bool)\n\nFalse","commit_id":"62933fe3701ea0c85ee38a0ae388fc7fd18d5b44"}],"nova/virt/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"22cd62fb0257b079e4c5b65155b5ba1f43e1d44f","unresolved":false,"context_lines":[{"line_number":974,"context_line":"            LOG.error(_(\"Exception dispatching event %(event)s: %(ex)s\"),"},{"line_number":975,"context_line":"                      {\u0027event\u0027: event, \u0027ex\u0027: ex})"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":978,"context_line":"        \"\"\"Delete any lingering instance files for an instance."},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :returns: True if the instance was deleted from disk, False otherwise."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FfHQ%3D","line":977,"updated":"2013-07-31 11:01:49.000000000","message":"maybe this should also have a test, although I guess it is of limited use.","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"beb2b2871ace4c8a24538d8ee848ac9c84de8ea6","unresolved":false,"context_lines":[{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :returns: True if the instance was deleted from disk, False otherwise."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":"        return False"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FcL0%3D","line":982,"updated":"2013-07-31 06:45:12.000000000","message":"Hm.  I think I understand why False is the default...  but I actually expected the default to be True when I got to this file. :)  My reasoning was:  If drivers have no special need to delete extra files, they should not have to implement this method just to say so.  It seemed to me like libvirt is kind of the exception here.  So I\u0027m just curious what your thought process was that made you come up with the False default?  Right now, the default is going to somewhat penalize all of the virt drivers... although probably not in any way noticeable. :)","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"22cd62fb0257b079e4c5b65155b5ba1f43e1d44f","unresolved":false,"context_lines":[{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :returns: True if the instance was deleted from disk, False otherwise."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":"        return False"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FfHo%3D","line":982,"updated":"2013-07-31 11:01:49.000000000","message":"Should this not return True, to save going around the loop 5 times?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"be79b3bf921be7fd99cdc6b1e533cfc05357851a","unresolved":false,"context_lines":[{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        :returns: True if the instance was deleted from disk, False otherwise."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":"        return False"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FUQg%3D","line":982,"in_reply_to":"AAAAQn%2F%2FfHo%3D","updated":"2013-08-02 01:55:03.000000000","message":"Thats a fair call.","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"d573cf1fae29f348d701af371116f28587b62d86","unresolved":false,"context_lines":[{"line_number":4003,"context_line":"                LOG.info(_(\u0027Deletion of %s complete\u0027), target,"},{"line_number":4004,"context_line":"                         instance\u003dinstance)"},{"line_number":4005,"context_line":"                self.virtapi.instance_update("},{"line_number":4006,"context_line":"                    nova_context.get_admin_context(), instance[\u0027uuid\u0027],"},{"line_number":4007,"context_line":"                    {\u0027reaped\u0027: 1,"},{"line_number":4008,"context_line":"                    \u0027reap_attempts\u0027: instance.get(\u0027reap_attempts\u0027, 0) + 1})"},{"line_number":4009,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzUA%3D","line":4006,"updated":"2013-07-11 07:27:24.000000000","message":"These should be \u0027context\u0027...  no need to create new context. It\u0027ll be an admin context if from a periodic task... and the user\u0027s context otherwise... which is fine.  ALthough if you choose to create a new context for these calls, you could ditch the mutation above and just use get_admin_context(read_deleted\u003d\u0027yes\u0027)","commit_id":"5363d5500e8c9fe7fa6890db7c653c8a4ff1702d"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"2ba4176fc7e53ec1cd0b887d2a86d2517aa43c67","unresolved":false,"context_lines":[{"line_number":3989,"context_line":""},{"line_number":3990,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":3991,"context_line":"        target \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":3992,"context_line":"        LOG.info(_(\u0027Deleting instance files %s\u0027), target, instance\u003dinstance)"},{"line_number":3993,"context_line":"        if os.path.exists(target):"},{"line_number":3994,"context_line":"            try:"},{"line_number":3995,"context_line":"                shutil.rmtree(target)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FkCM%3D","line":3992,"updated":"2013-07-16 15:13:12.000000000","message":"Should mv line 3992 after line 3993 to avoid target not exists.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":3989,"context_line":""},{"line_number":3990,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":3991,"context_line":"        target \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":3992,"context_line":"        LOG.info(_(\u0027Deleting instance files %s\u0027), target, instance\u003dinstance)"},{"line_number":3993,"context_line":"        if os.path.exists(target):"},{"line_number":3994,"context_line":"            try:"},{"line_number":3995,"context_line":"                shutil.rmtree(target)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fg7A%3D","line":3992,"in_reply_to":"AAAAP3%2F%2FkCM%3D","updated":"2013-07-17 04:24:59.000000000","message":"Done","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"2ba4176fc7e53ec1cd0b887d2a86d2517aa43c67","unresolved":false,"context_lines":[{"line_number":4011,"context_line":"        if os.path.exists(target):"},{"line_number":4012,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4013,"context_line":"        else:"},{"line_number":4014,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4015,"context_line":"            instance.cleaned \u003d 1"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":"        LOG.debug(_(\u0027Instance cleanup has had %(attempts)s attempts\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FkAs%3D","line":4014,"updated":"2013-07-16 15:13:12.000000000","message":"If the target doesn\u0027t exist in the beginning, there should be no \u0027complete\u0027 info to claim, also can\u0027t set instance.cleaned\u003d1 in this situation.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e05dbcaeb0f79aac5966ca7edb8e65e518da9deb","unresolved":false,"context_lines":[{"line_number":4011,"context_line":"        if os.path.exists(target):"},{"line_number":4012,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4013,"context_line":"        else:"},{"line_number":4014,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4015,"context_line":"            instance.cleaned \u003d 1"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":"        LOG.debug(_(\u0027Instance cleanup has had %(attempts)s attempts\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fg68%3D","line":4014,"in_reply_to":"AAAAP3%2F%2FkAs%3D","updated":"2013-07-17 04:24:59.000000000","message":"I disagree. If we don\u0027t set cleaned to 1 here, then we will keep retrying this non-existent directory delete. If the admin manually cleaned it up, we should still cycle through and note that.","commit_id":"e950ca91315e4a5f4625d843b5464ef14cb4c78d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":4010,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"},{"line_number":4011,"context_line":"        # as cleaned."},{"line_number":4012,"context_line":"        if os.path.exists(target):"},{"line_number":4013,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4014,"context_line":"        else:"},{"line_number":4015,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4016,"context_line":"            instance.cleaned \u003d 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvPU%3D","line":4013,"updated":"2013-07-24 06:07:43.000000000","message":"should the cleaned value be set as False here?","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":4010,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"},{"line_number":4011,"context_line":"        # as cleaned."},{"line_number":4012,"context_line":"        if os.path.exists(target):"},{"line_number":4013,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4014,"context_line":"        else:"},{"line_number":4015,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4016,"context_line":"            instance.cleaned \u003d 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvJ8%3D","line":4013,"in_reply_to":"AAAAQn%2F%2FvPU%3D","updated":"2013-07-24 21:23:22.000000000","message":"This is handled by the default value in the database.","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f3239619676c068aa5bec9b886a8cf9d505e3b8","unresolved":false,"context_lines":[{"line_number":4013,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4014,"context_line":"        else:"},{"line_number":4015,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4016,"context_line":"            instance.cleaned \u003d 1"},{"line_number":4017,"context_line":""},{"line_number":4018,"context_line":"        LOG.debug(_(\u0027Instance cleanup has had %(attempts)s attempts\u0027),"},{"line_number":4019,"context_line":"                  {\u0027attempts\u0027: instance.system_metadata[\u0027clean_attempts\u0027]},"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvPk%3D","line":4016,"updated":"2013-07-24 06:07:43.000000000","message":"please use True","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"bb8ed9e07712f177dd5771116fbc2d3b2290c706","unresolved":false,"context_lines":[{"line_number":4013,"context_line":"            LOG.info(_(\u0027Deletion of %s failed\u0027), target, instance\u003dinstance)"},{"line_number":4014,"context_line":"        else:"},{"line_number":4015,"context_line":"            LOG.info(_(\u0027Deletion of %s complete\u0027), target, instance\u003dinstance)"},{"line_number":4016,"context_line":"            instance.cleaned \u003d 1"},{"line_number":4017,"context_line":""},{"line_number":4018,"context_line":"        LOG.debug(_(\u0027Instance cleanup has had %(attempts)s attempts\u0027),"},{"line_number":4019,"context_line":"                  {\u0027attempts\u0027: instance.system_metadata[\u0027clean_attempts\u0027]},"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2FvJ0%3D","line":4016,"in_reply_to":"AAAAQn%2F%2FvPk%3D","updated":"2013-07-24 21:23:22.000000000","message":"Done","commit_id":"b517cc7b22d1a37576a89e7079cbefddedd1781c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb1ed2dfc7beff9c0f63a1af363ab67abb6d1fa","unresolved":false,"context_lines":[{"line_number":4005,"context_line":"        # TODO(mikal): this is a hack. Instance objects don\u0027t notice if you"},{"line_number":4006,"context_line":"        # update system_metadata without some help. See bug 1201776 for more"},{"line_number":4007,"context_line":"        # details."},{"line_number":4008,"context_line":"        instance._changed_fields.add(\u0027system_metadata\u0027)"},{"line_number":4009,"context_line":""},{"line_number":4010,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"},{"line_number":4011,"context_line":"        # as cleaned."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Ftjw%3D","line":4008,"updated":"2013-07-24 16:16:33.000000000","message":"This is fixed now, so this hack should come out.\n\nBy the way, the easier hack was:\n\n  foo \u003d instance.system_metadata\n  foo[\u0027bar\u0027] \u003d \u0027baz\n  instance.system_metadata \u003d foo","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"d4a7266e299ef1232cfac68db2de868b866030f0","unresolved":false,"context_lines":[{"line_number":4005,"context_line":"        # TODO(mikal): this is a hack. Instance objects don\u0027t notice if you"},{"line_number":4006,"context_line":"        # update system_metadata without some help. See bug 1201776 for more"},{"line_number":4007,"context_line":"        # details."},{"line_number":4008,"context_line":"        instance._changed_fields.add(\u0027system_metadata\u0027)"},{"line_number":4009,"context_line":""},{"line_number":4010,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"},{"line_number":4011,"context_line":"        # as cleaned."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Fozw%3D","line":4008,"in_reply_to":"AAAAQn%2F%2Ftjw%3D","updated":"2013-07-26 03:47:49.000000000","message":"Done","commit_id":"3d6a1a1118bb91d6c35b0c919fe96ee7a60e1a81"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfdf220252526047f82b3894c3cda4d40ca17bd1","unresolved":false,"context_lines":[{"line_number":4066,"context_line":"                            \u0027%(e)s\u0027), {\u0027target\u0027: target, \u0027e\u0027: e},"},{"line_number":4067,"context_line":"                            instance\u003dinstance)"},{"line_number":4068,"context_line":""},{"line_number":4069,"context_line":"        attempts \u003d int(instance.system_metadata.get(\u0027clean_attempts\u0027, \u00270\u0027))"},{"line_number":4070,"context_line":"        instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":4071,"context_line":""},{"line_number":4072,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2Ffaw%3D","line":4069,"updated":"2013-07-30 10:47:05.000000000","message":"I think all this update logic should by in the compute manager, and just let this method return True/False to say if it was a success or not, or prehaps return an exception, like DeleteInstanceFilesFailed, or something like that.","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a5d3113cc02e286b78c47b17ed2789fd64bfc03e","unresolved":false,"context_lines":[{"line_number":4066,"context_line":"                            \u0027%(e)s\u0027), {\u0027target\u0027: target, \u0027e\u0027: e},"},{"line_number":4067,"context_line":"                            instance\u003dinstance)"},{"line_number":4068,"context_line":""},{"line_number":4069,"context_line":"        attempts \u003d int(instance.system_metadata.get(\u0027clean_attempts\u0027, \u00270\u0027))"},{"line_number":4070,"context_line":"        instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":4071,"context_line":""},{"line_number":4072,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfTM%3D","line":4069,"in_reply_to":"AAAAQn%2F%2FfXs%3D","updated":"2013-07-30 11:58:48.000000000","message":"Done","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"207759efe0b6ed5e6b1ebed42ace99e05ecb3342","unresolved":false,"context_lines":[{"line_number":4066,"context_line":"                            \u0027%(e)s\u0027), {\u0027target\u0027: target, \u0027e\u0027: e},"},{"line_number":4067,"context_line":"                            instance\u003dinstance)"},{"line_number":4068,"context_line":""},{"line_number":4069,"context_line":"        attempts \u003d int(instance.system_metadata.get(\u0027clean_attempts\u0027, \u00270\u0027))"},{"line_number":4070,"context_line":"        instance.system_metadata[\u0027clean_attempts\u0027] \u003d str(attempts + 1)"},{"line_number":4071,"context_line":""},{"line_number":4072,"context_line":"        # It is possible that the delete failed, if so don\u0027t mark the instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2FfXs%3D","line":4069,"in_reply_to":"AAAAQn%2F%2Ffaw%3D","updated":"2013-07-30 10:56:28.000000000","message":"That\u0027s a really good idea...","commit_id":"05389283513dd63661fcb36db45c2c3f191b005b"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"beb2b2871ace4c8a24538d8ee848ac9c84de8ea6","unresolved":false,"context_lines":[{"line_number":4053,"context_line":"        # everywhere. Remove this when that conversion happens."},{"line_number":4054,"context_line":"        context \u003d nova_context.get_admin_context()"},{"line_number":4055,"context_line":"        inst_obj \u003d instance_obj.Instance.get_by_uuid(context, instance[\u0027uuid\u0027])"},{"line_number":4056,"context_line":"        self.delete_instance_files(inst_obj)"},{"line_number":4057,"context_line":""},{"line_number":4058,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":4059,"context_line":"        target \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FcMc%3D","line":4056,"updated":"2013-07-31 06:45:12.000000000","message":"Don\u0027t you want to update the DB with cleaned\u003dTrue if this succeeded?  Otherwise, wouldn\u0027t the next run of the periodic task do work that\u0027s already been done?","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"be79b3bf921be7fd99cdc6b1e533cfc05357851a","unresolved":false,"context_lines":[{"line_number":4053,"context_line":"        # everywhere. Remove this when that conversion happens."},{"line_number":4054,"context_line":"        context \u003d nova_context.get_admin_context()"},{"line_number":4055,"context_line":"        inst_obj \u003d instance_obj.Instance.get_by_uuid(context, instance[\u0027uuid\u0027])"},{"line_number":4056,"context_line":"        self.delete_instance_files(inst_obj)"},{"line_number":4057,"context_line":""},{"line_number":4058,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":4059,"context_line":"        target \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2FUQA%3D","line":4056,"in_reply_to":"AAAAQn%2F%2Fba8%3D","updated":"2013-08-02 01:55:03.000000000","message":"Done","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"22cd62fb0257b079e4c5b65155b5ba1f43e1d44f","unresolved":false,"context_lines":[{"line_number":4053,"context_line":"        # everywhere. Remove this when that conversion happens."},{"line_number":4054,"context_line":"        context \u003d nova_context.get_admin_context()"},{"line_number":4055,"context_line":"        inst_obj \u003d instance_obj.Instance.get_by_uuid(context, instance[\u0027uuid\u0027])"},{"line_number":4056,"context_line":"        self.delete_instance_files(inst_obj)"},{"line_number":4057,"context_line":""},{"line_number":4058,"context_line":"    def delete_instance_files(self, instance):"},{"line_number":4059,"context_line":"        target \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2Fba8%3D","line":4056,"in_reply_to":"AAAAQn%2F%2FcMc%3D","updated":"2013-07-31 11:01:49.000000000","message":"I guess this got broken with me saying move the stuff into the manager, hmm.","commit_id":"e3ed1776170409d3618f769fe215ed7cc44b8909"}]}
