)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"712bb40a042e6f4d1d3818759a66fc2196177103","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Replace the remaining use with string concatenation."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Suggested by:\tSean McGinnis in review 188725"},{"line_number":16,"context_line":"Change-Id: Ie53c394d7f31fa1dccfa4ed5c4b514539c77aa05"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa32b979_2cab3576","line":15,"updated":"2015-06-15 13:11:27.000000000","message":"Not sure whether you need this in a commit message.","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"01486ad7e07b6de12f842ec35ec4bc59f074d0f1","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Replace the remaining use with string concatenation."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Suggested by:\tSean McGinnis in review 188725"},{"line_number":16,"context_line":"Change-Id: Ie53c394d7f31fa1dccfa4ed5c4b514539c77aa05"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_05f4e9ef","line":15,"updated":"2015-07-13 16:11:47.000000000","message":"I think you have an extra tab in there that shouldn\u0027t be there.","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"}],"cinder/volume/drivers/storpool.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"000b19599f3f87260d32585d788cedbf4b447094","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                self._attach.api().snapshotDelete(snapname)"},{"line_number":180,"context_line":"            except spapi.ApiError as e:"},{"line_number":181,"context_line":"                # ARGH!"},{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(n): \""},{"line_number":183,"context_line":"                              \"%(msg)\"),"},{"line_number":184,"context_line":"                          {\u0027n\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af86dd1_6163c31b","line":182,"updated":"2015-06-12 12:54:53.000000000","message":"This will not format correctly. You need to add the type. So for non-named variables it would be %s. For named it needs to be $(n)s. Still need the \"s\" in there.\n\nAlso, not a big deal to me, but I know others prefer not to have single character variable names. Since you will need to do an update could you change these to a short (but not single character) name? E.g. %(name)s.","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"05e9eda9859f57c017da9d8413bda80400c0b1ca","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                self._attach.api().snapshotDelete(snapname)"},{"line_number":180,"context_line":"            except spapi.ApiError as e:"},{"line_number":181,"context_line":"                # ARGH!"},{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(n): \""},{"line_number":183,"context_line":"                              \"%(msg)\"),"},{"line_number":184,"context_line":"                          {\u0027n\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_4fd1b056","line":182,"in_reply_to":"1af86dd1_6163c31b","updated":"2015-07-13 15:41:08.000000000","message":"Fixed in patchset 3, along with longer variable names.  Thanks!","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"712bb40a042e6f4d1d3818759a66fc2196177103","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                self._attach.api().snapshotDelete(snapname)"},{"line_number":180,"context_line":"            except spapi.ApiError as e:"},{"line_number":181,"context_line":"                # ARGH!"},{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(n): \""},{"line_number":183,"context_line":"                              \"%(msg)\"),"},{"line_number":184,"context_line":"                          {\u0027n\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_acb0a5f5","line":182,"in_reply_to":"1af86dd1_6163c31b","updated":"2015-06-15 13:11:27.000000000","message":"Small correction.\nFor named it needs to be %(n)s.","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"293a2325e19010bdef5e78384530fef64c1592f9","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            except spapi.ApiError as e:"},{"line_number":338,"context_line":"                LOG.error("},{"line_number":339,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(n) for %(v): \u0027"},{"line_number":340,"context_line":"                        \u0027%(e)\u0027),"},{"line_number":341,"context_line":"                    {\u0027n\u0027: name, \u0027v\u0027: volname, \u0027e\u0027: e})"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_2c4fdc93","line":340,"updated":"2015-06-13 07:47:44.000000000","message":"Same as with first log call, missing string format specifier.","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"05e9eda9859f57c017da9d8413bda80400c0b1ca","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            except spapi.ApiError as e:"},{"line_number":338,"context_line":"                LOG.error("},{"line_number":339,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(n) for %(v): \u0027"},{"line_number":340,"context_line":"                        \u0027%(e)\u0027),"},{"line_number":341,"context_line":"                    {\u0027n\u0027: name, \u0027v\u0027: volname, \u0027e\u0027: e})"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_2fceacb4","line":340,"in_reply_to":"fa32b979_2c4fdc93","updated":"2015-07-13 15:41:08.000000000","message":"Done","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"293a2325e19010bdef5e78384530fef64c1592f9","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            except spapi.ApiError as e:"},{"line_number":366,"context_line":"                LOG.error("},{"line_number":367,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(n) for %(v): \u0027"},{"line_number":368,"context_line":"                        \u0027%(e)\u0027),"},{"line_number":369,"context_line":"                    {\u0027n\u0027: name, \u0027v\u0027: volname, \u0027e\u0027: e})"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_cc43d06b","line":368,"updated":"2015-06-13 07:47:44.000000000","message":"Same as with first log call, missing string format specifier.","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"05e9eda9859f57c017da9d8413bda80400c0b1ca","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            except spapi.ApiError as e:"},{"line_number":366,"context_line":"                LOG.error("},{"line_number":367,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(n) for %(v): \u0027"},{"line_number":368,"context_line":"                        \u0027%(e)\u0027),"},{"line_number":369,"context_line":"                    {\u0027n\u0027: name, \u0027v\u0027: volname, \u0027e\u0027: e})"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_cfc5c08e","line":368,"in_reply_to":"fa32b979_cc43d06b","updated":"2015-07-13 15:41:08.000000000","message":"Done","commit_id":"05e695c5f6ea452e1209eafadb9c3a75bf4ade0e"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"b4b51f60bdf3919f4933463b9bd93e393da76c68","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(name)s: \""},{"line_number":183,"context_line":"                              \"%(msg)s\"),"},{"line_number":184,"context_line":"                          {\u0027name\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_export(self, context, volume):"},{"line_number":187,"context_line":"        pass"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_f263c418","line":185,"updated":"2015-07-13 17:44:46.000000000","message":"You still should use \u0027six.text_type(e)\u0027","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"529a4deffd9af70af3f7fbcc1b1aefa6ebc99dbb","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(name)s: \""},{"line_number":183,"context_line":"                              \"%(msg)s\"),"},{"line_number":184,"context_line":"                          {\u0027name\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_export(self, context, volume):"},{"line_number":187,"context_line":"        pass"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_5e5f1741","line":185,"in_reply_to":"9a41bdd9_43ed04ee","updated":"2015-07-13 19:17:12.000000000","message":"Thanks for the explanation Sean. Really helpful!","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"833f83ba60d1f63203f5766837eb643310f32b74","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(name)s: \""},{"line_number":183,"context_line":"                              \"%(msg)s\"),"},{"line_number":184,"context_line":"                          {\u0027name\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_export(self, context, volume):"},{"line_number":187,"context_line":"        pass"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_98f3770a","line":185,"in_reply_to":"9a41bdd9_7d9225a1","updated":"2015-07-13 18:17:17.000000000","message":"Can you explain the reason this specific message doesn\u0027t need to be converted? \u0027six.text_type\u0027 is used across all code and exception logging.","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"07c95477aa338092e3275f8926773aaf7b28b068","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(name)s: \""},{"line_number":183,"context_line":"                              \"%(msg)s\"),"},{"line_number":184,"context_line":"                          {\u0027name\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_export(self, context, volume):"},{"line_number":187,"context_line":"        pass"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_43ed04ee","line":185,"in_reply_to":"9a41bdd9_98f3770a","updated":"2015-07-13 18:43:45.000000000","message":"Sure. It should only be used when you are doing string formatting directly. So something like:\n\nraise exception.Badness(_(\"There was an error: %s\") % six.text_type(e))\n\nwould need it because the string is being formatted immediately and passed in to the exception constructor. But for logging:\n\nLOG.debug(\"There was an error: %s\", e)\n\nYou don\u0027t want to use it. That\u0027s why we use the , instead of an %. We pass e in as an argument to the LOG.debug() call. The logger internally will take care of it.\n\nSo if logging level is set higher than debug in this case, it will never need to format the string and it won\u0027t need to do any conversion. So two unnecessary operations are avoided. If logging is at debug level the logger will take care of the unicode conversion and formatting the string at the time it is actually needed.","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"48d8f4517b92e386da213fd4d1783532ca39e7da","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                LOG.error(_LE(\"Could not delete the temp snapshot %(name)s: \""},{"line_number":183,"context_line":"                              \"%(msg)s\"),"},{"line_number":184,"context_line":"                          {\u0027name\u0027: snapname, \u0027msg\u0027: e})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_export(self, context, volume):"},{"line_number":187,"context_line":"        pass"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_7d9225a1","line":185,"in_reply_to":"9a41bdd9_f263c418","updated":"2015-07-13 17:50:33.000000000","message":"No, six.text_type should not be used here. This is good as it is. The logger will take care of any conversion if and when needed.","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"b4b51f60bdf3919f4933463b9bd93e393da76c68","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            self._attach.api()"},{"line_number":224,"context_line":"        except Exception as e:"},{"line_number":225,"context_line":"            LOG.error(_LE(\"StorPoolDriver API initialization failed: %s\"), e)"},{"line_number":226,"context_line":"            raise"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_d27000df","line":225,"updated":"2015-07-13 17:44:46.000000000","message":"Same","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"b4b51f60bdf3919f4933463b9bd93e393da76c68","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                LOG.error("},{"line_number":339,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(name)s for \u0027"},{"line_number":340,"context_line":"                        \u0027%(vol)s: %(err)s\u0027),"},{"line_number":341,"context_line":"                    {\u0027name\u0027: name, \u0027vol\u0027: volname, \u0027err\u0027: e})"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":344,"context_line":"        req_id \u003d context.request_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_725fb441","line":341,"updated":"2015-07-13 17:44:46.000000000","message":"six.text_type()","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"b4b51f60bdf3919f4933463b9bd93e393da76c68","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                LOG.error("},{"line_number":367,"context_line":"                    _LE(\u0027Could not remove the temp snapshot %(name)s for \u0027"},{"line_number":368,"context_line":"                        \u0027%(vol)s: %(err)s\u0027),"},{"line_number":369,"context_line":"                    {\u0027name\u0027: name, \u0027vol\u0027: volname, \u0027err\u0027: e})"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":372,"context_line":"        req_id \u003d context.request_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_925a784f","line":369,"updated":"2015-07-13 17:44:46.000000000","message":"six...","commit_id":"17f0f03a3de3eadad6187d34de2d5f0afc1504d3"}]}
