)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"e46f28c536ae7aa91bec99a994ffd92a1519b6dc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jean-Baptiste RANSY \u003cjean-baptiste.ransy@alyseo.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-02-04 10:06:57 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I00de13eb2d4bd1105b9eb68f1465825414e2d5d7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2FMAs%3D","line":7,"updated":"2013-02-04 14:10:50.000000000","message":"This commit message is insufficent IMHO for a new feature.","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jean-Baptiste RANSY \u003cjean-baptiste.ransy@alyseo.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-02-06 04:38:33 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":8,"context_line":"Author: Jean-Baptiste RANSY \u003copenstack@alyseo.com\u003e"},{"line_number":9,"context_line":"Date: Wed Feb  6 03:38:04 CET 2013"},{"line_number":10,"context_line":"Implements: bp/libvirt-aoe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAM3%2F%2FIZE%3D","line":7,"updated":"2013-02-06 03:49:20.000000000","message":"should be 50 chars or less","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":8,"context_line":"Author: Jean-Baptiste RANSY \u003copenstack@alyseo.com\u003e"},{"line_number":9,"context_line":"Date: Wed Feb  6 03:38:04 CET 2013"},{"line_number":10,"context_line":"Implements: bp/libvirt-aoe"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAM3%2F%2FIY4%3D","line":9,"updated":"2013-02-06 03:49:20.000000000","message":"the two lines above are not needed","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":8,"context_line":"Author: Jean-Baptiste RANSY \u003copenstack@alyseo.com\u003e"},{"line_number":9,"context_line":"Date: Wed Feb  6 03:38:04 CET 2013"},{"line_number":10,"context_line":"Implements: bp/libvirt-aoe"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":13,"context_line":"This blueprint will be for the nova changes required to perform the attach/detach of the AoE storage to a KVM VM."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAM3%2F%2FIYs%3D","line":10,"updated":"2013-02-06 03:49:20.000000000","message":"Should be: Implements blueprint libvirt-aoe","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Implements: bp/libvirt-aoe"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adding support for block storage attaching to hosts via AoE (ATA over Ethernet) SANs."},{"line_number":13,"context_line":"This blueprint will be for the nova changes required to perform the attach/detach of the AoE storage to a KVM VM."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This initiator driver is supported on all Linux initiators (released under GPL),"},{"line_number":16,"context_line":"ATA over Ethernet (AoE) Linux driver for all 3.x and 2.6 kernel."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAM3%2F%2FIYw%3D","line":13,"updated":"2013-02-06 03:49:20.000000000","message":"wrap at 72 characters","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This initiator driver is supported on all Linux initiators (released under GPL),"},{"line_number":16,"context_line":"ATA over Ethernet (AoE) Linux driver for all 3.x and 2.6 kernel."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Modified:   nova/virt/libvirt/driver.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"   - Fix libvirt_volume_drivers (nfs duplicate entry)"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAM3%2F%2FIY0%3D","line":18,"updated":"2013-02-06 03:49:20.000000000","message":"not needed","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"}],"nova/virt/libvirt/volume.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"af5f9f6ae2987258affa7751e03d42e5e93b43aa","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"class LibvirtAOEVolumeDriver(object):"},{"line_number":252,"context_line":"    \"\"\"Driver to attach AoE volumes to libvirt.\"\"\""},{"line_number":253,"context_line":"    def __init__(self, connection):"},{"line_number":254,"context_line":"        self.connection \u003d connection"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FMKw%3D","line":251,"updated":"2013-02-04 10:39:59.000000000","message":"This must inherit from LibvirtBaseVolumeDriver","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"e46f28c536ae7aa91bec99a994ffd92a1519b6dc","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            \"\"\"AoE Discover (If aoedevpath doesn\u0027t exists, do a discover).\"\"\""},{"line_number":268,"context_line":"            (out, err) \u003d utils.execute(\u0027aoe-discover\u0027,"},{"line_number":269,"context_line":"                                       run_as_root\u003dTrue, check_exit_code\u003d0)"},{"line_number":270,"context_line":"            time.sleep(2)"},{"line_number":271,"context_line":"            if not os.path.exists(aoedevpath):"},{"line_number":272,"context_line":"                \"\"\"If aoedevpath doesn\u0027t exist here, there is a problem.\"\"\""},{"line_number":273,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FMAc%3D","line":270,"updated":"2013-02-04 14:10:50.000000000","message":"Don\u0027t use sleep here. Use nova.utils.FixedIntervalLoopingCall so it doesn\u0027t block Nova.","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"ce6a2fa0f42cf8c1f5baab16ed00df76eaef86bb","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            \"\"\"AoE Discover (If aoedevpath doesn\u0027t exists, do a discover).\"\"\""},{"line_number":268,"context_line":"            (out, err) \u003d utils.execute(\u0027aoe-discover\u0027,"},{"line_number":269,"context_line":"                                       run_as_root\u003dTrue, check_exit_code\u003d0)"},{"line_number":270,"context_line":"            time.sleep(2)"},{"line_number":271,"context_line":"            if not os.path.exists(aoedevpath):"},{"line_number":272,"context_line":"                \"\"\"If aoedevpath doesn\u0027t exist here, there is a problem.\"\"\""},{"line_number":273,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FI4w%3D","line":270,"in_reply_to":"AAAAM3%2F%2FMAc%3D","updated":"2013-02-05 21:33:21.000000000","message":"time.sleep is eventlet friendly. We don\u0027t need to worry about this blocking.","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"af5f9f6ae2987258affa7751e03d42e5e93b43aa","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        conf.source_path \u003d aoedevpath"},{"line_number":282,"context_line":"        conf.target_dev \u003d mount_device"},{"line_number":283,"context_line":"        conf.target_bus \u003d \"virtio\""},{"line_number":284,"context_line":"        conf.serial \u003d connection_info.get(\u0027serial\u0027)"},{"line_number":285,"context_line":"        return conf"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FMKg%3D","line":284,"updated":"2013-02-04 10:39:59.000000000","message":"You should not be doing all this manually. Please use the super-class method\n\n        conf \u003d super(LibvirtAOEVolumeDriver,\n                     self).connect_volume(connection_info, mount_device)\n        conf.source_type \u003d \"block\"\n        conf.source_path \u003d aoedevpath\n        return conf","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"af5f9f6ae2987258affa7751e03d42e5e93b43aa","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"},{"line_number":288,"context_line":"        \"\"\"Nothing to do to disconnect a volume with AoE.\"\"\""},{"line_number":289,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FMKU%3D","line":289,"updated":"2013-02-04 10:39:59.000000000","message":"Don\u0027t implement this. Just let the superclass do its work","commit_id":"4a3991f415dbe0b3bc9b5822ae1a749f1a15ed99"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        aoedevpath \u003d \u0027/dev/etherd/%s\u0027 % (aoedev)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        if os.path.exists(aoedevpath):"},{"line_number":348,"context_line":"            \"\"\"If aoedevpath already exists, revalidate the LUN.\"\"\""},{"line_number":349,"context_line":"            try:"},{"line_number":350,"context_line":"                self._aoe_revalidate(aoedev)"},{"line_number":351,"context_line":"            except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIZQ%3D","line":348,"updated":"2013-02-06 03:49:20.000000000","message":"prefer #NOTE(yourname): \u003ctext\u003e","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"d50dd5466fd03cc50f843c13d74f622918d48404","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":352,"context_line":"                raise"},{"line_number":353,"context_line":"        else:"},{"line_number":354,"context_line":"            \"\"\"If aoedevpath does not exist, do a discover.\"\"\""},{"line_number":355,"context_line":"            try:"},{"line_number":356,"context_line":"                self._aoe_discover()"},{"line_number":357,"context_line":"            except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIZM%3D","line":354,"updated":"2013-02-06 03:49:20.000000000","message":"prefer #NOTE(yourname): \u003ctext\u003e","commit_id":"03d953534a67ee6651e5260458efc39d4341b2d2"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"e074da8367fefa30e11ac15d7bbb741f74cde915","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            try:"},{"line_number":350,"context_line":"                self._aoe_revalidate(aoedev)"},{"line_number":351,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":352,"context_line":"                raise"},{"line_number":353,"context_line":"        else:"},{"line_number":354,"context_line":"            # NOTE(jbr_): If aoedevpath does not exist, do a discover."},{"line_number":355,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FASA%3D","line":352,"updated":"2013-02-11 21:38:05.000000000","message":"I\u0027m not sure the purpose of this. If you catch an exception and do nothing but raise, that seems redundant.","commit_id":"b94c9cec790494f06c62406c38abc5be7a46ab7a"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"e074da8367fefa30e11ac15d7bbb741f74cde915","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            try:"},{"line_number":356,"context_line":"                self._aoe_discover()"},{"line_number":357,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":358,"context_line":"                raise"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        #NOTE(jbr_): Device path is not always present immediately"},{"line_number":361,"context_line":"        def _wait_for_device_discovery(aoedevpath, mount_device):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FAR4%3D","line":358,"updated":"2013-02-11 21:38:05.000000000","message":"same as above.","commit_id":"b94c9cec790494f06c62406c38abc5be7a46ab7a"}]}
