)]}'
{"nova/exception.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"4b8abf23c0a0def99d34ea558a0cba947a51445e","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"class SnapshotIsBusy(Error):"},{"line_number":458,"context_line":"    message \u003d _(\"deleting snapshot %(snapshot_name)s that has \""},{"line_number":459,"context_line":"                \"dependent volumes\")"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"class ISCSITargetNotFoundForVolume(NotFound):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAEn%2F%2F6Vs%3D","line":459,"updated":"2012-02-15 18:20:50.000000000","message":"This should derive from NoveException","commit_id":"52b685c997d1e28e2c001d4ad254ccf84be07c31"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"bf392c91fa2f67a12aac2c5e540ffd2f07b74db8","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"class SnapshotIsBusy(Error):"},{"line_number":458,"context_line":"    message \u003d _(\"deleting snapshot %(snapshot_name)s that has \""},{"line_number":459,"context_line":"                \"dependent volumes\")"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"class ISCSITargetNotFoundForVolume(NotFound):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAEn%2F%2F6Vk%3D","line":459,"in_reply_to":"AAAAEn%2F%2F6Vs%3D","updated":"2012-02-15 18:21:28.000000000","message":"s/Nove/Nova","commit_id":"52b685c997d1e28e2c001d4ad254ccf84be07c31"}],"nova/volume/manager.py":[{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"3a64e956212cb8236eb6f710509a8043e677becb","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            LOG.debug(_(\"snapshot %s: deleting\"), snapshot_ref[\u0027name\u0027])"},{"line_number":233,"context_line":"            self.driver.delete_snapshot(snapshot_ref)"},{"line_number":234,"context_line":"        except exception.SnapshotIsBusy:"},{"line_number":235,"context_line":"            LOG.debug(_(\"snapshot %s: snapshot is busy\"), snapshot_ref[\u0027name\u0027])"},{"line_number":236,"context_line":"            self.db.snapshot_update(context,"},{"line_number":237,"context_line":"                                    snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                                    {\u0027status\u0027: \u0027available\u0027})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAEn%2F%2F5ik%3D","line":235,"updated":"2012-02-17 16:32:55.000000000","message":"Might just be easier to use:\n\n    except exception.SnapshotIsBusy as e:\n        LOG.debug(e)\n\nIt will save the translators some trouble in translating two almost identical strings.","commit_id":"cb892e8a87b5bfc7ccdb00411e70e04e75f613eb"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"6d83707ff2fc7c7b24a1842527995cf77f191d94","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            LOG.debug(_(\"snapshot %s: deleting\"), snapshot_ref[\u0027name\u0027])"},{"line_number":233,"context_line":"            self.driver.delete_snapshot(snapshot_ref)"},{"line_number":234,"context_line":"        except exception.SnapshotIsBusy:"},{"line_number":235,"context_line":"            LOG.debug(_(\"snapshot %s: snapshot is busy\"), snapshot_ref[\u0027name\u0027])"},{"line_number":236,"context_line":"            self.db.snapshot_update(context,"},{"line_number":237,"context_line":"                                    snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                                    {\u0027status\u0027: \u0027available\u0027})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAEn%2F%2F49w%3D","line":235,"in_reply_to":"AAAAEn%2F%2F5ik%3D","updated":"2012-02-18 13:49:12.000000000","message":"I don\u0027t think we should sacrifice log transparency in favor of one simple one-time action for every language.","commit_id":"cb892e8a87b5bfc7ccdb00411e70e04e75f613eb"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"3a64e956212cb8236eb6f710509a8043e677becb","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(_(\"snapshot %s: snapshot is busy\"), snapshot_ref[\u0027name\u0027])"},{"line_number":236,"context_line":"            self.db.snapshot_update(context,"},{"line_number":237,"context_line":"                                    snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                                    {\u0027status\u0027: \u0027available\u0027})"},{"line_number":239,"context_line":"            return True"},{"line_number":240,"context_line":"        except Exception:"},{"line_number":241,"context_line":"            with utils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAEn%2F%2F5ig%3D","line":238,"updated":"2012-02-17 16:32:55.000000000","message":"I understand this is necessary but shouldn\u0027t this be done where the exception is raised instead of where it is caught?","commit_id":"cb892e8a87b5bfc7ccdb00411e70e04e75f613eb"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"6d83707ff2fc7c7b24a1842527995cf77f191d94","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(_(\"snapshot %s: snapshot is busy\"), snapshot_ref[\u0027name\u0027])"},{"line_number":236,"context_line":"            self.db.snapshot_update(context,"},{"line_number":237,"context_line":"                                    snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                                    {\u0027status\u0027: \u0027available\u0027})"},{"line_number":239,"context_line":"            return True"},{"line_number":240,"context_line":"        except Exception:"},{"line_number":241,"context_line":"            with utils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAEn%2F%2F490%3D","line":238,"in_reply_to":"AAAAEn%2F%2F5TE%3D","updated":"2012-02-18 13:49:12.000000000","message":"Just like with volumes, snapshots must be kept in available state by driver if it could not delete it because of business.\nThis should be done in manager, not in driver to minimize database interaction from driver (self.driver.db \u003d self.db is kind of hack) and to rule out common code since if snapshot is busy, it is available after this operation.","commit_id":"cb892e8a87b5bfc7ccdb00411e70e04e75f613eb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"32508d6b4fa4842869fd982ffb43a9faa504c629","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(_(\"snapshot %s: snapshot is busy\"), snapshot_ref[\u0027name\u0027])"},{"line_number":236,"context_line":"            self.db.snapshot_update(context,"},{"line_number":237,"context_line":"                                    snapshot_ref[\u0027id\u0027],"},{"line_number":238,"context_line":"                                    {\u0027status\u0027: \u0027available\u0027})"},{"line_number":239,"context_line":"            return True"},{"line_number":240,"context_line":"        except Exception:"},{"line_number":241,"context_line":"            with utils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAEn%2F%2F5TE%3D","line":238,"in_reply_to":"AAAAEn%2F%2F5ig%3D","updated":"2012-02-17 20:04:07.000000000","message":"+1 to Johannes…","commit_id":"cb892e8a87b5bfc7ccdb00411e70e04e75f613eb"}]}
