)]}'
{"nova/exception.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"class UnsupportedVirtDriver(NovaException):"},{"line_number":1505,"context_line":"    msg_fmt \u003d _(\"Cannot handle images of virt driver %(driver)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXv0%3D","line":1505,"updated":"2014-01-14 14:52:56.000000000","message":"of \u003d\u003e for","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"}],"nova/tests/virt/vmwareapi/test_download_imagehandler.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"938c78e2af851bca8f6fb0c8198a311507981065","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":59,"context_line":"                          self.imagehandler._remove_image,"},{"line_number":60,"context_line":"                          self.context, self.image_meta.get(\u0027id\u0027),"},{"line_number":61,"context_line":"                          self.image_meta, \u0027path\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2Br0I%3D","line":61,"updated":"2014-01-23 16:42:46.000000000","message":"IMO it will be better if we have a case to cover get_src_info() function?","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"36c3f0380505bea576137a04c056ecb223c78220","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":59,"context_line":"                          self.imagehandler._remove_image,"},{"line_number":60,"context_line":"                          self.context, self.image_meta.get(\u0027id\u0027),"},{"line_number":61,"context_line":"                          self.image_meta, \u0027path\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BnyU%3D","line":61,"in_reply_to":"AAAAUH%2F%2BoEA%3D","updated":"2014-01-23 20:14:40.000000000","message":"oh yes, sorry.","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0a12e6078184be6ac38d4b598d00b84c10db0872","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":59,"context_line":"                          self.imagehandler._remove_image,"},{"line_number":60,"context_line":"                          self.context, self.image_meta.get(\u0027id\u0027),"},{"line_number":61,"context_line":"                          self.image_meta, \u0027path\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BoEA%3D","line":61,"in_reply_to":"AAAAUH%2F%2Br0I%3D","updated":"2014-01-23 19:45:32.000000000","message":"I think this comment is for the copy image handler ;)\n\nI will address this in the other change.","commit_id":"432da1d79423a24065dd08be83721241477c1487"}],"nova/tests/virt/vmwareapi/test_vmwareapi_imagehandler.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"# Copyright 2013 VMware, Inc."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXvk%3D","line":1,"updated":"2014-01-14 14:52:56.000000000","message":"i think that the vim header is no longer required","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":9046,"name":"Maithem","email":"munshedm@vmware.com","username":"Maithem"},"change_message_id":"e80c1ff9739e1d5cd251790e42b25662f55119c6","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        ipv6_host \u003d \u0027fd8c:215d:178e:c51e:200:c9ff:fed1:584c\u0027"},{"line_number":43,"context_line":"        self.mox.StubOutWithMock(httplib.HTTPConnection, \u0027endheaders\u0027)"},{"line_number":44,"context_line":"        httplib.HTTPConnection.endheaders()"},{"line_number":45,"context_line":"        self.mox.ReplayAll()"},{"line_number":46,"context_line":"        file \u003d vmware_imagehandler.VMwareHTTPWriteFile(ipv6_host,"},{"line_number":47,"context_line":"                                                       \u0027fake_dc\u0027,"},{"line_number":48,"context_line":"                                                       \u0027fake_ds\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FVIE%3D","line":45,"updated":"2014-01-14 23:57:57.000000000","message":"Can\u0027t you use mock instead? it will be part of the standard library, so all new tests should use it.\n\ncheck this out: https://wiki.openstack.org/wiki/ReviewChecklist , section: \nTest Case implementation (Mock vs. Mox)","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"}],"nova/virt/imagehandler/__init__.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"image_opts \u003d ["},{"line_number":37,"context_line":"    cfg.ListOpt(\u0027image_handlers\u0027,"},{"line_number":38,"context_line":"                default\u003d[\u0027vmware_download_handler\u0027, \u0027download\u0027],"},{"line_number":39,"context_line":"                help\u003d\u0027Specifies which image handler extension names to use \u0027"},{"line_number":40,"context_line":"                     \u0027for handling images. The first extension in the list \u0027"},{"line_number":41,"context_line":"                     \u0027which can handle the image with a suitable location \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXuw%3D","line":38,"updated":"2014-01-14 14:52:56.000000000","message":"question regarding this: what if the kvm driver is used, with this have any affect?\nWould it not be something that should be added when the driver is enabled?","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"95a7d05e4e314f26a9c86187349e473a440d17ac","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"image_opts \u003d ["},{"line_number":37,"context_line":"    cfg.ListOpt(\u0027image_handlers\u0027,"},{"line_number":38,"context_line":"                default\u003d[\u0027vmware_download_handler\u0027, \u0027download\u0027],"},{"line_number":39,"context_line":"                help\u003d\u0027Specifies which image handler extension names to use \u0027"},{"line_number":40,"context_line":"                     \u0027for handling images. The first extension in the list \u0027"},{"line_number":41,"context_line":"                     \u0027which can handle the image with a suitable location \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FULo%3D","line":38,"updated":"2014-01-15 05:53:04.000000000","message":"nova.conf.sample is not up to date, please run tools/config/generate_sample.sh","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a5e5f817f37b7baa35c315aa04f379bbd35ff8d1","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"image_opts \u003d ["},{"line_number":37,"context_line":"    cfg.ListOpt(\u0027image_handlers\u0027,"},{"line_number":38,"context_line":"                default\u003d[\u0027vmware_download_handler\u0027, \u0027download\u0027],"},{"line_number":39,"context_line":"                help\u003d\u0027Specifies which image handler extension names to use \u0027"},{"line_number":40,"context_line":"                     \u0027for handling images. The first extension in the list \u0027"},{"line_number":41,"context_line":"                     \u0027which can handle the image with a suitable location \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FP2U%3D","line":38,"in_reply_to":"AAAAUH%2F%2FULo%3D","updated":"2014-01-15 22:36:25.000000000","message":"Done","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"}],"nova/virt/imagehandler/download.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from nova.openstack.common import fileutils"},{"line_number":29,"context_line":"from nova.openstack.common import log as logging"},{"line_number":30,"context_line":"from nova.virt.imagehandler import base"},{"line_number":31,"context_line":"from nova.virt.vmwareapi import VMwareESXDriver"},{"line_number":32,"context_line":"from nova.virt.vmwareapi import VMwareVCDriver"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXug%3D","line":31,"updated":"2014-01-14 14:52:56.000000000","message":"Please consider from nova.virt import vmwareapi\nand then use vmwareapi.VMwareESXDriver ...","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ee746e23f371e8d0a2bbf34b3ff2782aba5935ea","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":44,"context_line":"        nonapplicable_drivers \u003d [VMwareESXDriver, VMwareVCDriver]"},{"line_number":45,"context_line":"        if type(driver) in nonapplicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\") % driver)"},{"line_number":47,"context_line":"            raise exception.UnsupportedVirtDriver("},{"line_number":48,"context_line":"                driver\u003ddriver.__class__.__name__)"},{"line_number":49,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FZxc%3D","line":46,"updated":"2014-01-14 05:07:40.000000000","message":"ditto. Adding a checking to prevent \"driver\" is None.","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":44,"context_line":"        nonapplicable_drivers \u003d [VMwareESXDriver, VMwareVCDriver]"},{"line_number":45,"context_line":"        if type(driver) in nonapplicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\") % driver)"},{"line_number":47,"context_line":"            raise exception.UnsupportedVirtDriver("},{"line_number":48,"context_line":"                driver\u003ddriver.__class__.__name__)"},{"line_number":49,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXuU%3D","line":46,"updated":"2014-01-14 14:52:56.000000000","message":"please use a , instead of the %","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"95a7d05e4e314f26a9c86187349e473a440d17ac","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    and use os.unlink to remove image, those like Nova default behavior."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":43,"context_line":"        nonapplicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":44,"context_line":"                                 vmwareapi.VMwareVCDriver]"},{"line_number":45,"context_line":"        if driver is not None and type(driver) in nonapplicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\"), driver)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FUQU%3D","line":43,"updated":"2014-01-15 05:53:04.000000000","message":"My thinking is:\n\n\t        nonapplicable_drivers \u003d [vmwareapi.VMwareESXDriver,\n                                                    vmwareapi.VMwareVCDriver]\n\t        if driver is None or type(driver) in nonapplicable_drivers:\n\t            LOG.error(_(\"Can\u0027t handle images of driver: %s\"), driver)\n                    driver_name \u003d \"None\" if driver is None else driver.__class__.__name__\n\t            raise exception.UnsupportedVirtDriver(driver\u003ddriver_name)\n                super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"11ac638c87f5703db3bfcb1a96b4bdd71f756157","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    and use os.unlink to remove image, those like Nova default behavior."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":43,"context_line":"        nonapplicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":44,"context_line":"                                 vmwareapi.VMwareVCDriver]"},{"line_number":45,"context_line":"        if driver is not None and type(driver) in nonapplicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\"), driver)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FO7Y%3D","line":43,"in_reply_to":"AAAAUH%2F%2FP2A%3D","updated":"2014-01-16 04:25:14.000000000","message":"Sorry I can\u0027t see the change in your latest PS, it seems your miss these changes of this file in there?","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a5e5f817f37b7baa35c315aa04f379bbd35ff8d1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    and use os.unlink to remove image, those like Nova default behavior."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":43,"context_line":"        nonapplicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":44,"context_line":"                                 vmwareapi.VMwareVCDriver]"},{"line_number":45,"context_line":"        if driver is not None and type(driver) in nonapplicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\"), driver)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FP2A%3D","line":43,"in_reply_to":"AAAAUH%2F%2FUQU%3D","updated":"2014-01-15 22:36:25.000000000","message":"Done","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"}],"nova/virt/imagehandler/vmware.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e4dbfb3881d05ea7db53146efed022b0337ea8e8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def _fetch_image(self, context, image_id, path,"},{"line_number":44,"context_line":"                     user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":45,"context_line":"                     **kwargs):"},{"line_number":46,"context_line":"        LOG.debug(_(\"Downloading image %(image_id)s from glance image server\")"},{"line_number":47,"context_line":"                  % {\u0027image_id\u0027: image_id})"},{"line_number":48,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":49,"context_line":"                                                                    image_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F%2FqM%3D","line":46,"updated":"2013-12-25 07:47:51.000000000","message":"when there is 1 parameter you do not need a dictionary","commit_id":"1d8f963e2d4e63fcbec8d7ef2b448fd7c2675661"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e4dbfb3881d05ea7db53146efed022b0337ea8e8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                     user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":45,"context_line":"                     **kwargs):"},{"line_number":46,"context_line":"        LOG.debug(_(\"Downloading image %(image_id)s from glance image server\")"},{"line_number":47,"context_line":"                  % {\u0027image_id\u0027: image_id})"},{"line_number":48,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":49,"context_line":"                                                                    image_id)"},{"line_number":50,"context_line":"        metadata \u003d image_service.show(context, image_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F%2FqI%3D","line":47,"updated":"2013-12-25 07:47:51.000000000","message":"please use a , instead of the %","commit_id":"1d8f963e2d4e63fcbec8d7ef2b448fd7c2675661"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e4dbfb3881d05ea7db53146efed022b0337ea8e8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            file_size)"},{"line_number":61,"context_line":"        start_transfer(context, read_file_handle, file_size,"},{"line_number":62,"context_line":"                       write_file_handle\u003dwrite_file_handle)"},{"line_number":63,"context_line":"        LOG.debug(_(\"Downloaded image %s from glance image server\") % image,"},{"line_number":64,"context_line":"                  instance\u003dinstance)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def start_transfer(context, read_file_handle, data_size,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F%2FqE%3D","line":63,"updated":"2013-12-25 07:47:51.000000000","message":"please use a , instead of the %","commit_id":"1d8f963e2d4e63fcbec8d7ef2b448fd7c2675661"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2013 VMware, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fgyw%3D","line":1,"updated":"2014-01-13 05:52:56.000000000","message":"IMO, we\u0027d better move this file to nova/virt/vmwareapi but this common place since I think this place should only store those common image handlers (or which can be used by multi-virtdirver).  As keeping consistent, you can take a look on my rbd image handler for libvirt: https://review.openstack.org/#/c/59149/2/nova/virt/libvirt/imagehandler.py (and https://review.openstack.org/#/c/59149/2/setup.cfg)","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2013 VMware, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FcP8%3D","line":1,"in_reply_to":"AAAAUH%2F%2Fgyw%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"VMware image handler implementation."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fgys%3D","line":16,"updated":"2014-01-13 05:52:56.000000000","message":"Add a blank before this line pls.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"VMware image handler implementation."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FcP4%3D","line":16,"in_reply_to":"AAAAUH%2F%2Fgys%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VMwareImageHandler(base.ImageHandler):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_schemes(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FgyY%3D","line":39,"updated":"2014-01-13 05:52:56.000000000","message":"OK let\u0027s talk about your second question which you raised at https://review.openstack.org/#/c/33409/30/nova/virt/imagehandler/base.py .\n\n\u003e\u003e\u003e\u003e The vmware driver will use exclusively the vmware image handler. I don\u0027t think it can work with the download image handler.\n\nFirst, nder my design/thinking, as an end user he should configure applicable handlers to image_handlers Nova option only, for example if he use libvirt virt driver then he should configure \"download\" to image_handlers option, but when he use vmware virt driver he should configure \"vmware\" (btw, I prefer name it to \"vmware_download_handler\", there is a dedicated comments for this).\n\nBut I agree, handler should has a capability to reject service request which from those non-applicable virt drivers, I think this is your point in your above asking, and also this capability can fix testing failure issue Jenkins raised. So my solution is this, adding a checking at here, to make the image handler can only work for those supported virt driver(s),  for example this VMwareImageHandler:\n\n    applicable_drivers \u003d [vmwareapi.VMWareESXDriver, vmwareapi.VMwareVCDriver]\n    if not type(driver) in applicable_drivers:\n        raise UnsupportedVirtDriver()    # Create a new exception (or just raise Exception ? )\n\nAnd IMO we need add similar checking to nova.virt.imagehandler.download.DownloadImageHandler also (I think you can do it in this #63975 change if you agree with me to go this way), like this:\n\n    nonapplicable_drivers \u003d [vmwareapi.VMWareESXDriver, vmwareapi.VMwareVCDriver]\n    if type(driver) in applicable_drivers:\n        raise UnsupportedVirtDriver()    # Create a new exception (or just raise Exception ? )\n\nAm I get my point correctly? Let me know what you think. Thanks.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VMwareImageHandler(base.ImageHandler):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_schemes(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fau8%3D","line":39,"in_reply_to":"AAAAUH%2F%2Fgrc%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c05c5849850d4c5f8a5d4e2c3587af890e31548d","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VMwareImageHandler(base.ImageHandler):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_schemes(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fgrc%3D","line":39,"in_reply_to":"AAAAUH%2F%2FgyY%3D","updated":"2014-01-13 06:07:34.000000000","message":"Additional, I forgot one point for above comments, you need change the default value of image_handlers option to \"vmware_download_handler, download\" from \"download\". (https://review.openstack.org/#/c/33409/30/nova/virt/imagehandler/__init__.py Line #36)\n\nEssentially, now we allow Nova configure multiple default image handlers but single, to make multiple virt driver happy on same time (libvirt and vmware in this case). In my eyes it just like we do some works privately to instead of end user do it manually.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VMwareImageHandler(base.ImageHandler):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_schemes(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FavA%3D","line":39,"in_reply_to":"AAAAUH%2F%2FgyY%3D","updated":"2014-01-14 00:22:05.000000000","message":"Yes, that makes sense. Thanks Zhi Yan.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            kwargs.get(\"data_center_name\"),"},{"line_number":58,"context_line":"            kwargs.get(\"datastore_name\"),"},{"line_number":59,"context_line":"            kwargs.get(\"cookies\"),"},{"line_number":60,"context_line":"            kwargs.get(\"file_path\"),"},{"line_number":61,"context_line":"            file_size)"},{"line_number":62,"context_line":"        self._start_transfer(context, read_file_handle, file_size,"},{"line_number":63,"context_line":"                       write_file_handle\u003dwrite_file_handle)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FgzI%3D","line":60,"updated":"2014-01-13 05:52:56.000000000","message":"Echo my latest comments in https://review.openstack.org/#/c/63975/4/nova/virt/vmwareapi/vmops.py , IMO we can/should pass \"file_path\" via \"path\" argument.\n\nI think this can answer your fist question: \"For the vmware image handler, there is no path (since we HTTP PUT the file to the destination).\" at https://review.openstack.org/#/c/33409/30/nova/virt/imagehandler/base.py .","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            kwargs.get(\"data_center_name\"),"},{"line_number":58,"context_line":"            kwargs.get(\"datastore_name\"),"},{"line_number":59,"context_line":"            kwargs.get(\"cookies\"),"},{"line_number":60,"context_line":"            kwargs.get(\"file_path\"),"},{"line_number":61,"context_line":"            file_size)"},{"line_number":62,"context_line":"        self._start_transfer(context, read_file_handle, file_size,"},{"line_number":63,"context_line":"                       write_file_handle\u003dwrite_file_handle)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FauE%3D","line":60,"in_reply_to":"AAAAUH%2F%2FgzI%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                      **kwargs):"},{"line_number":76,"context_line":"        raise NotImplementedError()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _start_transfer(context, read_file_handle, data_size,"},{"line_number":79,"context_line":"                        write_file_handle\u003dNone, image_service\u003dNone,"},{"line_number":80,"context_line":"                        image_id\u003dNone, image_meta\u003dNone):"},{"line_number":81,"context_line":"        \"\"\"Start the data transfer from the reader to the writer."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg1E%3D","line":78,"updated":"2014-01-13 05:52:56.000000000","message":"Why we not just reuse \u0027start_transfer\u0027 from https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/vmware_images.py#L36 ? since it seems the code are same.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                      **kwargs):"},{"line_number":76,"context_line":"        raise NotImplementedError()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _start_transfer(context, read_file_handle, data_size,"},{"line_number":79,"context_line":"                        write_file_handle\u003dNone, image_service\u003dNone,"},{"line_number":80,"context_line":"                        image_id\u003dNone, image_meta\u003dNone):"},{"line_number":81,"context_line":"        \"\"\"Start the data transfer from the reader to the writer."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fats%3D","line":78,"in_reply_to":"AAAAUH%2F%2Fg1E%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        pass"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class VMwareHTTPFile(object):"},{"line_number":168,"context_line":"    \"\"\"Base class for HTTP file.\"\"\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def __init__(self, file_handle):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg1A%3D","line":167,"updated":"2014-01-13 05:52:56.000000000","message":"And I\u0027m thinking why we not reuse below VMwareHTTPFile from read_write_util.py but duplicate it here if VMwareHTTPFile is still be used by VMwareHTTPReadFile ? (https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/read_write_util.py#L168 , also like https://review.openstack.org/#/c/63975/4/nova/virt/vmwareapi/read_write_util.py)","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        pass"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class VMwareHTTPFile(object):"},{"line_number":168,"context_line":"    \"\"\"Base class for HTTP file.\"\"\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def __init__(self, file_handle):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fasg%3D","line":167,"in_reply_to":"AAAAUH%2F%2Fg1A%3D","updated":"2014-01-14 00:22:05.000000000","message":"yep. I would like to move all the logic related to images to the image handler at some point.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        conn.putheader(\"Cookie\", self._build_vim_cookie_headers(cookies))"},{"line_number":235,"context_line":"        conn.endheaders()"},{"line_number":236,"context_line":"        self.conn \u003d conn"},{"line_number":237,"context_line":"        VMwareHTTPFile.__init__(self, conn)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def write(self, data):"},{"line_number":240,"context_line":"        \"\"\"Write to the file.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg1o%3D","line":237,"updated":"2014-01-13 05:52:56.000000000","message":"ditto","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        conn.putheader(\"Cookie\", self._build_vim_cookie_headers(cookies))"},{"line_number":235,"context_line":"        conn.endheaders()"},{"line_number":236,"context_line":"        self.conn \u003d conn"},{"line_number":237,"context_line":"        VMwareHTTPFile.__init__(self, conn)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def write(self, data):"},{"line_number":240,"context_line":"        \"\"\"Write to the file.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Farg%3D","line":237,"in_reply_to":"AAAAUH%2F%2Fg1o%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"}],"nova/virt/libvirt/imagecache.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"f7cc63d12a682628456507ef3a82ab18f7e3fe04","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from nova.openstack.common import processutils"},{"line_number":38,"context_line":"from nova import utils"},{"line_number":39,"context_line":"from nova.virt import imagecache"},{"line_number":40,"context_line":"from nova.virt import imagehandler"},{"line_number":41,"context_line":"from nova.virt.libvirt import utils as virtutils"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2BGx4%3D","side":"PARENT","line":40,"updated":"2014-01-30 03:16:33.000000000","message":"typo?\n\nbesides, this code is part of libvirt but vwmare driver.","commit_id":"9b262aa08e2f42b4f7bd245e06bc4b8e4c505239"}],"nova/virt/vmwareapi/download_imagehandler.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"602aa065aad370f1ec6ea2999b1ab1e5fd1e23ca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 VMware, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bvi4%3D","line":1,"updated":"2014-01-22 15:47:54.000000000","message":"According to this file and [1], I\u0027m thinking do you think we\u0027d better make a \"nova/virt/vmwareapi/imagehandler\" directory, and put all handler into it? like \"nova/virt/vmwareapi/imagehandler/download.py\" and \"copy.py\"\n\n[1] https://review.openstack.org/#/c/67606/6/nova/virt/vmwareapi/copy_imagehandler.py","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b6d0e9b25f3100186075ca371324770af043d43b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 VMware, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BuMQ%3D","line":1,"in_reply_to":"AAAAUH%2F%2Bvi4%3D","updated":"2014-01-24 03:13:50.000000000","message":"Done","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"602aa065aad370f1ec6ea2999b1ab1e5fd1e23ca","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d _(\"Can\u0027t handle images of driver: %s\"), driver"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            driver_name \u003d (\"None\" if driver is None"},{"line_number":39,"context_line":"                           else driver.__class__.__name__)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bv8c%3D","line":36,"updated":"2014-01-22 15:47:54.000000000","message":"do we need a \"()\" here?\n\n    msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b6d0e9b25f3100186075ca371324770af043d43b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d _(\"Can\u0027t handle images of driver: %s\"), driver"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            driver_name \u003d (\"None\" if driver is None"},{"line_number":39,"context_line":"                           else driver.__class__.__name__)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BuMA%3D","line":36,"in_reply_to":"AAAAUH%2F%2Bv8c%3D","updated":"2014-01-24 03:13:50.000000000","message":"Done","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"602aa065aad370f1ec6ea2999b1ab1e5fd1e23ca","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d _(\"Can\u0027t handle images of driver: %s\"), driver"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            driver_name \u003d (\"None\" if driver is None"},{"line_number":39,"context_line":"                           else driver.__class__.__name__)"},{"line_number":40,"context_line":"            raise Exception(msg)"},{"line_number":41,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bv8w%3D","line":38,"updated":"2014-01-22 15:47:54.000000000","message":"unused var","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b6d0e9b25f3100186075ca371324770af043d43b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d _(\"Can\u0027t handle images of driver: %s\"), driver"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            driver_name \u003d (\"None\" if driver is None"},{"line_number":39,"context_line":"                           else driver.__class__.__name__)"},{"line_number":40,"context_line":"            raise Exception(msg)"},{"line_number":41,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BuL8%3D","line":38,"in_reply_to":"AAAAUH%2F%2Bv8w%3D","updated":"2014-01-24 03:13:50.000000000","message":"Done","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"602aa065aad370f1ec6ea2999b1ab1e5fd1e23ca","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":71,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":72,"context_line":"                      **kwargs):"},{"line_number":73,"context_line":"        raise NotImplementedError()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _move_image(self, context, image_id, image_meta, src_path, dst_path,"},{"line_number":76,"context_line":"                    user_id\u003dNone, project_id\u003dNone, location\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bv4o%3D","line":73,"updated":"2014-01-22 15:47:54.000000000","message":"may I know your implementation plan for these two interfaces?","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b6d0e9b25f3100186075ca371324770af043d43b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":71,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":72,"context_line":"                      **kwargs):"},{"line_number":73,"context_line":"        raise NotImplementedError()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _move_image(self, context, image_id, image_meta, src_path, dst_path,"},{"line_number":76,"context_line":"                    user_id\u003dNone, project_id\u003dNone, location\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BuLQ%3D","line":73,"in_reply_to":"AAAAUH%2F%2Bv4o%3D","updated":"2014-01-24 03:13:50.000000000","message":"As of today, there is no need for them. \nI would prefer to implement them once we have a usecase.","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"688d17b042478b5cede416e84238fa91c3fd15cb","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":71,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":72,"context_line":"                      **kwargs):"},{"line_number":73,"context_line":"        raise NotImplementedError()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _move_image(self, context, image_id, image_meta, src_path, dst_path,"},{"line_number":76,"context_line":"                    user_id\u003dNone, project_id\u003dNone, location\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bsao%3D","line":73,"in_reply_to":"AAAAUH%2F%2Bv4o%3D","updated":"2014-01-23 03:51:05.000000000","message":"Still like to know. Can we implement them in this patch also?","commit_id":"9df319f0af26fa865998ae9b4cd85d17f78729b6"}],"nova/virt/vmwareapi/driver.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ee746e23f371e8d0a2bbf34b3ff2782aba5935ea","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                                        self._volumeops)"},{"line_number":123,"context_line":"        self._host \u003d host.Host(self._session)"},{"line_number":124,"context_line":"        self._host_state \u003d None"},{"line_number":125,"context_line":"        imagehandler.load_image_handlers(self)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        #TODO(hartsocks): back-off into a configuration test module."},{"line_number":128,"context_line":"        if CONF.vmware.use_linked_clone is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FZwI%3D","line":125,"updated":"2014-01-14 05:07:40.000000000","message":"Base class driver.ComputeDriver is already do this: https://review.openstack.org/#/c/33409/31/nova/virt/driver.py","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"}],"nova/virt/vmwareapi/imagehandler.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d1e06c905aae49f620b3a5216922cc14c0031df7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2013 VMware, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FXuI%3D","line":1,"updated":"2014-01-14 14:52:56.000000000","message":"ditto","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ee746e23f371e8d0a2bbf34b3ff2782aba5935ea","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":44,"context_line":"        applicable_drivers \u003d [VMwareESXDriver, VMwareVCDriver]"},{"line_number":45,"context_line":"        if type(driver) not in applicable_drivers:"},{"line_number":46,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\") % driver)"},{"line_number":47,"context_line":"            raise exception.UnsupportedVirtDriver("},{"line_number":48,"context_line":"                driver\u003ddriver.__class__.__name__)"},{"line_number":49,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FZyE%3D","line":46,"updated":"2014-01-14 05:07:40.000000000","message":"What about add a check for this 3 lines:\n\n    if driver is not None:\n        LOG ...\n        raise ...\n\n\n\nAnd, btw, I\u0027m thinking do you think it is better if we move this checking stuff to base handler? The reason to make me hesitated is that I\u0027m not sure if any image handler should all have this limitation. So IMHO I\u0027d like do this checking in sub-image-handler, like here. Any input on this?","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"67b4510f2802e418ecb5b0b8b021e86e34833eda","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        uses its own CHUNKSIZE."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            return self.iter.next()"},{"line_number":103,"context_line":"        except StopIteration:"},{"line_number":104,"context_line":"            return \"\""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FX9M%3D","line":102,"updated":"2014-01-14 14:10:27.000000000","message":"We discussed that you would need a Keep-Alive to the SOAP service to mitigate long-running file transfers timing-out the SOAP connections. Above this line is a good place for such a keep-alive to happen.","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"67b4510f2802e418ecb5b0b8b021e86e34833eda","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            return self.iter.next()"},{"line_number":103,"context_line":"        except StopIteration:"},{"line_number":104,"context_line":"            return \"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_next(self):"},{"line_number":107,"context_line":"        \"\"\"Get the next item from the image iterator.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FX94%3D","line":104,"updated":"2014-01-14 14:10:27.000000000","message":"is return \"\" the right thing here? I wonder if None is better since \"\" is an empty string or \u0027\\0\u0027 which *is* data. This feels like the mistake we made with the SOAP handlers assuming [] (empty list) was a fault or end of data.","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"67b4510f2802e418ecb5b0b8b021e86e34833eda","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def write(self, data):"},{"line_number":142,"context_line":"        \"\"\"Write to the file.\"\"\""},{"line_number":143,"context_line":"        self.file_handle.send(data)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def close(self):"},{"line_number":146,"context_line":"        \"\"\"Get the response and close the connection.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FX84%3D","line":143,"updated":"2014-01-14 14:10:27.000000000","message":"just above the send data is also a good place for a keep alive utility to happen.","commit_id":"73249780db0c29f51bae262d3ba056d31d2fee6d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"95a7d05e4e314f26a9c86187349e473a440d17ac","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":35,"context_line":"        applicable_drivers \u003d [VMwareESXDriver, VMwareVCDriver]"},{"line_number":36,"context_line":"        if driver is not None and type(driver) not in applicable_drivers:"},{"line_number":37,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\") % driver)"},{"line_number":38,"context_line":"            raise exception.UnsupportedVirtDriver("},{"line_number":39,"context_line":"                driver\u003ddriver.__class__.__name__)"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FUNA%3D","line":37,"updated":"2014-01-15 05:53:04.000000000","message":"could you pls refer my comments at https://review.openstack.org/#/c/63975/9/nova/virt/imagehandler/download.py for this.","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a5e5f817f37b7baa35c315aa04f379bbd35ff8d1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, driver\u003dNone, *args, **kwargs):"},{"line_number":35,"context_line":"        applicable_drivers \u003d [VMwareESXDriver, VMwareVCDriver]"},{"line_number":36,"context_line":"        if driver is not None and type(driver) not in applicable_drivers:"},{"line_number":37,"context_line":"            LOG.error(_(\"Can\u0027t handle images of driver: %(driver)s\") % driver)"},{"line_number":38,"context_line":"            raise exception.UnsupportedVirtDriver("},{"line_number":39,"context_line":"                driver\u003ddriver.__class__.__name__)"},{"line_number":40,"context_line":"        super(VMwareImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FP2M%3D","line":37,"in_reply_to":"AAAAUH%2F%2FUNA%3D","updated":"2014-01-15 22:36:25.000000000","message":"Done","commit_id":"7889ba9af09ced1790e39d4f925e2ec5004479ed"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"72041110f85c1a8094714f398be5fb56cbf52894","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        LOG.debug(_(\"Fetching image %s from glance image server\"), image_id)"},{"line_number":51,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":52,"context_line":"                                                                    image_id)"},{"line_number":53,"context_line":"        metadata \u003d image_service.show(context, image_id)"},{"line_number":54,"context_line":"        file_size \u003d int(metadata[\u0027size\u0027])"},{"line_number":55,"context_line":"        read_iter \u003d image_service.download(context, image_id)"},{"line_number":56,"context_line":"        read_file_handle \u003d read_write_util.GlanceFileRead(read_iter)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FO68%3D","line":53,"updated":"2014-01-16 04:28:33.000000000","message":"May I know why you need query image metadata again? we already have it in the context (argument).","commit_id":"62ff29c5250835930d5ff8e9721c75fee512097e"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"cb9d9e8a224e6caa2f7adba5a143c45d10f499cf","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        LOG.debug(_(\"Fetching image %s from glance image server\"), image_id)"},{"line_number":51,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":52,"context_line":"                                                                    image_id)"},{"line_number":53,"context_line":"        metadata \u003d image_service.show(context, image_id)"},{"line_number":54,"context_line":"        file_size \u003d int(metadata[\u0027size\u0027])"},{"line_number":55,"context_line":"        read_iter \u003d image_service.download(context, image_id)"},{"line_number":56,"context_line":"        read_file_handle \u003d read_write_util.GlanceFileRead(read_iter)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FKtc%3D","line":53,"in_reply_to":"AAAAUH%2F%2FO68%3D","updated":"2014-01-16 20:01:40.000000000","message":"Good catch: I forgot to remove it after rebase","commit_id":"62ff29c5250835930d5ff8e9721c75fee512097e"}],"nova/virt/vmwareapi/imagehandler/download.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"08f03d45ae34d0cc66ff47d730d00f7d9536e91c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            raise Exception(msg)"},{"line_number":39,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BqVI%3D","line":36,"updated":"2014-01-23 12:51:59.000000000","message":"you need a % instead of a , here","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0bb024dae8e2afc8630143cc8c3d35e000e4af7c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            raise Exception(msg)"},{"line_number":39,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BlxA%3D","line":36,"in_reply_to":"AAAAUH%2F%2Bn%2Fk%3D","updated":"2014-01-24 03:06:34.000000000","message":"@garyk, interesting may I know the reason? thanks.","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0a12e6078184be6ac38d4b598d00b84c10db0872","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            raise Exception(msg)"},{"line_number":39,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BoE8%3D","line":36,"in_reply_to":"AAAAUH%2F%2Bo%2BM%3D","updated":"2014-01-23 19:45:32.000000000","message":"I would be interested too","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f87de1f8591d5031397544af5eded5918c7389aa","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            raise Exception(msg)"},{"line_number":39,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2Bn%2Fk%3D","line":36,"in_reply_to":"AAAAUH%2F%2Bo%2BM%3D","updated":"2014-01-23 19:26:41.000000000","message":"in general i think that the log messages require a ,\na message or string that is used in an exception should have %","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d5ba2f6d65df8514f6a671888a3209b2246b91a2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        applicable_drivers \u003d [vmwareapi.VMwareESXDriver,"},{"line_number":34,"context_line":"                              vmwareapi.VMwareVCDriver]"},{"line_number":35,"context_line":"        if driver is None or type(driver) not in applicable_drivers:"},{"line_number":36,"context_line":"            msg \u003d (_(\"Can\u0027t handle images of driver: %s\"), driver)"},{"line_number":37,"context_line":"            LOG.warn(msg)"},{"line_number":38,"context_line":"            raise Exception(msg)"},{"line_number":39,"context_line":"        super(DownloadImageHandler, self).__init__(driver, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2Bo%2BM%3D","line":36,"in_reply_to":"AAAAUH%2F%2BqVI%3D","updated":"2014-01-23 16:49:01.000000000","message":"hello garyk, I saw you post similar comments for this stuff many times, it\u0027s worth I believe and actually I\u0027m interested to know when we should use \",\" instead of \"%\"? I know \"%\" can always work, but seems you think at a particular case using \",\" will be better, I\u0027d like to know your education on this, thanks.","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0bb024dae8e2afc8630143cc8c3d35e000e4af7c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.debug(_(\"Fetched image %s from glance image server\"), image_id)"},{"line_number":66,"context_line":"        return True"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":69,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"},{"line_number":70,"context_line":"                      **kwargs):"},{"line_number":71,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2Blw0%3D","line":68,"updated":"2014-01-24 03:06:34.000000000","message":"I have a same comment at here as https://review.openstack.org/#/c/63975/17/nova/virt/vmwareapi/download_imagehandler.py","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b130dcd6538cc06855382592d892e23965a4a614","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        vmware_images.start_transfer(context, read_file_handle, file_size,"},{"line_number":64,"context_line":"                                     write_file_handle\u003dwrite_file_handle)"},{"line_number":65,"context_line":"        LOG.debug(_(\"Fetched image %s from glance image server\"), image_id)"},{"line_number":66,"context_line":"        return True"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":69,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BbJc%3D","line":66,"updated":"2014-01-27 02:02:43.000000000","message":"Do we need a path to allow this function return False/failure? Do above functions calls can always be executed successful? thanks.","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        vmware_images.start_transfer(context, read_file_handle, file_size,"},{"line_number":64,"context_line":"                                     write_file_handle\u003dwrite_file_handle)"},{"line_number":65,"context_line":"        LOG.debug(_(\"Fetched image %s from glance image server\"), image_id)"},{"line_number":66,"context_line":"        return True"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"},{"line_number":69,"context_line":"                      user_id\u003dNone, project_id\u003dNone, location\u003dNone,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BXc0%3D","line":66,"in_reply_to":"AAAAUH%2F%2BbJc%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                      **kwargs):"},{"line_number":71,"context_line":"        session \u003d kwargs.get(\u0027session\u0027)"},{"line_number":72,"context_line":"        if session is None:"},{"line_number":73,"context_line":"            LOG.error(_(\"Cannot remove image %s with null session\") % image_id)"},{"line_number":74,"context_line":"            return False"},{"line_number":75,"context_line":"        dc_path \u003d kwargs.get(\"data_center_name\")"},{"line_number":76,"context_line":"        if dc_path is None:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTc%3D","line":73,"updated":"2014-01-26 11:08:10.000000000","message":"please use a , instead of %","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                      **kwargs):"},{"line_number":71,"context_line":"        session \u003d kwargs.get(\u0027session\u0027)"},{"line_number":72,"context_line":"        if session is None:"},{"line_number":73,"context_line":"            LOG.error(_(\"Cannot remove image %s with null session\") % image_id)"},{"line_number":74,"context_line":"            return False"},{"line_number":75,"context_line":"        dc_path \u003d kwargs.get(\"data_center_name\")"},{"line_number":76,"context_line":"        if dc_path is None:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BX%2F0%3D","line":73,"in_reply_to":"AAAAUH%2F%2BcTc%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            return False"},{"line_number":75,"context_line":"        dc_path \u003d kwargs.get(\"data_center_name\")"},{"line_number":76,"context_line":"        if dc_path is None:"},{"line_number":77,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":78,"context_line":"                      % image_id)"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTY%3D","line":77,"updated":"2014-01-26 11:08:10.000000000","message":"ditto","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            return False"},{"line_number":75,"context_line":"        dc_path \u003d kwargs.get(\"data_center_name\")"},{"line_number":76,"context_line":"        if dc_path is None:"},{"line_number":77,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":78,"context_line":"                      % image_id)"},{"line_number":79,"context_line":"            return False"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BX%2Fg%3D","line":77,"in_reply_to":"AAAAUH%2F%2BcTY%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b130dcd6538cc06855382592d892e23965a4a614","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                      dc_path)"},{"line_number":90,"context_line":"            return False"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        delete_task \u003d session._call_method(session._get_vim(),"},{"line_number":93,"context_line":"                                           \u0027DeleteDatastoreFile_Task\u0027,"},{"line_number":94,"context_line":"                                           service_content.fileManager,"},{"line_number":95,"context_line":"                                           name\u003dpath,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BbJU%3D","line":92,"updated":"2014-01-27 02:02:43.000000000","message":"do you think it will be better if we move this call into below try-catch protection block?","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                      dc_path)"},{"line_number":90,"context_line":"            return False"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        delete_task \u003d session._call_method(session._get_vim(),"},{"line_number":93,"context_line":"                                           \u0027DeleteDatastoreFile_Task\u0027,"},{"line_number":94,"context_line":"                                           service_content.fileManager,"},{"line_number":95,"context_line":"                                           name\u003dpath,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BXPU%3D","line":92,"in_reply_to":"AAAAUH%2F%2BbJU%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                    **kwargs):"},{"line_number":108,"context_line":"        session \u003d kwargs.get(\u0027session\u0027)"},{"line_number":109,"context_line":"        if session is None:"},{"line_number":110,"context_line":"            LOG.error(_(\"Cannot remove image %s with null session\") % image_id)"},{"line_number":111,"context_line":"            return False"},{"line_number":112,"context_line":"        src_dc_path \u003d kwargs.get(\"src_datacenter_name\")"},{"line_number":113,"context_line":"        if src_dc_path is None:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTU%3D","line":110,"updated":"2014-01-26 11:08:10.000000000","message":"ditto","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                    **kwargs):"},{"line_number":108,"context_line":"        session \u003d kwargs.get(\u0027session\u0027)"},{"line_number":109,"context_line":"        if session is None:"},{"line_number":110,"context_line":"            LOG.error(_(\"Cannot remove image %s with null session\") % image_id)"},{"line_number":111,"context_line":"            return False"},{"line_number":112,"context_line":"        src_dc_path \u003d kwargs.get(\"src_datacenter_name\")"},{"line_number":113,"context_line":"        if src_dc_path is None:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BX%2Bw%3D","line":110,"in_reply_to":"AAAAUH%2F%2BcTU%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return False"},{"line_number":112,"context_line":"        src_dc_path \u003d kwargs.get(\"src_datacenter_name\")"},{"line_number":113,"context_line":"        if src_dc_path is None:"},{"line_number":114,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":115,"context_line":"                      % image_id)"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":"        dst_dc_path \u003d kwargs.get(\"dst_datacenter_name\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTQ%3D","line":114,"updated":"2014-01-26 11:08:10.000000000","message":"ditto","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return False"},{"line_number":112,"context_line":"        src_dc_path \u003d kwargs.get(\"src_datacenter_name\")"},{"line_number":113,"context_line":"        if src_dc_path is None:"},{"line_number":114,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":115,"context_line":"                      % image_id)"},{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":"        dst_dc_path \u003d kwargs.get(\"dst_datacenter_name\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BX%2Bg%3D","line":114,"in_reply_to":"AAAAUH%2F%2BcTQ%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":"        dst_dc_path \u003d kwargs.get(\"dst_datacenter_name\")"},{"line_number":118,"context_line":"        if dst_dc_path is None:"},{"line_number":119,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":120,"context_line":"                      % image_id)"},{"line_number":121,"context_line":"            return False"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTM%3D","line":119,"updated":"2014-01-26 11:08:10.000000000","message":"ditto","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b130dcd6538cc06855382592d892e23965a4a614","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            return False"},{"line_number":117,"context_line":"        dst_dc_path \u003d kwargs.get(\"dst_datacenter_name\")"},{"line_number":118,"context_line":"        if dst_dc_path is None:"},{"line_number":119,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\")"},{"line_number":120,"context_line":"                      % image_id)"},{"line_number":121,"context_line":"            return False"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BbKI%3D","line":119,"updated":"2014-01-27 02:02:43.000000000","message":"what about give a different message for this log and above one at line #114?","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b130dcd6538cc06855382592d892e23965a4a614","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                      dst_dc_path)"},{"line_number":140,"context_line":"            return False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        move_task \u003d session._call_method(session._get_vim(),"},{"line_number":143,"context_line":"                                         \u0027MoveDatastoreFile_Task\u0027,"},{"line_number":144,"context_line":"                                         service_content.fileManager,"},{"line_number":145,"context_line":"                                         sourceName\u003dsrc_path,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BbJQ%3D","line":142,"updated":"2014-01-27 02:02:43.000000000","message":"do you think it will be better if we move this call into below try-catch protection block?","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                      dst_dc_path)"},{"line_number":140,"context_line":"            return False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        move_task \u003d session._call_method(session._get_vim(),"},{"line_number":143,"context_line":"                                         \u0027MoveDatastoreFile_Task\u0027,"},{"line_number":144,"context_line":"                                         service_content.fileManager,"},{"line_number":145,"context_line":"                                         sourceName\u003dsrc_path,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BXPQ%3D","line":142,"in_reply_to":"AAAAUH%2F%2BbJQ%3D","updated":"2014-01-27 19:03:47.000000000","message":"Done","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"acf7102bb03e1e127eaeb042003232b853549256","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                         destinationName\u003ddst_path,"},{"line_number":148,"context_line":"                                         destinationDatacenter\u003ddst_dc_moref)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":151,"context_line":"        except Exception as exc:"},{"line_number":152,"context_line":"            LOG.warn(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":153,"context_line":"                     {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BcTI%3D","line":150,"updated":"2014-01-26 11:08:10.000000000","message":"at the moment the _wait_for_task takes a parameter uuid. can you please add one. this hopefully may be drooped moving forwards","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"297140cf3d166cf65131001de3efb39631320f4c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                         destinationName\u003ddst_path,"},{"line_number":148,"context_line":"                                         destinationDatacenter\u003ddst_dc_moref)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":151,"context_line":"        except Exception as exc:"},{"line_number":152,"context_line":"            LOG.warn(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":153,"context_line":"                     {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BQq0%3D","line":150,"in_reply_to":"AAAAUH%2F%2BV9I%3D","updated":"2014-01-28 15:53:42.000000000","message":"I understand your point. I will fix it in my next patch.","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"66ab31ab8e1b41f96f05731d8fa269908d9e1132","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                         destinationName\u003ddst_path,"},{"line_number":148,"context_line":"                                         destinationDatacenter\u003ddst_dc_moref)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":151,"context_line":"        except Exception as exc:"},{"line_number":152,"context_line":"            LOG.warn(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":153,"context_line":"                     {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BV9I%3D","line":150,"in_reply_to":"AAAAUH%2F%2BXZw%3D","updated":"2014-01-27 21:01:18.000000000","message":"TBH, Arnaud do you think it will be better if we don\u0027t make this, an individual code, depends on a particular implementation details of another separated code/layer? Think about this if we determine enhance VMwareAPISession in future, we need fix here also, so IMO make an assumption to an implementation details seems not a good choice, we\u0027d better follow the interface.","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b130dcd6538cc06855382592d892e23965a4a614","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                         destinationName\u003ddst_path,"},{"line_number":148,"context_line":"                                         destinationDatacenter\u003ddst_dc_moref)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":151,"context_line":"        except Exception as exc:"},{"line_number":152,"context_line":"            LOG.warn(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":153,"context_line":"                     {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BbJ0%3D","line":150,"in_reply_to":"AAAAUH%2F%2BcTI%3D","updated":"2014-01-27 02:02:43.000000000","message":"+1","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"201103d5e0ff2a42cb7c7cdfad6afae55a31e29c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                         destinationName\u003ddst_path,"},{"line_number":148,"context_line":"                                         destinationDatacenter\u003ddst_dc_moref)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":151,"context_line":"        except Exception as exc:"},{"line_number":152,"context_line":"            LOG.warn(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":153,"context_line":"                     {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2BXZw%3D","line":150,"in_reply_to":"AAAAUH%2F%2BcTI%3D","updated":"2014-01-27 19:03:47.000000000","message":"this parameter is not used anywhere. see https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/driver.py#L886\nso I don\u0027t t think it\u0027s worth it.","commit_id":"4a3d80b6a9a4bdf0ccc9e3128dcc2993a0f04e00"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ee490002e047695239fa1371af96bb7404156350","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            LOG.error(_(\"Failed to fetch image %(image)s: %(exc)s\") %"},{"line_number":68,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"},{"line_number":69,"context_line":"            return False"},{"line_number":70,"context_line":"        LOG.debug(_(\"Fetched image %s from glance image server\"), image_id)"},{"line_number":71,"context_line":"        return True"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BWHM%3D","line":70,"updated":"2014-01-27 21:01:29.000000000","message":"nit: if so do you think it will be better if we give a particular debug message log for below two interfaces too?","commit_id":"04e1aefda2b301ed393cd8121e1e6a46c4683af4"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"562fc3826050c5b137410e03f9680c76c9476007","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            LOG.error(_(\"Failed to fetch image %(image)s: %(exc)s\") %"},{"line_number":68,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"},{"line_number":69,"context_line":"            return False"},{"line_number":70,"context_line":"        LOG.debug(_(\"Fetched image %s from glance image server\"), image_id)"},{"line_number":71,"context_line":"        return True"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _remove_image(self, context, image_id, image_meta, path,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BV7c%3D","line":70,"in_reply_to":"AAAAUH%2F%2BWHM%3D","updated":"2014-01-27 21:05:41.000000000","message":"good point: I will add it","commit_id":"04e1aefda2b301ed393cd8121e1e6a46c4683af4"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"cea9309b130ad7e09b2c98ae4ede217f133e8067","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                             destinationName\u003ddst_path,"},{"line_number":154,"context_line":"                                             destinationDatacenter\u003d"},{"line_number":155,"context_line":"                                             dst_dc_moref)"},{"line_number":156,"context_line":"            session._wait_for_task(None, move_task)"},{"line_number":157,"context_line":"        except Exception as exc:"},{"line_number":158,"context_line":"            LOG.error(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":159,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F%2BRGU%3D","line":156,"updated":"2014-01-28 14:57:00.000000000","message":"Arnaud not sure you noticed my asking at https://review.openstack.org/#/c/63975/22/nova/virt/vmwareapi/imagehandler/download.py , but I still think it will be more reasonable if we give a vm uuid at here. We can pass vm uuid into here from outside easilyvia \"kwargs\", right?","commit_id":"f959ea9fab5c44929ed1a5e6b51a46bbd65d94f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ec622a5526ccbc2a1ee9ae07388bd61e0f01cf70","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            LOG.error(_(\"Failed to move image %(image)s: %(exc)s\") %"},{"line_number":168,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"},{"line_number":169,"context_line":"            return False"},{"line_number":170,"context_line":"        LOG.debug(\"Moved image %(image)s from %(src_path)s to %(dst_path)s\" %"},{"line_number":171,"context_line":"                  {\u0027image\u0027: image_id, \u0027src_path\u0027: src_path,"},{"line_number":172,"context_line":"                   \u0027dst_path\u0027: dst_path})"},{"line_number":173,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2BGD4%3D","line":170,"updated":"2014-01-30 06:43:04.000000000","message":"1. using _() to help i18n.\n\n2. maybe change \u0027%\u0027 to \u0027,\u0027 ? ;)","commit_id":"af876e64f3d1283b5ea378cd98a4e2abcd3176b5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\"),"},{"line_number":83,"context_line":"                      image_id)"},{"line_number":84,"context_line":"            return False"},{"line_number":85,"context_line":"        instance_id \u003d kwargs.get(\"instance_id\")"},{"line_number":86,"context_line":"        if instance_id is None:"},{"line_number":87,"context_line":"            LOG.error(_(\"Cannot remove image %s with null instance id\"),"},{"line_number":88,"context_line":"                      image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dM%3D","line":85,"updated":"2014-02-09 13:19:12.000000000","message":"I do not think that this check is required - the instance_id in wait for task is not required - we can pass None - it is a parameter that is ignore and we are planning to drop it moving forwards","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            LOG.error(_(\"Cannot remove image %s with null datacenter path\"),"},{"line_number":83,"context_line":"                      image_id)"},{"line_number":84,"context_line":"            return False"},{"line_number":85,"context_line":"        instance_id \u003d kwargs.get(\"instance_id\")"},{"line_number":86,"context_line":"        if instance_id is None:"},{"line_number":87,"context_line":"            LOG.error(_(\"Cannot remove image %s with null instance id\"),"},{"line_number":88,"context_line":"                      image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwKg%3D","line":85,"in_reply_to":"AAAAUX%2F%2F7dM%3D","updated":"2014-02-11 03:16:04.000000000","message":"Done","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            LOG.error(_(\"Unable to find the moref for datacenter %s\"),"},{"line_number":98,"context_line":"                      dc_path)"},{"line_number":99,"context_line":"            return False"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            delete_task \u003d session._call_method(session._get_vim(),"},{"line_number":102,"context_line":"                                               \u0027DeleteDatastoreFile_Task\u0027,"},{"line_number":103,"context_line":"                                               service_content.fileManager,"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dk%3D","line":100,"updated":"2014-02-09 13:19:12.000000000","message":"you only need the try before line 106.\n\nat the moment we have the following in review: \n1. https://review.openstack.org/#/c/69622/ - you can check a specific exception for the deletion\n2. https://review.openstack.org/#/c/63933/ - you can use ds_util.delete\n\nI guess that if one of the above merges before then we can update\nOther than that I am fine with what we have at the moment","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            LOG.error(_(\"Unable to find the moref for datacenter %s\"),"},{"line_number":98,"context_line":"                      dc_path)"},{"line_number":99,"context_line":"            return False"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            delete_task \u003d session._call_method(session._get_vim(),"},{"line_number":102,"context_line":"                                               \u0027DeleteDatastoreFile_Task\u0027,"},{"line_number":103,"context_line":"                                               service_content.fileManager,"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwE8%3D","line":100,"in_reply_to":"AAAAUX%2F%2F7dk%3D","updated":"2014-02-11 03:16:04.000000000","message":"thanks for these patches. I will keep an eye on them. I will update this review if they land before mine.","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            session._wait_for_task(instance_id, delete_task)"},{"line_number":107,"context_line":"        except Exception as exc:"},{"line_number":108,"context_line":"            LOG.error(_(\"Failed to remove image %(image)s: %(exc)s\"),"},{"line_number":109,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"},{"line_number":110,"context_line":"            return False"},{"line_number":111,"context_line":"        LOG.debug(_(\"Removed image %(image)s from path %(path)s\"),"},{"line_number":112,"context_line":"                  {\u0027image\u0027: image_id, \u0027path\u0027: path})"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dg%3D","line":109,"updated":"2014-02-09 13:19:12.000000000","message":"Could there be a issue of a race here - that is, another process has deleted the image. Would this cause a problem?","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            session._wait_for_task(instance_id, delete_task)"},{"line_number":107,"context_line":"        except Exception as exc:"},{"line_number":108,"context_line":"            LOG.error(_(\"Failed to remove image %(image)s: %(exc)s\"),"},{"line_number":109,"context_line":"                      {\u0027image\u0027: image_id, \u0027exc\u0027: exc})"},{"line_number":110,"context_line":"            return False"},{"line_number":111,"context_line":"        LOG.debug(_(\"Removed image %(image)s from path %(path)s\"),"},{"line_number":112,"context_line":"                  {\u0027image\u0027: image_id, \u0027path\u0027: path})"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwDw%3D","line":109,"in_reply_to":"AAAAUX%2F%2F7dg%3D","updated":"2014-02-11 03:16:04.000000000","message":"I don\u0027t have a use case in mind where this could cause a problem tbh.\nIf P1 is process 1 and P2 is process 2:\nIf P1 has deleted the file and then P2 tries to delete it: no problem P2 will get the exception (file does not exist basically).\nIf P1 is deleting the file and P2 tries to delete it, VC should handle the race and raise.\n\nDo you have something else in mind?","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            LOG.error(_(\"Cannot remove image %s with null destination \""},{"line_number":130,"context_line":"                        \"datacenter path\"), image_id)"},{"line_number":131,"context_line":"            return False"},{"line_number":132,"context_line":"        instance_id \u003d kwargs.get(\"instance_id\")"},{"line_number":133,"context_line":"        if instance_id is None:"},{"line_number":134,"context_line":"            LOG.error(_(\"Cannot remove image %s with null instance id\"),"},{"line_number":135,"context_line":"                      image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dI%3D","line":132,"updated":"2014-02-09 13:19:12.000000000","message":"same comment regarding the instance_id above","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            LOG.error(_(\"Cannot remove image %s with null destination \""},{"line_number":130,"context_line":"                        \"datacenter path\"), image_id)"},{"line_number":131,"context_line":"            return False"},{"line_number":132,"context_line":"        instance_id \u003d kwargs.get(\"instance_id\")"},{"line_number":133,"context_line":"        if instance_id is None:"},{"line_number":134,"context_line":"            LOG.error(_(\"Cannot remove image %s with null instance id\"),"},{"line_number":135,"context_line":"                      image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwGM%3D","line":132,"in_reply_to":"AAAAUX%2F%2F7dI%3D","updated":"2014-02-11 03:16:04.000000000","message":"Done","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            return False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        service_content \u003d session._get_vim().get_service_content()"},{"line_number":139,"context_line":"        src_dc_moref \u003d session._call_method(session._get_vim(),"},{"line_number":140,"context_line":"                                            \u0027FindByInventoryPath\u0027,"},{"line_number":141,"context_line":"                                            service_content.searchIndex,"},{"line_number":142,"context_line":"                                            inventoryPath\u003dsrc_dc_path)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dY%3D","line":139,"updated":"2014-02-09 13:19:12.000000000","message":"Not related to this patch set, but would it be worthwhile caching the morefs? This will save queries on the backend.","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            return False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        service_content \u003d session._get_vim().get_service_content()"},{"line_number":139,"context_line":"        src_dc_moref \u003d session._call_method(session._get_vim(),"},{"line_number":140,"context_line":"                                            \u0027FindByInventoryPath\u0027,"},{"line_number":141,"context_line":"                                            service_content.searchIndex,"},{"line_number":142,"context_line":"                                            inventoryPath\u003dsrc_dc_path)"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwDY%3D","line":139,"in_reply_to":"AAAAUX%2F%2F7dY%3D","updated":"2014-02-11 03:16:04.000000000","message":"Good point, I will create a bug to keep that in mind. As you mentioned, this should be addressed in another patch.","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            LOG.error(_(\"Unable to find the moref for datacenter %s\"),"},{"line_number":154,"context_line":"                      dst_dc_path)"},{"line_number":155,"context_line":"            return False"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            move_task \u003d session._call_method(session._get_vim(),"},{"line_number":158,"context_line":"                                             \u0027MoveDatastoreFile_Task\u0027,"},{"line_number":159,"context_line":"                                             service_content.fileManager,"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dU%3D","line":156,"updated":"2014-02-09 13:19:12.000000000","message":"Same comments as above regarding patches in progress. Hopefully they may land before this one :)","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ff6c7d784c7961566ff4492f37ac631fa5d908fa","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                                             sourceDatacenter\u003dsrc_dc_moref,"},{"line_number":162,"context_line":"                                             destinationName\u003ddst_path,"},{"line_number":163,"context_line":"                                             destinationDatacenter\u003d"},{"line_number":164,"context_line":"                                             dst_dc_moref)"},{"line_number":165,"context_line":"            session._wait_for_task(instance_id, move_task)"},{"line_number":166,"context_line":"        except Exception as exc:"},{"line_number":167,"context_line":"            LOG.error(_(\"Failed to move image %(image)s: %(exc)s\"),"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2F7dQ%3D","line":164,"updated":"2014-02-09 13:19:12.000000000","message":"the try only needs to be before the session wait_for task","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"d0b4a0776c2fa73ec3b33ded2db571fd5cedbe5c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                                             sourceDatacenter\u003dsrc_dc_moref,"},{"line_number":162,"context_line":"                                             destinationName\u003ddst_path,"},{"line_number":163,"context_line":"                                             destinationDatacenter\u003d"},{"line_number":164,"context_line":"                                             dst_dc_moref)"},{"line_number":165,"context_line":"            session._wait_for_task(instance_id, move_task)"},{"line_number":166,"context_line":"        except Exception as exc:"},{"line_number":167,"context_line":"            LOG.error(_(\"Failed to move image %(image)s: %(exc)s\"),"}],"source_content_type":"text/x-python","patch_set":33,"id":"AAAAUX%2F%2FwFs%3D","line":164,"in_reply_to":"AAAAUX%2F%2F7dQ%3D","updated":"2014-02-11 03:16:04.000000000","message":"Done","commit_id":"adb64fd93bd4240e22d073f1b8fea02fe167fdfd"}],"nova/virt/vmwareapi/vmops.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                                if disk_type \u003d\u003d \"sparse\""},{"line_number":366,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            imagehandler.load_image_handlers(vmware.VMwareImageHandler())"},{"line_number":369,"context_line":"            handler, loc \u003d imagehandler.handle_image(context,"},{"line_number":370,"context_line":"                                                     instance[\u0027image_ref\u0027])"},{"line_number":371,"context_line":"            handler.fetch_image(context, instance[\u0027image_ref\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg30%3D","line":368,"updated":"2014-01-13 05:52:56.000000000","message":"IMO we can/should load image handlers only once when vmware driver startup, actually I already did it in driver\u0027s base class, at https://review.openstack.org/#/c/33409/30/nova/virt/driver.py .\n\nbtw, the argument here is wrong, it should be a driver instance but handler.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                                if disk_type \u003d\u003d \"sparse\""},{"line_number":366,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            imagehandler.load_image_handlers(vmware.VMwareImageHandler())"},{"line_number":369,"context_line":"            handler, loc \u003d imagehandler.handle_image(context,"},{"line_number":370,"context_line":"                                                     instance[\u0027image_ref\u0027])"},{"line_number":371,"context_line":"            handler.fetch_image(context, instance[\u0027image_ref\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FauU%3D","line":368,"in_reply_to":"AAAAUH%2F%2Fg30%3D","updated":"2014-01-14 00:22:05.000000000","message":"Yes, I wrote the patch very fast before going to vacation. I have a much cleaner version locally.","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            imagehandler.load_image_handlers(vmware.VMwareImageHandler())"},{"line_number":369,"context_line":"            handler, loc \u003d imagehandler.handle_image(context,"},{"line_number":370,"context_line":"                                                     instance[\u0027image_ref\u0027])"},{"line_number":371,"context_line":"            handler.fetch_image(context, instance[\u0027image_ref\u0027],"},{"line_number":372,"context_line":"                                host\u003dself._session._host_ip,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg3I%3D","line":369,"updated":"2014-01-13 05:52:56.000000000","message":"The usage of \"handle_image\" is wrong TBH, we need to try each enable/configured handlers but only one: https://review.openstack.org/#/c/33409/30/nova/virt/libvirt/imagecache.py .","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            imagehandler.load_image_handlers(vmware.VMwareImageHandler())"},{"line_number":369,"context_line":"            handler, loc \u003d imagehandler.handle_image(context,"},{"line_number":370,"context_line":"                                                     instance[\u0027image_ref\u0027])"},{"line_number":371,"context_line":"            handler.fetch_image(context, instance[\u0027image_ref\u0027],"},{"line_number":372,"context_line":"                                host\u003dself._session._host_ip,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FauM%3D","line":369,"in_reply_to":"AAAAUH%2F%2Fg3I%3D","updated":"2014-01-14 00:22:05.000000000","message":"fixed","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                                self._get_datacenter_ref_and_name()[1],"},{"line_number":375,"context_line":"                                datastore_name\u003ddata_store_name,"},{"line_number":376,"context_line":"                                cookies\u003dcookies,"},{"line_number":377,"context_line":"                                file_path\u003dupload_vmdk_name)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            LOG.debug(_(\"Downloaded image file data %(image_ref)s to \""},{"line_number":380,"context_line":"                        \"%(upload_vmdk_name)s on the ESX data store \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fg0M%3D","line":377,"updated":"2014-01-13 05:52:56.000000000","message":"IMO we should pass \"upload_vmdk_name\" variable into fetch_image() via \"path\" but \"file_path\" (as a item in kwargs).\n\nThis comments also related to your asking in https://review.openstack.org/#/c/33409/30/nova/virt/imagehandler/base.py .","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                                self._get_datacenter_ref_and_name()[1],"},{"line_number":375,"context_line":"                                datastore_name\u003ddata_store_name,"},{"line_number":376,"context_line":"                                cookies\u003dcookies,"},{"line_number":377,"context_line":"                                file_path\u003dupload_vmdk_name)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            LOG.debug(_(\"Downloaded image file data %(image_ref)s to \""},{"line_number":380,"context_line":"                        \"%(upload_vmdk_name)s on the ESX data store \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FauI%3D","line":377,"in_reply_to":"AAAAUH%2F%2Fg0M%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"08f03d45ae34d0cc66ff47d730d00f7d9536e91c","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            upload_vmdk_name \u003d (sparse_uploaded_vmdk_name"},{"line_number":395,"context_line":"                                if disk_type \u003d\u003d \"sparse\""},{"line_number":396,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":397,"context_line":"            for handler, loc, image_meta in imagehandler.handle_image("},{"line_number":398,"context_line":"                    context, instance[\u0027image_ref\u0027]):"},{"line_number":399,"context_line":"                handler.fetch_image(context, instance[\u0027image_ref\u0027], image_meta,"},{"line_number":400,"context_line":"                                    upload_vmdk_name,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BqUU%3D","line":397,"updated":"2014-01-23 12:51:59.000000000","message":"why do we need the loop here? if there is more than one image handler then this will be invoked more than once? is that what we want here? maybe I do not understand.","commit_id":"432da1d79423a24065dd08be83721241477c1487"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0a12e6078184be6ac38d4b598d00b84c10db0872","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            upload_vmdk_name \u003d (sparse_uploaded_vmdk_name"},{"line_number":395,"context_line":"                                if disk_type \u003d\u003d \"sparse\""},{"line_number":396,"context_line":"                                else flat_uploaded_vmdk_name)"},{"line_number":397,"context_line":"            for handler, loc, image_meta in imagehandler.handle_image("},{"line_number":398,"context_line":"                    context, instance[\u0027image_ref\u0027]):"},{"line_number":399,"context_line":"                handler.fetch_image(context, instance[\u0027image_ref\u0027], image_meta,"},{"line_number":400,"context_line":"                                    upload_vmdk_name,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2BoFY%3D","line":397,"in_reply_to":"AAAAUH%2F%2BqUU%3D","updated":"2014-01-23 19:45:32.000000000","message":"handle_image is a generator which is breaking the loop as soon as soon as fetch_image returns True (i.e. the image has been fetched). If fetch_image returns False, or the scheme of the location is not supported by the handler, the next handler will be used and so on.\nConsequently, the image will be fetched only one time.\n\nYou can look at the code of handle_image https://review.openstack.org/#/c/33409/40/nova/virt/imagehandler/__init__.py #116\n\nLet me know if I answer your question...","commit_id":"432da1d79423a24065dd08be83721241477c1487"}],"setup.cfg":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d1d0cd59b8d54907588fe0bc28cf4b44a03ae084","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    file \u003d nova.image.download.file"},{"line_number":32,"context_line":"nova.virt.image.handlers \u003d"},{"line_number":33,"context_line":"    download \u003d nova.virt.imagehandler.download:DownloadImageHandler"},{"line_number":34,"context_line":"    vmware \u003d nova.virt.imagehandler.vmware:VMwareImageHandler"},{"line_number":35,"context_line":"console_scripts \u003d"},{"line_number":36,"context_line":"    nova-all \u003d nova.cmd.all:main"},{"line_number":37,"context_line":"    nova-api \u003d nova.cmd.api:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"AAAAUH%2F%2Fgyk%3D","line":34,"updated":"2014-01-13 05:52:56.000000000","message":"Echo my first comments in https://review.openstack.org/#/c/63975/4/nova/virt/imagehandler/vmware.py , I\u0027d like to name this handler to \"vmware_download_handler\". It\u0027s also consistent with libvirt rbd image handler change at https://review.openstack.org/#/c/59149/2/setup.cfg .","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bdaf6f03c6d9d6ad6963f9daa597287c463fdc3a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    file \u003d nova.image.download.file"},{"line_number":32,"context_line":"nova.virt.image.handlers \u003d"},{"line_number":33,"context_line":"    download \u003d nova.virt.imagehandler.download:DownloadImageHandler"},{"line_number":34,"context_line":"    vmware \u003d nova.virt.imagehandler.vmware:VMwareImageHandler"},{"line_number":35,"context_line":"console_scripts \u003d"},{"line_number":36,"context_line":"    nova-all \u003d nova.cmd.all:main"},{"line_number":37,"context_line":"    nova-api \u003d nova.cmd.api:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"AAAAUH%2F%2FarM%3D","line":34,"in_reply_to":"AAAAUH%2F%2Fgyk%3D","updated":"2014-01-14 00:22:05.000000000","message":"Done","commit_id":"16de1d76d88cad67003d0e3c176dc8632632f91f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ec622a5526ccbc2a1ee9ae07388bd61e0f01cf70","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    file \u003d nova.image.download.file"},{"line_number":32,"context_line":"nova.virt.image.handlers \u003d"},{"line_number":33,"context_line":"    download \u003d nova.virt.imagehandler.download:DownloadImageHandler"},{"line_number":34,"context_line":"    vmware_download_handler \u003d nova.virt.vmwareapi.imagehandler.download:DownloadImageHandler"},{"line_number":35,"context_line":"console_scripts \u003d"},{"line_number":36,"context_line":"    nova-all \u003d nova.cmd.all:main"},{"line_number":37,"context_line":"    nova-api \u003d nova.cmd.api:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":29,"id":"AAAAUH%2F%2BGCo%3D","line":34,"updated":"2014-01-30 06:43:04.000000000","message":"nit: what about name this plugin to \"vmware_download\" ? I think it\u0027s better, and help to keep consistent: https://review.openstack.org/#/c/59149/15/setup.cfg","commit_id":"af876e64f3d1283b5ea378cd98a4e2abcd3176b5"}]}
