)]}'
{"oslo_log/formatters.py":[{"author":{"_account_id":26828,"name":"cjeanneret - deactivated","email":"cedric.jeanneret@camptocamp.com","username":"Tengu"},"change_message_id":"280c61ff3a2863776188854883cfe3974474ecdd","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # lets use the context we fetched above. In either case, we explode it"},{"line_number":227,"context_line":"        # into the extra dictionary because the values are more useful than the"},{"line_number":228,"context_line":"        # object reference."},{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_fec6c899","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":51},"updated":"2017-11-08 07:51:52.000000000","message":"hmm, extra[\u0027context\u0027] can be null or None? Is that this new test purpose?","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":26828,"name":"cjeanneret - deactivated","email":"cedric.jeanneret@camptocamp.com","username":"Tengu"},"change_message_id":"46e2eff6374f6eefd3a3ea788efb4a6c24e1658b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # lets use the context we fetched above. In either case, we explode it"},{"line_number":227,"context_line":"        # into the extra dictionary because the values are more useful than the"},{"line_number":228,"context_line":"        # object reference."},{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_de6f8c8f","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":51},"in_reply_to":"3f4b6375_7e38989e","updated":"2017-11-08 07:56:36.000000000","message":"seems legit then :). Might even need to validate the type of this extra[\u0027context\u0027]?","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"074a85425d890946fb4a7d85c8fe10c1bced9a06","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # lets use the context we fetched above. In either case, we explode it"},{"line_number":227,"context_line":"        # into the extra dictionary because the values are more useful than the"},{"line_number":228,"context_line":"        # object reference."},{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_5e327ca8","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":51},"in_reply_to":"3f4b6375_de6f8c8f","updated":"2017-11-08 07:59:07.000000000","message":"Well, a similar check is already done in line 35. Only difference is that if the user gives a null context, I rather use the one we fetch from the thread.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"eb2d8b071420b44f356ca2d1858ad5a838b7ee08","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # lets use the context we fetched above. In either case, we explode it"},{"line_number":227,"context_line":"        # into the extra dictionary because the values are more useful than the"},{"line_number":228,"context_line":"        # object reference."},{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_7e38989e","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":51},"in_reply_to":"3f4b6375_fec6c899","updated":"2017-11-08 07:52:50.000000000","message":"well, context in this case is user-provided. And users can do some funky things. So, just in case I added that.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ea088af017ddfd3ddcb447948436a606d1040dd9","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"},{"line_number":233,"context_line":"        extra.pop(\u0027context\u0027, None)"},{"line_number":234,"context_line":"        message[\u0027extra\u0027] \u003d extra"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_681200b4","line":232,"updated":"2017-11-10 17:46:33.000000000","message":"It\u0027s not clear to me that we want to do this. The values from the context are already attached to the record as attributes from the _update_record_with_context() call. The call to update on 230 will copy values from a context argument passed to the log call, which won\u0027t be seen by _update_record_with_context(). This step on line 232 will duplicate the values from the global context by copying them into the extras dict (so they will be attributes of record and in record.extra).\n\nI think the results may be ok, but it\u0027s extra work that I don\u0027t think we want to be doing on every log call and it may be masking some other issue. What problem did you run into that led you to making this change? I\u0027m concerned that the real bug is somewhere else.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c2eb196b05b285672601a6f5d7c7b925cd826c07","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"},{"line_number":233,"context_line":"        extra.pop(\u0027context\u0027, None)"},{"line_number":234,"context_line":"        message[\u0027extra\u0027] \u003d extra"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_e8727011","line":232,"in_reply_to":"1f485f77_681200b4","updated":"2017-11-10 17:54:33.000000000","message":"Well, after digging around a bit more I see that we\u0027re not putting the context info from the record into the output as I expected. I suppose no one is actually using the JSON output today.\n\nHow do you feel about adding \u0027context\u0027 as a new top level value in the message instead of fitting the values into the \u0027extra\u0027 dict? Keeping them separate would let us more easily identify values that are passed as extras to the log call.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"47f922818ed5bba7ee3929c124a03482f49a3883","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            extra.update(_dictify_context(extra[\u0027context\u0027]))"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            extra.update(_dictify_context(context))"},{"line_number":233,"context_line":"        extra.pop(\u0027context\u0027, None)"},{"line_number":234,"context_line":"        message[\u0027extra\u0027] \u003d extra"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_1be98f19","line":232,"in_reply_to":"1f485f77_e8727011","updated":"2017-11-11 10:03:31.000000000","message":"I would actually like that more. I was never too keen on adding it to the \"extra\" but only did so to keep what seemed to be expected by this code.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"d18c869b352de6807f5915a275d38ea4885ef545","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        # If we saved a context object, explode it into the extra"},{"line_number":298,"context_line":"        # dictionary because the values are more useful than the"},{"line_number":299,"context_line":"        # object reference."},{"line_number":300,"context_line":"        if \u0027context\u0027 in extra:"},{"line_number":301,"context_line":"            extra.update(_dictify_context(context))"},{"line_number":302,"context_line":"            del extra[\u0027context\u0027]"},{"line_number":303,"context_line":"        message[\u0027extra\u0027] \u003d extra"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_6d87b2d9","line":300,"updated":"2017-11-10 16:40:15.000000000","message":"It looks like the FluentFormatter has the same logic, does it have the same bug then?","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"ddd5506e382a87fc1904e6d6272bae89f6e5ec33","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        # If we saved a context object, explode it into the extra"},{"line_number":298,"context_line":"        # dictionary because the values are more useful than the"},{"line_number":299,"context_line":"        # object reference."},{"line_number":300,"context_line":"        if \u0027context\u0027 in extra:"},{"line_number":301,"context_line":"            extra.update(_dictify_context(context))"},{"line_number":302,"context_line":"            del extra[\u0027context\u0027]"},{"line_number":303,"context_line":"        message[\u0027extra\u0027] \u003d extra"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_dbf2d706","line":300,"in_reply_to":"1f485f77_6d87b2d9","updated":"2017-11-11 10:04:14.000000000","message":"I guess it does.","commit_id":"26a4658cefa6c6e9f9993755c0bf058faa9820cd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"994caa6646000b6eb41beae0f468621e3dfa88ed","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":230,"context_line":"            message[\u0027context\u0027] \u003d _dictify_context(extra[\u0027context\u0027])"},{"line_number":231,"context_line":"        elif context:"},{"line_number":232,"context_line":"            message[\u0027context\u0027] \u003d _dictify_context(context)"},{"line_number":233,"context_line":"        extra.pop(\u0027context\u0027, None)"},{"line_number":234,"context_line":"        message[\u0027extra\u0027] \u003d extra"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_954bd057","line":232,"updated":"2017-11-14 15:56:06.000000000","message":"For consistency, we should add an empty dict for context when we can\u0027t find it. That way the output always has a context key.","commit_id":"00005d511dd73517177a3ae5447fa31323c937e0"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"994caa6646000b6eb41beae0f468621e3dfa88ed","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        if \u0027context\u0027 in extra and extra[\u0027context\u0027]:"},{"line_number":303,"context_line":"            message[\u0027context\u0027] \u003d _dictify_context(extra[\u0027context\u0027])"},{"line_number":304,"context_line":"        elif context:"},{"line_number":305,"context_line":"            message[\u0027context\u0027] \u003d _dictify_context(context)"},{"line_number":306,"context_line":"        extra.pop(\u0027context\u0027, None)"},{"line_number":307,"context_line":"        message[\u0027extra\u0027] \u003d extra"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_557798a1","line":305,"updated":"2017-11-14 15:56:06.000000000","message":"Same as above.","commit_id":"00005d511dd73517177a3ae5447fa31323c937e0"}]}
