)]}'
{"nova/tests/virt/libvirt/test_libvirt.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a6225d6127066e07ef7e77ead93801ba0d2acfef","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            self.close_callback \u003d cb"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":418,"context_line":"        self.stubs.Set(self.conn, \"getLibVersion\", get_lib_version_stub)"},{"line_number":419,"context_line":"        self.mox.StubOutWithMock(conn, \u0027_connect\u0027)"},{"line_number":420,"context_line":"        self.mox.StubOutWithMock(self.conn, \u0027registerCloseCallback\u0027)"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2Fye8%3D","line":418,"updated":"2013-06-10 17:18:30.000000000","message":"Why do this with a stub instead of mox like the rest below?","commit_id":"24df413e4d9fea1dbc45cdbabc30475405b40bfe"},{"author":{"_account_id":7231,"name":"Jason Dillaman","username":"jdillaman","inactive":true},"change_message_id":"f1ecfa7c0cbaeaa6b33d9a0a49694f93a6821b7d","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            self.close_callback \u003d cb"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":418,"context_line":"        self.stubs.Set(self.conn, \"getLibVersion\", get_lib_version_stub)"},{"line_number":419,"context_line":"        self.mox.StubOutWithMock(conn, \u0027_connect\u0027)"},{"line_number":420,"context_line":"        self.mox.StubOutWithMock(self.conn, \u0027registerCloseCallback\u0027)"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2FybU%3D","line":418,"in_reply_to":"AAAAPX%2F%2Fye8%3D","updated":"2013-06-10 17:23:22.000000000","message":"Only because I wasn\u0027t considered about testing expectations for whether or not the \u0027getLibVersion\u0027 function was invoked whereas I do care if the driver registers its callback and if it initiates a connect to libvirt after a failure.","commit_id":"24df413e4d9fea1dbc45cdbabc30475405b40bfe"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1525,"name":"Rafi Khardalian","email":"rafi@metacloud.com","username":"rkhardalian"},"change_message_id":"156f4b413fe153730cb12bc1c400c9a4653b6cb9","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                         self.uri())"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            try:"},{"line_number":594,"context_line":"                if self.has_min_version(MIN_LIBVIRT_CLOSE_CALLBACK_VERSION):"},{"line_number":595,"context_line":"                    LOG.debug(\"Registering for connection events: %s\" %"},{"line_number":596,"context_line":"                              str(self))"},{"line_number":597,"context_line":"                    wrapped_conn.registerCloseCallback("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1RE%3D","line":594,"updated":"2013-06-08 02:08:19.000000000","message":"Seems like we could do this version check outside the try/except block?   As it stands, we\u0027d also log that we\u0027re registering and then not supported every time on older libvirts, which might confuse admins.","commit_id":"82231ef51113f8a4994fc15db1adb1f396001aa1"},{"author":{"_account_id":7231,"name":"Jason Dillaman","username":"jdillaman","inactive":true},"change_message_id":"1ed8f541f983aefa3266f9d403810bf81de6f752","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                         self.uri())"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            try:"},{"line_number":594,"context_line":"                if self.has_min_version(MIN_LIBVIRT_CLOSE_CALLBACK_VERSION):"},{"line_number":595,"context_line":"                    LOG.debug(\"Registering for connection events: %s\" %"},{"line_number":596,"context_line":"                              str(self))"},{"line_number":597,"context_line":"                    wrapped_conn.registerCloseCallback("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2FzKU%3D","line":594,"in_reply_to":"AAAAPX%2F%2F1RE%3D","updated":"2013-06-10 13:04:35.000000000","message":"Agree w/ reordering the try/if blocks, but currently it will only log if the version is \u003e\u003d 1.0.1","commit_id":"82231ef51113f8a4994fc15db1adb1f396001aa1"},{"author":{"_account_id":1525,"name":"Rafi Khardalian","email":"rafi@metacloud.com","username":"rkhardalian"},"change_message_id":"156f4b413fe153730cb12bc1c400c9a4653b6cb9","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                    wrapped_conn.registerCloseCallback("},{"line_number":598,"context_line":"                        self._close_callback, None)"},{"line_number":599,"context_line":"            except libvirt.libvirtError:"},{"line_number":600,"context_line":"                LOG.warn(_(\"URI %s does not support connection events\"),"},{"line_number":601,"context_line":"                         self.uri())"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        return wrapped_conn"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F1Rc%3D","line":600,"updated":"2013-06-08 02:08:19.000000000","message":"Registering for events is debug (correctly so in my opinion), this should be debug as well since the lack of connection event support isn\u0027t really a problem.  Both could also be \"info\" as well.","commit_id":"82231ef51113f8a4994fc15db1adb1f396001aa1"},{"author":{"_account_id":7231,"name":"Jason Dillaman","username":"jdillaman","inactive":true},"change_message_id":"1ed8f541f983aefa3266f9d403810bf81de6f752","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                    wrapped_conn.registerCloseCallback("},{"line_number":598,"context_line":"                        self._close_callback, None)"},{"line_number":599,"context_line":"            except libvirt.libvirtError:"},{"line_number":600,"context_line":"                LOG.warn(_(\"URI %s does not support connection events\"),"},{"line_number":601,"context_line":"                         self.uri())"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        return wrapped_conn"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2FzKQ%3D","line":600,"in_reply_to":"AAAAPX%2F%2F1Rc%3D","updated":"2013-06-10 13:04:35.000000000","message":"Done","commit_id":"82231ef51113f8a4994fc15db1adb1f396001aa1"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60e7faa79d85dd56b635d5fcf1b56335f90395bc","unresolved":false,"context_lines":[{"line_number":576,"context_line":"                wrapped_conn \u003d tpool.proxy_call("},{"line_number":577,"context_line":"                    (libvirt.virDomain, libvirt.virConnect),"},{"line_number":578,"context_line":"                    self._connect, self.uri(), self.read_only)"},{"line_number":579,"context_line":"            with self._wrapped_conn_lock:"},{"line_number":580,"context_line":"                self._wrapped_conn \u003d wrapped_conn"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2FvsE%3D","line":579,"updated":"2013-06-11 14:51:21.000000000","message":"You use a threading.Lock, which is not reentrant, so this nested access looks like a problem.","commit_id":"24df413e4d9fea1dbc45cdbabc30475405b40bfe"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"b3939aff2777c2dcab4b3fb7cc55a23600508db3","unresolved":false,"context_lines":[{"line_number":576,"context_line":"                wrapped_conn \u003d tpool.proxy_call("},{"line_number":577,"context_line":"                    (libvirt.virDomain, libvirt.virConnect),"},{"line_number":578,"context_line":"                    self._connect, self.uri(), self.read_only)"},{"line_number":579,"context_line":"            with self._wrapped_conn_lock:"},{"line_number":580,"context_line":"                self._wrapped_conn \u003d wrapped_conn"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2FveA%3D","line":579,"in_reply_to":"AAAAPX%2F%2FvqA%3D","updated":"2013-06-11 15:50:22.000000000","message":"You\u0027re right; I was misreading the indentation of the top with statement.","commit_id":"24df413e4d9fea1dbc45cdbabc30475405b40bfe"},{"author":{"_account_id":7231,"name":"Jason Dillaman","username":"jdillaman","inactive":true},"change_message_id":"54674d17910e35d848999a3b04ce93bb4a72c0e1","unresolved":false,"context_lines":[{"line_number":576,"context_line":"                wrapped_conn \u003d tpool.proxy_call("},{"line_number":577,"context_line":"                    (libvirt.virDomain, libvirt.virConnect),"},{"line_number":578,"context_line":"                    self._connect, self.uri(), self.read_only)"},{"line_number":579,"context_line":"            with self._wrapped_conn_lock:"},{"line_number":580,"context_line":"                self._wrapped_conn \u003d wrapped_conn"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2FvqA%3D","line":579,"in_reply_to":"AAAAPX%2F%2FvsE%3D","updated":"2013-06-11 15:00:35.000000000","message":"I am not sure I see the nested access.  The lock is held shortly at the start of the method to retrieve a copy the connection and here to update the instance variable -- both lock points are used to protect against a potential concurrent callback.","commit_id":"24df413e4d9fea1dbc45cdbabc30475405b40bfe"}]}
