)]}'
{"cinder/image/image_utils.py":[{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"f1275d08814430f838e2e895a1fc145a27218598","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        with utils.temporary_chown(dest):"},{"line_number":212,"context_line":"            with utils.file_open(dest, \"wb\") as vol_file:"},{"line_number":213,"context_line":"                image_service.download(context, image_id, vol_file)"},{"line_number":214,"context_line":"        return"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    if (FLAGS.image_conversion_dir and not"},{"line_number":217,"context_line":"            os.path.exists(FLAGS.image_conversion_dir)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FjCM%3D","line":214,"updated":"2013-01-16 15:33:53.000000000","message":"This is good in that it avoids a local copy for already raw images,\nbut I\u0027ve two reservations about it.\n\n1. Are we guaranteed that the image is in fact raw?\nIf someone posted a malicious qcow2 image with a\nbacking file pointing to the local disk, but tagged it\nas \u0027raw\u0027, then we\u0027d lose the validations below.\n\n2. Are there any side effects to temp chowning\nthe vol to \"cinder\"?","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c5cfd3b0631b8a0d0a60692cceb2539a4b323e08","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        with utils.temporary_chown(dest):"},{"line_number":212,"context_line":"            with utils.file_open(dest, \"wb\") as vol_file:"},{"line_number":213,"context_line":"                image_service.download(context, image_id, vol_file)"},{"line_number":214,"context_line":"        return"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    if (FLAGS.image_conversion_dir and not"},{"line_number":217,"context_line":"            os.path.exists(FLAGS.image_conversion_dir)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FelA%3D","line":214,"in_reply_to":"AAAAM3%2F%2FheE%3D","updated":"2013-01-20 12:25:08.000000000","message":"This is getting messy.  Let\u0027s keep it simple for now and optimize later.  Thanks for the comments!","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"379fedf8e51903990e3360fd10def7a20682c7df","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        with utils.temporary_chown(dest):"},{"line_number":212,"context_line":"            with utils.file_open(dest, \"wb\") as vol_file:"},{"line_number":213,"context_line":"                image_service.download(context, image_id, vol_file)"},{"line_number":214,"context_line":"        return"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    if (FLAGS.image_conversion_dir and not"},{"line_number":217,"context_line":"            os.path.exists(FLAGS.image_conversion_dir)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FheE%3D","line":214,"in_reply_to":"AAAAM3%2F%2Fhyo%3D","updated":"2013-01-17 13:31:25.000000000","message":"1. Is a good compromise if we can be sure such a volume would never be used if it contained a \"dodgy image\". clear_logical_volume() might be\nworth calling in this edge case too","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"da56f1082a8da7d9d8bf7f42489b40e72707384e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        with utils.temporary_chown(dest):"},{"line_number":212,"context_line":"            with utils.file_open(dest, \"wb\") as vol_file:"},{"line_number":213,"context_line":"                image_service.download(context, image_id, vol_file)"},{"line_number":214,"context_line":"        return"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    if (FLAGS.image_conversion_dir and not"},{"line_number":217,"context_line":"            os.path.exists(FLAGS.image_conversion_dir)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fhyo%3D","line":214,"in_reply_to":"AAAAM3%2F%2FjCM%3D","updated":"2013-01-17 13:01:02.000000000","message":"1. Good point - how about we do the check on the volume after the copy is done?\n\n2. Not that I can see - do you have anything specific in mind?  Nobody else should be using the device.","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"}],"cinder/volume/api.py":[{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"f1275d08814430f838e2e895a1fc145a27218598","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            #support the intersection of what qemu-img and glance support"},{"line_number":149,"context_line":"            if (image_meta[\u0027container_format\u0027] !\u003d \u0027bare\u0027 or"},{"line_number":150,"context_line":"                image_meta[\u0027disk_format\u0027] not in [\u0027raw\u0027, \u0027qcow2\u0027,"},{"line_number":151,"context_line":"                                                  \u0027vmdk\u0027, \u0027vdi\u0027]):"},{"line_number":152,"context_line":"                msg \u003d (_(\"Image format must be one of raw, qcow2, \""},{"line_number":153,"context_line":"                         \"vmdk, or vdi.\"))"},{"line_number":154,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FjBc%3D","line":151,"updated":"2013-01-16 15:33:53.000000000","message":"Would it be better to let qemu-img have a go at the specified format,\nand have it return the error? so that future formats supported by\nqemu-img could be handled without code changes?","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"da56f1082a8da7d9d8bf7f42489b40e72707384e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            #support the intersection of what qemu-img and glance support"},{"line_number":149,"context_line":"            if (image_meta[\u0027container_format\u0027] !\u003d \u0027bare\u0027 or"},{"line_number":150,"context_line":"                image_meta[\u0027disk_format\u0027] not in [\u0027raw\u0027, \u0027qcow2\u0027,"},{"line_number":151,"context_line":"                                                  \u0027vmdk\u0027, \u0027vdi\u0027]):"},{"line_number":152,"context_line":"                msg \u003d (_(\"Image format must be one of raw, qcow2, \""},{"line_number":153,"context_line":"                         \"vmdk, or vdi.\"))"},{"line_number":154,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fhys%3D","line":151,"in_reply_to":"AAAAM3%2F%2FjBc%3D","updated":"2013-01-17 13:01:02.000000000","message":"Checking here along with the rest of the sanity checks significantly simplifies cleanup in case of error","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"}],"cinder/volume/driver.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b8a2ed9253ecc60f043247e149114732e7c98f7","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":455,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":456,"context_line":"        self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":457,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.terminate_connection(volume, connector)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fh5U%3D","line":457,"updated":"2013-01-17 05:08:16.000000000","message":"It is not safe to logout and disconnect because there could be other volumes from the same iscsi target already attached to the host.  When you logout and disconnect, all other volumes are detached as a result.  If you look at LibvirtISCSIVolumeDriver::disconnect_volume( ) in nova/virt/libvirt/volume.py, it only disconnects from the target when no luns from the target are in use.  Since we don\u0027t have that information in Cinder driver, it is safer not to logout.  That\u0027s why I didn\u0027t logout in my implementation.  When detach volume happens from nova next time, it will logout when no luns from the target are in use.","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"da56f1082a8da7d9d8bf7f42489b40e72707384e","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":455,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":456,"context_line":"        self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":457,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.terminate_connection(volume, connector)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fhyk%3D","line":457,"in_reply_to":"AAAAM3%2F%2Fh5U%3D","updated":"2013-01-17 13:01:02.000000000","message":"As I wrote in the comment at the top of the function, it is safe because nobody else should be using the device.  Did I miss something?  If Nova and Cinder are running on different hosts, how will logging out from Nova affect this device?","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c5cfd3b0631b8a0d0a60692cceb2539a4b323e08","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":455,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":456,"context_line":"        self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":457,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.terminate_connection(volume, connector)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FelE%3D","line":457,"in_reply_to":"AAAAM3%2F%2Fhaw%3D","updated":"2013-01-20 12:25:08.000000000","message":"Now I understand your point - thanks for explaining!  I\u0027m not sure I like leaving dangling connections open in the hope that Nova will clean them up, but I can\u0027t think of a better solution right now.","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8e90ad6243f3bd999dae9b99b9150f3cf9e4178c","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":455,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":456,"context_line":"        self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":457,"context_line":"                           check_exit_code\u003d[0, 21, 255])"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.terminate_connection(volume, connector)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fhaw%3D","line":457,"in_reply_to":"AAAAM3%2F%2Fhyk%3D","updated":"2013-01-17 14:28:25.000000000","message":"If Nova and Cinder-Volume are running on different hosts, logging out from Nova will not affect the Cinder-Volume host.  So in that case, it may be okay to logout.  In most cases, however, they are running on the same host.  \n\nWhen you talk about the device, do you mean the LUN or Volume?  In my driver, there can be more than one LUNs from the same iSCSI target attached to the same host.  Same with LVM.  Does your driver only allow one LUN per target?  So logging out from the target will make all the LUNs from the same target disappear from the host.","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"efb417c18ddae90e3097437edb1203174bd52599","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        init_conn \u003d self.initialize_connection(volume, connector)"},{"line_number":377,"context_line":"        iscsi_properties \u003d init_conn[\u0027data\u0027]"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        # code \"insipred by\" nova/virt/libvirt/volume.py"},{"line_number":380,"context_line":"        try:"},{"line_number":381,"context_line":"            self._run_iscsiadm(iscsi_properties, ())"},{"line_number":382,"context_line":"        except exception.ProcessExecutionError as exc:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FXaw%3D","line":379,"updated":"2013-01-25 11:39:08.000000000","message":"Typo","commit_id":"5aea91043abbd5ae64541d06d789a345e4e626a8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a255fb9f9fbdf6ebf20cdc9a8f1f5fd2e6ed0655","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        init_conn \u003d self.initialize_connection(volume, connector)"},{"line_number":377,"context_line":"        iscsi_properties \u003d init_conn[\u0027data\u0027]"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        # code \"insipred by\" nova/virt/libvirt/volume.py"},{"line_number":380,"context_line":"        try:"},{"line_number":381,"context_line":"            self._run_iscsiadm(iscsi_properties, ())"},{"line_number":382,"context_line":"        except exception.ProcessExecutionError as exc:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FWCI%3D","line":379,"in_reply_to":"AAAAM3%2F%2FXaw%3D","updated":"2013-01-28 05:13:21.000000000","message":"Done","commit_id":"5aea91043abbd5ae64541d06d789a345e4e626a8"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"efb417c18ddae90e3097437edb1203174bd52599","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        return iscsi_properties, host_device"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"class FakeISCSIDriver(ISCSIDriver):"},{"line_number":438,"context_line":"    \"\"\"Logs calls instead of executing.\"\"\""},{"line_number":439,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FXZw%3D","line":436,"updated":"2013-01-25 11:39:08.000000000","message":"I have a question: Will Nova clean up connections when Nova and Cinder are running on different hosts? No?","commit_id":"5aea91043abbd5ae64541d06d789a345e4e626a8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a255fb9f9fbdf6ebf20cdc9a8f1f5fd2e6ed0655","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        return iscsi_properties, host_device"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"class FakeISCSIDriver(ISCSIDriver):"},{"line_number":438,"context_line":"    \"\"\"Logs calls instead of executing.\"\"\""},{"line_number":439,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FWCE%3D","line":436,"in_reply_to":"AAAAM3%2F%2FXZw%3D","updated":"2013-01-28 05:13:21.000000000","message":"This will be a separate patch","commit_id":"5aea91043abbd5ae64541d06d789a345e4e626a8"},{"author":{"_account_id":1525,"name":"Rafi Khardalian","email":"rafi@metacloud.com","username":"rkhardalian"},"change_message_id":"38112f392ab14b88196e2d7020170d99325d0396","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        \"\"\"Get iscsi initiator name for this machine\"\"\""},{"line_number":339,"context_line":"        # NOTE openiscsi stores initiator name in a file that"},{"line_number":340,"context_line":"        #      needs root permission to read."},{"line_number":341,"context_line":"        contents \u003d utils.read_file_as_root(\u0027/etc/iscsi/initiatorname.iscsi\u0027)"},{"line_number":342,"context_line":"        for l in contents.split(\u0027\\n\u0027):"},{"line_number":343,"context_line":"            if l.startswith(\u0027InitiatorName\u003d\u0027):"},{"line_number":344,"context_line":"                return l[l.index(\u0027\u003d\u0027) + 1:].strip()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FV%2Fw%3D","line":341,"updated":"2013-01-28 06:49:07.000000000","message":"Is this file in the same location on Ubuntu, RHEL and Fedora?  We should confirm this (if not done so already) before hard coding.","commit_id":"949291c3e59ea922cf6acb6a23ade5fcd65087d0"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96be0f5fa77d280b0f002e46476cc9daeb5be437","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        \"\"\"Get iscsi initiator name for this machine\"\"\""},{"line_number":339,"context_line":"        # NOTE openiscsi stores initiator name in a file that"},{"line_number":340,"context_line":"        #      needs root permission to read."},{"line_number":341,"context_line":"        contents \u003d utils.read_file_as_root(\u0027/etc/iscsi/initiatorname.iscsi\u0027)"},{"line_number":342,"context_line":"        for l in contents.split(\u0027\\n\u0027):"},{"line_number":343,"context_line":"            if l.startswith(\u0027InitiatorName\u003d\u0027):"},{"line_number":344,"context_line":"                return l[l.index(\u0027\u003d\u0027) + 1:].strip()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FVMc%3D","line":341,"in_reply_to":"AAAAM3%2F%2FV%2Fw%3D","updated":"2013-01-28 18:42:06.000000000","message":"This is the same on the 3 main platforms you called out, I believe SUSE as well.\n\nAlso FWIW, this is pulled from nova.libvirt code.","commit_id":"949291c3e59ea922cf6acb6a23ade5fcd65087d0"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"0167772dcb1d31f5aba555bf79e6186e4b6bf95f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def copy_volume_to_image(self, ctxt, volume, image_id):"},{"line_number":95,"context_line":"        self.cast(ctxt, self.make_msg(\u0027copy_volume_to_image\u0027,"},{"line_number":96,"context_line":"                                      volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":97,"context_line":"                                      image_id\u003dimage_id),"},{"line_number":98,"context_line":"                  topic\u003drpc.queue_get_for(ctxt,"},{"line_number":99,"context_line":"                                          self.topic,"},{"line_number":100,"context_line":"                                          volume[\u0027host\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi8w%3D","side":"PARENT","line":97,"updated":"2013-01-16 16:10:33.000000000","message":"Is this going to cause a rolling upgrade issue? If some nodes are expecting one set of contents in copy_volume_to_image messages and some nodes are sending different contents? Can we do some RPC version magic here?","commit_id":"5f41390dde7305e8374fe9bd193c396e6ea04350"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"da56f1082a8da7d9d8bf7f42489b40e72707384e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def copy_volume_to_image(self, ctxt, volume, image_id):"},{"line_number":95,"context_line":"        self.cast(ctxt, self.make_msg(\u0027copy_volume_to_image\u0027,"},{"line_number":96,"context_line":"                                      volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":97,"context_line":"                                      image_id\u003dimage_id),"},{"line_number":98,"context_line":"                  topic\u003drpc.queue_get_for(ctxt,"},{"line_number":99,"context_line":"                                          self.topic,"},{"line_number":100,"context_line":"                                          volume[\u0027host\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fhvc%3D","side":"PARENT","line":97,"in_reply_to":"AAAAM3%2F%2Fi8w%3D","updated":"2013-01-17 13:01:02.000000000","message":"Good point!","commit_id":"5f41390dde7305e8374fe9bd193c396e6ea04350"}],"etc/cinder/rootwrap.d/volume.filters":[{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"f1275d08814430f838e2e895a1fc145a27218598","unresolved":false,"context_lines":[{"line_number":37,"context_line":"ln: CommandFilter, /bin/ln, root"},{"line_number":38,"context_line":"qemu-img: CommandFilter, /usr/bin/qemu-img, root"},{"line_number":39,"context_line":"env: CommandFilter, /usr/bin/env, root"},{"line_number":40,"context_line":"cat: CommandFilter, /bin/cat, root"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# cinder/volume/nfs.py"},{"line_number":43,"context_line":"stat: CommandFilter, /usr/bin/stat, root"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2FjAk%3D","line":40,"updated":"2013-01-16 15:33:53.000000000","message":"You\u0027re using read_file_as_root() so this is stale I think","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c5cfd3b0631b8a0d0a60692cceb2539a4b323e08","unresolved":false,"context_lines":[{"line_number":37,"context_line":"ln: CommandFilter, /bin/ln, root"},{"line_number":38,"context_line":"qemu-img: CommandFilter, /usr/bin/qemu-img, root"},{"line_number":39,"context_line":"env: CommandFilter, /usr/bin/env, root"},{"line_number":40,"context_line":"cat: CommandFilter, /bin/cat, root"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# cinder/volume/nfs.py"},{"line_number":43,"context_line":"stat: CommandFilter, /usr/bin/stat, root"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2Fek8%3D","line":40,"in_reply_to":"AAAAM3%2F%2FheQ%3D","updated":"2013-01-20 12:25:08.000000000","message":"Done","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"379fedf8e51903990e3360fd10def7a20682c7df","unresolved":false,"context_lines":[{"line_number":37,"context_line":"ln: CommandFilter, /bin/ln, root"},{"line_number":38,"context_line":"qemu-img: CommandFilter, /usr/bin/qemu-img, root"},{"line_number":39,"context_line":"env: CommandFilter, /usr/bin/env, root"},{"line_number":40,"context_line":"cat: CommandFilter, /bin/cat, root"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# cinder/volume/nfs.py"},{"line_number":43,"context_line":"stat: CommandFilter, /usr/bin/stat, root"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2FheQ%3D","line":40,"in_reply_to":"AAAAM3%2F%2FhgY%3D","updated":"2013-01-17 13:31:25.000000000","message":"Oh right, that\u0027s just a thin wrapper.\nSo I\u0027d split from the other commands and add the comment:\n\n    # cinder/volume/driver.py: utils.read_file_as_root()\n\nthanks","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"da56f1082a8da7d9d8bf7f42489b40e72707384e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"ln: CommandFilter, /bin/ln, root"},{"line_number":38,"context_line":"qemu-img: CommandFilter, /usr/bin/qemu-img, root"},{"line_number":39,"context_line":"env: CommandFilter, /usr/bin/env, root"},{"line_number":40,"context_line":"cat: CommandFilter, /bin/cat, root"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# cinder/volume/nfs.py"},{"line_number":43,"context_line":"stat: CommandFilter, /usr/bin/stat, root"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2FhgY%3D","line":40,"in_reply_to":"AAAAM3%2F%2FjAk%3D","updated":"2013-01-17 13:01:02.000000000","message":"This is what I thought as well, but if I remove this read_file_as_root() doesn\u0027t work. Any ideas why?","commit_id":"72381eda79d220cba023fc8db7e1bbd5c26dee27"}]}
