)]}'
{"nova/objects/resource_provider.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c8f84d031801476a30346eee5643d368201d72f4","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"                rc \u003d self._create_in_db(self._context, updates)"},{"line_number":1112,"context_line":"                self._from_db_object(self._context, self, rc)"},{"line_number":1113,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1114,"context_line":"                if \"UNIQUE constraint failed:\" in str(e):"},{"line_number":1115,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1116,"context_line":"                    retry \u003d True"},{"line_number":1117,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_2a53606c","line":1114,"updated":"2016-11-17 18:24:00.000000000","message":"The DbDuplicateEntry that fails the unique constraint on the name field will pass the above condition which would result in an infinite loop here.","commit_id":"978b842240cd5e3958c9d5be97110595efc1bc14"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65a7dfb459f0e54d993db1b35ebe4830fc8a75ca","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"        # the ID is generated locally. This loop catches that exception, and"},{"line_number":1204,"context_line":"        # retries until either it succeeds, or a different exception is"},{"line_number":1205,"context_line":"        # encountered."},{"line_number":1206,"context_line":"        retry \u003d True"},{"line_number":1207,"context_line":"        while retry:"},{"line_number":1208,"context_line":"            retry \u003d False"},{"line_number":1209,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_a721ada1","line":1206,"range":{"start_line":1206,"start_character":8,"end_line":1206,"end_character":20},"updated":"2016-12-02 20:38:10.000000000","message":"You don\u0027t really need this, you could just do:\n\nwhile True:  # or a counter I guess\n   # if create works, break\n   # if duplicate id, retry\n   # if duplicate name, raise error","commit_id":"c19b7ffab68e761e9675baf3c632efbc6a67e505"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1aafe204c18e998a5745cac9fb160e8108f36724","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        # retries until either it succeeds, or a different exception is"},{"line_number":1205,"context_line":"        # encountered."},{"line_number":1206,"context_line":"        retry \u003d True"},{"line_number":1207,"context_line":"        while retry:"},{"line_number":1208,"context_line":"            retry \u003d False"},{"line_number":1209,"context_line":"            try:"},{"line_number":1210,"context_line":"                rc \u003d self._create_in_db(self._context, updates)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_5e6d9bca","line":1207,"updated":"2016-11-28 19:39:18.000000000","message":"The odds of colliding forever are negligible, but might it make sense to have a count to fail out of this hard after a few tries?\n\nI know it is unlikely but loops like these make me nervous.","commit_id":"c19b7ffab68e761e9675baf3c632efbc6a67e505"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65a7dfb459f0e54d993db1b35ebe4830fc8a75ca","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        # retries until either it succeeds, or a different exception is"},{"line_number":1205,"context_line":"        # encountered."},{"line_number":1206,"context_line":"        retry \u003d True"},{"line_number":1207,"context_line":"        while retry:"},{"line_number":1208,"context_line":"            retry \u003d False"},{"line_number":1209,"context_line":"            try:"},{"line_number":1210,"context_line":"                rc \u003d self._create_in_db(self._context, updates)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_e7148545","line":1207,"in_reply_to":"5a74a57a_5e6d9bca","updated":"2016-12-02 20:38:10.000000000","message":"I tend to agree.","commit_id":"c19b7ffab68e761e9675baf3c632efbc6a67e505"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"44bcabbc9758d267034cf3886c5f273af55d5d53","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"            try:"},{"line_number":1210,"context_line":"                rc \u003d self._create_in_db(self._context, updates)"},{"line_number":1211,"context_line":"                self._from_db_object(self._context, self, rc)"},{"line_number":1212,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1213,"context_line":"                if (\"UNIQUE constraint failed:\" in six.text_type(e) and"},{"line_number":1214,"context_line":"                        \"id\" in e.columns):"},{"line_number":1215,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1216,"context_line":"                    retry \u003d True"},{"line_number":1217,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_681bf01c","line":1214,"range":{"start_line":1212,"start_character":12,"end_line":1214,"end_character":43},"updated":"2016-12-01 07:12:22.000000000","message":"I\u0027m not a big fan of checking the exception message, although I understand why you\u0027re doing this. Maybe oslo.db deserves extension of the DBDuplicateEntry class, which will allow examining which constraint has been broken?","commit_id":"c19b7ffab68e761e9675baf3c632efbc6a67e505"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65a7dfb459f0e54d993db1b35ebe4830fc8a75ca","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"            try:"},{"line_number":1210,"context_line":"                rc \u003d self._create_in_db(self._context, updates)"},{"line_number":1211,"context_line":"                self._from_db_object(self._context, self, rc)"},{"line_number":1212,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1213,"context_line":"                if (\"UNIQUE constraint failed:\" in six.text_type(e) and"},{"line_number":1214,"context_line":"                        \"id\" in e.columns):"},{"line_number":1215,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1216,"context_line":"                    retry \u003d True"},{"line_number":1217,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_27367de6","line":1214,"range":{"start_line":1212,"start_character":12,"end_line":1214,"end_character":43},"in_reply_to":"5a74a57a_681bf01c","updated":"2016-12-02 20:38:10.000000000","message":"Yeah this is pretty nasty. If the error message is translated this wouldn\u0027t work either. Can we just do this instead?\n\nif hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:\n   # retry","commit_id":"c19b7ffab68e761e9675baf3c632efbc6a67e505"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f45603887ab776229e108beb5f0bb53b85a19a08","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"    or equal to this number."},{"line_number":1143,"context_line":"    \"\"\""},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"    RESOURCE_CREATE_RETRY_COUNT \u003d 10"},{"line_number":1146,"context_line":"    \"\"\"Retry count for handling possible race condition in creating resource"},{"line_number":1147,"context_line":"    class"},{"line_number":1148,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_df43a540","line":1145,"range":{"start_line":1145,"start_character":4,"end_line":1145,"end_character":36},"updated":"2016-12-05 11:34:00.000000000","message":"Also, I have doubt about the amount of retries. Is 10 would be enough?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6f4b57db584a6567b17dce40b876a3b94ec99dfa","unresolved":false,"context_lines":[{"line_number":1216,"context_line":"                self._from_db_object(self._context, self, rc)"},{"line_number":1217,"context_line":"                break"},{"line_number":1218,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_6c9746ec","line":1219,"range":{"start_line":1219,"start_character":19,"end_line":1219,"end_character":41},"updated":"2016-12-05 15:27:03.000000000","message":"This is unnecessary. The db_exc.DBDuplicateEntry exception class defines the columns attribute:\n\nhttps://github.com/openstack/oslo.db/blob/master/oslo_db/exception.py#L87","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"9f83a8a21fae5fba71a120aac82aeb71c80ed720","unresolved":false,"context_lines":[{"line_number":1216,"context_line":"                self._from_db_object(self._context, self, rc)"},{"line_number":1217,"context_line":"                break"},{"line_number":1218,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_48251307","line":1219,"range":{"start_line":1219,"start_character":19,"end_line":1219,"end_character":41},"in_reply_to":"3a71b18c_6c9746ec","updated":"2016-12-05 16:24:39.000000000","message":"Right. Apologies for not looking to the code…","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71b4eadd617eb0812d33d2ee03cf3239577de2f7","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_9ce5bbdd","line":1222,"updated":"2016-12-05 11:16:16.000000000","message":"If we reach this line we\u0027ve had something rather unexpected happen, but we are swallowing the exception and raising a different one, so we\u0027re going to lose some information on what happened. That seems less than ideal?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"9f83a8a21fae5fba71a120aac82aeb71c80ed720","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_a8a227ac","line":1222,"in_reply_to":"3a71b18c_1177c9d3","updated":"2016-12-05 16:24:39.000000000","message":"Yes and no. What about temporary database hiccup? There would be different type of exception than, isn\u0027t it?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a49a47908b49bd3dd6059129620e4025aa140f89","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_b139b5f4","line":1222,"in_reply_to":"3a71b18c_7f2d3194","updated":"2016-12-05 15:12:31.000000000","message":"What would be the appropriate time to raise a ResourceClassExists if not when attempting to create a duplicate class?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a49a47908b49bd3dd6059129620e4025aa140f89","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_1177c9d3","line":1222,"in_reply_to":"3a71b18c_9ce5bbdd","updated":"2016-12-05 15:12:31.000000000","message":"It is not unexpected. If you try to insert a record with a duplicate name, this is the result.","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f45603887ab776229e108beb5f0bb53b85a19a08","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_7f2d3194","line":1222,"in_reply_to":"3a71b18c_9ce5bbdd","updated":"2016-12-05 11:34:00.000000000","message":"Yeah. That seems odd. Probably \u0027raise\u0027 should be enough. Also, I\u0027m not sure about raising that specific ResourceClassExists at line 1224. Maybe it is enough to use ObjectActionError with appropriate reason?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"18f9a3f1b8a36297dafbba0072d8c14285fdc33a","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_fca85d8e","line":1222,"in_reply_to":"3a71b18c_a8a227ac","updated":"2016-12-05 17:30:12.000000000","message":"Ah no. That\u0027s silly. The only concern is, that here you are catching DBDuplicateEntry and raising something different, but yeah.","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"9f83a8a21fae5fba71a120aac82aeb71c80ed720","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"                if hasattr(e, \u0027columns\u0027) and \u0027id\u0027 in e.columns:"},{"line_number":1220,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1221,"context_line":"                    continue"},{"line_number":1222,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1223,"context_line":"        else:"},{"line_number":1224,"context_line":"            raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1225,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_28fa9775","line":1222,"in_reply_to":"3a71b18c_b139b5f4","updated":"2016-12-05 16:24:39.000000000","message":"Than what about ObjectActionError with appropriate reason? I mean, creating a lot of exception classes is sometimes beneficial, but if there is already class which have field reason (and it is used in this very method), maybe this is a way to go?","commit_id":"bb474654dabcac8a31a15d12896a3161e1babb3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d9c4e0fd09a12c2f7a9387ee01f808f380dd2181","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"    # class. We don\u0027t ever want to hit this, as it is simply a race when"},{"line_number":1147,"context_line":"    # creating these classes, but this is just a stopgap to prevent a potential"},{"line_number":1148,"context_line":"    # infinite loop."},{"line_number":1149,"context_line":"    RESOURCE_CREATE_RETRY_COUNT \u003d 100"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"    fields \u003d {"},{"line_number":1152,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_769c0e6a","line":1149,"range":{"start_line":1149,"start_character":34,"end_line":1149,"end_character":37},"updated":"2016-12-12 15:27:01.000000000","message":"100 seems like loads, but I guess it shouldn\u0027t happen...","commit_id":"0ec1114db5c5cc48977c18715128342c2489760f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b3a49ee649d1679d9006f781560926484c74c5a0","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1222,"context_line":"                    continue"},{"line_number":1223,"context_line":"                # The duplication is on the other unique column, \u0027name\u0027. So do"},{"line_number":1224,"context_line":"                # not retry; raise the exception immediately."},{"line_number":1225,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1226,"context_line":"        else:"},{"line_number":1227,"context_line":"            # We have no idea how common it will be in practice for the retry"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_5825ab59","line":1224,"updated":"2016-12-06 16:01:56.000000000","message":"I\u0027m still not entirely happy about this dumping of the error message from the previous exception. Sure, as things stand right now, if we get to here, it was a name collision.\n\nThat only remains true as long as no additional constrained columns are added to the database. As soon as one does, the exception becomes less informative.","commit_id":"0ec1114db5c5cc48977c18715128342c2489760f"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ecd04178f4526be9198191fa876a47869ee3921c","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1222,"context_line":"                    continue"},{"line_number":1223,"context_line":"                # The duplication is on the other unique column, \u0027name\u0027. So do"},{"line_number":1224,"context_line":"                # not retry; raise the exception immediately."},{"line_number":1225,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1226,"context_line":"        else:"},{"line_number":1227,"context_line":"            # We have no idea how common it will be in practice for the retry"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_f31a18c5","line":1224,"in_reply_to":"3a71b18c_5825ab59","updated":"2016-12-06 16:35:29.000000000","message":"Yeah. I thought about this in the morning, but didn\u0027t find a good compromise other than explicitly examine if \u0027name\u0027 column is in e.columns with throwing exception, like:\n\n        while retries:\n            retries -\u003d 1\n            try:\n                rc \u003d self._create_in_db(self._context, updates)\n                self._from_db_object(self._context, self, rc)\n                break\n            except db_exc.DBDuplicateEntry as e:\n                if \u0027id\u0027 in e.columns:\n                    # Race condition for ID creation; try again\n                    continue\n                if \u0027name\u0027 in e.column:\n                    raise exception.ResourceClassExists(resource_class\u003dself.name)\n                raise\n\nbut it looks rather odd to me, although it will definitely catch anything new in the model…","commit_id":"0ec1114db5c5cc48977c18715128342c2489760f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d9c4e0fd09a12c2f7a9387ee01f808f380dd2181","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                    # Race condition for ID creation; try again"},{"line_number":1222,"context_line":"                    continue"},{"line_number":1223,"context_line":"                # The duplication is on the other unique column, \u0027name\u0027. So do"},{"line_number":1224,"context_line":"                # not retry; raise the exception immediately."},{"line_number":1225,"context_line":"                raise exception.ResourceClassExists(resource_class\u003dself.name)"},{"line_number":1226,"context_line":"        else:"},{"line_number":1227,"context_line":"            # We have no idea how common it will be in practice for the retry"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_76488e5c","line":1224,"in_reply_to":"3a71b18c_f31a18c5","updated":"2016-12-12 15:27:01.000000000","message":"Nit: I would be tempted by something like: log.debug(\"asdf\", exc_info\u003dTrue)","commit_id":"0ec1114db5c5cc48977c18715128342c2489760f"}]}
