)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":20,"context_line":"The current implementation give this ability to specify the vCenter or"},{"line_number":21,"context_line":"ESX(i) IP. In case of a vCenter IP, there is no optimization to reduce"},{"line_number":22,"context_line":"the datapath (no host selected)."},{"line_number":23,"context_line":"Consequently, it is recommended to specify an ESX IP."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"docImpact"},{"line_number":26,"context_line":"Implements bp vmware-datastore-storage-backend"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F9xQs%3D","line":23,"updated":"2013-12-06 07:53:09.000000000","message":"suggest: ESX IP -\u003e ESX IP if the ESX host API endpoint is accessible from glance.","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b5cd73473bddfd2359a103c79317a1d6cabc50e8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"This patch contains a `glance/store/vmware/` folder with the code"},{"line_number":17,"context_line":"to manage the connection with vCenter or an ESX(i) host."},{"line_number":18,"context_line":"This code will go away as soon as it is merged to Olso:"},{"line_number":19,"context_line":"see review https://review.openstack.org/#/c/65075/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The current implementation give this ability to specify the vCenter or"},{"line_number":22,"context_line":"ESX(i) IP. In case of a vCenter IP, there is no optimization to reduce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"AAAAUH%2F%2FZ2Q%3D","line":19,"updated":"2014-01-14 04:14:16.000000000","message":"Do you think/mean we\u0027d better wait #65075 landing then to this patch?","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"3254f5f70e239db609d748bc5648099a35ae9c33","unresolved":false,"context_lines":[{"line_number":16,"context_line":"This patch contains a `glance/store/vmware/` folder with the code"},{"line_number":17,"context_line":"to manage the connection with vCenter or an ESX(i) host."},{"line_number":18,"context_line":"This code will go away as soon as it is merged to Olso:"},{"line_number":19,"context_line":"see review https://review.openstack.org/#/c/65075/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The current implementation give this ability to specify the vCenter or"},{"line_number":22,"context_line":"ESX(i) IP. In case of a vCenter IP, there is no optimization to reduce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"AAAAUH%2F%2FO6o%3D","line":19,"in_reply_to":"AAAAUH%2F%2FU18%3D","updated":"2014-01-16 04:57:48.000000000","message":"Sounds good to me, thanks for your explaining.","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"8b6633698484d6dfc38d7a4314192af8cca42d7a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"This patch contains a `glance/store/vmware/` folder with the code"},{"line_number":17,"context_line":"to manage the connection with vCenter or an ESX(i) host."},{"line_number":18,"context_line":"This code will go away as soon as it is merged to Olso:"},{"line_number":19,"context_line":"see review https://review.openstack.org/#/c/65075/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The current implementation give this ability to specify the vCenter or"},{"line_number":22,"context_line":"ESX(i) IP. In case of a vCenter IP, there is no optimization to reduce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"AAAAUH%2F%2FU18%3D","line":19,"in_reply_to":"AAAAUH%2F%2FZ2Q%3D","updated":"2014-01-15 23:39:12.000000000","message":"I would prefer to keep this patch independent from the rhythm of the other path in Oslo: I started this patch end of November already... :)\nI think this is not very important, just 3 files to remove later and I will definitely keep track of it.","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"57e1bb8a433d5e40b4baaf603d764cf7a06cfcb1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"This patch contains a \u0027glance/store/vmware/\u0027 folder with the code"},{"line_number":17,"context_line":"to manage the connection with vCenter or an ESX(i) host."},{"line_number":18,"context_line":"This code will go away as soon as it is merged to Olso:"},{"line_number":19,"context_line":"see review https://review.openstack.org/#/c/65075/"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The current implementation give this ability to specify the vCenter or"},{"line_number":22,"context_line":"ESX(i) IP. In case of a vCenter IP, there is no optimization to reduce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"AAAAUH%2F%2BAPE%3D","line":19,"updated":"2014-01-31 03:57:49.000000000","message":"hope this stuff can be landed soon. IMO oslo.vmware sounds better.","commit_id":"f9589bd010795b0daa101adfa18384b4be97e808"}],"doc/source/configuring.rst":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"Sets the storage backend to use by default when storing images in Glance."},{"line_number":317,"context_line":"Available options for this option are (``file``, ``swift``, ``s3``, ``rbd``, ``sheepdog``, "},{"line_number":318,"context_line":"``vsphere`` or ``cinder``)."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Configuring Glance Image Size Limit"},{"line_number":321,"context_line":"-----------------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F9%2FQ0%3D","line":318,"updated":"2013-12-03 18:42:00.000000000","message":"why not add it last?","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"Sets the storage backend to use by default when storing images in Glance."},{"line_number":317,"context_line":"Available options for this option are (``file``, ``swift``, ``s3``, ``rbd``, ``sheepdog``, "},{"line_number":318,"context_line":"``vsphere`` or ``cinder``)."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Configuring Glance Image Size Limit"},{"line_number":321,"context_line":"-----------------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F99s8%3D","line":318,"in_reply_to":"AAAATn%2F9%2FQ0%3D","updated":"2013-12-04 00:42:07.000000000","message":"Done","commit_id":"c933c57125837083fe95781a7de2f867131be65d"}],"doc/source/glanceapi.rst":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":405,"context_line":"* ``x-image-meta-store``"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"  This header is optional. Valid values are one of ``file``, ``s3``, ``rbd``,"},{"line_number":408,"context_line":"  ``swift``, ``cinder``, ``gridfs``, ``vsphere`` or ``sheepdog``"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"  When present, Glance will attempt to store the disk image data in the"},{"line_number":411,"context_line":"  backing store indicated by the value of the header. If the Glance node"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F9%2FQs%3D","line":408,"updated":"2013-12-03 18:42:00.000000000","message":"ditto","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":405,"context_line":"* ``x-image-meta-store``"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"  This header is optional. Valid values are one of ``file``, ``s3``, ``rbd``,"},{"line_number":408,"context_line":"  ``swift``, ``cinder``, ``gridfs``, ``vsphere`` or ``sheepdog``"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"  When present, Glance will attempt to store the disk image data in the"},{"line_number":411,"context_line":"  backing store indicated by the value of the header. If the Glance node"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F99so%3D","line":408,"in_reply_to":"AAAATn%2F9%2FQs%3D","updated":"2013-12-04 00:42:07.000000000","message":"Done","commit_id":"c933c57125837083fe95781a7de2f867131be65d"}],"etc/glance-api.conf":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":418,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":419,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name."}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F9%2FNs%3D","line":421,"updated":"2013-12-03 18:42:00.000000000","message":"in nova we have these as a section.\ndo you want to do the same with glance?\nin general the default values are comments","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":418,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":419,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name."}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F99rY%3D","line":421,"in_reply_to":"AAAATn%2F9%2FNs%3D","updated":"2013-12-04 00:42:07.000000000","message":"by section you mean [vmware]?\nI will stick with the pattern used in glance-api.conf for other stores. \nI think consistency within the project is more important than across projects.","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":443,"context_line":"vmware_datacenter_path \u003d datacenter"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"#  Datastore associated with the datacenter"},{"line_number":446,"context_line":"vmware_datastore_name \u003d datastore"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"# When sending images to the datastore, the data will first be written to a"},{"line_number":449,"context_line":"# temporary buffer on disk. By default the platform\u0027s temporary directory"}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F9%2FNo%3D","line":446,"updated":"2013-12-03 18:42:00.000000000","message":"what if there is more than one datastore?","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":443,"context_line":"vmware_datacenter_path \u003d datacenter"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"#  Datastore associated with the datacenter"},{"line_number":446,"context_line":"vmware_datastore_name \u003d datastore"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"# When sending images to the datastore, the data will first be written to a"},{"line_number":449,"context_line":"# temporary buffer on disk. By default the platform\u0027s temporary directory"}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F99nw%3D","line":446,"in_reply_to":"AAAATn%2F9%2FNo%3D","updated":"2013-12-04 00:42:07.000000000","message":"this implementation (v1) will take a datastore from the configuration. In the next version, the user will be able to not specify it and in this case, the datastore with the largest free space will be selected.","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"cd9b3fb3864d953400c01665359368bd9c0d3b0e","unresolved":false,"context_lines":[{"line_number":442,"context_line":"# e.g., socket error, etc (integer value)"},{"line_number":443,"context_line":"vmware_api_retry_count \u003d 10"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# The interval used for polling remote tasks"},{"line_number":446,"context_line":"# invoked on VMware ESX/VC server (integer value)"},{"line_number":447,"context_line":"vmware_task_poll_interval \u003d 5"},{"line_number":448,"context_line":""}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F92Nk%3D","line":445,"updated":"2013-12-05 09:57:51.000000000","message":"missing time unit","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"60eb6d61e9a8453337a4108ecbe79ef9e7c6df57","unresolved":false,"context_lines":[{"line_number":442,"context_line":"# e.g., socket error, etc (integer value)"},{"line_number":443,"context_line":"vmware_api_retry_count \u003d 10"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# The interval used for polling remote tasks"},{"line_number":446,"context_line":"# invoked on VMware ESX/VC server (integer value)"},{"line_number":447,"context_line":"vmware_task_poll_interval \u003d 5"},{"line_number":448,"context_line":""}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F9zfM%3D","line":445,"in_reply_to":"AAAATn%2F92Nk%3D","updated":"2013-12-05 18:13:26.000000000","message":"Done","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"cd9b3fb3864d953400c01665359368bd9c0d3b0e","unresolved":false,"context_lines":[{"line_number":449,"context_line":"# Max number of objects to be retrieved per batch. Query"},{"line_number":450,"context_line":"# results will be obtained in batches from the server and not"},{"line_number":451,"context_line":"# in one shot. Server may still limit the count to something"},{"line_number":452,"context_line":"# # less than the configured value. (integer value)"},{"line_number":453,"context_line":"vmware_max_objects_retrieval \u003d 100"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"# When sending images to the datastore, the data will first be written to a"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F92T4%3D","line":452,"updated":"2013-12-05 09:57:51.000000000","message":"# #","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"60eb6d61e9a8453337a4108ecbe79ef9e7c6df57","unresolved":false,"context_lines":[{"line_number":449,"context_line":"# Max number of objects to be retrieved per batch. Query"},{"line_number":450,"context_line":"# results will be obtained in batches from the server and not"},{"line_number":451,"context_line":"# in one shot. Server may still limit the count to something"},{"line_number":452,"context_line":"# # less than the configured value. (integer value)"},{"line_number":453,"context_line":"vmware_max_objects_retrieval \u003d 100"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"# When sending images to the datastore, the data will first be written to a"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F9zfI%3D","line":452,"in_reply_to":"AAAATn%2F92T4%3D","updated":"2013-12-05 18:13:26.000000000","message":"Done","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"cd9b3fb3864d953400c01665359368bd9c0d3b0e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"# When sending images to the datastore, the data will first be written to a"},{"line_number":456,"context_line":"# temporary buffer on disk. By default the platform\u0027s temporary directory"},{"line_number":457,"context_line":"# will be used. If required, an alternative directory can be specified here."},{"line_number":458,"context_line":"vmware_store_buffer_dir \u003d /tmp"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"# Name of the folder containing the images in the datastore"},{"line_number":461,"context_line":"vmware_glance_folder_name \u003d openstack_glance"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F92TU%3D","line":458,"updated":"2013-12-05 09:57:51.000000000","message":"Do we need to specify the type of value as in the previous cases? Same comment for vmware_server_ip and vmware_glance_folder_name.","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"60eb6d61e9a8453337a4108ecbe79ef9e7c6df57","unresolved":false,"context_lines":[{"line_number":455,"context_line":"# When sending images to the datastore, the data will first be written to a"},{"line_number":456,"context_line":"# temporary buffer on disk. By default the platform\u0027s temporary directory"},{"line_number":457,"context_line":"# will be used. If required, an alternative directory can be specified here."},{"line_number":458,"context_line":"vmware_store_buffer_dir \u003d /tmp"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"# Name of the folder containing the images in the datastore"},{"line_number":461,"context_line":"vmware_glance_folder_name \u003d openstack_glance"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F9zfE%3D","line":458,"in_reply_to":"AAAATn%2F92TU%3D","updated":"2013-12-05 18:13:26.000000000","message":"Done","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0bbd0ce1c606bfbc0e841930e4cdc48791f77b3e","unresolved":false,"context_lines":[{"line_number":418,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":419,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9dws%3D","line":421,"updated":"2013-12-11 08:31:01.000000000","message":"would it be worthwhile considering puttint these in a vmware section? not exactly sure what the glance policy is here","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":418,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":419,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9OaY%3D","line":421,"in_reply_to":"AAAATn%2F9dJA%3D","updated":"2013-12-14 02:21:41.000000000","message":"I agree with Zhi Yan. Glance consistency over across projects consistency.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"7f2d2d2dc32ec86737abfdef232e716af2390624","unresolved":false,"context_lines":[{"line_number":418,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":419,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9dJA%3D","line":421,"in_reply_to":"AAAATn%2F9dws%3D","updated":"2013-12-11 10:59:34.000000000","message":"good point, but I think it will be better if we keep this for consistent with other existing store options.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0bbd0ce1c606bfbc0e841930e4cdc48791f77b3e","unresolved":false,"context_lines":[{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":425,"context_line":"# e.g. 127.0.0.1"},{"line_number":426,"context_line":"vmware_server_ip \u003d \u003cNone\u003e"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"# Server username (string value)"},{"line_number":429,"context_line":"vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9dxw%3D","line":426,"updated":"2013-12-11 08:31:01.000000000","message":"why is this not in a comment? same for all of the rest below","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":425,"context_line":"# e.g. 127.0.0.1"},{"line_number":426,"context_line":"vmware_server_ip \u003d \u003cNone\u003e"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"# Server username (string value)"},{"line_number":429,"context_line":"vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9OaQ%3D","line":426,"in_reply_to":"AAAATn%2F9dI4%3D","updated":"2013-12-14 02:21:41.000000000","message":"Fixed.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"7f2d2d2dc32ec86737abfdef232e716af2390624","unresolved":false,"context_lines":[{"line_number":423,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":424,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":425,"context_line":"# e.g. 127.0.0.1"},{"line_number":426,"context_line":"vmware_server_ip \u003d \u003cNone\u003e"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"# Server username (string value)"},{"line_number":429,"context_line":"vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9dI4%3D","line":426,"in_reply_to":"AAAATn%2F9dxw%3D","updated":"2013-12-11 10:59:34.000000000","message":"+1","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":450,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":451,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":452,"context_line":"# e.g. 127.0.0.1"},{"line_number":453,"context_line":"#vmware_server_host \u003d \u003cNone\u003e"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"# Server username (string value)"},{"line_number":456,"context_line":"#vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":23,"id":"AAAAUH%2F%2Frt8%3D","line":453,"updated":"2014-01-09 17:09:55.000000000","message":"can we allow admin configure a port at here? like 192.168.0.1:8080 ? thanks. It depends on https://review.openstack.org/#/c/58883/23/glance/store/vmware_datastore.py Line #351 ? Do you think support customize port number is worth?","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":450,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":451,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":452,"context_line":"# e.g. 127.0.0.1"},{"line_number":453,"context_line":"#vmware_server_host \u003d \u003cNone\u003e"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"# Server username (string value)"},{"line_number":456,"context_line":"#vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":23,"id":"AAAAUH%2F%2FrHw%3D","line":453,"in_reply_to":"AAAAUH%2F%2Frt8%3D","updated":"2014-01-10 03:31:08.000000000","message":"Yes, using 192.168.0.1:8080 is valid.\nThe vmware session code is using it as a string and httplib supports httplib.HTTPConnection(\u0027192.168.0.1:8080\u0027)\nI have added more examples in the documentation.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"}],"etc/glance-cache.conf":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":157,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name."}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F9%2FNY%3D","line":159,"updated":"2013-12-03 18:42:00.000000000","message":"same comments as before","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":156,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":157,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name."}],"source_content_type":"text/plain","patch_set":5,"id":"AAAATn%2F99hQ%3D","line":159,"in_reply_to":"AAAATn%2F9%2FNY%3D","updated":"2013-12-04 00:42:07.000000000","message":"Done","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"cd9b3fb3864d953400c01665359368bd9c0d3b0e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":157,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F92NM%3D","line":159,"updated":"2013-12-05 09:57:51.000000000","message":"same comments as in glance-api.conf","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"60eb6d61e9a8453337a4108ecbe79ef9e7c6df57","unresolved":false,"context_lines":[{"line_number":156,"context_line":"# Allow to perform insecure SSL requests to cinder (boolean value)"},{"line_number":157,"context_line":"#cinder_api_insecure \u003d False"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d VMware Datastore Store Options \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAATn%2F9zek%3D","line":159,"in_reply_to":"AAAATn%2F92NM%3D","updated":"2013-12-05 18:13:26.000000000","message":"Done","commit_id":"ea09f28adce887058df392349c08a3668e738fee"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0bbd0ce1c606bfbc0e841930e4cdc48791f77b3e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":163,"context_line":"# e.g. 127.0.0.1"},{"line_number":164,"context_line":"vmware_server_ip \u003d \u003cNone\u003e"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"# Server username (string value)"},{"line_number":167,"context_line":"vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9dxc%3D","line":164,"updated":"2013-12-11 08:31:01.000000000","message":"same comment as before","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":161,"context_line":"# ESX/ESXi or vCenter Server target system."},{"line_number":162,"context_line":"# The server value can be an IP address or a DNS name"},{"line_number":163,"context_line":"# e.g. 127.0.0.1"},{"line_number":164,"context_line":"vmware_server_ip \u003d \u003cNone\u003e"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"# Server username (string value)"},{"line_number":167,"context_line":"vmware_server_username \u003d \u003cNone\u003e"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAATn%2F9OaA%3D","line":164,"in_reply_to":"AAAATn%2F9dxc%3D","updated":"2013-12-14 02:21:41.000000000","message":"Fixed","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"}],"glance/api/v1/images.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        If the above constraint is violated, we reject with 400 \"Bad Request\"."},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        if source:"},{"line_number":411,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027, \u0027cinder\u0027, \u0027vsphere\u0027]:"},{"line_number":412,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":413,"context_line":"                    return source"},{"line_number":414,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9%2FNI%3D","line":411,"updated":"2013-12-03 18:42:00.000000000","message":"did this pass pep8 - looks like the line is longer than 80","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        If the above constraint is violated, we reject with 400 \"Bad Request\"."},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        if source:"},{"line_number":411,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027, \u0027cinder\u0027, \u0027vsphere\u0027]:"},{"line_number":412,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":413,"context_line":"                    return source"},{"line_number":414,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F99gc%3D","line":411,"in_reply_to":"AAAATn%2F9%2FNI%3D","updated":"2013-12-04 00:42:07.000000000","message":"Done","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"a6d4156f5dea1ec745a308b2abd5bd05f5ecddca","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        if source:"},{"line_number":411,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027,"},{"line_number":412,"context_line":"                           \u0027cinder\u0027, \u0027vsphere\u0027]:"},{"line_number":413,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":414,"context_line":"                    return source"},{"line_number":415,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9qPw%3D","line":412,"updated":"2013-12-09 06:27:51.000000000","message":"This seems can cause some security issues, end user can give any path which may contains an existing vm\u0027s vmdk file within the same datastore.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"e59fa5436f9a9fcc7b31c18539b1ef85acca0b12","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        if source:"},{"line_number":411,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027,"},{"line_number":412,"context_line":"                           \u0027cinder\u0027, \u0027vsphere\u0027]:"},{"line_number":413,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":414,"context_line":"                    return source"},{"line_number":415,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9M10%3D","line":412,"in_reply_to":"AAAATn%2F9OFk%3D","updated":"2013-12-14 11:09:02.000000000","message":"First I see you had removed this change in your latest PS (#11), so I\u0027m little confused if you missed that? Or you are accepted my above comments.\n\nSecond I think your \"_check_store_image_dir()\" approach can partially addresses my concern, since any user can still register any other existed files/images as his image and download or delete it. But I think I can accept this approach if you see it is overkill and actually v1 is leaving :) Thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        if source:"},{"line_number":411,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027,"},{"line_number":412,"context_line":"                           \u0027cinder\u0027, \u0027vsphere\u0027]:"},{"line_number":413,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":414,"context_line":"                    return source"},{"line_number":415,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9OFk%3D","line":412,"in_reply_to":"AAAATn%2F9qPw%3D","updated":"2013-12-14 02:21:41.000000000","message":"I have added a check in parse_uri() to make sure the folder provided is the one specified in glance-api.conf\n\nsee _check_store_image_dir(self, image_dir_name)\n\nIt\u0027s up to the Glance administrator to specify a folder which makes sense (i.e. a folder that not used already). Then, end users will have to provide locations inside this folder.\n\nLet me know this addresses your concern Zhi Yan","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"}],"glance/store/location.py":[{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        s3+https://accesskey:secretkey@s3.amazonaws.com/bucket/key-id"},{"line_number":68,"context_line":"        file:///var/lib/glance/images/1"},{"line_number":69,"context_line":"        cinder://volume-id"},{"line_number":70,"context_line":"        vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":73,"context_line":"    if pieces.scheme not in SCHEME_TO_CLS_MAP.keys():"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9w%2Fc%3D","line":70,"updated":"2013-12-06 07:53:09.000000000","message":"the url format is rather unsatisfying as it has quite a few extraneous bits. We are not expect multiple glance servers to be able to interpret the same uri, right? If so, are there reasons why we want to model the glance uri after the format used by the vsphere http document handler?","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        s3+https://accesskey:secretkey@s3.amazonaws.com/bucket/key-id"},{"line_number":68,"context_line":"        file:///var/lib/glance/images/1"},{"line_number":69,"context_line":"        cinder://volume-id"},{"line_number":70,"context_line":"        vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":73,"context_line":"    if pieces.scheme not in SCHEME_TO_CLS_MAP.keys():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sY0%3D","line":70,"updated":"2013-12-07 10:19:03.000000000","message":"I\u0027m a little confused, \"vsphere\" is neither a storage name nor a storage service name or a access protocol name, can we use an other schema name, like, maybe, \"vmfs\" TBH.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"e59fa5436f9a9fcc7b31c18539b1ef85acca0b12","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        s3+https://accesskey:secretkey@s3.amazonaws.com/bucket/key-id"},{"line_number":68,"context_line":"        file:///var/lib/glance/images/1"},{"line_number":69,"context_line":"        cinder://volume-id"},{"line_number":70,"context_line":"        vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":73,"context_line":"    if pieces.scheme not in SCHEME_TO_CLS_MAP.keys():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9M54%3D","line":70,"in_reply_to":"AAAATn%2F9N9k%3D","updated":"2013-12-14 11:09:02.000000000","message":"ok, fine.\n\ni don\u0027t know what\u0027s better, it\u0027s just a little strange to me in this list.. but we know it\u0027s not important :)","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        s3+https://accesskey:secretkey@s3.amazonaws.com/bucket/key-id"},{"line_number":68,"context_line":"        file:///var/lib/glance/images/1"},{"line_number":69,"context_line":"        cinder://volume-id"},{"line_number":70,"context_line":"        vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    pieces \u003d urlparse.urlparse(uri)"},{"line_number":73,"context_line":"    if pieces.scheme not in SCHEME_TO_CLS_MAP.keys():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N9k%3D","line":70,"in_reply_to":"AAAATn%2F9sY0%3D","updated":"2013-12-14 02:21:41.000000000","message":"I understand your point, however, here the idea here is to say: ``store images on the vmware infrastructure``. vsphere is the most generic name that we have which encapsulates both ESX and vCenter.\nCalling it VMFS would not be wrong since the vmware infrastructure could be backed by NFS.\n\nlet me know what you think","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"}],"glance/store/vmware/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return func"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class VMwareAPISession(object):"},{"line_number":101,"context_line":"    \"\"\"Sets up a session with the server and handles all calls made to it.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @Retry(exceptions\u003d(Exception))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9%2FL0%3D","line":100,"updated":"2013-12-03 18:42:00.000000000","message":"please see the following bugs:\nhttps://review.openstack.org/#/c/52557/\nhttps://review.openstack.org/#/c/54808/","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return func"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class VMwareAPISession(object):"},{"line_number":101,"context_line":"    \"\"\"Sets up a session with the server and handles all calls made to it.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @Retry(exceptions\u003d(Exception))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F99cg%3D","line":100,"in_reply_to":"AAAATn%2F9%2FL0%3D","updated":"2013-12-04 00:42:07.000000000","message":"I hope that this code will be merged very soon... Otherwise, this will be a pain to maintain... Thanks for the links.","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"class VMwareAPISession(object):"},{"line_number":101,"context_line":"    \"\"\"Sets up a session with the server and handles all calls made to it.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @Retry(exceptions\u003d(Exception))"},{"line_number":104,"context_line":"    def __init__(self, server_ip, server_username, server_password,"},{"line_number":105,"context_line":"                 api_retry_count, task_poll_interval, scheme\u003d\u0027https\u0027,"},{"line_number":106,"context_line":"                 create_session\u003dTrue, wsdl_loc\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9p1s%3D","line":103,"updated":"2013-12-09 09:43:03.000000000","message":"nit: move this to \"create_session()\" ?","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"class VMwareAPISession(object):"},{"line_number":101,"context_line":"    \"\"\"Sets up a session with the server and handles all calls made to it.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @Retry(exceptions\u003d(Exception))"},{"line_number":104,"context_line":"    def __init__(self, server_ip, server_username, server_password,"},{"line_number":105,"context_line":"                 api_retry_count, task_poll_interval, scheme\u003d\u0027https\u0027,"},{"line_number":106,"context_line":"                 create_session\u003dTrue, wsdl_loc\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NXs%3D","line":103,"in_reply_to":"AAAATn%2F9p1s%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    # the same empty response, then we are sure of the"},{"line_number":214,"context_line":"                    # response being an empty response."},{"line_number":215,"context_line":"                    if error_util.NOT_AUTHENTICATED in last_fault_list:"},{"line_number":216,"context_line":"                        return []"},{"line_number":217,"context_line":"                    last_fault_list \u003d excep.fault_list"},{"line_number":218,"context_line":"                    LOG.exception(_(\"Not authenticated error occurred. \""},{"line_number":219,"context_line":"                                    \"Will create session and try \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9p08%3D","line":216,"updated":"2013-12-09 09:43:03.000000000","message":"I prefer add a warn/debug level log here for help debug.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    # the same empty response, then we are sure of the"},{"line_number":214,"context_line":"                    # response being an empty response."},{"line_number":215,"context_line":"                    if error_util.NOT_AUTHENTICATED in last_fault_list:"},{"line_number":216,"context_line":"                        return []"},{"line_number":217,"context_line":"                    last_fault_list \u003d excep.fault_list"},{"line_number":218,"context_line":"                    LOG.exception(_(\"Not authenticated error occurred. \""},{"line_number":219,"context_line":"                                    \"Will create session and try \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NXY%3D","line":216,"in_reply_to":"AAAATn%2F9p08%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0bbd0ce1c606bfbc0e841930e4cdc48791f77b3e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        loop \u003d loopingcall.FixedIntervalLoopingCall(self._poll_task,"},{"line_number":236,"context_line":"                                                    task, done)"},{"line_number":237,"context_line":"        loop.start(self._task_poll_interval)"},{"line_number":238,"context_line":"        task_info \u003d done.wait()"},{"line_number":239,"context_line":"        loop.stop()"},{"line_number":240,"context_line":"        return task_info"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9dxQ%3D","line":238,"updated":"2013-12-11 08:31:01.000000000","message":"Please add the chnages from https://review.openstack.org/#/c/54808/ here","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        loop \u003d loopingcall.FixedIntervalLoopingCall(self._poll_task,"},{"line_number":236,"context_line":"                                                    task, done)"},{"line_number":237,"context_line":"        loop.start(self._task_poll_interval)"},{"line_number":238,"context_line":"        task_info \u003d done.wait()"},{"line_number":239,"context_line":"        loop.stop()"},{"line_number":240,"context_line":"        return task_info"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NXc%3D","line":238,"in_reply_to":"AAAATn%2F9dxQ%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        In case of error sends back appropriate error."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        :param task: Managed object reference of the task"},{"line_number":249,"context_line":"        :param event: Event that captures task status"},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            task_info \u003d self.invoke_api(vim_util, \u0027get_object_property\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9p2g%3D","line":249,"updated":"2013-12-09 09:43:03.000000000","message":"\"event\" \u003d\u003e \"done\"","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        In case of error sends back appropriate error."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        :param task: Managed object reference of the task"},{"line_number":249,"context_line":"        :param event: Event that captures task status"},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            task_info \u003d self.invoke_api(vim_util, \u0027get_object_property\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NXk%3D","line":249,"in_reply_to":"AAAATn%2F9p2g%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"a57b56b8fa778561fdfe328517bedb964e2a95f6","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self._stop_loop(loop)"},{"line_number":247,"context_line":"        return task_info"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _poll_task(self, task, done):"},{"line_number":250,"context_line":"        \"\"\"Poll the given task."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        If the task completes successfully then returns task info."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F84qg%3D","line":249,"updated":"2013-12-19 08:10:49.000000000","message":"tbh, I think this part is worth thing really.\n\nI would rather to see you skip write dedicated test case (since you said this will coming soon as a part of oslo) for this part than remove this mechanism out tbh.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"}],"glance/store/vmware/error_util.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class VimFaultException(Exception):"},{"line_number":46,"context_line":"    \"\"\"The VIM Fault exception class.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, fault_list, msg):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Frqs%3D","line":45,"updated":"2014-01-09 17:09:55.000000000","message":"why not inherit from VimException?","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class VimFaultException(Exception):"},{"line_number":46,"context_line":"    \"\"\"The VIM Fault exception class.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, fault_list, msg):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrHM%3D","line":45,"in_reply_to":"AAAAUH%2F%2Frqs%3D","updated":"2014-01-10 03:31:08.000000000","message":"good catch! this will go away anyway as soon as the oslo change gets merged.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \"\"\"The VIM Fault exception class.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, fault_list, msg):"},{"line_number":49,"context_line":"        exception.Exception.__init__(self, msg)"},{"line_number":50,"context_line":"        self.fault_list \u003d fault_list"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrrQ%3D","line":49,"updated":"2014-01-09 17:09:55.000000000","message":"super(VimFaultException, self).__init__(msg)","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \"\"\"The VIM Fault exception class.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, fault_list, msg):"},{"line_number":49,"context_line":"        exception.Exception.__init__(self, msg)"},{"line_number":50,"context_line":"        self.fault_list \u003d fault_list"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrHk%3D","line":49,"in_reply_to":"AAAAUH%2F%2FrrQ%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"}],"glance/store/vmware/io_util.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","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) 2012 VMware, Inc."},{"line_number":4,"context_line":"# Copyright (c) 2011 Citrix Systems, Inc."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9psw%3D","line":1,"updated":"2013-12-09 09:43:03.000000000","message":"Seems you copy this stuff from nova directly as a part of vmware support code, but tbh these code are useless in this change.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","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) 2012 VMware, Inc."},{"line_number":4,"context_line":"# Copyright (c) 2011 Citrix Systems, Inc."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NX0%3D","line":1,"in_reply_to":"AAAATn%2F9psw%3D","updated":"2013-12-14 02:21:41.000000000","message":"That\u0027s correct: I forgot to remove it. Thanks Zhi Yan :)","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"}],"glance/store/vmware/vim.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\"Create communication interfaces for initiating SOAP transactions."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param protocol: http or https"},{"line_number":82,"context_line":"        :param host: Server IPAddress[:port] or Hostname[:port]"},{"line_number":83,"context_line":"        \"\"\""},{"line_number":84,"context_line":"        self._protocol \u003d protocol"},{"line_number":85,"context_line":"        self._host_name \u003d host"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9p0A%3D","line":82,"updated":"2013-12-09 09:43:03.000000000","message":"add \u0027wsdl_loc\u0027 docs also?","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\"Create communication interfaces for initiating SOAP transactions."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param protocol: http or https"},{"line_number":82,"context_line":"        :param host: Server IPAddress[:port] or Hostname[:port]"},{"line_number":83,"context_line":"        \"\"\""},{"line_number":84,"context_line":"        self._protocol \u003d protocol"},{"line_number":85,"context_line":"        self._host_name \u003d host"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NYI%3D","line":82,"in_reply_to":"AAAATn%2F9p0A%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import logging"},{"line_number":24,"context_line":"import suds"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from glance.store.vmware import error_util"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84ro%3D","line":24,"updated":"2013-12-19 08:13:03.000000000","message":"so this should has a dedicated import group, as a 3rd lib.\n\nSays add a blank before this line.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import logging"},{"line_number":24,"context_line":"import suds"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from glance.store.vmware import error_util"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F81as%3D","line":24,"in_reply_to":"AAAATn%2F84ro%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"}],"glance/store/vmware_datastore.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                          help\u003d\u0027Number of times VMware ESX/VC server API must be \u0027"},{"line_number":61,"context_line":"                               \u0027retried upon connection related issues.\u0027),"},{"line_number":62,"context_line":"               cfg.IntOpt(\u0027vmware_task_poll_interval\u0027,"},{"line_number":63,"context_line":"                          default\u003d5,"},{"line_number":64,"context_line":"                          help\u003d\u0027The interval used for polling remote tasks invoked on VMware ESX/VC server.\u0027),"},{"line_number":65,"context_line":"               cfg.StrOpt(\u0027vmware_datacenter_path\u0027,"},{"line_number":66,"context_line":"                          help\u003d\u0027Inventory path to a datacenter. If the vmware_server_ip specified is an ESX/ESXi, \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9%2FK8%3D","line":63,"updated":"2013-12-03 18:42:00.000000000","message":"pep8","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                          help\u003d\u0027Number of times VMware ESX/VC server API must be \u0027"},{"line_number":61,"context_line":"                               \u0027retried upon connection related issues.\u0027),"},{"line_number":62,"context_line":"               cfg.IntOpt(\u0027vmware_task_poll_interval\u0027,"},{"line_number":63,"context_line":"                          default\u003d5,"},{"line_number":64,"context_line":"                          help\u003d\u0027The interval used for polling remote tasks invoked on VMware ESX/VC server.\u0027),"},{"line_number":65,"context_line":"               cfg.StrOpt(\u0027vmware_datacenter_path\u0027,"},{"line_number":66,"context_line":"                          help\u003d\u0027Inventory path to a datacenter. If the vmware_server_ip specified is an ESX/ESXi, \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F99cM%3D","line":63,"in_reply_to":"AAAATn%2F9%2FK8%3D","updated":"2013-12-04 00:42:07.000000000","message":"Done","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"88f60ff5f6c879dcb7df04f91c86371ea49fde22","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 2010-2011 OpenStack, LLC"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F98wI%3D","line":3,"updated":"2013-12-04 06:00:14.000000000","message":"Copyright 2013?","commit_id":"13786234ec412c69eeb7272697950e72a75eff11"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"88f60ff5f6c879dcb7df04f91c86371ea49fde22","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        return False"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _build_vim_cookie_headers(self, vim_cookies):"},{"line_number":98,"context_line":"    \"\"\"Build ESX host session cookie headers.\"\"\""},{"line_number":99,"context_line":"    cookie_header \u003d \u0027\u0027"},{"line_number":100,"context_line":"    for vim_cookie in vim_cookies:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F98xM%3D","line":97,"updated":"2013-12-04 06:00:14.000000000","message":"Is this needed? This fn is defined within StoreLocation class as well.","commit_id":"13786234ec412c69eeb7272697950e72a75eff11"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"88f60ff5f6c879dcb7df04f91c86371ea49fde22","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    \"\"\""},{"line_number":126,"context_line":"    Class describing an VMware URI. An VMware URI can look like any of"},{"line_number":127,"context_line":"    the following:"},{"line_number":128,"context_line":"    vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":129,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F98v0%3D","line":126,"updated":"2013-12-04 06:00:14.000000000","message":"Could you take a look at http://docs.openstack.org/developer/hacking/#docstrings and conform here and below?","commit_id":"13786234ec412c69eeb7272697950e72a75eff11"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"88f60ff5f6c879dcb7df04f91c86371ea49fde22","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    \"\"\""},{"line_number":126,"context_line":"    Class describing an VMware URI. An VMware URI can look like any of"},{"line_number":127,"context_line":"    the following:"},{"line_number":128,"context_line":"    vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name"},{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def process_specs(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F98vA%3D","line":128,"updated":"2013-12-04 06:00:14.000000000","message":"Are there other forms of the uri that will be supported? Asking \u0027cos the doc suggests so.","commit_id":"13786234ec412c69eeb7272697950e72a75eff11"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               help\u003d_(\u0027Password for authenticating with \u0027"},{"line_number":51,"context_line":"                      \u0027VMware ESX/VC server.\u0027),"},{"line_number":52,"context_line":"               secret\u003dTrue),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027vmware_datacenter_path\u0027,"},{"line_number":54,"context_line":"               help\u003d_(\u0027Inventory path to a datacenter. \u0027"},{"line_number":55,"context_line":"                      \u0027If the vmware_server_ip specified is an ESX/ESXi, the \u0027"},{"line_number":56,"context_line":"                      \u0027vmware_datacenter_path should be \"ha-datacenter\".\u0027)),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9w%2B8%3D","line":53,"updated":"2013-12-06 07:53:09.000000000","message":"If we follow how most vsphere APIs are modeled, when connecting directly to the host, the datacenter path can be omitted. May want to consider doing the same here (one fewer thing the administrator need to worry about) (*)","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        return base_url + \u0027?\u0027 + self.query"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def parse_uri(self, uri):"},{"line_number":134,"context_line":"        self.scheme, self.server_ip, pieces, _, _, _ \u003d urlparse.urlparse(uri)"},{"line_number":135,"context_line":"        pieces \u003d pieces.split(\u0027?\u0027)"},{"line_number":136,"context_line":"        if len(pieces) \u003d\u003d 2:"},{"line_number":137,"context_line":"            self.path \u003d pieces[0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9xDM%3D","line":134,"updated":"2013-12-06 07:53:09.000000000","message":"How the uri got parsed was a surprise until I saw the urlparse source.","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        conn_class \u003d self._get_conn_class(loc)"},{"line_number":339,"context_line":"        conn \u003d conn_class(loc.server_ip)"},{"line_number":340,"context_line":"        conn.request(method,"},{"line_number":341,"context_line":"                     \u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query),"},{"line_number":342,"context_line":"                     content, headers)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        return conn"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9w9U%3D","line":341,"updated":"2013-12-06 07:53:09.000000000","message":"Following the comment in line 53:\nwhen against ESX, the dcPath\u003dxxx part can literally be omitted from the actual URI and the http request will still work as expected.","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"               default\u003d\u0027/tmp\u0027,"},{"line_number":76,"context_line":"               help\u003d_(\u0027The local directory where uploads will be staged \u0027"},{"line_number":77,"context_line":"                      \u0027before they are transfered into the datastore.\u0027)),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027vmware_glance_folder_name\u0027,"},{"line_number":79,"context_line":"               default\u003d\u0027openstack_glance\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027The name of the directory where the glance images \u0027"},{"line_number":81,"context_line":"                      \u0027will be stored in the VMware datastore.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sZ8%3D","line":78,"updated":"2013-12-07 10:19:03.000000000","message":"nit: rename to vmware_store_image_dir will be better?","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":75,"context_line":"               default\u003d\u0027/tmp\u0027,"},{"line_number":76,"context_line":"               help\u003d_(\u0027The local directory where uploads will be staged \u0027"},{"line_number":77,"context_line":"                      \u0027before they are transfered into the datastore.\u0027)),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027vmware_glance_folder_name\u0027,"},{"line_number":79,"context_line":"               default\u003d\u0027openstack_glance\u0027,"},{"line_number":80,"context_line":"               help\u003d_(\u0027The name of the directory where the glance images \u0027"},{"line_number":81,"context_line":"                      \u0027will be stored in the VMware datastore.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N8k%3D","line":78,"in_reply_to":"AAAATn%2F9sZ8%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        yield chunk"},{"line_number":105,"context_line":"        chunk \u003d response.read(size)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    conn.close()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sZc%3D","line":107,"updated":"2013-12-07 10:19:03.000000000","message":"seems you reused http-store\u0027s code, but I still prefer put this into a try-finally block.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        yield chunk"},{"line_number":105,"context_line":"        chunk \u003d response.read(size)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    conn.close()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class StoreLocation(glance.store.location.StoreLocation):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N7c%3D","line":107,"in_reply_to":"AAAATn%2F9sZc%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        self.path \u003d \u0027/folder/\u0027 + self.specs.get(\u0027folder_name\u0027) \\"},{"line_number":121,"context_line":"                    + \u0027/\u0027 + self.specs.get(\u0027image_id\u0027)"},{"line_number":122,"context_line":"        dc_path \u003d self.specs.get(\u0027datacenter_path\u0027)"},{"line_number":123,"context_line":"        if dc_path is not None:"},{"line_number":124,"context_line":"            param_list \u003d {\u0027dcPath\u0027: self.specs.get(\u0027datacenter_path\u0027),"},{"line_number":125,"context_line":"                          \u0027dsName\u0027: self.specs.get(\u0027datastore_name\u0027)}"},{"line_number":126,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sT0%3D","line":123,"updated":"2013-12-07 10:19:03.000000000","message":"Why we need this checking since base on code line #168, 178, datacenter_path will never be None. thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        self.path \u003d \u0027/folder/\u0027 + self.specs.get(\u0027folder_name\u0027) \\"},{"line_number":121,"context_line":"                    + \u0027/\u0027 + self.specs.get(\u0027image_id\u0027)"},{"line_number":122,"context_line":"        dc_path \u003d self.specs.get(\u0027datacenter_path\u0027)"},{"line_number":123,"context_line":"        if dc_path is not None:"},{"line_number":124,"context_line":"            param_list \u003d {\u0027dcPath\u0027: self.specs.get(\u0027datacenter_path\u0027),"},{"line_number":125,"context_line":"                          \u0027dsName\u0027: self.specs.get(\u0027datastore_name\u0027)}"},{"line_number":126,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N34%3D","line":123,"in_reply_to":"AAAATn%2F9sT0%3D","updated":"2013-12-14 02:21:41.000000000","message":"good catch. I will change line #168","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self.path \u003d pieces[0]"},{"line_number":143,"context_line":"            self.query \u003d pieces[1]"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sYk%3D","line":145,"updated":"2013-12-07 10:19:03.000000000","message":"why we need this? seems it\u0027s unused, thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self.path \u003d pieces[0]"},{"line_number":143,"context_line":"            self.query \u003d pieces[1]"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N2g%3D","line":145,"in_reply_to":"AAAATn%2F9sYk%3D","updated":"2013-12-14 02:21:41.000000000","message":"on this one you might have an hint... this is weird. When I run the test without the import: \npython -m unittest test glance.tests.unit.test_store_location\n\nI get this exception:\nFile \"glance/store/vmware_datastore.py\", line 158, in parse_uri\n    reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)\nTypeError: \u0027str\u0027 object is not callable","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.query \u003d pieces[1]"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sYQ%3D","line":146,"updated":"2013-12-07 10:19:03.000000000","message":"Write bad URI to log? It can help debug I think.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.query \u003d pieces[1]"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N2I%3D","line":146,"in_reply_to":"AAAATn%2F9sYQ%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class Store(glance.store.base.Store):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sYI%3D","line":148,"updated":"2013-12-07 10:19:03.000000000","message":"pass URI and reason into exception message IMO.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            from glance.openstack.common.gettextutils import _"},{"line_number":146,"context_line":"            reason \u003d _(\u0027Badly formed VMware datastore URI.\u0027)"},{"line_number":147,"context_line":"            LOG.debug(reason)"},{"line_number":148,"context_line":"            raise exception.BadStoreUri()"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class Store(glance.store.base.Store):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N1o%3D","line":148,"in_reply_to":"AAAATn%2F9sYI%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.datastore_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":170,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":171,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":172,"context_line":"        self.max_objects \u003d CONF.vmware_max_objects_retrieval"},{"line_number":173,"context_line":"        self.ds_store_buffer_dir \u003d CONF.vmware_store_buffer_dir"},{"line_number":174,"context_line":"        self.ds_glance_folder_name \u003d CONF.vmware_glance_folder_name"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sTA%3D","line":172,"updated":"2013-12-07 10:19:03.000000000","message":"who use it? thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.datastore_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":170,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":171,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":172,"context_line":"        self.max_objects \u003d CONF.vmware_max_objects_retrieval"},{"line_number":173,"context_line":"        self.ds_store_buffer_dir \u003d CONF.vmware_store_buffer_dir"},{"line_number":174,"context_line":"        self.ds_glance_folder_name \u003d CONF.vmware_glance_folder_name"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9N1U%3D","line":172,"in_reply_to":"AAAATn%2F9sTA%3D","updated":"2013-12-14 02:21:41.000000000","message":"Good catch. fixed!","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":171,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":172,"context_line":"        self.max_objects \u003d CONF.vmware_max_objects_retrieval"},{"line_number":173,"context_line":"        self.ds_store_buffer_dir \u003d CONF.vmware_store_buffer_dir"},{"line_number":174,"context_line":"        self.ds_glance_folder_name \u003d CONF.vmware_glance_folder_name"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _option_get(self, param):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sUo%3D","line":173,"updated":"2013-12-07 10:19:03.000000000","message":"1. As I mentioned at line #256, I prefer move above items to configure() and keep self.ds_store_buffer_dir, self.ds_glance_folder_name assignment here only.\n\n2. Adding a checking to make sure admin configured vmware_store_buffer_dir option is valid and raise a BadStoreConfiguration exception if it\u0027s avoid, this can ask glance make this store be readonly. This can prevent OSError (errno\u003d2, no such file or dir) exception raising at line #227.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":171,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":172,"context_line":"        self.max_objects \u003d CONF.vmware_max_objects_retrieval"},{"line_number":173,"context_line":"        self.ds_store_buffer_dir \u003d CONF.vmware_store_buffer_dir"},{"line_number":174,"context_line":"        self.ds_glance_folder_name \u003d CONF.vmware_glance_folder_name"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _option_get(self, param):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NqQ%3D","line":173,"in_reply_to":"AAAATn%2F9sUo%3D","updated":"2013-12-14 02:21:41.000000000","message":"Fixed 1. and 2.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":178,"context_line":"        if not result:"},{"line_number":179,"context_line":"            reason \u003d (_(\u0027Could not find %(param)s in \u0027"},{"line_number":180,"context_line":"                        \u0027configuration options.\u0027) % locals())"},{"line_number":181,"context_line":"            LOG.error(reason)"},{"line_number":182,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":183,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sTw%3D","line":180,"updated":"2013-12-07 10:19:03.000000000","message":"I prefer not use \"locals()\".","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        result \u003d getattr(CONF, param)"},{"line_number":178,"context_line":"        if not result:"},{"line_number":179,"context_line":"            reason \u003d (_(\u0027Could not find %(param)s in \u0027"},{"line_number":180,"context_line":"                        \u0027configuration options.\u0027) % locals())"},{"line_number":181,"context_line":"            LOG.error(reason)"},{"line_number":182,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":183,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9Nzc%3D","line":180,"in_reply_to":"AAAATn%2F9sTw%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        cookie_header \u003d \u0027\u0027"},{"line_number":189,"context_line":"        for vim_cookie in vim_cookies:"},{"line_number":190,"context_line":"            cookie_header \u003d vim_cookie.name + \u0027\u003d\u0027 + vim_cookie.value"},{"line_number":191,"context_line":"            break"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return cookie_header"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sX8%3D","line":191,"updated":"2013-12-07 10:19:03.000000000","message":"why we skip others VIM client cookies, and only use first one? from below logic (and this function name) I suppose it should cover all headers. thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        cookie_header \u003d \u0027\u0027"},{"line_number":189,"context_line":"        for vim_cookie in vim_cookies:"},{"line_number":190,"context_line":"            cookie_header \u003d vim_cookie.name + \u0027\u003d\u0027 + vim_cookie.value"},{"line_number":191,"context_line":"            break"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return cookie_header"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9Nis%3D","line":191,"in_reply_to":"AAAATn%2F9sX8%3D","updated":"2013-12-14 02:21:41.000000000","message":"I changed the name of the function (removed the \u0027s\u0027). cookilib.cookieJar will contain only one value: that\u0027s why we break.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return cookie_header"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def get_connection(self):"},{"line_number":196,"context_line":"        return api.VMwareAPISession(self.server_ip,"},{"line_number":197,"context_line":"                                    self.server_username,"},{"line_number":198,"context_line":"                                    self.server_password,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sSs%3D","line":195,"updated":"2013-12-07 10:19:03.000000000","message":"nit: I prefer name it to \"_get_api_conn\". Line #342.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return cookie_header"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def get_connection(self):"},{"line_number":196,"context_line":"        return api.VMwareAPISession(self.server_ip,"},{"line_number":197,"context_line":"                                    self.server_username,"},{"line_number":198,"context_line":"                                    self.server_password,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9Nig%3D","line":195,"in_reply_to":"AAAATn%2F9sSs%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        :raises `glance.common.exception.Duplicate` if the image already"},{"line_number":214,"context_line":"                existed"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        if not connection:"},{"line_number":217,"context_line":"            self._session \u003d self.get_connection()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        loc \u003d StoreLocation({\u0027scheme\u0027: self.scheme,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sXI%3D","line":216,"updated":"2013-12-07 10:19:03.000000000","message":"when and where pass an existing VIM connection in for add(), get() and get_size() and delete()? seems it\u0027s unused. thanks.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        :raises `glance.common.exception.Duplicate` if the image already"},{"line_number":214,"context_line":"                existed"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        if not connection:"},{"line_number":217,"context_line":"            self._session \u003d self.get_connection()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        loc \u003d StoreLocation({\u0027scheme\u0027: self.scheme,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NiU%3D","line":216,"in_reply_to":"AAAATn%2F9sXI%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":229,"context_line":"        for chunk in utils.chunkreadable(image_file, self.CHUNKSIZE):"},{"line_number":230,"context_line":"            checksum.update(chunk)"},{"line_number":231,"context_line":"            temp_file.write(chunk)"},{"line_number":232,"context_line":"        temp_file.flush()"},{"line_number":233,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sUI%3D","line":231,"updated":"2013-12-07 10:19:03.000000000","message":"why we need a tmp file here? IMO we can pass image_file to https request content (Line #239) directly. Do you use this to calculate checksum only? we can write a middle iterator generate function, and do the calculation at there.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":229,"context_line":"        for chunk in utils.chunkreadable(image_file, self.CHUNKSIZE):"},{"line_number":230,"context_line":"            checksum.update(chunk)"},{"line_number":231,"context_line":"            temp_file.write(chunk)"},{"line_number":232,"context_line":"        temp_file.flush()"},{"line_number":233,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9Nfs%3D","line":231,"in_reply_to":"AAAATn%2F9sUI%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        :param connection: Connection to VIM service"},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        if not connection:"},{"line_number":256,"context_line":"            self._session \u003d self.get_connection()"},{"line_number":257,"context_line":"        cookie \u003d self._build_vim_cookie_headers("},{"line_number":258,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":259,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sWs%3D","line":256,"updated":"2013-12-07 10:19:03.000000000","message":"so I prefer rename configure_add() to configure(). pls refer my comments at line #173.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        :param connection: Connection to VIM service"},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        if not connection:"},{"line_number":256,"context_line":"            self._session \u003d self.get_connection()"},{"line_number":257,"context_line":"        cookie \u003d self._build_vim_cookie_headers("},{"line_number":258,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":259,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9Nfk%3D","line":256,"in_reply_to":"AAAATn%2F9sWs%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        conn, resp, content_length \u003d self._query(location,"},{"line_number":306,"context_line":"                                                 \u0027DELETE\u0027,"},{"line_number":307,"context_line":"                                                 headers\u003d{\u0027Cookie\u0027: cookie})"},{"line_number":308,"context_line":"        if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":309,"context_line":"            msg \u003d _(\u0027VMware datastore could not find image at URI.\u0027)"},{"line_number":310,"context_line":"            raise exception.NotFound(msg)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sVU%3D","line":308,"updated":"2013-12-07 10:19:03.000000000","message":"Base on code at line #321, this check will never be used.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        conn, resp, content_length \u003d self._query(location,"},{"line_number":306,"context_line":"                                                 \u0027DELETE\u0027,"},{"line_number":307,"context_line":"                                                 headers\u003d{\u0027Cookie\u0027: cookie})"},{"line_number":308,"context_line":"        if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":309,"context_line":"            msg \u003d _(\u0027VMware datastore could not find image at URI.\u0027)"},{"line_number":310,"context_line":"            raise exception.NotFound(msg)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NfU%3D","line":308,"in_reply_to":"AAAATn%2F9sVU%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def _query(self, location, method, headers, depth\u003d0):"},{"line_number":313,"context_line":"        if depth \u003e MAX_REDIRECTS:"},{"line_number":314,"context_line":"            raise exception.MaxRedirectsExceeded(redirects\u003dMAX_REDIRECTS)"},{"line_number":315,"context_line":"        loc \u003d location.store_location"},{"line_number":316,"context_line":"        conn \u003d self._get_conn(method, loc, headers)"},{"line_number":317,"context_line":"        resp \u003d conn.getresponse()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sVI%3D","line":314,"updated":"2013-12-07 10:19:03.000000000","message":"Arnaud I saw your +1ed at [1], so I think you agreed with we to add a log at here and following.\n\n[1] https://review.openstack.org/#/c/60041/6/glance/store/http.py","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def _query(self, location, method, headers, depth\u003d0):"},{"line_number":313,"context_line":"        if depth \u003e MAX_REDIRECTS:"},{"line_number":314,"context_line":"            raise exception.MaxRedirectsExceeded(redirects\u003dMAX_REDIRECTS)"},{"line_number":315,"context_line":"        loc \u003d location.store_location"},{"line_number":316,"context_line":"        conn \u003d self._get_conn(method, loc, headers)"},{"line_number":317,"context_line":"        resp \u003d conn.getresponse()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NfE%3D","line":314,"in_reply_to":"AAAATn%2F9sVI%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d42dfa8c71218eda6c7c3512c90b7e60b505686c","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return (conn, resp, content_length)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _get_conn(self, method, loc, headers, content\u003dNone):"},{"line_number":343,"context_line":"        conn_class \u003d self._get_conn_class(loc)"},{"line_number":344,"context_line":"        conn \u003d conn_class(loc.server_ip)"},{"line_number":345,"context_line":"        conn.request(method,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9sSo%3D","line":342,"updated":"2013-12-07 10:19:03.000000000","message":"nit: I prefer name it to \"_get_http_conn\". Line #195","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return (conn, resp, content_length)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _get_conn(self, method, loc, headers, content\u003dNone):"},{"line_number":343,"context_line":"        conn_class \u003d self._get_conn_class(loc)"},{"line_number":344,"context_line":"        conn \u003d conn_class(loc.server_ip)"},{"line_number":345,"context_line":"        conn.request(method,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NfA%3D","line":342,"in_reply_to":"AAAATn%2F9sSo%3D","updated":"2013-12-14 02:21:41.000000000","message":"Done","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"736c88435ce83c720a19b5a8775d54cdf97e764c","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        \"\"\"Returns connection class for accessing the resource. Useful"},{"line_number":353,"context_line":"        for dependency injection and stubouts in testing..."},{"line_number":354,"context_line":"        \"\"\""},{"line_number":355,"context_line":"        return {\u0027vsphere\u0027: httplib.HTTPSConnection}[loc.scheme]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9poM%3D","line":355,"updated":"2013-12-09 09:43:03.000000000","message":"nit: do you think it will be better if we allow end user (admin) configure this protocol for esxi/vc accessing? from the code [1] i\u0027m sure this can be supported easily. The reason is that I\u0027m thinking how we do it If there has a firewall between the glance-api and esxi/vc management network, and only enabled 80 (or 443) port.\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/read_write_util.py#L129\n\nnot sure should we make this more flexible, at least i think http protocol is more usual.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"80eae742b9240e355cb600a8d9dbb2b757d3e6aa","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        \"\"\"Returns connection class for accessing the resource. Useful"},{"line_number":353,"context_line":"        for dependency injection and stubouts in testing..."},{"line_number":354,"context_line":"        \"\"\""},{"line_number":355,"context_line":"        return {\u0027vsphere\u0027: httplib.HTTPSConnection}[loc.scheme]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9NYc%3D","line":355,"in_reply_to":"AAAATn%2F9poM%3D","updated":"2013-12-14 02:21:41.000000000","message":"good point: I fixed this issue by adding a configuration variable.","commit_id":"bab4e0f0d74f2f69ae8dfa717c5cca8f93011a8f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"MAX_REDIRECTS \u003d 5"},{"line_number":38,"context_line":"DEFAULT_STORE_BUFFER_DIR \u003d \u0027/tmp\u0027"},{"line_number":39,"context_line":"DEFAULT_STORE_IMAGE_DIR \u003d \u0027openstack_glance\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M3o%3D","line":38,"updated":"2013-12-14 11:10:14.000000000","message":"useless var.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"MAX_REDIRECTS \u003d 5"},{"line_number":38,"context_line":"DEFAULT_STORE_BUFFER_DIR \u003d \u0027/tmp\u0027"},{"line_number":39,"context_line":"DEFAULT_STORE_IMAGE_DIR \u003d \u0027openstack_glance\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9FtE%3D","line":38,"in_reply_to":"AAAATn%2F9M3o%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def parse_uri(self, uri):"},{"line_number":136,"context_line":"        self.scheme, self.server_ip, pieces, _, _, _ \u003d urlparse.urlparse(uri)"},{"line_number":137,"context_line":"        pieces \u003d pieces.split(\u0027?\u0027)"},{"line_number":138,"context_line":"        if len(pieces) \u003d\u003d 2:"},{"line_number":139,"context_line":"            folders \u003d pieces[0].split(\u0027/\u0027)"},{"line_number":140,"context_line":"            if len(folders) \u003e 3:"},{"line_number":141,"context_line":"                if self._check_store_image_dir(folders[2]):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M5E%3D","line":138,"updated":"2013-12-14 11:10:14.000000000","message":"in my mac dev env (python 2.7.5) urlparse result is this:\n\n\u003e\u003e\u003e scheme, ip, pieces, _1, _2, _3 \u003d urlparse.urlparse(\u0027vsphere://server_ip/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name\u0027)\n\n\u003e\u003e\u003e scheme, ip, pieces, _1, _2, _3\n\n(\u0027vsphere\u0027, \u0027server_ip\u0027, \u0027/folder/file_path\u0027, \u0027\u0027, \u0027dcPath\u003ddc_path\u0026dsName\u003dds_name\u0027, \u0027\u0027)\n\nSo \"pieces\" var will never has query string part under python 2.7.5 runtime.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def parse_uri(self, uri):"},{"line_number":136,"context_line":"        self.scheme, self.server_ip, pieces, _, _, _ \u003d urlparse.urlparse(uri)"},{"line_number":137,"context_line":"        pieces \u003d pieces.split(\u0027?\u0027)"},{"line_number":138,"context_line":"        if len(pieces) \u003d\u003d 2:"},{"line_number":139,"context_line":"            folders \u003d pieces[0].split(\u0027/\u0027)"},{"line_number":140,"context_line":"            if len(folders) \u003e 3:"},{"line_number":141,"context_line":"                if self._check_store_image_dir(folders[2]):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9Fd8%3D","line":138,"in_reply_to":"AAAATn%2F9M5E%3D","updated":"2013-12-18 21:05:56.000000000","message":"Interesting: I tested with 2.6.5 and 2.7.3 and it behaves another way (\u0027vsphere\u0027, \u0027server_ip\u0027, \u0027/folder/file_path?dcPath\u003ddc_path\u0026dsName\u003dds_name\u0027, \u0027\u0027, \", \")\n\nI have added a check to handle the case you are seeing with 2.7.5","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def configure(self):"},{"line_number":163,"context_line":"        self.scheme \u003d \u0027vsphere\u0027"},{"line_number":164,"context_line":"        self.server_ip \u003d CONF.vmware_server_ip"},{"line_number":165,"context_line":"        self.server_username \u003d CONF.vmware_server_username"},{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M38%3D","line":164,"updated":"2013-12-14 11:10:14.000000000","message":"I think we still need self._option_get() here for these 4 options (Line #164-168) since they have no default value. Except \u0027vmware_datacenter_path\u0027 option.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def configure(self):"},{"line_number":163,"context_line":"        self.scheme \u003d \u0027vsphere\u0027"},{"line_number":164,"context_line":"        self.server_ip \u003d CONF.vmware_server_ip"},{"line_number":165,"context_line":"        self.server_username \u003d CONF.vmware_server_username"},{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9FcQ%3D","line":164,"in_reply_to":"AAAATn%2F9M38%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.server_ip \u003d CONF.vmware_server_ip"},{"line_number":165,"context_line":"        self.server_username \u003d CONF.vmware_server_username"},{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        self.datastore_name \u003d CONF.vmware_datastore_name"},{"line_number":169,"context_line":"        self.api_retry_count \u003d self._option_get(\u0027vmware_api_retry_count\u0027)"},{"line_number":170,"context_line":"        self.task_poll_interval \u003d self._option_get(\u0027vmware_task_poll_interval\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M28%3D","line":167,"updated":"2013-12-14 11:10:14.000000000","message":"It will be better if we according vmware server type (esxi or vc) to verify this configure or override this value base on context configure (with a warning log) if needed.  Line #55. Thoughts?","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.server_ip \u003d CONF.vmware_server_ip"},{"line_number":165,"context_line":"        self.server_username \u003d CONF.vmware_server_username"},{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        self.datastore_name \u003d CONF.vmware_datastore_name"},{"line_number":169,"context_line":"        self.api_retry_count \u003d self._option_get(\u0027vmware_api_retry_count\u0027)"},{"line_number":170,"context_line":"        self.task_poll_interval \u003d self._option_get(\u0027vmware_task_poll_interval\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9E0U%3D","line":167,"in_reply_to":"AAAATn%2F9M28%3D","updated":"2013-12-18 21:05:56.000000000","message":"I have added a check to make sure the combination datacenter/datastore is valid.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        self.datastore_name \u003d CONF.vmware_datastore_name"},{"line_number":169,"context_line":"        self.api_retry_count \u003d self._option_get(\u0027vmware_api_retry_count\u0027)"},{"line_number":170,"context_line":"        self.task_poll_interval \u003d self._option_get(\u0027vmware_task_poll_interval\u0027)"},{"line_number":171,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M3c%3D","line":169,"updated":"2013-12-14 11:10:14.000000000","message":"And I think these two options don\u0027t need self._option_get() since they have default value.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.server_password \u003d CONF.vmware_server_password"},{"line_number":167,"context_line":"        self.datacenter_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        self.datastore_name \u003d CONF.vmware_datastore_name"},{"line_number":169,"context_line":"        self.api_retry_count \u003d self._option_get(\u0027vmware_api_retry_count\u0027)"},{"line_number":170,"context_line":"        self.task_poll_interval \u003d self._option_get(\u0027vmware_task_poll_interval\u0027)"},{"line_number":171,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9FcU%3D","line":169,"in_reply_to":"AAAATn%2F9M3c%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def configure_add(self):"},{"line_number":174,"context_line":"        #TODO(arnaud): check if the directory already exists and is writable"},{"line_number":175,"context_line":"        self.store_image_dir \u003d self._option_get(\u0027vmware_store_image_dir\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _option_get(self, param):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M3g%3D","line":174,"updated":"2013-12-14 11:10:14.000000000","message":"did you checked those? thanks.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"},{"line_number":185,"context_line":"        return result"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def _get_cookie_by_name(self, cj, name):"},{"line_number":188,"context_line":"        return [cookie for cookie in cj if cookie.name \u003d\u003d name][0]"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _build_vim_cookie_header(self, vim_cookies):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M20%3D","line":187,"updated":"2013-12-14 11:10:14.000000000","message":"unused fun","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"},{"line_number":185,"context_line":"        return result"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def _get_cookie_by_name(self, cj, name):"},{"line_number":188,"context_line":"        return [cookie for cookie in cj if cookie.name \u003d\u003d name][0]"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _build_vim_cookie_header(self, vim_cookies):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9Fs8%3D","line":187,"in_reply_to":"AAAATn%2F9M20%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cookie_header \u003d \u0027\u0027"},{"line_number":193,"context_line":"        for vim_cookie in vim_cookies:"},{"line_number":194,"context_line":"            cookie_header \u003d vim_cookie.name + \u0027\u003d\u0027 + vim_cookie.value"},{"line_number":195,"context_line":"            break"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return cookie_header"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M2c%3D","line":195,"updated":"2013-12-14 11:10:14.000000000","message":"Ok. I know nova vmware stuff do this, but why we need a loop here? tbh it\u0027s a little confused, we can use an assignment simply (probably need a check to make sure \"vim_cookies\" is not empty)","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cookie_header \u003d \u0027\u0027"},{"line_number":193,"context_line":"        for vim_cookie in vim_cookies:"},{"line_number":194,"context_line":"            cookie_header \u003d vim_cookie.name + \u0027\u003d\u0027 + vim_cookie.value"},{"line_number":195,"context_line":"            break"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return cookie_header"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9FC8%3D","line":195,"in_reply_to":"AAAATn%2F9M2c%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5b82f87c0760e21471fac591cf2c0a3407e58022","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":233,"context_line":"        headers \u003d {\u0027Cookie\u0027: cookie, \u0027Content-Length\u0027: image_size}"},{"line_number":234,"context_line":"        conn \u003d self._get_http_conn(\u0027PUT\u0027, loc, headers,"},{"line_number":235,"context_line":"                                   content\u003dimage_file.getvalue())"},{"line_number":236,"context_line":"        res \u003d conn.getresponse()"},{"line_number":237,"context_line":"        if res.status \u003d\u003d httplib.CONFLICT:"},{"line_number":238,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9M2M%3D","line":235,"updated":"2013-12-14 11:10:14.000000000","message":"Can you explain why you call getvalue() here? but glance.common.utils.CooperativeReader object has no attribute \"getvalue\". thanks.","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a76df152dfc696683e1cd4bd8fadd99b8a192da1","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":233,"context_line":"        headers \u003d {\u0027Cookie\u0027: cookie, \u0027Content-Length\u0027: image_size}"},{"line_number":234,"context_line":"        conn \u003d self._get_http_conn(\u0027PUT\u0027, loc, headers,"},{"line_number":235,"context_line":"                                   content\u003dimage_file.getvalue())"},{"line_number":236,"context_line":"        res \u003d conn.getresponse()"},{"line_number":237,"context_line":"        if res.status \u003d\u003d httplib.CONFLICT:"},{"line_number":238,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9FjE%3D","line":235,"in_reply_to":"AAAATn%2F9M2M%3D","updated":"2013-12-18 21:05:56.000000000","message":"Done","commit_id":"36d4e33a1af955b275085e8b35c5ad73053fa1f7"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":42,"context_line":"vmware_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027vmware_server_ip\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027ESX/ESXi or vCenter Server target system. \u0027"},{"line_number":45,"context_line":"                      \u0027The server value can be an IP address or a DNS name.\u0027)),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027vmware_server_username\u0027,"},{"line_number":47,"context_line":"               help\u003d_(\u0027Username for authenticating with \u0027"},{"line_number":48,"context_line":"                      \u0027VMware ESX/VC server.\u0027)),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84x8%3D","line":45,"updated":"2013-12-19 08:13:03.000000000","message":"nit: so rename it to \"vmware_server_host\"?","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":42,"context_line":"vmware_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027vmware_server_ip\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027ESX/ESXi or vCenter Server target system. \u0027"},{"line_number":45,"context_line":"                      \u0027The server value can be an IP address or a DNS name.\u0027)),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027vmware_server_username\u0027,"},{"line_number":47,"context_line":"               help\u003d_(\u0027Username for authenticating with \u0027"},{"line_number":48,"context_line":"                      \u0027VMware ESX/VC server.\u0027)),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F81Zs%3D","line":45,"in_reply_to":"AAAATn%2F84x8%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        return base_url + \u0027?\u0027 + self.query"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _is_valid_path(self, path):"},{"line_number":129,"context_line":"        dirs \u003d path.split(\u0027/\u0027)"},{"line_number":130,"context_line":"        if len(dirs) \u003e\u003d 4:"},{"line_number":131,"context_line":"            return dirs[2] \u003d\u003d CONF.vmware_store_image_dir"},{"line_number":132,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F846c%3D","line":129,"updated":"2013-12-19 08:13:03.000000000","message":"so do you think this is an overkill limitation to end user? this required end user prepare image store home dir only in datastore\u0027s root dir (\"vmware_store_image_dir\" option) but a sub-dir. IMO we\u0027d better don\u0027t make this limitation, says end user can using any dir within the datastore as a glance vmware store image home dir.\n\ni think \"vmware_store_image_dir\" option name is good, but i\u0027d like, as its name, user can set a comparative path into it, but always a name only.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        return base_url + \u0027?\u0027 + self.query"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _is_valid_path(self, path):"},{"line_number":129,"context_line":"        dirs \u003d path.split(\u0027/\u0027)"},{"line_number":130,"context_line":"        if len(dirs) \u003e\u003d 4:"},{"line_number":131,"context_line":"            return dirs[2] \u003d\u003d CONF.vmware_store_image_dir"},{"line_number":132,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80uY%3D","line":129,"in_reply_to":"AAAATn%2F846c%3D","updated":"2013-12-21 01:11:19.000000000","message":"Good point: this is fixed.\nNow, the user can provide any absolute path:\n/openstack_glance\nor\n/openstack_glance/foo\netc.\nI think this is good like that.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.path \u003d path"},{"line_number":144,"context_line":"            self.query \u003d query"},{"line_number":145,"context_line":"            return"},{"line_number":146,"context_line":"        from glance.openstack.common.gettextutils import _"},{"line_number":147,"context_line":"        reason \u003d (_(\u0027Badly formed VMware datastore URI %s.\u0027) % uri)"},{"line_number":148,"context_line":"        LOG.debug(reason)"},{"line_number":149,"context_line":"        raise exception.BadStoreUri(uri, reason)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84cU%3D","line":146,"updated":"2013-12-19 08:13:03.000000000","message":"i forget reply this in my previous comments sorry.\n\npls remove this line, and rename \"_\" var to other name at line #135.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.path \u003d path"},{"line_number":144,"context_line":"            self.query \u003d query"},{"line_number":145,"context_line":"            return"},{"line_number":146,"context_line":"        from glance.openstack.common.gettextutils import _"},{"line_number":147,"context_line":"        reason \u003d (_(\u0027Badly formed VMware datastore URI %s.\u0027) % uri)"},{"line_number":148,"context_line":"        LOG.debug(reason)"},{"line_number":149,"context_line":"        raise exception.BadStoreUri(uri, reason)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F8014%3D","line":146,"in_reply_to":"AAAATn%2F84cU%3D","updated":"2013-12-21 01:11:19.000000000","message":"Oh yes, that\u0027s was the problem... thanks!!","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":161,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def configure_add(self):"},{"line_number":164,"context_line":"        self.server_ip \u003d self._option_get(\u0027vmware_server_ip\u0027)"},{"line_number":165,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":166,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84tU%3D","line":163,"updated":"2013-12-19 08:13:03.000000000","message":"let me clarify my point around \"configure_add()\" and \"configure()\":\n\nwe know configure_add() only for add(), it it raise exception.BadStoreConfiguration out, then this store will be marked to read-only by glance, and user can download, remove (and get size) image from the store still. configure() is be used to prepare those essential options, and configure_add() only be used to prepare those options which only for support add() interface.\n\nsince currently get_size(), get(), delete() interfaces all need call _get_api_conn() and _query(), so we need prepare (and check) follow variables: self.server_ip, self.server_username, self.server_password, self.api_retry_count, in above configure() but here. and in configure_add() we need to take care self.store_image_dir, self.datacenter_path, and self.datastore_name only.\n\nany thoughts?","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":161,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def configure_add(self):"},{"line_number":164,"context_line":"        self.server_ip \u003d self._option_get(\u0027vmware_server_ip\u0027)"},{"line_number":165,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":166,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F8vDU%3D","line":163,"in_reply_to":"AAAATn%2F84tU%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":167,"context_line":"        dc_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        if dc_path is None:"},{"line_number":169,"context_line":"            dc_path \u003d DEFAULT_ESX_DATACENTER_PATH"},{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84zk%3D","line":169,"updated":"2013-12-19 08:13:03.000000000","message":"if so we why not set DEFAULT_ESX_DATACENTER_PATH to \"vmware-datacenter_path\" as its default value?","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":167,"context_line":"        dc_path \u003d CONF.vmware_datacenter_path"},{"line_number":168,"context_line":"        if dc_path is None:"},{"line_number":169,"context_line":"            dc_path \u003d DEFAULT_ESX_DATACENTER_PATH"},{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80tI%3D","line":169,"in_reply_to":"AAAATn%2F84zk%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                                            inventoryPath\u003dinventory_path)"},{"line_number":183,"context_line":"        if ds_moref is None:"},{"line_number":184,"context_line":"            reason \u003d (_(\"Could not find datastore %s in datacenter %s.\")"},{"line_number":185,"context_line":"                      % (ds_name, dc_path))"},{"line_number":186,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":187,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"},{"line_number":188,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84xE%3D","line":185,"updated":"2013-12-19 08:13:03.000000000","message":"nit: pls using variable mapping string formation.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                                            inventoryPath\u003dinventory_path)"},{"line_number":183,"context_line":"        if ds_moref is None:"},{"line_number":184,"context_line":"            reason \u003d (_(\"Could not find datastore %s in datacenter %s.\")"},{"line_number":185,"context_line":"                      % (ds_name, dc_path))"},{"line_number":186,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":187,"context_line":"                store_name\u003d\u0027vmware_datastore\u0027, reason\u003dreason)"},{"line_number":188,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80rs%3D","line":185,"in_reply_to":"AAAATn%2F84xE%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        return api.VMwareAPISession(self.server_ip,"},{"line_number":211,"context_line":"                                    self.server_username,"},{"line_number":212,"context_line":"                                    self.server_password,"},{"line_number":213,"context_line":"                                    self.api_retry_count)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_hash(self, image_file):"},{"line_number":216,"context_line":"        return hashlib.md5(image_file.getvalue()).hexdigest()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F845Y%3D","line":213,"updated":"2013-12-19 08:13:03.000000000","message":"tbh i think vmware_task_poll_interval option is useful for end user.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        return api.VMwareAPISession(self.server_ip,"},{"line_number":211,"context_line":"                                    self.server_username,"},{"line_number":212,"context_line":"                                    self.server_password,"},{"line_number":213,"context_line":"                                    self.api_retry_count)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_hash(self, image_file):"},{"line_number":216,"context_line":"        return hashlib.md5(image_file.getvalue()).hexdigest()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80ro%3D","line":213,"in_reply_to":"AAAATn%2F845Y%3D","updated":"2013-12-21 01:11:19.000000000","message":"For now, this won\u0027t be used. I think that we can add it later if needed.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                                    self.api_retry_count)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_hash(self, image_file):"},{"line_number":216,"context_line":"        return hashlib.md5(image_file.getvalue()).hexdigest()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":219,"context_line":"        \"\"\"Stores an image file with supplied identifier to the backend"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84sM%3D","line":216,"updated":"2013-12-19 08:13:03.000000000","message":"again, glance.common.utils.CooperativeReader object has no attribute \"getvalue\".\n\nso i still think my comments is workable, https://review.openstack.org/#/c/58883/9/glance/store/vmware_datastore.py Line #213","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                                    self.api_retry_count)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_hash(self, image_file):"},{"line_number":216,"context_line":"        return hashlib.md5(image_file.getvalue()).hexdigest()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":219,"context_line":"        \"\"\"Stores an image file with supplied identifier to the backend"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80rY%3D","line":216,"in_reply_to":"AAAATn%2F84sM%3D","updated":"2013-12-21 01:11:19.000000000","message":"I missed this one: sorry. Fixed.","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            reason \u003d _(\u0027HTTP URL returned a %s status code.\u0027) % resp.status"},{"line_number":325,"context_line":"            LOG.debug(reason)"},{"line_number":326,"context_line":"            raise exception.BadStoreUri("},{"line_number":327,"context_line":"                \u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query), reason)"},{"line_number":328,"context_line":"        location_header \u003d resp.getheader(\u0027location\u0027)"},{"line_number":329,"context_line":"        if location_header:"},{"line_number":330,"context_line":"            if resp.status not in (301, 302):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84wE%3D","line":327,"updated":"2013-12-19 08:13:03.000000000","message":"nit: replace \n\n\u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query)\n\nto\n\nloc.get_uri() ?","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            reason \u003d _(\u0027HTTP URL returned a %s status code.\u0027) % resp.status"},{"line_number":325,"context_line":"            LOG.debug(reason)"},{"line_number":326,"context_line":"            raise exception.BadStoreUri("},{"line_number":327,"context_line":"                \u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query), reason)"},{"line_number":328,"context_line":"        location_header \u003d resp.getheader(\u0027location\u0027)"},{"line_number":329,"context_line":"        if location_header:"},{"line_number":330,"context_line":"            if resp.status not in (301, 302):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80rE%3D","line":327,"in_reply_to":"AAAATn%2F84wE%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        conn_class \u003d self._get_http_conn_class()"},{"line_number":348,"context_line":"        conn \u003d conn_class(loc.server_ip)"},{"line_number":349,"context_line":"        conn.request(method,"},{"line_number":350,"context_line":"                     \u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query),"},{"line_number":351,"context_line":"                     content, headers)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return conn"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84vs%3D","line":350,"updated":"2013-12-19 08:13:03.000000000","message":"nit: move \"?\" to string?\n\n\u0027%s?%s\u0027 % (loc.path, loc.query)","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        conn_class \u003d self._get_http_conn_class()"},{"line_number":348,"context_line":"        conn \u003d conn_class(loc.server_ip)"},{"line_number":349,"context_line":"        conn.request(method,"},{"line_number":350,"context_line":"                     \u0027%s%s%s\u0027 % (loc.path, \u0027?\u0027, loc.query),"},{"line_number":351,"context_line":"                     content, headers)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return conn"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F80qs%3D","line":350,"in_reply_to":"AAAATn%2F84vs%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        return conn"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def _get_http_conn_class(self):"},{"line_number":356,"context_line":"        return (httplib.HTTPConnection if self.api_insecure"},{"line_number":357,"context_line":"                else httplib.HTTPSConnection)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F844I%3D","line":356,"updated":"2013-12-19 08:13:03.000000000","message":"be opposite","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        return conn"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def _get_http_conn_class(self):"},{"line_number":356,"context_line":"        return (httplib.HTTPConnection if self.api_insecure"},{"line_number":357,"context_line":"                else httplib.HTTPSConnection)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F8vDI%3D","line":356,"in_reply_to":"AAAATn%2F844I%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        reason \u003d (_(\u0027Badly formed VMware datastore URI %(uri)s.\u0027)"},{"line_number":149,"context_line":"                  % {\u0027uri\u0027: uri})"},{"line_number":150,"context_line":"        LOG.debug(reason)"},{"line_number":151,"context_line":"        raise exception.BadStoreUri(uri, reason)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class Store(glance.store.base.Store):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FsnE%3D","line":151,"updated":"2014-01-09 17:09:55.000000000","message":"BadStoreUri.__init__ only accept a ”message\" argument, so pass \"reason\" variable in it is ok here. \"reason\" already contains bad uri.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        reason \u003d (_(\u0027Badly formed VMware datastore URI %(uri)s.\u0027)"},{"line_number":149,"context_line":"                  % {\u0027uri\u0027: uri})"},{"line_number":150,"context_line":"        LOG.debug(reason)"},{"line_number":151,"context_line":"        raise exception.BadStoreUri(uri, reason)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class Store(glance.store.base.Store):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrFQ%3D","line":151,"in_reply_to":"AAAAUH%2F%2FsnE%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        dc_path \u003d CONF.vmware_datacenter_path"},{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"},{"line_number":173,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":174,"context_line":"        search_index_moref \u003d self._session.vim.service_content.searchIndex"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FsKE%3D","line":172,"updated":"2014-01-09 17:09:55.000000000","message":"I\u0027m not sure you noticed that currently Glance didn\u0027t cache/reuse store object, says this method will be called each time in get_store_from_scheme() [1] during a lot of API calls handling like image create, update or delete api. So I believe it will be better if we only do this stuff once since configurations for glance-api pid could not be changed after service started.\n\n[1] https://github.com/openstack/glance/blob/master/glance/store/__init__.py#L212","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        dc_path \u003d CONF.vmware_datacenter_path"},{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"},{"line_number":173,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":174,"context_line":"        search_index_moref \u003d self._session.vim.service_content.searchIndex"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Fpqs%3D","line":172,"in_reply_to":"AAAAUH%2F%2FsKE%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"},{"line_number":173,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":174,"context_line":"        search_index_moref \u003d self._session.vim.service_content.searchIndex"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        inventory_path \u003d (\u0027%s/datastore/%s\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Frzw%3D","line":173,"updated":"2014-01-09 17:09:55.000000000","message":"I prefer move \"self._session\" to configure() also, the reason is same like what I mentioned in my comments at PS15 Line #163, I can see get(), get_size(), delete() interface all need this object.\n\nbtw, I\u0027m interested to know that whether VMwareAPISession object\u0027s interfaces are thread/concurrent safe or not? thanks. I\u0027m thinking whether we will meet an issue at here if we allow reuse store object in future. I just do a quick as at here, not sure what/whether we will do that.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        ds_name \u003d self._option_get(\u0027vmware_datastore_name\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # check that datacenter/datastore combination is valid"},{"line_number":173,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":174,"context_line":"        search_index_moref \u003d self._session.vim.service_content.searchIndex"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        inventory_path \u003d (\u0027%s/datastore/%s\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FpqA%3D","line":173,"in_reply_to":"AAAAUH%2F%2Frzw%3D","updated":"2014-01-10 03:31:08.000000000","message":"self._session fixed.\nabout the thread safety, let\u0027s discuss that offline.\n\nthanks!","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.datacenter_path \u003d dc_path"},{"line_number":190,"context_line":"            self.datastore_name \u003d ds_name"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.store_image_dir \u003d CONF.vmware_store_image_dir"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _option_get(self, param):"},{"line_number":195,"context_line":"        result \u003d getattr(CONF, param)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Fsbw%3D","line":192,"updated":"2014-01-09 17:09:55.000000000","message":"what will happen when store PUT new image to vmware (line #247) if this directory not existing in datastore? esxi/vc can create it automatically and we don\u0027t need check/make it before, right? or this is a pre-operation for end user? thanks.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.datacenter_path \u003d dc_path"},{"line_number":190,"context_line":"            self.datastore_name \u003d ds_name"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.store_image_dir \u003d CONF.vmware_store_image_dir"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _option_get(self, param):"},{"line_number":195,"context_line":"        result \u003d getattr(CONF, param)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FqKw%3D","line":192,"in_reply_to":"AAAAUH%2F%2Fsbw%3D","updated":"2014-01-10 03:31:08.000000000","message":"the directory is created automatically: we don\u0027t need any check.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_checksum(self, image_file):"},{"line_number":216,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":217,"context_line":"        image_file.seek(0)"},{"line_number":218,"context_line":"        for chunk in image_file:"},{"line_number":219,"context_line":"            checksum.update(chunk)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Frow%3D","line":217,"updated":"2014-01-09 17:09:55.000000000","message":"I still think my suggestions is workable with more efficient, https://review.openstack.org/#/c/58883/9/glance/store/vmware_datastore.py Line #231","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _get_checksum(self, image_file):"},{"line_number":216,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":217,"context_line":"        image_file.seek(0)"},{"line_number":218,"context_line":"        for chunk in image_file:"},{"line_number":219,"context_line":"            checksum.update(chunk)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FqJ8%3D","line":217,"in_reply_to":"AAAAUH%2F%2Frow%3D","updated":"2014-01-10 03:31:08.000000000","message":"I misunderstood your comment at the first place: sorry about that.\nI think this is fixed now: let me know if this interpretation is correct :)","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        try:"},{"line_number":294,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":295,"context_line":"        except Exception:"},{"line_number":296,"context_line":"            return 0"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Fr8Y%3D","line":295,"updated":"2014-01-09 17:09:55.000000000","message":"what about follow this: https://github.com/openstack/glance/blob/master/glance/store/base.py#L115","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        try:"},{"line_number":294,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":295,"context_line":"        except Exception:"},{"line_number":296,"context_line":"            return 0"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Fqqs%3D","line":295,"in_reply_to":"AAAAUH%2F%2Fr8Y%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            reason \u003d (_(\u0027HTTP URL returned a %(status)s status code.\u0027)"},{"line_number":327,"context_line":"                      % {\u0027status\u0027: resp.status})"},{"line_number":328,"context_line":"            LOG.debug(reason)"},{"line_number":329,"context_line":"            raise exception.BadStoreUri(loc.get_uri(), reason)"},{"line_number":330,"context_line":"        location_header \u003d resp.getheader(\u0027location\u0027)"},{"line_number":331,"context_line":"        if location_header:"},{"line_number":332,"context_line":"            if resp.status not in (301, 302):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Frw8%3D","line":329,"updated":"2014-01-09 17:09:55.000000000","message":"same comments like line #151","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            reason \u003d (_(\u0027HTTP URL returned a %(status)s status code.\u0027)"},{"line_number":327,"context_line":"                      % {\u0027status\u0027: resp.status})"},{"line_number":328,"context_line":"            LOG.debug(reason)"},{"line_number":329,"context_line":"            raise exception.BadStoreUri(loc.get_uri(), reason)"},{"line_number":330,"context_line":"        location_header \u003d resp.getheader(\u0027location\u0027)"},{"line_number":331,"context_line":"        if location_header:"},{"line_number":332,"context_line":"            if resp.status not in (301, 302):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrEQ%3D","line":329,"in_reply_to":"AAAAUH%2F%2Frw8%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                            \"invalid %(status)s status code.\")"},{"line_number":335,"context_line":"                          % {\u0027status\u0027: resp.status})"},{"line_number":336,"context_line":"                LOG.debug(reason)"},{"line_number":337,"context_line":"                raise exception.BadStoreUri(loc.path, reason)"},{"line_number":338,"context_line":"            location_class \u003d glance.store.location.Location"},{"line_number":339,"context_line":"            new_loc \u003d location_class(location.store_name,"},{"line_number":340,"context_line":"                                     location.store_location.__class__,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Frws%3D","line":337,"updated":"2014-01-09 17:09:55.000000000","message":"same comments like line #151","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                            \"invalid %(status)s status code.\")"},{"line_number":335,"context_line":"                          % {\u0027status\u0027: resp.status})"},{"line_number":336,"context_line":"                LOG.debug(reason)"},{"line_number":337,"context_line":"                raise exception.BadStoreUri(loc.path, reason)"},{"line_number":338,"context_line":"            location_class \u003d glance.store.location.Location"},{"line_number":339,"context_line":"            new_loc \u003d location_class(location.store_name,"},{"line_number":340,"context_line":"                                     location.store_location.__class__,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrDw%3D","line":337,"in_reply_to":"AAAAUH%2F%2Frws%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        :raises `glance.common.exception.Duplicate` if the image already"},{"line_number":228,"context_line":"                existed"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        def calc_checksum(fn):"},{"line_number":231,"context_line":"            chunk \u003d fn()"},{"line_number":232,"context_line":"            for c in chunk:"},{"line_number":233,"context_line":"                checksum.update(c)"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FgRc%3D","line":230,"updated":"2014-01-13 08:41:55.000000000","message":"humm...IMO:\n\n    class _Reader(object):\n        def __init__(self, data, checksum):\n            self.data \u003d data\n            self.checksum \u003d checksum\n\n        def read(self, len):\n            result \u003d self.data.read(len)\n            self.checksum.update(result)\n            return result\n    ....\n    checksum \u003d hashlib.md5()\n    image_file \u003d _Reader(image_file, checksum)\n    ....\n    conn \u003d self._get_http_conn(\u0027PUT\u0027, loc, headers, content\u003dimage_file)\n    ....\n    return (loc.get_uri(), image_size, checksum.hexdigest(), {})","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        :raises `glance.common.exception.Duplicate` if the image already"},{"line_number":228,"context_line":"                existed"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        def calc_checksum(fn):"},{"line_number":231,"context_line":"            chunk \u003d fn()"},{"line_number":232,"context_line":"            for c in chunk:"},{"line_number":233,"context_line":"                checksum.update(c)"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FcnQ%3D","line":230,"in_reply_to":"AAAAUH%2F%2FgRc%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            chunk.seek(0)"},{"line_number":235,"context_line":"            return chunk"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":238,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":239,"context_line":"        image_file.__iter__ \u003d calc_checksum(image_file.__iter__)"},{"line_number":240,"context_line":"        loc \u003d StoreLocation({\u0027scheme\u0027: self.scheme,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fgmk%3D","line":237,"updated":"2014-01-13 08:41:55.000000000","message":"pls reuse \"self._session\" which we already created at Line #169. That just is the reason why I ask to move it to configure().","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            chunk.seek(0)"},{"line_number":235,"context_line":"            return chunk"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":238,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":239,"context_line":"        image_file.__iter__ \u003d calc_checksum(image_file.__iter__)"},{"line_number":240,"context_line":"        loc \u003d StoreLocation({\u0027scheme\u0027: self.scheme,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FcqY%3D","line":237,"in_reply_to":"AAAAUH%2F%2Fgmk%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        :param location: `glance.store.location.Location` object, supplied"},{"line_number":264,"context_line":"                        from glance.store.location.get_location_from_uri()"},{"line_number":265,"context_line":"        \"\"\""},{"line_number":266,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":267,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":268,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":269,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fgmc%3D","line":266,"updated":"2014-01-13 08:41:55.000000000","message":"pls reuse \"self._session\" which we already created at Line #169.","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        :param location: `glance.store.location.Location` object, supplied"},{"line_number":264,"context_line":"                        from glance.store.location.get_location_from_uri()"},{"line_number":265,"context_line":"        \"\"\""},{"line_number":266,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":267,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":268,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":269,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fcqc%3D","line":266,"in_reply_to":"AAAAUH%2F%2Fgmc%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        :param location: `glance.store.location.Location` object, supplied"},{"line_number":289,"context_line":"                        from glance.store.location.get_location_from_uri()"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":292,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":293,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FgmY%3D","line":291,"updated":"2014-01-13 08:41:55.000000000","message":"pls reuse \"self._session\" which we already created at Line #169.","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        :param location: `glance.store.location.Location` object, supplied"},{"line_number":289,"context_line":"                        from glance.store.location.get_location_from_uri()"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":292,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":293,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fcqs%3D","line":291,"in_reply_to":"AAAAUH%2F%2FgmY%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        try:"},{"line_number":296,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":297,"context_line":"        except exception.NotFound as exc:"},{"line_number":298,"context_line":"            raise exc"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            return 0"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fglo%3D","line":298,"updated":"2014-01-13 08:41:55.000000000","message":"Do you think it will be better if we log this exception at here? Or do it at Line #328?","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68820ac63afcbceebb4d618804afa18a98be364c","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        try:"},{"line_number":296,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":297,"context_line":"        except exception.NotFound as exc:"},{"line_number":298,"context_line":"            raise exc"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            return 0"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FZ3I%3D","line":298,"in_reply_to":"AAAAUH%2F%2FcVk%3D","updated":"2014-01-14 03:57:23.000000000","message":"That\u0027s good to me.","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        try:"},{"line_number":296,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":297,"context_line":"        except exception.NotFound as exc:"},{"line_number":298,"context_line":"            raise exc"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            return 0"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FcVk%3D","line":298,"in_reply_to":"AAAAUH%2F%2Fglo%3D","updated":"2014-01-13 23:05:50.000000000","message":"I usually prefer to log as soon as you have the exception. So, line #328 sounds like a better place to me.\nLet me know if you have another perspective!","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":297,"context_line":"        except exception.NotFound as exc:"},{"line_number":298,"context_line":"            raise exc"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            return 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fgd4%3D","line":299,"updated":"2014-01-13 08:41:55.000000000","message":"As the result we discussed in https://review.openstack.org/#/c/64409/4/glance/store/http.py (if you think they are long you can just see our agreement at #3 comments from bottom), I consider we should don\u0027t catch Exception level exception in code as possible as we can, so IMO we can remove this catching block or keep it for write log but raise original exception out instead of return zero. Thanks.","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            return self._query(location, \u0027HEAD\u0027, headers\u003d{\u0027Cookie\u0027: cookie})[2]"},{"line_number":297,"context_line":"        except exception.NotFound as exc:"},{"line_number":298,"context_line":"            raise exc"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            return 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2FcVU%3D","line":299,"in_reply_to":"AAAAUH%2F%2Fgd4%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"54d42ae9fd174ecbf548635d494ad12de3ca404f","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                  from glance.store.location.get_location_from_uri()"},{"line_number":308,"context_line":"        :raises NotFound if image does not exist"},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":311,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":312,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":313,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fgl0%3D","line":310,"updated":"2014-01-13 08:41:55.000000000","message":"pls reuse \"self._session\" which we already created at Line #169.","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"a551bf91741bdbaa7440b5f40d524e647ac0e635","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                  from glance.store.location.get_location_from_uri()"},{"line_number":308,"context_line":"        :raises NotFound if image does not exist"},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":311,"context_line":"        cookie \u003d self._build_vim_cookie_header("},{"line_number":312,"context_line":"            self._session.vim.client.options.transport.cookiejar)"},{"line_number":313,"context_line":"        conn, resp, content_length \u003d self._query(location,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUH%2F%2Fcq0%3D","line":310,"in_reply_to":"AAAAUH%2F%2Fgl0%3D","updated":"2014-01-13 23:05:50.000000000","message":"Done","commit_id":"02b654e612e6b3c0fd77e5588158cf2bc6dc7040"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b5cd73473bddfd2359a103c79317a1d6cabc50e8","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 OpenStack, LLC"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2FZ38%3D","line":3,"updated":"2014-01-14 04:14:16.000000000","message":"nit: 2014, could you pls also take care other files which you think needed?","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"8b6633698484d6dfc38d7a4314192af8cca42d7a","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 OpenStack, LLC"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2FU14%3D","line":3,"in_reply_to":"AAAAUH%2F%2FZ38%3D","updated":"2014-01-15 23:39:12.000000000","message":"Done","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"8bd6912e0a57e4da14a518ed051cf825b24513f3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"DS_URL_PREFIX \u003d \u0027/folder\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# check that datacenter/datastore combination is valid"},{"line_number":41,"context_line":"ds_validated \u003d False"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"vmware_opts \u003d ["},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027vmware_server_host\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2FCdE%3D","line":41,"updated":"2014-01-18 04:19:11.000000000","message":"nit: what about rename it to \"_ds_validated\"?","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b8b41cbfdc3de835d4e9c675e7f08126a96e84b7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"DS_URL_PREFIX \u003d \u0027/folder\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# check that datacenter/datastore combination is valid"},{"line_number":41,"context_line":"ds_validated \u003d False"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"vmware_opts \u003d ["},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027vmware_server_host\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2B0b8%3D","line":41,"in_reply_to":"AAAAUH%2F%2FCdE%3D","updated":"2014-01-21 19:38:07.000000000","message":"Done","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7fc23dfe93c39749d2d702b1db0e6bbb904bf87","unresolved":false,"context_lines":[{"line_number":76,"context_line":"CONF.register_opts(vmware_opts)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def get_datastore_path(file_path, datastore_name):"},{"line_number":80,"context_line":"    \"\"\"Return a formatted datastore path which can be used with the VIM API."},{"line_number":81,"context_line":"    Format: \"[datastore_name] file_path\""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2Bxb0%3D","line":79,"updated":"2014-01-22 14:11:02.000000000","message":"nit: Seems this function only be used on line #318, why we need to extract a new function here and only have one line easy logic, I think we don\u0027t need this function TBH (and prevent write these function docs, it\u0027s straightforward enough).\n\nAm I miss anything?","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"2b5b47120ca08ec3046ff9529d281b2eb97fb36a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"CONF.register_opts(vmware_opts)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def get_datastore_path(file_path, datastore_name):"},{"line_number":80,"context_line":"    \"\"\"Return a formatted datastore path which can be used with the VIM API."},{"line_number":81,"context_line":"    Format: \"[datastore_name] file_path\""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BuYk%3D","line":79,"in_reply_to":"AAAAUH%2F%2Bxb0%3D","updated":"2014-01-22 19:45:07.000000000","message":"Done","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7fc23dfe93c39749d2d702b1db0e6bbb904bf87","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":189,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":190,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":191,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":192,"context_line":"        self._service_content \u003d self._session.vim.service_content"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def configure_add(self):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BwQw%3D","line":191,"updated":"2014-01-22 14:11:02.000000000","message":"nit: and I\u0027m also thinking why we need to extract api.VMwareAPISession object construction out to _get_api_conn(), we use it at here only, and it only has one line easy logic. What about just move that code to here?","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"2b5b47120ca08ec3046ff9529d281b2eb97fb36a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":189,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":190,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":191,"context_line":"        self._session \u003d self._get_api_conn()"},{"line_number":192,"context_line":"        self._service_content \u003d self._session.vim.service_content"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def configure_add(self):"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BuYE%3D","line":191,"in_reply_to":"AAAAUH%2F%2BwQw%3D","updated":"2014-01-22 19:45:07.000000000","message":"Done","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7fc23dfe93c39749d2d702b1db0e6bbb904bf87","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            self._service_content.fileManager,"},{"line_number":330,"context_line":"            name\u003dfile_path,"},{"line_number":331,"context_line":"            datacenter\u003ddc_moref)"},{"line_number":332,"context_line":"        self._session.wait_for_task(delete_task)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _query(self, location, method, headers, depth\u003d0):"},{"line_number":335,"context_line":"        if depth \u003e MAX_REDIRECTS:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BwSc%3D","line":332,"updated":"2014-01-22 14:11:02.000000000","message":"so do you think it will be better if we put \"vmware_task_poll_interval\" option back [1], and pass it into VMwareAPISession at line #238 as its task_poll_interval param? Since I think it is worth for admin/operator.\n\n\n[1] https://review.openstack.org/#/c/58883/11/glance/store/vmware_datastore.py","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"2b5b47120ca08ec3046ff9529d281b2eb97fb36a","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            self._service_content.fileManager,"},{"line_number":330,"context_line":"            name\u003dfile_path,"},{"line_number":331,"context_line":"            datacenter\u003ddc_moref)"},{"line_number":332,"context_line":"        self._session.wait_for_task(delete_task)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _query(self, location, method, headers, depth\u003d0):"},{"line_number":335,"context_line":"        if depth \u003e MAX_REDIRECTS:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BuWg%3D","line":332,"in_reply_to":"AAAAUH%2F%2BwSc%3D","updated":"2014-01-22 19:45:07.000000000","message":"Done","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"}],"glance/tests/__init__.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bc9a2adf2771f4b2e2305223f1643f1d0bc9305b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"formatter \u003d logging.Formatter(\u0027%(asctime)s %(levelname)s %(message)s\u0027)"},{"line_number":28,"context_line":"hdlr.setFormatter(formatter)"},{"line_number":29,"context_line":"logger.addHandler(hdlr)"},{"line_number":30,"context_line":"logger.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9%2FH8%3D","line":30,"updated":"2013-12-03 18:42:00.000000000","message":"why this change?","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"25f749935dd64a4f99ab692c20bc25afa018b518","unresolved":false,"context_lines":[{"line_number":27,"context_line":"formatter \u003d logging.Formatter(\u0027%(asctime)s %(levelname)s %(message)s\u0027)"},{"line_number":28,"context_line":"hdlr.setFormatter(formatter)"},{"line_number":29,"context_line":"logger.addHandler(hdlr)"},{"line_number":30,"context_line":"logger.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F99b8%3D","line":30,"in_reply_to":"AAAATn%2F9%2FH8%3D","updated":"2013-12-04 00:42:07.000000000","message":"You know that\u0027s the bug I mentioned two weeks ago where suds calls get stuck when I try to reach the VIM WSDL (we investigated with Vui but at the end I don\u0027t know what is the \"good\" long term solution).\n\npython -m unittest glance.tests.functional.store.test_vmware_datastore \n\nwill get totally stuck if I use logging.DEBUG and work with logging.INFO\n\nMaybe the Glance folks will have a better idea of what\u0027s going on...","commit_id":"c933c57125837083fe95781a7de2f867131be65d"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"88f60ff5f6c879dcb7df04f91c86371ea49fde22","unresolved":false,"context_lines":[{"line_number":27,"context_line":"formatter \u003d logging.Formatter(\u0027%(asctime)s %(levelname)s %(message)s\u0027)"},{"line_number":28,"context_line":"hdlr.setFormatter(formatter)"},{"line_number":29,"context_line":"logger.addHandler(hdlr)"},{"line_number":30,"context_line":"logger.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F98os%3D","line":30,"updated":"2013-12-04 06:00:14.000000000","message":"Did you really want to change the testing logging level?","commit_id":"13786234ec412c69eeb7272697950e72a75eff11"}],"glance/tests/functional/store/test_vmware_datastore.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"df0279d6dc69a63f6de8454ddabaf3477f40f213","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Functional tests for the VMware Datastore store interface"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Set the GLANCE_TEST_VMWARE_CONF environment variable to the location"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2FrqU%3D","line":17,"updated":"2014-01-09 17:09:55.000000000","message":"nit: add a blank before this line.","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"aeb538e873b989578989ff76abc7cdfd2a77a4a1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Functional tests for the VMware Datastore store interface"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Set the GLANCE_TEST_VMWARE_CONF environment variable to the location"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2Fp6E%3D","line":17,"in_reply_to":"AAAAUH%2F%2FrqU%3D","updated":"2014-01-10 03:31:08.000000000","message":"Done","commit_id":"fed01d96c7862da1d61e63e6de87ab1ffc583e28"}],"glance/tests/unit/test_store_location.py":[{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"9a7aacad7e09dba2705d3f3e5f118cace79eb061","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        Test the specific StoreLocation for the VMware store"},{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        uri \u003d \u0027vsphere://127.0.0.1/folder/glance/29038321?dcPath\u003dmy-dc\u0026dsName\u003dmy-ds\u0027"},{"line_number":387,"context_line":"        loc \u003d glance.store.vmware_datastore.StoreLocation({})"},{"line_number":388,"context_line":"        loc.parse_uri(uri)"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9xGk%3D","line":386,"updated":"2013-12-06 07:53:09.000000000","message":"pep8.\n\nHere\u0027s the list of issues reported when pep8 is run. A couple appears to be glance being more particular than other projects?\n\n./glance/store/vmware_datastore.py:350:64: W292 no newline at end of file\n./glance/store/vmware/api.py:273:39: W292 no newline at end of file\n./glance/store/vmware/error_util.py:44:1: E302 expected 2 blank lines, found 1\n./glance/store/vmware/error_util.py:49:37: W292 no newline at end of file\n./glance/store/vmware/io_util.py:84:13: E128 continuation line under-indented for visual indent\n./glance/store/vmware/io_util.py:119:34: E127 continuation line over-indented for visual indent\n./glance/store/vmware/io_util.py:127:37: E127 continuation line over-indented for visual indent\n./glance/store/vmware/io_util.py:189:32: W292 no newline at end of file\n./glance/store/vmware/vim.py:241:29: W292 no newline at end of file\n./glance/store/vmware/vim_util.py:303:20: W292 no newline at end of file\n./glance/tests/functional/store/test_vmware_datastore.py:139:62: W292 no newline at end of file\n./glance/tests/unit/test_store_location.py:386:80: E501 line too long (84 \u003e 79 characters)\n./glance/tests/unit/test_store_location.py:403:5: E303 too many blank lines (2)","commit_id":"df89938a2c343b47a3c3c0bb20caaa16fecc8078"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d90aab6d16c357294c6fa6de47af43b70a886e90","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        self.assertEqual(uri, loc.get_uri())"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        bad_uri \u003d \u0027vphere://\u0027"},{"line_number":404,"context_line":"        self.assertRaises(Exception, loc.parse_uri, bad_uri)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        bad_uri \u003d \u0027http://image\u0027"},{"line_number":407,"context_line":"        self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F84hc%3D","line":404,"updated":"2013-12-19 08:13:03.000000000","message":"exception.BadStoreUri","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6d6178aef823c55c77d7a97ac2fa57ea5f4e8f07","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        self.assertEqual(uri, loc.get_uri())"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        bad_uri \u003d \u0027vphere://\u0027"},{"line_number":404,"context_line":"        self.assertRaises(Exception, loc.parse_uri, bad_uri)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        bad_uri \u003d \u0027http://image\u0027"},{"line_number":407,"context_line":"        self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F81ao%3D","line":404,"in_reply_to":"AAAATn%2F84hc%3D","updated":"2013-12-21 01:11:19.000000000","message":"Done","commit_id":"65d9f5ba3eca712ababc6013df1690e25296a920"}],"glance/tests/unit/test_vmware_store.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b5cd73473bddfd2359a103c79317a1d6cabc50e8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def fake_invoke_api(self, module, method, *args, **kwargs):"},{"line_number":80,"context_line":"        return \"api_called\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    stubs.Set(api.VMwareAPISession,"},{"line_number":83,"context_line":"              \u0027__init__\u0027, fake_session_constructor)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    stubs.Set(api.VMwareAPISession, \u0027invoke_api\u0027, fake_invoke_api)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2FZ1Q%3D","line":82,"updated":"2014-01-14 04:14:16.000000000","message":"Maybe it\u0027s a little overkill, but currently team trend to use mock sorry.","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b5cd73473bddfd2359a103c79317a1d6cabc50e8","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        stub_out_http_response(self.stubs)"},{"line_number":180,"context_line":"        self.store.delete(loc)"},{"line_number":181,"context_line":"        stub_out_http_response(self.stubs, 404)"},{"line_number":182,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2FZ0g%3D","line":182,"updated":"2014-01-14 04:14:16.000000000","message":"what about give a separated case for get_size() testing?","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"8b6633698484d6dfc38d7a4314192af8cca42d7a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        stub_out_http_response(self.stubs)"},{"line_number":180,"context_line":"        self.store.delete(loc)"},{"line_number":181,"context_line":"        stub_out_http_response(self.stubs, 404)"},{"line_number":182,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2FU1Y%3D","line":182,"in_reply_to":"AAAAUH%2F%2FZ0g%3D","updated":"2014-01-15 23:39:12.000000000","message":"Done","commit_id":"bc19418924d00470cd50a7d750601bb80a22029f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"8d310b30e797ab985c79f7aef651e7d756c5896f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"FAKE_UUID \u003d str(uuid.uuid4())"},{"line_number":35,"context_line":"FAKE_RESPONSE_STACK \u003d []"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"FIVE_KB \u003d (5 * 1024)"},{"line_number":38,"context_line":"VMWARE_DATASTORE_CONF \u003d {"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F%2FO4s%3D","line":35,"updated":"2014-01-16 04:57:22.000000000","message":"Unused var","commit_id":"d506fc59e14536b240684d5ca12c9d2e9698f8f0"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"65ba33fee0610273688af97ae65e09b0a7f087ca","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"FAKE_UUID \u003d str(uuid.uuid4())"},{"line_number":35,"context_line":"FAKE_RESPONSE_STACK \u003d []"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"FIVE_KB \u003d (5 * 1024)"},{"line_number":38,"context_line":"VMWARE_DATASTORE_CONF \u003d {"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F%2FKFA%3D","line":35,"in_reply_to":"AAAAUH%2F%2FO4s%3D","updated":"2014-01-16 22:27:22.000000000","message":"Done","commit_id":"d506fc59e14536b240684d5ca12c9d2e9698f8f0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"8d310b30e797ab985c79f7aef651e7d756c5896f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"FAKE_UUID \u003d str(uuid.uuid4())"},{"line_number":35,"context_line":"FAKE_RESPONSE_STACK \u003d []"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"FIVE_KB \u003d (5 * 1024)"},{"line_number":38,"context_line":"VMWARE_DATASTORE_CONF \u003d {"},{"line_number":39,"context_line":"    \u0027verbose\u0027: True,"},{"line_number":40,"context_line":"    \u0027debug\u0027: True,"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F%2FO4w%3D","line":37,"updated":"2014-01-16 04:57:22.000000000","message":"pls use units util:\n\n    from glance.openstack.common import units\n\n    FIVE_KB \u003d 5 * units.Ki","commit_id":"d506fc59e14536b240684d5ca12c9d2e9698f8f0"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"65ba33fee0610273688af97ae65e09b0a7f087ca","unresolved":false,"context_lines":[{"line_number":34,"context_line":"FAKE_UUID \u003d str(uuid.uuid4())"},{"line_number":35,"context_line":"FAKE_RESPONSE_STACK \u003d []"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"FIVE_KB \u003d (5 * 1024)"},{"line_number":38,"context_line":"VMWARE_DATASTORE_CONF \u003d {"},{"line_number":39,"context_line":"    \u0027verbose\u0027: True,"},{"line_number":40,"context_line":"    \u0027debug\u0027: True,"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F%2FKDk%3D","line":37,"in_reply_to":"AAAAUH%2F%2FO4w%3D","updated":"2014-01-16 22:27:22.000000000","message":"Done","commit_id":"d506fc59e14536b240684d5ca12c9d2e9698f8f0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"8bd6912e0a57e4da14a518ed051cf825b24513f3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            (image_file, image_size) \u003d self.store.get(loc)"},{"line_number":139,"context_line":"        self.assertEqual(image_size, expected_image_size)"},{"line_number":140,"context_line":"        chunks \u003d [c for c in image_file]"},{"line_number":141,"context_line":"        self.assertEqual(chunks, expected_returns)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_add(self):"},{"line_number":144,"context_line":"        \"\"\"Test that we can add an image via the VMware backend\"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2FCbA%3D","line":141,"updated":"2014-01-18 04:19:11.000000000","message":"It will be better if we also do a case for 404, like what you did at Line #175-177.","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b8b41cbfdc3de835d4e9c675e7f08126a96e84b7","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            (image_file, image_size) \u003d self.store.get(loc)"},{"line_number":139,"context_line":"        self.assertEqual(image_size, expected_image_size)"},{"line_number":140,"context_line":"        chunks \u003d [c for c in image_file]"},{"line_number":141,"context_line":"        self.assertEqual(chunks, expected_returns)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_add(self):"},{"line_number":144,"context_line":"        \"\"\"Test that we can add an image via the VMware backend\"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2B0bY%3D","line":141,"in_reply_to":"AAAAUH%2F%2FCbA%3D","updated":"2014-01-21 19:38:07.000000000","message":"Done","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"8bd6912e0a57e4da14a518ed051cf825b24513f3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        with mock.patch(\u0027httplib.HTTPConnection\u0027) as HttpConn:"},{"line_number":185,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection()"},{"line_number":186,"context_line":"            image_size \u003d self.store.get_size(loc)"},{"line_number":187,"context_line":"        self.assertEqual(image_size, 31)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2FCa4%3D","line":187,"updated":"2014-01-18 04:19:11.000000000","message":"ditto","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"b8b41cbfdc3de835d4e9c675e7f08126a96e84b7","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        with mock.patch(\u0027httplib.HTTPConnection\u0027) as HttpConn:"},{"line_number":185,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection()"},{"line_number":186,"context_line":"            image_size \u003d self.store.get_size(loc)"},{"line_number":187,"context_line":"        self.assertEqual(image_size, 31)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAUH%2F%2B0aw%3D","line":187,"in_reply_to":"AAAAUH%2F%2FCa4%3D","updated":"2014-01-21 19:38:07.000000000","message":"Done","commit_id":"659c382a3d2400a2486ca03a1a9fb0378c758f02"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7fc23dfe93c39749d2d702b1db0e6bbb904bf87","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        loc \u003d get_location_from_uri(\"vsphere://127.0.0.1/folder/openstack_glan\""},{"line_number":151,"context_line":"                                    \"ce/%s?dsName\u003dds1\u0026dcPath\u003ddc1\" % FAKE_UUID)"},{"line_number":152,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_add(self):"},{"line_number":155,"context_line":"        \"\"\"Test that we can add an image via the VMware backend\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BwOM%3D","line":152,"updated":"2014-01-22 14:11:02.000000000","message":"Seems we still need mock to ask py26 testing happy.","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"2b5b47120ca08ec3046ff9529d281b2eb97fb36a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        loc \u003d get_location_from_uri(\"vsphere://127.0.0.1/folder/openstack_glan\""},{"line_number":151,"context_line":"                                    \"ce/%s?dsName\u003dds1\u0026dcPath\u003ddc1\" % FAKE_UUID)"},{"line_number":152,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_add(self):"},{"line_number":155,"context_line":"        \"\"\"Test that we can add an image via the VMware backend\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BuVk%3D","line":152,"in_reply_to":"AAAAUH%2F%2BwOM%3D","updated":"2014-01-22 19:45:07.000000000","message":"Done","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7fc23dfe93c39749d2d702b1db0e6bbb904bf87","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        loc \u003d get_location_from_uri(\"vsphere://127.0.0.1/folder/openstack_glan\""},{"line_number":207,"context_line":"                                    \"ce/%s?dsName\u003dds1\u0026dcPath\u003ddc1\" % FAKE_UUID)"},{"line_number":208,"context_line":"        self.assertRaises(exception.NotFound, self.store.get_size, loc)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BwOE%3D","line":208,"updated":"2014-01-22 14:11:02.000000000","message":"Seems we still need mock to ask py26 testing happy.","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"2b5b47120ca08ec3046ff9529d281b2eb97fb36a","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        loc \u003d get_location_from_uri(\"vsphere://127.0.0.1/folder/openstack_glan\""},{"line_number":207,"context_line":"                                    \"ce/%s?dsName\u003dds1\u0026dcPath\u003ddc1\" % FAKE_UUID)"},{"line_number":208,"context_line":"        self.assertRaises(exception.NotFound, self.store.get_size, loc)"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAAUH%2F%2BuVo%3D","line":208,"in_reply_to":"AAAAUH%2F%2BwOE%3D","updated":"2014-01-22 19:45:07.000000000","message":"Done","commit_id":"675f242b40ac806d3309c58dbdbf1e6acb7a7f42"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"f6ec5874a89d1db3b6a54cc22c55c1647cf9cb35","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection()"},{"line_number":187,"context_line":"            Store._service_content \u003d mock.Mock()"},{"line_number":188,"context_line":"            self.store.delete(loc)"},{"line_number":189,"context_line":"        with mock.patch(\u0027httplib.HTTPConnection\u0027) as HttpConn:"},{"line_number":190,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection(status\u003d404)"},{"line_number":191,"context_line":"            self.assertRaises(exception.NotFound, self.store.get, loc)"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAUH%2F%2BlJE%3D","line":189,"updated":"2014-01-24 06:54:00.000000000","message":"nit: would you lie separate this \"non_existing\" test case out to a dedicated function? to keep consistent with other function, like get().","commit_id":"f7fc141cb91f469ac608b923344085fcb88944e4"}]}
