)]}'
{"glance/store/vmware_datastore.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a0717aece9a0171ae9e130972afec142ebdeb235","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                             \u0027datacenter_path\u0027: self.datacenter_path,"},{"line_number":277,"context_line":"                             \u0027datastore_name\u0027: self.datastore_name,"},{"line_number":278,"context_line":"                             \u0027image_id\u0027: image_id})"},{"line_number":279,"context_line":"        for i in range(self.api_retry_count):"},{"line_number":280,"context_line":"            cookie \u003d self._build_vim_cookie_header("},{"line_number":281,"context_line":"                self._session.vim.client.options.transport.cookiejar)"},{"line_number":282,"context_line":"            headers \u003d {\u0027Cookie\u0027: cookie, \u0027Content-Length\u0027: image_size}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FweY%3D","line":279,"updated":"2014-04-28 07:46:15.000000000","message":"could this be done by a decorated internal method?","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bd4cbc4a44b28edf915ebc99bc474e08b6169e91","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                             \u0027datacenter_path\u0027: self.datacenter_path,"},{"line_number":277,"context_line":"                             \u0027datastore_name\u0027: self.datastore_name,"},{"line_number":278,"context_line":"                             \u0027image_id\u0027: image_id})"},{"line_number":279,"context_line":"        for i in range(self.api_retry_count):"},{"line_number":280,"context_line":"            cookie \u003d self._build_vim_cookie_header("},{"line_number":281,"context_line":"                self._session.vim.client.options.transport.cookiejar)"},{"line_number":282,"context_line":"            headers \u003d {\u0027Cookie\u0027: cookie, \u0027Content-Length\u0027: image_size}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_8df45cf3","line":279,"in_reply_to":"AAAAXX%2F%2FweY%3D","updated":"2014-05-29 02:21:48.000000000","message":"Done","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a0717aece9a0171ae9e130972afec142ebdeb235","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            except Exception:"},{"line_number":288,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":289,"context_line":"                    LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":290,"context_line":"                                    \u0027%(image)s\u0027) % {\u0027image\u0027: image_id})"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":293,"context_line":"                self._session \u003d self._create_session()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fwfg%3D","line":290,"updated":"2014-04-28 07:46:15.000000000","message":"please use a , instead of the %","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bd4cbc4a44b28edf915ebc99bc474e08b6169e91","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            except Exception:"},{"line_number":288,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":289,"context_line":"                    LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":290,"context_line":"                                    \u0027%(image)s\u0027) % {\u0027image\u0027: image_id})"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":293,"context_line":"                self._session \u003d self._create_session()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_0de84c0f","line":290,"in_reply_to":"AAAAXX%2F%2Fwfg%3D","updated":"2014-05-29 02:21:48.000000000","message":"Done","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a0717aece9a0171ae9e130972afec142ebdeb235","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            except Exception:"},{"line_number":390,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":391,"context_line":"                    LOG.exception(_(\u0027Failed to access image %(image)s \u0027"},{"line_number":392,"context_line":"                                    \u0027content.\u0027) %"},{"line_number":393,"context_line":"                                  {\u0027image\u0027: location.image_id})"},{"line_number":394,"context_line":"            if resp.status \u003e\u003d 400:"},{"line_number":395,"context_line":"                if resp.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwfE%3D","line":392,"updated":"2014-04-28 07:46:15.000000000","message":"please use a , instead of the %","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bd4cbc4a44b28edf915ebc99bc474e08b6169e91","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            except Exception:"},{"line_number":390,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":391,"context_line":"                    LOG.exception(_(\u0027Failed to access image %(image)s \u0027"},{"line_number":392,"context_line":"                                    \u0027content.\u0027) %"},{"line_number":393,"context_line":"                                  {\u0027image\u0027: location.image_id})"},{"line_number":394,"context_line":"            if resp.status \u003e\u003d 400:"},{"line_number":395,"context_line":"                if resp.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_6d3b909c","line":392,"in_reply_to":"AAAAXX%2F%2FwfE%3D","updated":"2014-05-29 02:21:48.000000000","message":"Done","commit_id":"16bbc25cc8d71bbc8b94c385584e885a9608f423"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"202f227021c4865c22f13a8cc5ebb9d9cbe5efdb","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def reset(self):"},{"line_number":135,"context_line":"        self.data.seek(0)"},{"line_number":136,"context_line":"        self._size \u003d 0"},{"line_number":137,"context_line":"        self.checksum \u003d hashlib.md5()"},{"line_number":138,"context_line":"        self.current_chunk \u003d \"\""},{"line_number":139,"context_line":"        self.closed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_6acae7a2","line":136,"updated":"2014-05-29 23:13:59.000000000","message":"Certain file-like objects don\u0027t support seek. If we are not supporting those, I suggest adding a comment about it.\n\nAlso, looks like we are using a different _Reader each time through the retry loop, so do we need anything beyond the rewind?","commit_id":"9fc7d87748165f1c57eb7fca8d8ea8f0a4748dbe"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"7418fe79ef8a9800828ca6bf613f07260d500b1c","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def reset(self):"},{"line_number":135,"context_line":"        self.data.seek(0)"},{"line_number":136,"context_line":"        self._size \u003d 0"},{"line_number":137,"context_line":"        self.checksum \u003d hashlib.md5()"},{"line_number":138,"context_line":"        self.current_chunk \u003d \"\""},{"line_number":139,"context_line":"        self.closed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_6ae8277d","line":136,"in_reply_to":"1ae5cdf2_6acae7a2","updated":"2014-05-29 23:45:38.000000000","message":"- What about a try/except? If we cannot rewind, it is better to throw an exception than sending something wrong to the store. What do you think?\n\n- Good point: I removed the other stuff.","commit_id":"9fc7d87748165f1c57eb7fca8d8ea8f0a4748dbe"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"b8f49a8227895933156aba2a94a783291dc14dfa","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def reset(self):"},{"line_number":135,"context_line":"        self.data.seek(0)"},{"line_number":136,"context_line":"        self._size \u003d 0"},{"line_number":137,"context_line":"        self.checksum \u003d hashlib.md5()"},{"line_number":138,"context_line":"        self.current_chunk \u003d \"\""},{"line_number":139,"context_line":"        self.closed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_c2c74811","line":136,"in_reply_to":"1ae5cdf2_6ae8277d","updated":"2014-05-30 16:27:19.000000000","message":"If seek(0) fails silently you are likely SOL. Assuming it throws an exceptions of some kind, that should already be sufficient to break out of the retry loop.","commit_id":"9fc7d87748165f1c57eb7fca8d8ea8f0a4748dbe"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.server_host \u003d self._option_get(\u0027vmware_server_host\u0027)"},{"line_number":225,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":226,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":227,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":228,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":229,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":230,"context_line":"        self._session \u003d self._create_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_82f18503","line":227,"updated":"2014-06-25 05:33:01.000000000","message":"So what will happen if this option be zero or a negative value? what about to do a check on it?","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.server_host \u003d self._option_get(\u0027vmware_server_host\u0027)"},{"line_number":225,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":226,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":227,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":228,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":229,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":230,"context_line":"        self._session \u003d self._create_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_f412de5f","line":227,"in_reply_to":"1ae5cdf2_82f18503","updated":"2014-06-26 01:49:31.000000000","message":"I think that\u0027s a good idea.","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":226,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":227,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":228,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":229,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":230,"context_line":"        self._session \u003d self._create_session()"},{"line_number":231,"context_line":"        self._service_content \u003d self._session.vim.service_content"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_22e0b125","line":228,"updated":"2014-06-25 05:33:01.000000000","message":"btw, the same thinking on this option.","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.server_username \u003d self._option_get(\u0027vmware_server_username\u0027)"},{"line_number":226,"context_line":"        self.server_password \u003d self._option_get(\u0027vmware_server_password\u0027)"},{"line_number":227,"context_line":"        self.api_retry_count \u003d CONF.vmware_api_retry_count"},{"line_number":228,"context_line":"        self.task_poll_interval \u003d CONF.vmware_task_poll_interval"},{"line_number":229,"context_line":"        self.api_insecure \u003d CONF.vmware_api_insecure"},{"line_number":230,"context_line":"        self._session \u003d self._create_session()"},{"line_number":231,"context_line":"        self._service_content \u003d self._session.vim.service_content"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_140bca2b","line":228,"in_reply_to":"1ae5cdf2_22e0b125","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            cookie \u003d list(vim_cookies)[0]"},{"line_number":277,"context_line":"            return cookie.name + \u0027\u003d\u0027 + cookie.value"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _retry_if_not_authenticated(exc):"},{"line_number":280,"context_line":"        return isinstance(exc, exception.NotAuthenticated)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_c71d5f12","line":279,"updated":"2014-06-25 05:33:01.000000000","message":"The function name is not fit in with its implementation. IMO, what about: _session_not_authenticated","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            cookie \u003d list(vim_cookies)[0]"},{"line_number":277,"context_line":"            return cookie.name + \u0027\u003d\u0027 + cookie.value"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _retry_if_not_authenticated(exc):"},{"line_number":280,"context_line":"        return isinstance(exc, exception.NotAuthenticated)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_74fece07","line":279,"in_reply_to":"1ae5cdf2_c71d5f12","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5d1c2d1c88a3ae841c4cb193d412ce59b4c1f959","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            res \u003d conn.getresponse()"},{"line_number":317,"context_line":"        except Exception:"},{"line_number":318,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":319,"context_line":"                LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":320,"context_line":"                                \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_f8a3bffd","line":319,"updated":"2014-06-25 17:04:41.000000000","message":"_LE(\nLOG.exception is ERROR level logging.\nRef: https://wiki.openstack.org/wiki/LoggingStandards#Guidelines","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            res \u003d conn.getresponse()"},{"line_number":317,"context_line":"        except Exception:"},{"line_number":318,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":319,"context_line":"                LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":320,"context_line":"                                \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_5f180b76","line":319,"in_reply_to":"1ae5cdf2_f8a3bffd","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":320,"context_line":"                                \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":323,"context_line":"            self._session \u003d self._create_session()"},{"line_number":324,"context_line":"            image_file.rewind()"},{"line_number":325,"context_line":"            raise exception.NotAuthenticated()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_677acbf1","line":322,"updated":"2014-06-25 05:33:01.000000000","message":"Does this situation could be logged by retry()? IMHO, what about to add a debug/info level log for this case, it\u0027s helpful for deployer and developer.","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                LOG.exception(_(\u0027Failed to upload content of image \u0027"},{"line_number":320,"context_line":"                                \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":323,"context_line":"            self._session \u003d self._create_session()"},{"line_number":324,"context_line":"            image_file.rewind()"},{"line_number":325,"context_line":"            raise exception.NotAuthenticated()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_9f2a93e5","line":322,"in_reply_to":"1ae5cdf2_677acbf1","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        file_path \u003d \u0027[%s] %s\u0027 % ("},{"line_number":379,"context_line":"            self.datastore_name,"},{"line_number":380,"context_line":"            location.store_location.path[len(DS_URL_PREFIX):])"},{"line_number":381,"context_line":"        search_index_moref \u003d self._service_content.searchIndex"},{"line_number":382,"context_line":"        dc_moref \u003d self._session.invoke_api(self._session.vim,"},{"line_number":383,"context_line":"                                            \u0027FindByInventoryPath\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_823fc586","line":380,"updated":"2014-06-25 05:33:01.000000000","message":"According to line #231, we need to refresh this value as well after we reestablish session right?","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        file_path \u003d \u0027[%s] %s\u0027 % ("},{"line_number":379,"context_line":"            self.datastore_name,"},{"line_number":380,"context_line":"            location.store_location.path[len(DS_URL_PREFIX):])"},{"line_number":381,"context_line":"        search_index_moref \u003d self._service_content.searchIndex"},{"line_number":382,"context_line":"        dc_moref \u003d self._session.invoke_api(self._session.vim,"},{"line_number":383,"context_line":"                                            \u0027FindByInventoryPath\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_050d568f","line":380,"in_reply_to":"1ae5cdf2_823fc586","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5d1c2d1c88a3ae841c4cb193d412ce59b4c1f959","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            resp \u003d conn.getresponse()"},{"line_number":414,"context_line":"        except Exception:"},{"line_number":415,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":416,"context_line":"                LOG.exception(_(\u0027Failed to access image %(image)s content.\u0027),"},{"line_number":417,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":418,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":419,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_3894478b","line":416,"updated":"2014-06-25 17:04:41.000000000","message":"ditto","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            resp \u003d conn.getresponse()"},{"line_number":414,"context_line":"        except Exception:"},{"line_number":415,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":416,"context_line":"                LOG.exception(_(\u0027Failed to access image %(image)s content.\u0027),"},{"line_number":417,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":418,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":419,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_9f4c5378","line":416,"in_reply_to":"1ae5cdf2_3894478b","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"0fbbfef7623cdb243230a441845f3594b9d980af","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":418,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":419,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":420,"context_line":"                self._session \u003d self._create_session()"},{"line_number":421,"context_line":"                raise exception.NotAuthenticated()"},{"line_number":422,"context_line":"            if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":423,"context_line":"                msg \u003d \u0027VMware datastore could not find image at URI.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2770c307","line":420,"updated":"2014-06-25 05:33:01.000000000","message":"ditto","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0524566ed57428dfe3e216235f4d91539c6e2868","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":418,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":419,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":420,"context_line":"                self._session \u003d self._create_session()"},{"line_number":421,"context_line":"                raise exception.NotAuthenticated()"},{"line_number":422,"context_line":"            if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":423,"context_line":"                msg \u003d \u0027VMware datastore could not find image at URI.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_bf2f4ff5","line":420,"in_reply_to":"1ae5cdf2_2770c307","updated":"2014-06-26 01:49:31.000000000","message":"Done","commit_id":"2a90d21cbbce243654d91254fdb19b20c5b2d59b"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ea734ebbc5b2fb5fbde03810eeea6675919625b0","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from glance.common import exception"},{"line_number":30,"context_line":"from glance.openstack.common import excutils"},{"line_number":31,"context_line":"from glance.openstack.common.gettextutils import _"},{"line_number":32,"context_line":"from glance.openstack.common.gettextutils import _LE"},{"line_number":33,"context_line":"from glance.openstack.common.gettextutils import _LI"},{"line_number":34,"context_line":"import glance.openstack.common.log as logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_0ab1dedf","line":31,"updated":"2014-06-26 04:26:41.000000000","message":"Under our practice, we like to import module instead of function.","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"c7c8393c4daa7c08addabb675f1b4d0138d9b067","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from glance.common import exception"},{"line_number":30,"context_line":"from glance.openstack.common import excutils"},{"line_number":31,"context_line":"from glance.openstack.common.gettextutils import _"},{"line_number":32,"context_line":"from glance.openstack.common.gettextutils import _LE"},{"line_number":33,"context_line":"from glance.openstack.common.gettextutils import _LI"},{"line_number":34,"context_line":"import glance.openstack.common.log as logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b40d0093","line":31,"in_reply_to":"1ae5cdf2_0ab1dedf","updated":"2014-07-02 02:26:09.000000000","message":"Done","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ea734ebbc5b2fb5fbde03810eeea6675919625b0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                LOG.exception(_LE(\u0027Failed to upload content of image \u0027"},{"line_number":339,"context_line":"                                  \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":342,"context_line":"            self._create_session()"},{"line_number":343,"context_line":"            image_file.rewind()"},{"line_number":344,"context_line":"            raise exception.NotAuthenticated()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_ea7d921f","line":341,"updated":"2014-06-26 04:26:41.000000000","message":"Same comment as https://review.openstack.org/#/c/89989/6/glance/store/vmware_datastore.py","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"c7c8393c4daa7c08addabb675f1b4d0138d9b067","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                LOG.exception(_LE(\u0027Failed to upload content of image \u0027"},{"line_number":339,"context_line":"                                  \u0027%(image)s\u0027), {\u0027image\u0027: image_id})"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if res.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":342,"context_line":"            self._create_session()"},{"line_number":343,"context_line":"            image_file.rewind()"},{"line_number":344,"context_line":"            raise exception.NotAuthenticated()"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_14222c01","line":341,"in_reply_to":"1ae5cdf2_ea7d921f","updated":"2014-07-02 02:26:09.000000000","message":"I added a log in the _session_not_authenticated method (for the retry)\nalso, create_session will log information notifying that a new session is created.","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ea734ebbc5b2fb5fbde03810eeea6675919625b0","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":437,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":438,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":439,"context_line":"                self._create_session()"},{"line_number":440,"context_line":"                raise exception.NotAuthenticated()"},{"line_number":441,"context_line":"            if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":442,"context_line":"                msg \u003d \u0027VMware datastore could not find image at URI.\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_2a7bfa29","line":439,"updated":"2014-06-26 04:26:41.000000000","message":"ditto","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"c7c8393c4daa7c08addabb675f1b4d0138d9b067","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":437,"context_line":"        if resp.status \u003e\u003d 400:"},{"line_number":438,"context_line":"            if resp.status \u003d\u003d httplib.UNAUTHORIZED:"},{"line_number":439,"context_line":"                self._create_session()"},{"line_number":440,"context_line":"                raise exception.NotAuthenticated()"},{"line_number":441,"context_line":"            if resp.status \u003d\u003d httplib.NOT_FOUND:"},{"line_number":442,"context_line":"                msg \u003d \u0027VMware datastore could not find image at URI.\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_3421f0fb","line":439,"in_reply_to":"1ae5cdf2_2a7bfa29","updated":"2014-07-02 02:26:09.000000000","message":"ditto","commit_id":"ff58e797ee7d5f895534772c7616e6722c0e7695"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"7800b24cce9a830283acf4b28132576b90833809","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":"_ \u003d gettextutils._"},{"line_number":40,"context_line":"_LE \u003d gettextutils._LE"},{"line_number":41,"context_line":"_LI \u003d gettextutils._LI"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_dfabac1c","line":39,"updated":"2014-07-08 15:15:22.000000000","message":"for future ref. importing _ is not necessary as the project adds it to the builtins","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0ff028a6a6caef95b75627f48bdc067327208889","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":"_ \u003d gettextutils._"},{"line_number":40,"context_line":"_LE \u003d gettextutils._LE"},{"line_number":41,"context_line":"_LI \u003d gettextutils._LI"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_6fb635de","line":39,"in_reply_to":"baada198_dfabac1c","updated":"2014-07-10 00:23:32.000000000","message":"Done","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"7800b24cce9a830283acf4b28132576b90833809","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            return True"},{"line_number":301,"context_line":"        return False"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"},{"line_number":304,"context_line":"           retry_on_exception\u003d_session_not_authenticated)"},{"line_number":305,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":306,"context_line":"        \"\"\"Stores an image file with supplied identifier to the backend"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_026b0b86","line":303,"updated":"2014-07-08 15:15:22.000000000","message":"the CONF value can be misleading here as the max number of attempts is equal to first attempt + total retries.\n\nif you supply :-\nstop_max_attempt_number\u003dCONF.vmware_api_retry_count (say the number if 7)\n\nthe number of retries that would happen in actuality \u003d (CONF.vmware_api_retry_count - 1) (i.e 6 in the example)\n\nsecond example in https://pypi.python.org/pypi/retrying section of Examples.","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0ff028a6a6caef95b75627f48bdc067327208889","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            return True"},{"line_number":301,"context_line":"        return False"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"},{"line_number":304,"context_line":"           retry_on_exception\u003d_session_not_authenticated)"},{"line_number":305,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":306,"context_line":"        \"\"\"Stores an image file with supplied identifier to the backend"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_87c7ed11","line":303,"in_reply_to":"baada198_026b0b86","updated":"2014-07-10 00:23:32.000000000","message":"Good catch! fixed + I added a unit test for that.","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"d5cdb40caa3e27d05b8bc62574bc7b7ace443775","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            return True"},{"line_number":301,"context_line":"        return False"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"},{"line_number":304,"context_line":"           retry_on_exception\u003d_session_not_authenticated)"},{"line_number":305,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":306,"context_line":"        \"\"\"Stores an image file with supplied identifier to the backend"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_ffbc976e","line":303,"in_reply_to":"baada198_87c7ed11","updated":"2014-07-10 15:25:07.000000000","message":"Thanks, yay unit tests!!","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"7800b24cce9a830283acf4b28132576b90833809","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        \"\"\""},{"line_number":389,"context_line":"        return self._query(location, \u0027HEAD\u0027)[2]"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def delete(self, location):"},{"line_number":392,"context_line":"        \"\"\"Takes a `glance.store.location.Location` object that indicates"},{"line_number":393,"context_line":"        where to find the image file to delete"},{"line_number":394,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_62ba07c2","line":391,"updated":"2014-07-08 15:15:22.000000000","message":"is there a reason for not recreating a session while deleting? or does it use _query method?","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0ff028a6a6caef95b75627f48bdc067327208889","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        \"\"\""},{"line_number":389,"context_line":"        return self._query(location, \u0027HEAD\u0027)[2]"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def delete(self, location):"},{"line_number":392,"context_line":"        \"\"\"Takes a `glance.store.location.Location` object that indicates"},{"line_number":393,"context_line":"        where to find the image file to delete"},{"line_number":394,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_d43a9fe6","line":391,"in_reply_to":"baada198_62ba07c2","updated":"2014-07-10 00:23:32.000000000","message":"delete is using oslo.vmware session.invoke_api method which is already retrying. I am actually also changing the logic there to use retrying: see https://review.openstack.org/#/c/102379/3/oslo/vmware/api.py\n(btw: I also need to update add do +1 iteration).","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"d5cdb40caa3e27d05b8bc62574bc7b7ace443775","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        \"\"\""},{"line_number":389,"context_line":"        return self._query(location, \u0027HEAD\u0027)[2]"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def delete(self, location):"},{"line_number":392,"context_line":"        \"\"\"Takes a `glance.store.location.Location` object that indicates"},{"line_number":393,"context_line":"        where to find the image file to delete"},{"line_number":394,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_a2bf66fb","line":391,"in_reply_to":"baada198_d43a9fe6","updated":"2014-07-10 15:25:07.000000000","message":"ah nice, that sounds good!","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"7800b24cce9a830283acf4b28132576b90833809","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                LOG.exception(_LE(\u0027Failed to delete image %(image)s content.\u0027),"},{"line_number":418,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"},{"line_number":421,"context_line":"           retry_on_exception\u003d_session_not_authenticated)"},{"line_number":422,"context_line":"    def _query(self, location, method, depth\u003d0):"},{"line_number":423,"context_line":"        if depth \u003e MAX_REDIRECTS:"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_22c48f5e","line":420,"updated":"2014-07-08 15:15:22.000000000","message":"ditto","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0ff028a6a6caef95b75627f48bdc067327208889","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                LOG.exception(_LE(\u0027Failed to delete image %(image)s content.\u0027),"},{"line_number":418,"context_line":"                              {\u0027image\u0027: location.image_id})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @retry(stop_max_attempt_number\u003dCONF.vmware_api_retry_count,"},{"line_number":421,"context_line":"           retry_on_exception\u003d_session_not_authenticated)"},{"line_number":422,"context_line":"    def _query(self, location, method, depth\u003d0):"},{"line_number":423,"context_line":"        if depth \u003e MAX_REDIRECTS:"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_c7d1e5ce","line":420,"in_reply_to":"baada198_22c48f5e","updated":"2014-07-10 00:23:32.000000000","message":"Done","commit_id":"903042f84dbfcf714412e30c75d112d504168fb5"}]}
