)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Fix session authentication issues"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Session authentication issues can occur when the client"},{"line_number":10,"context_line":"has been initialized and some intermediate failure has occured"},{"line_number":11,"context_line":"such as a transport failure to the remote BMC or even with setting"},{"line_number":12,"context_line":"changes on the remote BMC."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e284e2f7_f92388f8","line":10,"range":{"start_line":10,"start_character":55,"end_line":10,"end_character":62},"updated":"2022-01-26 11:05:07.000000000","message":"occurred","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix session authentication issues"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Session authentication issues can occur when the client"},{"line_number":10,"context_line":"has been initialized and some intermediate failure has occured"},{"line_number":11,"context_line":"such as a transport failure to the remote BMC or even with setting"},{"line_number":12,"context_line":"changes on the remote BMC."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1742d8a9_9c291618","line":10,"range":{"start_line":10,"start_character":55,"end_line":10,"end_character":62},"in_reply_to":"e284e2f7_f92388f8","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":19,"context_line":"In the event of the BMC no longer being able to support Session"},{"line_number":20,"context_line":"authentication, after a session initialization, the client will"},{"line_number":21,"context_line":"raise an AccessError exception to signify to the consumer that"},{"line_number":22,"context_line":"something has occured with credentials preventing further client"},{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f1254dc_d26c6c5b","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":22},"updated":"2022-01-26 11:05:07.000000000","message":"ditto","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"In the event of the BMC no longer being able to support Session"},{"line_number":20,"context_line":"authentication, after a session initialization, the client will"},{"line_number":21,"context_line":"raise an AccessError exception to signify to the consumer that"},{"line_number":22,"context_line":"something has occured with credentials preventing further client"},{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"50065a25_7b34adf3","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":22},"in_reply_to":"5f1254dc_d26c6c5b","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":20,"context_line":"authentication, after a session initialization, the client will"},{"line_number":21,"context_line":"raise an AccessError exception to signify to the consumer that"},{"line_number":22,"context_line":"something has occured with credentials preventing further client"},{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"},{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"572c7063_48a26d1e","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":39},"updated":"2022-01-26 11:05:07.000000000","message":"initializing","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"authentication, after a session initialization, the client will"},{"line_number":21,"context_line":"raise an AccessError exception to signify to the consumer that"},{"line_number":22,"context_line":"something has occured with credentials preventing further client"},{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"},{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9b7995bb_6cb915b9","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":39},"in_reply_to":"572c7063_48a26d1e","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"},{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"},{"line_number":27,"context_line":"loop."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Should the state in the client be unable to be determiend,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"afc524b7_66fcd978","line":26,"range":{"start_line":26,"start_character":52,"end_line":26,"end_character":54},"updated":"2022-01-26 11:05:07.000000000","message":"a?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"use without potentially re-initailizing the client."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Should the re-authentication fail, the exception will be directly"},{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"},{"line_number":27,"context_line":"loop."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Should the state in the client be unable to be determiend,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"314a59e2_8c84f858","line":26,"range":{"start_line":26,"start_character":52,"end_line":26,"end_character":54},"in_reply_to":"afc524b7_66fcd978","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"},{"line_number":27,"context_line":"loop."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Should the state in the client be unable to be determiend,"},{"line_number":30,"context_line":"and an AccessError is raised, the client will now attempt to"},{"line_number":31,"context_line":"re-authenticate."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1829eaa2_f0797df3","line":29,"range":{"start_line":29,"start_character":47,"end_line":29,"end_character":57},"updated":"2022-01-26 11:05:07.000000000","message":"determined","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"raised such that the client can no longer fall into an recursive"},{"line_number":27,"context_line":"loop."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Should the state in the client be unable to be determiend,"},{"line_number":30,"context_line":"and an AccessError is raised, the client will now attempt to"},{"line_number":31,"context_line":"re-authenticate."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"092fe5be_a590dac0","line":29,"range":{"start_line":29,"start_character":47,"end_line":29,"end_character":57},"in_reply_to":"1829eaa2_f0797df3","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Functionally, this change requires change"},{"line_number":40,"context_line":"I9eb238d1bbaf522d03ee3fce12fc0ab80c1b69b4 to be present"},{"line_number":41,"context_line":"as it removes X-Auth-Token headers which can lead to sperious"},{"line_number":42,"context_line":"authentication failures when sessions expire. Prior to any"},{"line_number":43,"context_line":"authentication action, this patch does *also* do the needful"},{"line_number":44,"context_line":"to prevent a poisoned client which would have potentially"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"6eb2a6bf_c5656a87","line":41,"range":{"start_line":41,"start_character":53,"end_line":41,"end_character":61},"updated":"2022-01-26 11:05:07.000000000","message":"serious? spurious?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ad4ad7fe61033798ef935cfcc1a3d08cd4a0229","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Functionally, this change requires change"},{"line_number":40,"context_line":"I9eb238d1bbaf522d03ee3fce12fc0ab80c1b69b4 to be present"},{"line_number":41,"context_line":"as it removes X-Auth-Token headers which can lead to sperious"},{"line_number":42,"context_line":"authentication failures when sessions expire. Prior to any"},{"line_number":43,"context_line":"authentication action, this patch does *also* do the needful"},{"line_number":44,"context_line":"to prevent a poisoned client which would have potentially"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fe7c3149_df0d475e","line":41,"range":{"start_line":41,"start_character":53,"end_line":41,"end_character":61},"in_reply_to":"134a3c0f_22559112","updated":"2022-02-17 15:55:45.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Functionally, this change requires change"},{"line_number":40,"context_line":"I9eb238d1bbaf522d03ee3fce12fc0ab80c1b69b4 to be present"},{"line_number":41,"context_line":"as it removes X-Auth-Token headers which can lead to sperious"},{"line_number":42,"context_line":"authentication failures when sessions expire. Prior to any"},{"line_number":43,"context_line":"authentication action, this patch does *also* do the needful"},{"line_number":44,"context_line":"to prevent a poisoned client which would have potentially"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"134a3c0f_22559112","line":41,"range":{"start_line":41,"start_character":53,"end_line":41,"end_character":61},"in_reply_to":"6eb2a6bf_c5656a87","updated":"2022-02-07 19:57:48.000000000","message":"Spurious","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"33336a0a62d5d083a144dbd8a680d265ce7bca62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"65cd2ed5_f23870e6","updated":"2022-01-04 19:37:36.000000000","message":"Marking wf-1 until I can a chance to wrap my head back around this patch.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5555c1f05e7297bb72d1a41ee1c082f4203d5a28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c5e99859_d10a5864","updated":"2021-12-09 21:56:54.000000000","message":"Replacement for the prior patch, Also after a little discussion with Dmitry. I think behavior wise this a) short circuits the fallback by making it forever impossible if session auth has occured. This raises an exception to the caller which I believe is appropriate. And it also b) prevents a transient failure after we\u0027ve reset primary values to determine *if* we can reset authentication from causing us to fall back to basic authentication.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"579d2121f724c8713eaaf92f2436a8d247ecc124","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3140d1b1_9dfc22c9","updated":"2021-12-17 12:04:20.000000000","message":"This is fixing issue with previous patch that fell back to BasicAuth all the time (now it creates Sessions again), but there are new issues.\n\nChecking this workflow:\n1) Initiate sushy\n2) Delete session on BMC to mimic failures\n3) Continue using sushy\n\nThe outcome with old/master sushy:\n- Session gets re-created on BMC, sushy continues to work\n\nThe outcome with this patch:\n- Session fails to recreate, it gets into some kind of never ending recursion that ends with \"RecursionError: maximum recursion depth exceeded while calling a Python object\"\n\nInline I\u0027m leaving a suggestion about direction to go. Current patch builds on top of solution that has turned out to be already problematic and adds more complexity to it.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"02ce6a2c8b81edd7b4e53696e4c8b5b5769f909c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"42811717_b92a2ca5","updated":"2022-01-07 16:46:56.000000000","message":"sorry, still seeing recursions ","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"790f770e_8b4eb94a","updated":"2022-01-11 16:35:51.000000000","message":"quick check - no longer getting recursion error and session gets recreated \\o/\nBefore I continue to look at other parts, left some comments. This should be simplified.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9dc52febe8c0595144438f2ec6339f6b2afdbbc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"31421e80_dfa734b2","updated":"2022-01-18 14:27:04.000000000","message":"Adding Shivanand to the list of reviewers, since this is a fairly low level change mechanics wise. Ultimately kind of actually doing the right thing per the spec where as previously session creation was a bit complicated. My customer has found the root cause for connectivity issues out to BMCs in the field so this is less pressing, but never the less, they shouldn\u0027t have had to restart ironic to get re-authenticated to their BMCs due to the state they got stuck in. Ultimately, this whole exercise uncovered a number of issues, hence the size of this patch.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"47bd3f46949d39950a8eb282e0e8ef8e5276c967","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"80793fce_27bd61d9","updated":"2022-01-26 06:17:58.000000000","message":"Thank you Julia. Its complicated. One query/comment inline.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"55be311a_dfa00857","updated":"2022-01-26 11:05:07.000000000","message":"thanks for the updates, no longer I can find regressions (and recursions) and the new issues as I see them look to be fixed too.\n\nIn addition to comments inline:\n\n1) could update https://docs.openstack.org/sushy/latest/reference/usage.html#creating-and-using-a-sushy-session-service-object \n2) should improve unit test coverage for changed and new methods - there are slightly less lines covered with this change in the affected files. As such I haven\u0027t reviewed unit tests yet, will do it in the end.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b19cc6ca_15d6ad9b","in_reply_to":"55be311a_dfa00857","updated":"2022-02-22 15:33:33.000000000","message":"@Julia ^ 1) can the docs updated here too? The provided sample does not work, even with current master, not sure at what point it stopped working, but this could be a good time to revisit the sample.\n2) main.py, auth.py could have missing lines/edge cases from this patch unit test covered","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b70ab69c6265a903b15d3888013ba2f64964268","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9d4ea0e6_34c34396","in_reply_to":"58b8a5c1_450aa90f","updated":"2022-03-01 17:09:03.000000000","message":"oh, shouldn\u0027t have selected resolved, I\u0027ll follow-up.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5b4a92e2_752e9886","in_reply_to":"80793fce_27bd61d9","updated":"2022-02-07 19:57:48.000000000","message":"Unfortunately, it is quite complicated. :( Thanks!","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"15ec524d63fbdc769f292b545f0d3b464a865bac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b8e5b352_54c87283","in_reply_to":"834bd5de_8339ac57","updated":"2022-02-25 11:09:06.000000000","message":"1) thanks, the new sample works.\n\n2) I was looking at the coverage lines [1][2], not count. There are lines in the new code that are not covered. Generally, the code and coverage should be OK as it is, until one day there is a syntax or other error that no-one noticed.\n\n[1]https://f7aaf99ee8ee12bf630a-971e2a4c342677c536a8906f7f85a1fc.ssl.cf5.rackcdn.com/821324/7/check/openstack-tox-cover/016a842/cover/d_c266a189890488b4_auth_py.html#t261\nhttps://f7aaf99ee8ee12bf630a-971e2a4c342677c536a8906f7f85a1fc.ssl.cf5.rackcdn.com/821324/7/check/openstack-tox-cover/016a842/cover/d_c266a189890488b4_main_py.html#t461\n[2] https://f7aaf99ee8ee12bf630a-971e2a4c342677c536a8906f7f85a1fc.ssl.cf5.rackcdn.com/821324/7/check/openstack-tox-cover/016a842/cover/d_c266a189890488b4_auth_py.html#t261\nhttps://f7aaf99ee8ee12bf630a-971e2a4c342677c536a8906f7f85a1fc.ssl.cf5.rackcdn.com/821324/7/check/openstack-tox-cover/016a842/cover/d_c266a189890488b4_main_py.html#t461","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2ff370fd9303cb481aa6518695e0a3de5a0cdda","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"834bd5de_8339ac57","in_reply_to":"b19cc6ca_15d6ad9b","updated":"2022-02-24 19:26:59.000000000","message":"With regards to point #1:\n\nSo... I\u0027m deleting the entire session service section and put a comperable one in place. If you wouldn\u0027t mind giving it a try, it would help since I don\u0027t have a redfish machine on hand at the moment.\n\nUnfortunate the prior example did not work. 😞\n\nRegarding #2, could you elaborate or point to specifics? Given how long between revisits, I\u0027m afraid active context in my brain is lacking. The only thing that comes to mind is the session fallback block if previously authenticated, but that has a mock checking for calls in test_auth.py. Based upon your comment, it sounds like your looking at line counts, but I added contextual comments in related areas so raw counting is skewed.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"27a0ef1b69a155b5b8d3e0d0e8970fd56d8ad4d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"58b8a5c1_450aa90f","in_reply_to":"b8e5b352_54c87283","updated":"2022-03-01 17:08:36.000000000","message":"I think the log is fine not to worry about, but that exception... hmmm, but yeah, I see that now. Hmm, I guess I was thinking the access error checks in test_connector were covering that, but but that is not correct since the parent caller in auth.py gets mocked in those tests.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"58c74ce2_404bfcf3","updated":"2022-02-22 15:33:33.000000000","message":"thanks for the updates, Julia.","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a7aeba0561e0175446fe9e92078b376c4d8f1f45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"461f27be_00ba04d1","updated":"2022-03-01 10:04:12.000000000","message":"Thank you Julia.","commit_id":"13c2fc57d186a1be2a58532dd028b63920c7d510"}],"doc/source/reference/usage.rst":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"15ec524d63fbdc769f292b545f0d3b464a865bac","unresolved":true,"context_lines":[{"line_number":268,"context_line":"  s \u003d sushy.Sushy(\u0027http://localhost:8000/redfish/v1\u0027,"},{"line_number":269,"context_line":"                  username\u003d\u0027foo\u0027, password\u003d\u0027bar\u0027)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"  # Get the ComputerSystem object (if there is only one, otherwise"},{"line_number":272,"context_line":"  # the identity must be provided as a path to the system."},{"line_number":273,"context_line":"  system \u003d s.get_system()"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"6f121087_7338f092","line":271,"range":{"start_line":271,"start_character":34,"end_line":271,"end_character":35},"updated":"2022-02-25 11:09:06.000000000","message":"does not have closing bracket )","commit_id":"13c2fc57d186a1be2a58532dd028b63920c7d510"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b4f7c658d8290463708db10dcf0ecdd73db9417","unresolved":false,"context_lines":[{"line_number":268,"context_line":"  s \u003d sushy.Sushy(\u0027http://localhost:8000/redfish/v1\u0027,"},{"line_number":269,"context_line":"                  username\u003d\u0027foo\u0027, password\u003d\u0027bar\u0027)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"  # Get the ComputerSystem object (if there is only one, otherwise"},{"line_number":272,"context_line":"  # the identity must be provided as a path to the system."},{"line_number":273,"context_line":"  system \u003d s.get_system()"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"30d201e3_f6eaab8d","line":271,"range":{"start_line":271,"start_character":34,"end_line":271,"end_character":35},"in_reply_to":"6f121087_7338f092","updated":"2022-03-04 17:53:31.000000000","message":"Done","commit_id":"13c2fc57d186a1be2a58532dd028b63920c7d510"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"15ec524d63fbdc769f292b545f0d3b464a865bac","unresolved":true,"context_lines":[{"line_number":273,"context_line":"  system \u003d s.get_system()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  # A session is created automatically for you."},{"line_number":276,"context_line":"  # Print thge boot field in the ComputerSystem."},{"line_number":277,"context_line":"  print(system.boot)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  # Upon session timeout, Sushy recreates the session based upon"}],"source_content_type":"text/x-rst","patch_set":7,"id":"db120d63_628974da","line":276,"range":{"start_line":276,"start_character":10,"end_line":276,"end_character":15},"updated":"2022-02-25 11:09:06.000000000","message":"the","commit_id":"13c2fc57d186a1be2a58532dd028b63920c7d510"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b4f7c658d8290463708db10dcf0ecdd73db9417","unresolved":false,"context_lines":[{"line_number":273,"context_line":"  system \u003d s.get_system()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  # A session is created automatically for you."},{"line_number":276,"context_line":"  # Print thge boot field in the ComputerSystem."},{"line_number":277,"context_line":"  print(system.boot)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  # Upon session timeout, Sushy recreates the session based upon"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f710dc8_e29615c8","line":276,"range":{"start_line":276,"start_character":10,"end_line":276,"end_character":15},"in_reply_to":"db120d63_628974da","updated":"2022-03-04 17:53:31.000000000","message":"Done","commit_id":"13c2fc57d186a1be2a58532dd028b63920c7d510"}],"releasenotes/notes/reauthentication-session-fallback-failure-fixes-4f0dcfdad1afd2d7.yaml":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    now attempts to re-authenticate."},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    Fixes silent failures when a refresh of an authentication ``Session``"},{"line_number":10,"context_line":"    fails and and was unable to be re-established due to an ``AccessError``."},{"line_number":11,"context_line":"    Should this occur, now the ``AccessError`` exception is explicitly raised"},{"line_number":12,"context_line":"    as opposed to attempting to fall back to ``Basic`` authentication."},{"line_number":13,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1ea7e331_a7a0c5d5","line":10,"range":{"start_line":10,"start_character":10,"end_line":10,"end_character":17},"updated":"2022-01-26 11:05:07.000000000","message":"and","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9f2ad192a618841c78f88d13a6dfff82088b69a9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    now attempts to re-authenticate."},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    Fixes silent failures when a refresh of an authentication ``Session``"},{"line_number":10,"context_line":"    fails and and was unable to be re-established due to an ``AccessError``."},{"line_number":11,"context_line":"    Should this occur, now the ``AccessError`` exception is explicitly raised"},{"line_number":12,"context_line":"    as opposed to attempting to fall back to ``Basic`` authentication."},{"line_number":13,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"296facb7_03d00f69","line":10,"range":{"start_line":10,"start_character":10,"end_line":10,"end_character":17},"in_reply_to":"1ea7e331_a7a0c5d5","updated":"2022-02-08 18:20:27.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"}],"sushy/auth.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"579d2121f724c8713eaaf92f2436a8d247ecc124","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e85109fc_39eceb1d","line":161,"updated":"2021-12-17 12:04:20.000000000","message":"how about getting rid of accessing get_session_service here and continue what was started at[1] - not only get the URL from there, but create session from root without get_session_service. Links/Session seems to be there from the very beginning in the standard. Or are there known BMCs that do not implement that?\n\n[1] https://storyboard.openstack.org/#!/story/2008059","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"ebbfa7baea03c36f3d385ae7abe29f72fdbd116c","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"301ffac5_0b903315","line":161,"in_reply_to":"5dfc6504_bcb32d2e","updated":"2022-01-06 17:23:44.000000000","message":"I don\u0027t have access to other vendor hardware, can\u0027t check myself, but should double check if there are any vendors that don\u0027t implement Links/Session.\n\nAs I wrote, Links/Session is in the spec from the beginning and is marked as required field.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9a6dc775ac4f80e3cbaf4804e1c3629e92cd7bed","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5cc8ede_b53bc4b6","line":161,"in_reply_to":"5dfc6504_bcb32d2e","updated":"2022-01-06 23:49:55.000000000","message":"So it looks like it would *really* have to already be there for the existing code path to work at all. At least skimming through the code.\n\nI *do* agree, we should likely kill the current pattern entirely or directly attempt based upon the root link resource. I think it would actually be about as invasive as fixing the other existing bugs in the flow, but the failure actually represents another bug in the client interaction. The _op method has some handling for this, but not re-authentication or refresh operations which is where things *can* go sideways, however those are additional bugs. I\u0027m up to four distinct failure cases. :\\","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"935f67203966240fb9fa28d24d2413abcef546c4","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7bd1928c_b55a0d2b","line":161,"in_reply_to":"6afd599a_2bffce4a","updated":"2022-01-10 10:23:41.000000000","message":"that\u0027s what I\u0027m saying - with different solution this prevention wouldn\u0027t be necessary, it would only add some value in unlike scenario where Sessions worked before, but suddenly they broke on BMC side. Now it adds complexity to the solution.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3ddc278b3a135f5ac2393ce6b5646441439e1edc","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"b1d043f0_129b7a09","line":161,"in_reply_to":"7bd1928c_b55a0d2b","updated":"2022-01-10 21:22:42.000000000","message":"I disagree in that it is a security guard in that it *should* never change in terms of a capability, but it is only one small piece of the puzzle in my opinion.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"02ce6a2c8b81edd7b4e53696e4c8b5b5769f909c","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"efb0c5d0_796ed303","line":161,"in_reply_to":"a5cc8ede_b53bc4b6","updated":"2022-01-07 16:46:56.000000000","message":"to me root link resource seems simpler. For example, it wouldn\u0027t require tracking `_session_auth_previously_successful`, but up to you if you can get this fixed.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df79acaa_5b8246df","line":161,"in_reply_to":"b1d043f0_129b7a09","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c77a3abc3a9da9a40ecfd9707e6601a5262804a8","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5dfc6504_bcb32d2e","line":161,"in_reply_to":"e85109fc_39eceb1d","updated":"2022-01-06 17:06:30.000000000","message":"I believe there are a few that *don\u0027t* implement it, which makes this a conundrum. Although it is likely also reasonable to just retrieve it.. Hmmm....","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"49631c6e2e5b20cd7377968d8a125a399557c801","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.debug(\u0027Missing Sessions attribute under Links in Root \u0027"},{"line_number":159,"context_line":"                      \u0027Service, we\\\u0027ll try to determine it from Session \u0027"},{"line_number":160,"context_line":"                      \u0027Service\u0027)"},{"line_number":161,"context_line":"        session_service \u003d self._root_resource.get_session_service()"},{"line_number":162,"context_line":"        session_auth_token, session_uri \u003d ("},{"line_number":163,"context_line":"            session_service.create_session(self._username,"},{"line_number":164,"context_line":"                                           self._password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6afd599a_2bffce4a","line":161,"in_reply_to":"efb0c5d0_796ed303","updated":"2022-01-07 19:29:05.000000000","message":"The flag for auth previously successful is more a lockout mechanism to help prevent fallback to basic, so I think it would still really be needed to lockout the possibility of inadvertant fallback should a transient failure occur.","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"579d2121f724c8713eaaf92f2436a8d247ecc124","unresolved":true,"context_lines":[{"line_number":258,"context_line":"                self._fallback_to_basic_authentication()"},{"line_number":259,"context_line":"            else:"},{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"f900a14c_6fb1e193","line":261,"range":{"start_line":261,"start_character":53,"end_line":261,"end_character":57},"updated":"2021-12-17 12:04:20.000000000","message":"a a","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c77a3abc3a9da9a40ecfd9707e6601a5262804a8","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                self._fallback_to_basic_authentication()"},{"line_number":259,"context_line":"            else:"},{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff06802f_2b039b73","line":261,"range":{"start_line":261,"start_character":53,"end_line":261,"end_character":57},"in_reply_to":"f900a14c_6fb1e193","updated":"2022-01-06 17:06:30.000000000","message":"Done","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb7e4fc3de2bb6ad1ec0788b32fbc754e287c24c","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            else:"},{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"94ee9c00_93830538","line":262,"range":{"start_line":262,"start_character":51,"end_line":262,"end_character":66},"updated":"2021-12-16 00:41:32.000000000","message":"eye-roll emoji","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            else:"},{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2326ec99_a8964d4a","line":262,"range":{"start_line":262,"start_character":51,"end_line":262,"end_character":66},"in_reply_to":"2e95f1b3_d2d3ee1e","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"62c5f1d5c56fde305663eef93b1af645bfda1222","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            else:"},{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2e95f1b3_d2d3ee1e","line":262,"range":{"start_line":262,"start_character":51,"end_line":262,"end_character":66},"in_reply_to":"94ee9c00_93830538","updated":"2021-12-16 01:32:39.000000000","message":"your the second person to have commented in similar fashion!","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"579d2121f724c8713eaaf92f2436a8d247ecc124","unresolved":true,"context_lines":[{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"},{"line_number":266,"context_line":"                          {\u0027exception\u0027: e})"}],"source_content_type":"text/x-python","patch_set":2,"id":"0b3b7512_820797a5","line":263,"range":{"start_line":263,"start_character":31,"end_line":263,"end_character":38},"updated":"2021-12-17 12:04:20.000000000","message":"occurred","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c77a3abc3a9da9a40ecfd9707e6601a5262804a8","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                LOG.debug(\u0027Received exception \"%(exception)s\" while \u0027"},{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"},{"line_number":266,"context_line":"                          {\u0027exception\u0027: e})"}],"source_content_type":"text/x-python","patch_set":2,"id":"c7dc3153_1963ce72","line":263,"range":{"start_line":263,"start_character":31,"end_line":263,"end_character":38},"in_reply_to":"0b3b7512_820797a5","updated":"2022-01-06 17:06:30.000000000","message":"Done","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"579d2121f724c8713eaaf92f2436a8d247ecc124","unresolved":true,"context_lines":[{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"},{"line_number":266,"context_line":"                          {\u0027exception\u0027: e})"},{"line_number":267,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aacb433_193e3c86","line":264,"range":{"start_line":264,"start_character":56,"end_line":264,"end_character":59},"updated":"2021-12-17 12:04:20.000000000","message":"white space missing","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c77a3abc3a9da9a40ecfd9707e6601a5262804a8","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                          \u0027attempting to re-establish a a session. \u0027"},{"line_number":262,"context_line":"                          \u0027Raising AccessError, as something fishy \u0027"},{"line_number":263,"context_line":"                          \u0027has occured and the BMC has suddenly \u0027"},{"line_number":264,"context_line":"                          \u0027ceased to support Session based\u0027"},{"line_number":265,"context_line":"                          \u0027authentication.\u0027,"},{"line_number":266,"context_line":"                          {\u0027exception\u0027: e})"},{"line_number":267,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"1d65868d_400521bb","line":264,"range":{"start_line":264,"start_character":56,"end_line":264,"end_character":59},"in_reply_to":"9aacb433_193e3c86","updated":"2022-01-06 17:06:30.000000000","message":"Done","commit_id":"1dbca86186b4e09de9a81eb72285bd6ffa852bc1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        return self._session_resource_id"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _directly_create_session(self):"},{"line_number":171,"context_line":"        \"\"\"Attempt to directly create a session."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        Attempts to create a session without invoking the SessionService and"}],"source_content_type":"text/x-python","patch_set":4,"id":"21d9a057_ca94ea24","line":170,"updated":"2022-01-11 16:35:51.000000000","message":"remove this method and use one from root resource mentioned in comment at main.py. It shouldn\u0027t be necessary to create another connector, access raw JSON, duplicate create_session code, and introduce base_url, root_prefix, verify.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88c7d6ccdbdbc8d12defa1c0d6c2d9c2edbffa42","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        return self._session_resource_id"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _directly_create_session(self):"},{"line_number":171,"context_line":"        \"\"\"Attempt to directly create a session."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        Attempts to create a session without invoking the SessionService and"}],"source_content_type":"text/x-python","patch_set":4,"id":"ad17a3eb_f2f02d74","line":170,"in_reply_to":"21d9a057_ca94ea24","updated":"2022-01-11 16:58:37.000000000","message":"I sought to avoid accessing the base resource because it explicitly is built upon the base resource and can recurse as such. Directly invoking removes that possible outcome imho.\n\nOn second thought, the recursion is an artifact of the full session client use entirely, so maybe it might be safe if we follow the same exact pattern on the base resource.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        return self._session_resource_id"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _directly_create_session(self):"},{"line_number":171,"context_line":"        \"\"\"Attempt to directly create a session."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        Attempts to create a session without invoking the SessionService and"}],"source_content_type":"text/x-python","patch_set":4,"id":"e05b3b96_2974b890","line":170,"in_reply_to":"5945e463_121c49b6","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"252ad10f786b80a6d035caca20e77435b6eafac5","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        return self._session_resource_id"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _directly_create_session(self):"},{"line_number":171,"context_line":"        \"\"\"Attempt to directly create a session."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        Attempts to create a session without invoking the SessionService and"}],"source_content_type":"text/x-python","patch_set":4,"id":"5945e463_121c49b6","line":170,"in_reply_to":"ad17a3eb_f2f02d74","updated":"2022-01-12 10:39:24.000000000","message":"recursion happens, when handling connector.py ln 127 error, it keeps calling the code that causes the error in the 1st place, there is no way out ad infinitum.\n\nThe recursion hasn\u0027t gone away either. The reason why I don\u0027t get it now, is because Links/Sessions bypassing sessionservice approach works and it is not susceptible to AccessError at all.\n\nIf there were systems that need to fallback, they will fallback and fail. Does not add much value having such failing fallback.\n\nIf you are keeping sessionservice as fallback, you still need to fix the recursion.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        session_auth_token \u003d None"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        try:"},{"line_number":232,"context_line":"            session_auth_token, session_uri \u003d self._directly_create_session()"},{"line_number":233,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":234,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":235,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"f52c281a_0363422e","line":232,"range":{"start_line":232,"start_character":45,"end_line":232,"end_character":77},"updated":"2022-01-11 16:35:51.000000000","message":"use method from root, e.g., self._root_resource.create_session()","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        session_auth_token \u003d None"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        try:"},{"line_number":232,"context_line":"            session_auth_token, session_uri \u003d self._directly_create_session()"},{"line_number":233,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":234,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":235,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"a13abd5e_a11fdd3c","line":232,"range":{"start_line":232,"start_character":45,"end_line":232,"end_character":77},"in_reply_to":"f52c281a_0363422e","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":true,"context_lines":[{"line_number":246,"context_line":"                          \u0027Service. Error: %(error)s\u0027,"},{"line_number":247,"context_line":"                          {\u0027error\u0027: e})"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            session_service \u003d self._root_resource.get_session_service()"},{"line_number":250,"context_line":"            session_auth_token, session_uri \u003d ("},{"line_number":251,"context_line":"                session_service.create_session(self._username,"},{"line_number":252,"context_line":"                                               self._password,"}],"source_content_type":"text/x-python","patch_set":4,"id":"63ed71a1_7792a4d6","line":249,"range":{"start_line":249,"start_character":12,"end_line":249,"end_character":71},"updated":"2022-01-11 16:35:51.000000000","message":"would remove accessing sessionservice from here as fallback, I don\u0027t think it\u0027s meant to be used before auth. That is, I\u0027m still stuck on one of my prev questions - are there any known vendors not implementing Links/Sessions?","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                          \u0027Service. Error: %(error)s\u0027,"},{"line_number":247,"context_line":"                          {\u0027error\u0027: e})"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            session_service \u003d self._root_resource.get_session_service()"},{"line_number":250,"context_line":"            session_auth_token, session_uri \u003d ("},{"line_number":251,"context_line":"                session_service.create_session(self._username,"},{"line_number":252,"context_line":"                                               self._password,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b972e689_876a6d93","line":249,"range":{"start_line":249,"start_character":12,"end_line":249,"end_character":71},"in_reply_to":"2c050dd9_49fd86ed","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88c7d6ccdbdbc8d12defa1c0d6c2d9c2edbffa42","unresolved":true,"context_lines":[{"line_number":246,"context_line":"                          \u0027Service. Error: %(error)s\u0027,"},{"line_number":247,"context_line":"                          {\u0027error\u0027: e})"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            session_service \u003d self._root_resource.get_session_service()"},{"line_number":250,"context_line":"            session_auth_token, session_uri \u003d ("},{"line_number":251,"context_line":"                session_service.create_session(self._username,"},{"line_number":252,"context_line":"                                               self._password,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8a7e5ef8_77e72cc9","line":249,"range":{"start_line":249,"start_character":12,"end_line":249,"end_character":71},"in_reply_to":"63ed71a1_7792a4d6","updated":"2022-01-11 16:58:37.000000000","message":"With regards to the prior question, I think they must all be because if you look at the linkage in the base code then in the session client resource itself, it looks like the lack of presence would create a failure, at the same time the MissingAttributeError handling is there just to be on the safe side. I we likely ought to deprecate the fallback in general but just see how it goes for now. An outright major fallback being removed in a backport wouldn\u0027t really be acceptable imho.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"252ad10f786b80a6d035caca20e77435b6eafac5","unresolved":true,"context_lines":[{"line_number":246,"context_line":"                          \u0027Service. Error: %(error)s\u0027,"},{"line_number":247,"context_line":"                          {\u0027error\u0027: e})"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            session_service \u003d self._root_resource.get_session_service()"},{"line_number":250,"context_line":"            session_auth_token, session_uri \u003d ("},{"line_number":251,"context_line":"                session_service.create_session(self._username,"},{"line_number":252,"context_line":"                                               self._password,"}],"source_content_type":"text/x-python","patch_set":4,"id":"2c050dd9_49fd86ed","line":249,"range":{"start_line":249,"start_character":12,"end_line":249,"end_character":71},"in_reply_to":"8a7e5ef8_77e72cc9","updated":"2022-01-12 10:39:24.000000000","message":"see another comment, this fallback is still buggy and causes recursion. It needs fixing, if keeping.","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            auth_token, session_uri \u003d self._root_resource.create_session("},{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b4fdf4bc_3b446118","line":161,"range":{"start_line":161,"start_character":16,"end_line":161,"end_character":48},"updated":"2022-01-26 11:05:07.000000000","message":"looking at main.py, MissingAttributeError is being handled there. Is this for different path? Or something else?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            auth_token, session_uri \u003d self._root_resource.create_session("},{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fe547166_0e23e4b3","line":161,"range":{"start_line":161,"start_character":16,"end_line":161,"end_character":48},"in_reply_to":"b4fdf4bc_3b446118","updated":"2022-02-07 19:57:48.000000000","message":"It is I\u0027m thinking this try/except catch can go completely away, since the exceptions will be appropriately raised. That and also we should raise an exception here if there is an issue, and the additional logging this might provide is just going to hide issues.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9f2ad192a618841c78f88d13a6dfff82088b69a9","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            auth_token, session_uri \u003d self._root_resource.create_session("},{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a95c5c40_c6f41fe3","line":161,"range":{"start_line":161,"start_character":16,"end_line":161,"end_character":48},"in_reply_to":"fe547166_0e23e4b3","updated":"2022-02-08 18:20:27.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"47bd3f46949d39950a8eb282e0e8ef8e5276c967","unresolved":true,"context_lines":[{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"},{"line_number":165,"context_line":"                        {\u0027error\u0027: e})"},{"line_number":166,"context_line":"        # Record the session authentication data."},{"line_number":167,"context_line":"        self._session_key \u003d auth_token"},{"line_number":168,"context_line":"        self._session_resource_id \u003d session_uri"}],"source_content_type":"text/x-python","patch_set":5,"id":"dc332812_264eb570","line":165,"range":{"start_line":163,"start_character":12,"end_line":165,"end_character":37},"updated":"2022-01-26 06:17:58.000000000","message":"Should it also be calling session_service.create_session() in this exception path?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"},{"line_number":165,"context_line":"                        {\u0027error\u0027: e})"},{"line_number":166,"context_line":"        # Record the session authentication data."},{"line_number":167,"context_line":"        self._session_key \u003d auth_token"},{"line_number":168,"context_line":"        self._session_resource_id \u003d session_uri"}],"source_content_type":"text/x-python","patch_set":5,"id":"b11cb0d6_aed8c1ff","line":165,"range":{"start_line":163,"start_character":12,"end_line":165,"end_character":37},"in_reply_to":"6bc41408_2d4a93d5","updated":"2022-02-07 19:57:48.000000000","message":"Not intended to fall back to session service. It is a leftover bit from before and in pondering Aija\u0027s prior question, looks like it could likely be entirely dropped.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ad4ad7fe61033798ef935cfcc1a3d08cd4a0229","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"},{"line_number":165,"context_line":"                        {\u0027error\u0027: e})"},{"line_number":166,"context_line":"        # Record the session authentication data."},{"line_number":167,"context_line":"        self._session_key \u003d auth_token"},{"line_number":168,"context_line":"        self._session_resource_id \u003d session_uri"}],"source_content_type":"text/x-python","patch_set":5,"id":"52ce841f_65ca4581","line":165,"range":{"start_line":163,"start_character":12,"end_line":165,"end_character":37},"in_reply_to":"b11cb0d6_aed8c1ff","updated":"2022-02-17 15:55:45.000000000","message":"Ack","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":160,"context_line":"                self._username, self._password)"},{"line_number":161,"context_line":"        except (exceptions.MissingAttributeError,"},{"line_number":162,"context_line":"                exceptions.MissingXAuthToken) as e:"},{"line_number":163,"context_line":"            LOG.warning(\u0027Failed to directly create a session, falling back \u0027"},{"line_number":164,"context_line":"                        \u0027to the Session Service. Error: %(error)s\u0027,"},{"line_number":165,"context_line":"                        {\u0027error\u0027: e})"},{"line_number":166,"context_line":"        # Record the session authentication data."},{"line_number":167,"context_line":"        self._session_key \u003d auth_token"},{"line_number":168,"context_line":"        self._session_resource_id \u003d session_uri"}],"source_content_type":"text/x-python","patch_set":5,"id":"6bc41408_2d4a93d5","line":165,"range":{"start_line":163,"start_character":12,"end_line":165,"end_character":37},"in_reply_to":"dc332812_264eb570","updated":"2022-01-26 11:05:07.000000000","message":"is it supposed to fall back to SessionService? From code starting at ln 256 it will re-raise or fall back to basic auth when applicable. This could be leftover from previous versions and log message should be updated to reflect current approach.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    def can_refresh_session(self):"},{"line_number":176,"context_line":"        \"\"\"Method to assert if session based refresh can be done.\"\"\""},{"line_number":177,"context_line":"        # Uses _session_key and _session_resource_id to indicate"},{"line_number":178,"context_line":"        # if session auth can be refreshed, but another indicator"},{"line_number":179,"context_line":"        # is *if* we have ever successfully authenticated previously."},{"line_number":180,"context_line":"        # If so, the library will refresh the session and"},{"line_number":181,"context_line":"        # reauthenticate."},{"line_number":182,"context_line":"        return (self._session_key is not None"},{"line_number":183,"context_line":"                and self._session_resource_id is not None)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"debbaf7e_b6a236e3","line":181,"range":{"start_line":178,"start_character":42,"end_line":181,"end_character":25},"updated":"2022-01-26 11:05:07.000000000","message":"is this leftover from previous versions? This method no longer uses `self._session_auth_previously_successful`. If it\u0027s no longer needed, could remove this comment block as the first part of that states the obvious.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    def can_refresh_session(self):"},{"line_number":176,"context_line":"        \"\"\"Method to assert if session based refresh can be done.\"\"\""},{"line_number":177,"context_line":"        # Uses _session_key and _session_resource_id to indicate"},{"line_number":178,"context_line":"        # if session auth can be refreshed, but another indicator"},{"line_number":179,"context_line":"        # is *if* we have ever successfully authenticated previously."},{"line_number":180,"context_line":"        # If so, the library will refresh the session and"},{"line_number":181,"context_line":"        # reauthenticate."},{"line_number":182,"context_line":"        return (self._session_key is not None"},{"line_number":183,"context_line":"                and self._session_resource_id is not None)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"97aee596_72c1b764","line":181,"range":{"start_line":178,"start_character":42,"end_line":181,"end_character":25},"in_reply_to":"debbaf7e_b6a236e3","updated":"2022-02-07 19:57:48.000000000","message":"definitly leftover. Thanks!","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _fallback_to_basic_authentication(self):"},{"line_number":241,"context_line":"        \"\"\"Fallback to basic authentication.\"\"\""},{"line_number":242,"context_line":"        # Fall back to basic authentication"},{"line_number":243,"context_line":"        self.reset_session_attrs()"},{"line_number":244,"context_line":"        self.basic_auth.set_context(self._root_resource, self._connector)"},{"line_number":245,"context_line":"        self.basic_auth.authenticate()"}],"source_content_type":"text/x-python","patch_set":5,"id":"e24c8be0_bc831af8","line":242,"range":{"start_line":242,"start_character":0,"end_line":242,"end_character":43},"updated":"2022-01-26 11:05:07.000000000","message":"remove this comment as it\u0027s repeating the method name and docstring","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _fallback_to_basic_authentication(self):"},{"line_number":241,"context_line":"        \"\"\"Fallback to basic authentication.\"\"\""},{"line_number":242,"context_line":"        # Fall back to basic authentication"},{"line_number":243,"context_line":"        self.reset_session_attrs()"},{"line_number":244,"context_line":"        self.basic_auth.set_context(self._root_resource, self._connector)"},{"line_number":245,"context_line":"        self.basic_auth.authenticate()"}],"source_content_type":"text/x-python","patch_set":5,"id":"b05891c2_1bb3fa65","line":242,"range":{"start_line":242,"start_character":0,"end_line":242,"end_character":43},"in_reply_to":"e24c8be0_bc831af8","updated":"2022-02-07 19:57:48.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0dc95e131e3e931dba2471ae5ba221a404f71647","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        :param connector: Connector for http connections"},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        # Set the root resource, and connector to use"},{"line_number":44,"context_line":"        # for normal opreations."},{"line_number":45,"context_line":"        self._root_resource \u003d root_resource"},{"line_number":46,"context_line":"        self._connector \u003d connector"},{"line_number":47,"context_line":"        self._connector.set_auth(self)"}],"source_content_type":"text/x-python","patch_set":9,"id":"70d53f3f_ff453c2a","line":44,"range":{"start_line":44,"start_character":21,"end_line":44,"end_character":31},"updated":"2022-03-07 15:10:49.000000000","message":"nit: operations","commit_id":"8d55d51284288ef7cc3dad4dce00fe0155b1e6f1"}],"sushy/connector.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"02ce6a2c8b81edd7b4e53696e4c8b5b5769f909c","unresolved":true,"context_lines":[{"line_number":141,"context_line":"                    LOG.debug(\"Authentication refreshed successfully, \""},{"line_number":142,"context_line":"                              \"retrying the call.\")"},{"line_number":143,"context_line":"                elif self._auth.can_reauthenticate_session():"},{"line_number":144,"context_line":"                    self._auth.authenticate()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                try:"},{"line_number":147,"context_line":"                    response \u003d self._session.request("}],"source_content_type":"text/x-python","patch_set":3,"id":"da17f17e_d6c65fcc","line":144,"range":{"start_line":144,"start_character":19,"end_line":144,"end_character":45},"updated":"2022-01-07 16:46:56.000000000","message":"with deleted BMC session this is causing (another?) \"RecursionError: maximum recursion depth exceeded in comparison\"\n\nthe partial traceback:\n\n  File \"sushy/sushy/resources/sessionservice/sessionservice.py\", line 61, in __init__\n    super(SessionService, self).__init__(\n  File \"sushy/sushy/resources/base.py\", line 551, in __init__\n    self.refresh(json_doc\u003djson_doc)\n  File \"sushy/sushy/resources/base.py\", line 661, in refresh\n    self._json \u003d self._reader.get_data().json_doc\n  File \"sushy/sushy/resources/base.py\", line 426, in get_data\n    data \u003d self._conn.get(path\u003dself._path)\n  File \"sushy/sushy/connector.py\", line 213, in get\n    return self._op(\u0027GET\u0027, path, data\u003ddata, headers\u003dheaders,\n  File \"sushy/sushy/connector.py\", line 144, in _op\n    self._auth.authenticate()\n  File \"sushy/sushy/auth.py\", line 55, in authenticate\n    self._do_authenticate()\n  File \"sushy/sushy/auth.py\", line 266, in _do_authenticate\n    super(SessionOrBasicAuth, self)._do_authenticate()\n  File \"sushy/sushy/auth.py\", line 170, in _do_authenticate\n    session_service \u003d self._root_resource.get_session_service()\n  File \"sushy/sushy/main.py\", line 377, in get_session_service\n    return sessionservice.SessionService(\n  File \"sushy/sushy/resources/sessionservice/sessionservice.py\", line 61, in __init__\n\nin this case can_refresh_session is False (on line 133), and it is also False in master, but master somehow recovered and still created new session.","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3ddc278b3a135f5ac2393ce6b5646441439e1edc","unresolved":true,"context_lines":[{"line_number":141,"context_line":"                    LOG.debug(\"Authentication refreshed successfully, \""},{"line_number":142,"context_line":"                              \"retrying the call.\")"},{"line_number":143,"context_line":"                elif self._auth.can_reauthenticate_session():"},{"line_number":144,"context_line":"                    self._auth.authenticate()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                try:"},{"line_number":147,"context_line":"                    response \u003d self._session.request("}],"source_content_type":"text/x-python","patch_set":3,"id":"e372f625_3e51bf54","line":144,"range":{"start_line":144,"start_character":19,"end_line":144,"end_character":45},"in_reply_to":"1cb3b819_bcf31526","updated":"2022-01-10 21:22:42.000000000","message":"Thanks for the full backtrace! What I thought, but I wanted to make sure.\n\nI do kind of agree, adding more complexity is a problem and I don\u0027t think we *can* fix everything, but there are distinct failure cases we\u0027ve got here which may not really work without some complexity. We\u0027ve got some code like that in python-ironicclient where we get to handle some \"odd\" cases. I mean, who would have thought entire clusters might have issues of loosing connectivity sporadically to the BMCs enough that the client gets locked out and becomes useless.","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"935f67203966240fb9fa28d24d2413abcef546c4","unresolved":true,"context_lines":[{"line_number":141,"context_line":"                    LOG.debug(\"Authentication refreshed successfully, \""},{"line_number":142,"context_line":"                              \"retrying the call.\")"},{"line_number":143,"context_line":"                elif self._auth.can_reauthenticate_session():"},{"line_number":144,"context_line":"                    self._auth.authenticate()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                try:"},{"line_number":147,"context_line":"                    response \u003d self._session.request("}],"source_content_type":"text/x-python","patch_set":3,"id":"1cb3b819_bcf31526","line":144,"range":{"start_line":144,"start_character":19,"end_line":144,"end_character":45},"in_reply_to":"724f318e_13f4cfc1","updated":"2022-01-10 10:23:41.000000000","message":"what if.. it\u0027s not possible to fix current solution by adding more stuff/complexity to it, because the current solution is \"bug\" itself/it conflicts with legit workflow? :)\n\nfuller traceback with repeating parts removed\n\n    \u003e\u003e\u003e s.get_system_collection().members_identities\n\n    Traceback (most recent call last):\n      File \"sushy/sushy/connector.py\", line 127, in _op\n        exceptions.raise_for_response(method, url, response)\n      File \"sushy/sushy/exceptions.py\", line 168, in raise_for_response\n        raise AccessError(method, url, response)\n    sushy.exceptions.AccessError: HTTP GET https://10.0.0.2/redfish/v1/Systems returned code 401. Base.1.8.GeneralError: The authentication credentials included with this request are missing or invalid. Extended information: [{\u0027@odata.type\u0027: \u0027#Message.v1_1_0.Message\u0027, \u0027MessageId\u0027: \u0027Base.1.8.AccessDenied\u0027, \u0027Message\u0027: \u0027The authentication credentials included with this request are missing or invalid.\u0027, \u0027MessageArgs\u0027: [], \u0027MessageArgs@odata.count\u0027: 0, \u0027RelatedProperties\u0027: [], \u0027RelatedProperties@odata.count\u0027: 0, \u0027Severity\u0027: \u0027Critical\u0027, \u0027Resolution\u0027: \u0027Attempt to ensure that the URI is correct and that the service has the appropriate credentials.\u0027}]\n\n    During handling of the above exception, another exception occurred:\n\n    Traceback (most recent call last):\n      File \"sushy/sushy/connector.py\", line 127, in _op\n        exceptions.raise_for_response(method, url, response)\n      File \"sushy/sushy/exceptions.py\", line 168, in raise_for_response\n        raise AccessError(method, url, response)\n    sushy.exceptions.AccessError: HTTP GET https://10.0.0.2/redfish/v1/SessionService returned code 401. Base.1.8.GeneralError: The authentication credentials included with this request are missing or invalid. Extended information: [{\u0027@odata.type\u0027: \u0027#Message.v1_1_0.Message\u0027, \u0027MessageId\u0027: \u0027Base.1.8.AccessDenied\u0027, \u0027Message\u0027: \u0027The authentication credentials included with this request are missing or invalid.\u0027, \u0027MessageArgs\u0027: [], \u0027MessageArgs@odata.count\u0027: 0, \u0027RelatedProperties\u0027: [], \u0027RelatedProperties@odata.count\u0027: 0, \u0027Severity\u0027: \u0027Critical\u0027, \u0027Resolution\u0027: \u0027Attempt to ensure that the URI is correct and that the service has the appropriate credentials.\u0027}]\n\n    [... recursion]\n\n    During handling of the above exception, another exception occurred:\n\n    Traceback (most recent call last):\n      File \"test.py\", line 23, in \u003cmodule\u003e\n        s.get_system_collection().members_identities\n      File \"sushy/sushy/main.py\", line 235, in get_system_collection\n        return system.SystemCollection(\n      File \"sushy/sushy/resources/system/system.py\", line 489, in __init__\n        super(SystemCollection, self).__init__(\n      File \"sushy/sushy/resources/base.py\", line 773, in __init__\n        super().__init__(connector, path, redfish_version, registries,\n      File \"sushy/sushy/resources/base.py\", line 551, in __init__\n        self.refresh(json_doc\u003djson_doc)\n      File \"sushy/sushy/resources/base.py\", line 661, in refresh\n        self._json \u003d self._reader.get_data().json_doc\n      File \"sushy/sushy/resources/base.py\", line 426, in get_data\n        data \u003d self._conn.get(path\u003dself._path)\n      File \"sushy/sushy/connector.py\", line 214, in get\n        return self._op(\u0027GET\u0027, path, data\u003ddata, headers\u003dheaders,\n      File \"sushy/sushy/connector.py\", line 136, in _op\n        self._auth.refresh_session()\n      File \"sushy/sushy/auth.py\", line 318, in refresh_session\n        super(SessionOrBasicAuth, self).refresh_session()\n      File \"sushy/sushy/auth.py\", line 209, in refresh_session\n        self._do_authenticate()\n      File \"sushy/sushy/auth.py\", line 266, in _do_authenticate\n        super(SessionOrBasicAuth, self)._do_authenticate()\n      File \"sushy/sushy/auth.py\", line 170, in _do_authenticate\n        session_service \u003d self._root_resource.get_session_service()\n      File \"sushy/sushy/main.py\", line 377, in get_session_service\n        return sessionservice.SessionService(\n\n    [... recursion]\n\n      File \"sushy/sushy/resources/sessionservice/sessionservice.py\", line 61, in __init__\n        super(SessionService, self).__init__(\n      File \"sushy/sushy/resources/base.py\", line 551, in __init__\n        self.refresh(json_doc\u003djson_doc)\n      File \"sushy/sushy/resources/base.py\", line 661, in refresh\n        self._json \u003d self._reader.get_data().json_doc\n      File \"sushy/sushy/resources/base.py\", line 426, in get_data\n        data \u003d self._conn.get(path\u003dself._path)\n      File \"sushy/sushy/connector.py\", line 214, in get\n        return self._op(\u0027GET\u0027, path, data\u003ddata, headers\u003dheaders,\n      File \"sushy/sushy/connector.py\", line 145, in _op\n        self._auth.authenticate()\n      File \"sushy/sushy/auth.py\", line 55, in authenticate\n        self._do_authenticate()\n      File \"sushy/sushy/auth.py\", line 266, in _do_authenticate\n        super(SessionOrBasicAuth, self)._do_authenticate()\n      File \"sushy/sushy/auth.py\", line 170, in _do_authenticate\n        session_service \u003d self._root_resource.get_session_service()\n      File \"sushy/sushy/main.py\", line 377, in get_session_service\n        return sessionservice.SessionService(\n      File \"sushy/sushy/resources/sessionservice/sessionservice.py\", line 61, in __init__\n        super(SessionService, self).__init__(\n      File \"sushy/sushy/resources/base.py\", line 551, in __init__\n        self.refresh(json_doc\u003djson_doc)\n      File \"sushy/sushy/resources/base.py\", line 661, in refresh\n        self._json \u003d self._reader.get_data().json_doc\n      File \"sushy/sushy/resources/base.py\", line 426, in get_data\n        data \u003d self._conn.get(path\u003dself._path)\n      File \"sushy/sushy/connector.py\", line 214, in get\n        return self._op(\u0027GET\u0027, path, data\u003ddata, headers\u003dheaders,\n      File \"sushy/sushy/connector.py\", line 104, in _op\n        LOG.debug(\u0027HTTP request: %(method)s %(url)s; headers: %(headers)s; \u0027\n      File \"/usr/lib64/python3.10/logging/__init__.py\", line 1456, in debug\n        self._log(DEBUG, msg, args, **kwargs)\n      File \"/usr/lib64/python3.10/logging/__init__.py\", line 1613, in _log\n        record \u003d self.makeRecord(self.name, level, fn, lno, msg, args,\n      File \"/usr/lib64/python3.10/logging/__init__.py\", line 1582, in makeRecord\n        rv \u003d _logRecordFactory(name, level, fn, lno, msg, args, exc_info, func,\n      File \"/usr/lib64/python3.10/logging/__init__.py\", line 309, in __init__\n        if (args and len(args) \u003d\u003d 1 and isinstance(args[0], collections.abc.Mapping)\n      File \"/usr/lib64/python3.10/abc.py\", line 119, in __instancecheck__\n        return _abc_instancecheck(cls, instance)\n    RecursionError: maximum recursion depth exceeded in comparison","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fa1eedf55ad34dd30d656df3c5232519f9810e4a","unresolved":true,"context_lines":[{"line_number":141,"context_line":"                    LOG.debug(\"Authentication refreshed successfully, \""},{"line_number":142,"context_line":"                              \"retrying the call.\")"},{"line_number":143,"context_line":"                elif self._auth.can_reauthenticate_session():"},{"line_number":144,"context_line":"                    self._auth.authenticate()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                try:"},{"line_number":147,"context_line":"                    response \u003d self._session.request("}],"source_content_type":"text/x-python","patch_set":3,"id":"724f318e_13f4cfc1","line":144,"range":{"start_line":144,"start_character":19,"end_line":144,"end_character":45},"in_reply_to":"da17f17e_d6c65fcc","updated":"2022-01-07 19:27:10.000000000","message":"Yeah, the bug I\u0027m trying to ultimately fix is where we loose our context completely and have previously authenticated. Maybe we do need to explicitly just break out the session creation at the same time. That should solve this so it doesn\u0027t try to spawn a base resource...  I was really hoping it wouldn\u0027t though, but hmm.\n\nAt the same time, can_reauthenticate_session should be false in that case. Hmm. Maybe I just need a fresh brain next week to look at it.\n\nBy chance can you post a full traceback since that seems to be the bottom of the stack when it finally hits the recursion, we need to see further up to really make sure we\u0027re going down the path we expect.","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    LOG.debug(\"Authentication refreshed successfully, \""},{"line_number":142,"context_line":"                              \"retrying the call.\")"},{"line_number":143,"context_line":"                elif self._auth.can_reauthenticate_session():"},{"line_number":144,"context_line":"                    self._auth.authenticate()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                try:"},{"line_number":147,"context_line":"                    response \u003d self._session.request("}],"source_content_type":"text/x-python","patch_set":3,"id":"c060703f_1fc5a366","line":144,"range":{"start_line":144,"start_character":19,"end_line":144,"end_character":45},"in_reply_to":"e372f625_3e51bf54","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"858705aa5aa6077e0bab58162ef95a25e368af35"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":127,"context_line":"            exceptions.raise_for_response(method, url, response)"},{"line_number":128,"context_line":"        except exceptions.AccessError as e:"},{"line_number":129,"context_line":"            if (method \u003d\u003d \u0027POST\u0027"},{"line_number":130,"context_line":"                    and \u0027SessionService/Sessions\u0027 in url):"},{"line_number":131,"context_line":"                LOG.error(\u0027Authentication to the session service failed. \u0027"},{"line_number":132,"context_line":"                          \u0027Please check credentials and try again.\u0027)"},{"line_number":133,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"99684ea9_841e0342","line":130,"range":{"start_line":130,"start_character":24,"end_line":130,"end_character":49},"updated":"2022-01-26 11:05:07.000000000","message":"theoretically, this URL could be differently named. Practically, don\u0027t know if vendors going this route. That is, this URL can be whatever is in the root /Links/Sessions/@odata.id and in SessionService\u0027s Sessions/@odata.id. In sushy that corresponds to `Sushy.get_sessions_path()` and `SessionService._get_sessions_collection_path()`.\nSo far there was \u0027/Sessions\u0027 hardcoded only as a fallback if two above fail [1][2][3]. If vendors choose to have something else in @odata.id, then this check will not work.\n\n[1] https://opendev.org/openstack/sushy/src/commit/6af4ba929f64fef4e070af1b0accc920fdfbec73/sushy/auth.py#L154\n[2] https://opendev.org/openstack/sushy/src/commit/6af4ba929f64fef4e070af1b0accc920fdfbec73/sushy/resources/sessionservice/sessionservice.py#L113\n[3] https://opendev.org/openstack/sushy/src/commit/6af4ba929f64fef4e070af1b0accc920fdfbec73/sushy/resources/sessionservice/sessionservice.py#L116","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":127,"context_line":"            exceptions.raise_for_response(method, url, response)"},{"line_number":128,"context_line":"        except exceptions.AccessError as e:"},{"line_number":129,"context_line":"            if (method \u003d\u003d \u0027POST\u0027"},{"line_number":130,"context_line":"                    and \u0027SessionService/Sessions\u0027 in url):"},{"line_number":131,"context_line":"                LOG.error(\u0027Authentication to the session service failed. \u0027"},{"line_number":132,"context_line":"                          \u0027Please check credentials and try again.\u0027)"},{"line_number":133,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"fd6d04e9_c0c7116b","line":130,"range":{"start_line":130,"start_character":24,"end_line":130,"end_character":49},"in_reply_to":"99684ea9_841e0342","updated":"2022-02-07 19:57:48.000000000","message":"If vendors do something different, then they are quite non-compliant. That being said, I get your point... The only way to do this, without creating recursion is likely to store the discovered path for future reference.\n\nAdded the code to save the path in memory perform the compare should we reach this point.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ad4ad7fe61033798ef935cfcc1a3d08cd4a0229","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            exceptions.raise_for_response(method, url, response)"},{"line_number":128,"context_line":"        except exceptions.AccessError as e:"},{"line_number":129,"context_line":"            if (method \u003d\u003d \u0027POST\u0027"},{"line_number":130,"context_line":"                    and \u0027SessionService/Sessions\u0027 in url):"},{"line_number":131,"context_line":"                LOG.error(\u0027Authentication to the session service failed. \u0027"},{"line_number":132,"context_line":"                          \u0027Please check credentials and try again.\u0027)"},{"line_number":133,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"298b4fca_0295d768","line":130,"range":{"start_line":130,"start_character":24,"end_line":130,"end_character":49},"in_reply_to":"fd6d04e9_c0c7116b","updated":"2022-02-17 15:55:45.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"}],"sushy/main.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":true,"context_lines":[{"line_number":399,"context_line":"            self._conn, identity,"},{"line_number":400,"context_line":"            redfish_version\u003dself.redfish_version,"},{"line_number":401,"context_line":"            registries\u003dself.lazy_registries, root\u003dself)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def get_update_service(self):"},{"line_number":404,"context_line":"        \"\"\"Get the UpdateService object"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"2b481202_d0f9da34","line":402,"updated":"2022-01-11 16:35:51.000000000","message":"create a new method e.g., `create_session` that uses path from above to create session. Re-use the code from sessionservice.create_session [1], it\u0027s the same thing, just different door (path). Or if you have another idea how to make this available, just don\u0027t duplicate the code.\nUse `get_sessions_path` from ln 382 as target_uri.\n\n[1] https://opendev.org/openstack/sushy/src/commit/6af4ba929f64fef4e070af1b0accc920fdfbec73/sushy/resources/sessionservice/sessionservice.py#L97","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ea04de8f2ee4699634f49d7efe4becce2f96c33","unresolved":false,"context_lines":[{"line_number":399,"context_line":"            self._conn, identity,"},{"line_number":400,"context_line":"            redfish_version\u003dself.redfish_version,"},{"line_number":401,"context_line":"            registries\u003dself.lazy_registries, root\u003dself)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def get_update_service(self):"},{"line_number":404,"context_line":"        \"\"\"Get the UpdateService object"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe067af_b27271aa","line":402,"in_reply_to":"2b481202_d0f9da34","updated":"2022-01-25 21:06:04.000000000","message":"Done","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":423,"context_line":"        # AccessErrors as prior authentication shouldn\u0027t be submitted with a"},{"line_number":424,"context_line":"        # new authentication attempt, and doing so with old/invalid session"},{"line_number":425,"context_line":"        # data can result in an AccessError being raised."},{"line_number":426,"context_line":"        self._conn._session.auth \u003d None"},{"line_number":427,"context_line":"        if \u0027X-Auth-Token\u0027 in self._conn._session.headers:"},{"line_number":428,"context_line":"            # Delete the token value that was saved to the session"},{"line_number":429,"context_line":"            # as otherwise we would end up with a dictionary containing"},{"line_number":430,"context_line":"            # a {\u0027X-Auth-Token\u0027: null} being sent across to the remote"},{"line_number":431,"context_line":"            # bmc."},{"line_number":432,"context_line":"            del self._conn._session.headers[\u0027X-Auth-Token\u0027]"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            session_service_path \u003d self.get_sessions_path()"},{"line_number":435,"context_line":"        except (exceptions.MissingAttributeError, exceptions.AccessError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"a5d64788_859b3c77","line":432,"range":{"start_line":426,"start_character":8,"end_line":432,"end_character":59},"updated":"2022-01-26 11:05:07.000000000","message":"would this part be necessary also for SessionService.create_session? If no, then why?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":423,"context_line":"        # AccessErrors as prior authentication shouldn\u0027t be submitted with a"},{"line_number":424,"context_line":"        # new authentication attempt, and doing so with old/invalid session"},{"line_number":425,"context_line":"        # data can result in an AccessError being raised."},{"line_number":426,"context_line":"        self._conn._session.auth \u003d None"},{"line_number":427,"context_line":"        if \u0027X-Auth-Token\u0027 in self._conn._session.headers:"},{"line_number":428,"context_line":"            # Delete the token value that was saved to the session"},{"line_number":429,"context_line":"            # as otherwise we would end up with a dictionary containing"},{"line_number":430,"context_line":"            # a {\u0027X-Auth-Token\u0027: null} being sent across to the remote"},{"line_number":431,"context_line":"            # bmc."},{"line_number":432,"context_line":"            del self._conn._session.headers[\u0027X-Auth-Token\u0027]"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            session_service_path \u003d self.get_sessions_path()"},{"line_number":435,"context_line":"        except (exceptions.MissingAttributeError, exceptions.AccessError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"c054ebe7_4b41e63f","line":432,"range":{"start_line":426,"start_character":8,"end_line":432,"end_character":59},"in_reply_to":"a5d64788_859b3c77","updated":"2022-02-07 19:57:48.000000000","message":"Well, in the recovery path logic when using session service, the method calling reauthentication does this before calling the session service to reauthenticate.\n\nLargely this is here for good measure since any time we try to invoke this client with an invalid x-auth-token automatically cached and sent on the requests client, we may see unexpected behavior including auth failures.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ad4ad7fe61033798ef935cfcc1a3d08cd4a0229","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        # AccessErrors as prior authentication shouldn\u0027t be submitted with a"},{"line_number":424,"context_line":"        # new authentication attempt, and doing so with old/invalid session"},{"line_number":425,"context_line":"        # data can result in an AccessError being raised."},{"line_number":426,"context_line":"        self._conn._session.auth \u003d None"},{"line_number":427,"context_line":"        if \u0027X-Auth-Token\u0027 in self._conn._session.headers:"},{"line_number":428,"context_line":"            # Delete the token value that was saved to the session"},{"line_number":429,"context_line":"            # as otherwise we would end up with a dictionary containing"},{"line_number":430,"context_line":"            # a {\u0027X-Auth-Token\u0027: null} being sent across to the remote"},{"line_number":431,"context_line":"            # bmc."},{"line_number":432,"context_line":"            del self._conn._session.headers[\u0027X-Auth-Token\u0027]"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            session_service_path \u003d self.get_sessions_path()"},{"line_number":435,"context_line":"        except (exceptions.MissingAttributeError, exceptions.AccessError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"0b3caace_ab18c1c9","line":432,"range":{"start_line":426,"start_character":8,"end_line":432,"end_character":59},"in_reply_to":"c054ebe7_4b41e63f","updated":"2022-02-17 15:55:45.000000000","message":"Done","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":438,"context_line":"            session_service_path \u003d os.path.join(self._path,"},{"line_number":439,"context_line":"                                                \u0027SessionService/Sessions\u0027)"},{"line_number":440,"context_line":"            LOG.warning(\u0027Could not discover the Session service path, \u0027"},{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","}],"source_content_type":"text/x-python","patch_set":5,"id":"bb01773e_72af3680","line":442,"range":{"start_line":441,"start_character":41,"end_line":442,"end_character":45},"updated":"2022-01-26 11:05:07.000000000","message":"is this valid syntax?","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            session_service_path \u003d os.path.join(self._path,"},{"line_number":439,"context_line":"                                                \u0027SessionService/Sessions\u0027)"},{"line_number":440,"context_line":"            LOG.warning(\u0027Could not discover the Session service path, \u0027"},{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","}],"source_content_type":"text/x-python","patch_set":5,"id":"28a23fe7_9c3b7f24","line":442,"range":{"start_line":441,"start_character":41,"end_line":442,"end_character":45},"in_reply_to":"bb01773e_72af3680","updated":"2022-02-07 19:57:48.000000000","message":"eh, not for that style. I\u0027ll fix. Good catch!","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"0055ef41bad5f969bcf6b48c8a3b464ebaf8c776","unresolved":true,"context_lines":[{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","},{"line_number":446,"context_line":"                  session_service_path)"},{"line_number":447,"context_line":"        rsp \u003d self._conn.post(session_service_path, data\u003ddata)"},{"line_number":448,"context_line":"        session_key \u003d rsp.headers.get(\u0027X-Auth-Token\u0027)"},{"line_number":449,"context_line":"        if session_key is None:"},{"line_number":450,"context_line":"            raise exceptions.MissingXAuthToken("},{"line_number":451,"context_line":"                method\u003d\u0027POST\u0027, url\u003dsession_service_path, response\u003drsp)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        session_uri \u003d rsp.headers.get(\u0027Location\u0027)"},{"line_number":454,"context_line":"        if session_uri is None:"},{"line_number":455,"context_line":"            LOG.warning(\"Received X-Auth-Token but NO session uri.\")"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        return session_key, session_uri"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def get_update_service(self):"},{"line_number":460,"context_line":"        \"\"\"Get the UpdateService object"}],"source_content_type":"text/x-python","patch_set":5,"id":"2a66274c_9bc51ffc","line":457,"range":{"start_line":444,"start_character":6,"end_line":457,"end_character":39},"updated":"2022-01-26 11:05:07.000000000","message":"this part is the same as SessionService.create_session (minus path/target_uri param). Could remove duplicated code with utility or something like that to ensure that in future they stay the same in both cases as they shouldn\u0027t be different (in the end it\u0027s the same endpoint, but different starting point).","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19f47a44ed685d88247f1edf1c74a7bf273201d7","unresolved":true,"context_lines":[{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","},{"line_number":446,"context_line":"                  session_service_path)"},{"line_number":447,"context_line":"        rsp \u003d self._conn.post(session_service_path, data\u003ddata)"},{"line_number":448,"context_line":"        session_key \u003d rsp.headers.get(\u0027X-Auth-Token\u0027)"},{"line_number":449,"context_line":"        if session_key is None:"},{"line_number":450,"context_line":"            raise exceptions.MissingXAuthToken("},{"line_number":451,"context_line":"                method\u003d\u0027POST\u0027, url\u003dsession_service_path, response\u003drsp)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        session_uri \u003d rsp.headers.get(\u0027Location\u0027)"},{"line_number":454,"context_line":"        if session_uri is None:"},{"line_number":455,"context_line":"            LOG.warning(\"Received X-Auth-Token but NO session uri.\")"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        return session_key, session_uri"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def get_update_service(self):"},{"line_number":460,"context_line":"        \"\"\"Get the UpdateService object"}],"source_content_type":"text/x-python","patch_set":5,"id":"75659d44_7c15c7c3","line":457,"range":{"start_line":444,"start_character":6,"end_line":457,"end_character":39},"in_reply_to":"2a66274c_9bc51ffc","updated":"2022-02-07 19:57:48.000000000","message":"Yes we could, but we don\u0027t need perfection.\n\nHonestly, I kind of think we should get rid of the SessionService client, but that is kind of ultimate scope creep for this patch since I need to be able to backport this.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","},{"line_number":446,"context_line":"                  session_service_path)"},{"line_number":447,"context_line":"        rsp \u003d self._conn.post(session_service_path, data\u003ddata)"},{"line_number":448,"context_line":"        session_key \u003d rsp.headers.get(\u0027X-Auth-Token\u0027)"},{"line_number":449,"context_line":"        if session_key is None:"},{"line_number":450,"context_line":"            raise exceptions.MissingXAuthToken("},{"line_number":451,"context_line":"                method\u003d\u0027POST\u0027, url\u003dsession_service_path, response\u003drsp)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        session_uri \u003d rsp.headers.get(\u0027Location\u0027)"},{"line_number":454,"context_line":"        if session_uri is None:"},{"line_number":455,"context_line":"            LOG.warning(\"Received X-Auth-Token but NO session uri.\")"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        return session_key, session_uri"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def get_update_service(self):"},{"line_number":460,"context_line":"        \"\"\"Get the UpdateService object"}],"source_content_type":"text/x-python","patch_set":5,"id":"daa3fa16_e30a1877","line":457,"range":{"start_line":444,"start_character":6,"end_line":457,"end_character":39},"in_reply_to":"680115e5_76924226","updated":"2022-02-22 15:33:33.000000000","message":"up to you, wouldn\u0027t call this perfection, just norm to remove duplication of this size. There can always be follow up patches.","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ad4ad7fe61033798ef935cfcc1a3d08cd4a0229","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                        \u0027falling back to %{path}s.\u0027,"},{"line_number":442,"context_line":"                        session_service_path)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":445,"context_line":"        LOG.debug(\"Requesting new session from %s.\","},{"line_number":446,"context_line":"                  session_service_path)"},{"line_number":447,"context_line":"        rsp \u003d self._conn.post(session_service_path, data\u003ddata)"},{"line_number":448,"context_line":"        session_key \u003d rsp.headers.get(\u0027X-Auth-Token\u0027)"},{"line_number":449,"context_line":"        if session_key is None:"},{"line_number":450,"context_line":"            raise exceptions.MissingXAuthToken("},{"line_number":451,"context_line":"                method\u003d\u0027POST\u0027, url\u003dsession_service_path, response\u003drsp)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        session_uri \u003d rsp.headers.get(\u0027Location\u0027)"},{"line_number":454,"context_line":"        if session_uri is None:"},{"line_number":455,"context_line":"            LOG.warning(\"Received X-Auth-Token but NO session uri.\")"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        return session_key, session_uri"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def get_update_service(self):"},{"line_number":460,"context_line":"        \"\"\"Get the UpdateService object"}],"source_content_type":"text/x-python","patch_set":5,"id":"680115e5_76924226","line":457,"range":{"start_line":444,"start_character":6,"end_line":457,"end_character":39},"in_reply_to":"75659d44_7c15c7c3","updated":"2022-02-17 15:55:45.000000000","message":"Ack","commit_id":"517d38b2f7fb56c47d236e117deecda3e6b05a5d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":true,"context_lines":[{"line_number":444,"context_line":"            LOG.warning(\u0027Could not discover the Session service path, \u0027"},{"line_number":445,"context_line":"                        \u0027falling back to %s.\u0027,"},{"line_number":446,"context_line":"                        session_service_path)"},{"line_number":447,"context_line":"            self._conn._sessions_uri \u003d \u0027/redfish/v1/SessionService/Sessions\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":450,"context_line":"        LOG.debug(\"Requesting new session from %s.\","}],"source_content_type":"text/x-python","patch_set":6,"id":"e36f4c59_a1c3a54c","line":447,"range":{"start_line":447,"start_character":40,"end_line":447,"end_character":52},"updated":"2022-02-22 15:33:33.000000000","message":"don\u0027t hardcode this, use `self._root_prefix`","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2ff370fd9303cb481aa6518695e0a3de5a0cdda","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            LOG.warning(\u0027Could not discover the Session service path, \u0027"},{"line_number":445,"context_line":"                        \u0027falling back to %s.\u0027,"},{"line_number":446,"context_line":"                        session_service_path)"},{"line_number":447,"context_line":"            self._conn._sessions_uri \u003d \u0027/redfish/v1/SessionService/Sessions\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        data \u003d {\u0027UserName\u0027: username, \u0027Password\u0027: password}"},{"line_number":450,"context_line":"        LOG.debug(\"Requesting new session from %s.\","}],"source_content_type":"text/x-python","patch_set":6,"id":"020d41be_768dc192","line":447,"range":{"start_line":447,"start_character":40,"end_line":447,"end_character":52},"in_reply_to":"e36f4c59_a1c3a54c","updated":"2022-02-24 19:26:59.000000000","message":"good catch, thanks!","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"}],"sushy/resources/sessionservice/sessionservice.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"5fe2454633e2c7ed690185c32217cc673f875e61","unresolved":true,"context_lines":[{"line_number":62,"context_line":"                connector, identity, redfish_version\u003dredfish_version,"},{"line_number":63,"context_line":"                registries\u003dregistries, root\u003droot)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        except exceptions.AccessError as ae:"},{"line_number":66,"context_line":"            LOG.debug(\u0027Received access error \"%s\" when trying to refresh the \u0027"},{"line_number":67,"context_line":"                      \u0027SessionService. If this happens before \u0027"},{"line_number":68,"context_line":"                      \u0027authentication, we\\\u0027ll have to guess the Sessions URL.\u0027,"},{"line_number":69,"context_line":"                      ae)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_sessions_collection_path(self):"},{"line_number":72,"context_line":"        \"\"\"Helper function to find the SessionCollections path\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ad028c2f_f10756d9","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":25},"updated":"2022-01-11 16:35:51.000000000","message":"it could be possible to remove this handling altogether - whoever is trying to access sessionservice before auth is doing something wrong; from now on for such workflows should use method from root resource (main.py)","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9ecb929efdf5661013279ae4a4021e5f0e7f8de2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                connector, identity, redfish_version\u003dredfish_version,"},{"line_number":63,"context_line":"                registries\u003dregistries, root\u003droot)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        except exceptions.AccessError as ae:"},{"line_number":66,"context_line":"            LOG.debug(\u0027Received access error \"%s\" when trying to refresh the \u0027"},{"line_number":67,"context_line":"                      \u0027SessionService. If this happens before \u0027"},{"line_number":68,"context_line":"                      \u0027authentication, we\\\u0027ll have to guess the Sessions URL.\u0027,"},{"line_number":69,"context_line":"                      ae)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_sessions_collection_path(self):"},{"line_number":72,"context_line":"        \"\"\"Helper function to find the SessionCollections path\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"631f9cf2_a9e559f7","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":25},"in_reply_to":"a72161f5_f7cd56a6","updated":"2022-01-18 14:23:01.000000000","message":"Done","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88c7d6ccdbdbc8d12defa1c0d6c2d9c2edbffa42","unresolved":true,"context_lines":[{"line_number":62,"context_line":"                connector, identity, redfish_version\u003dredfish_version,"},{"line_number":63,"context_line":"                registries\u003dregistries, root\u003droot)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        except exceptions.AccessError as ae:"},{"line_number":66,"context_line":"            LOG.debug(\u0027Received access error \"%s\" when trying to refresh the \u0027"},{"line_number":67,"context_line":"                      \u0027SessionService. If this happens before \u0027"},{"line_number":68,"context_line":"                      \u0027authentication, we\\\u0027ll have to guess the Sessions URL.\u0027,"},{"line_number":69,"context_line":"                      ae)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_sessions_collection_path(self):"},{"line_number":72,"context_line":"        \"\"\"Helper function to find the SessionCollections path\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"a72161f5_f7cd56a6","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":25},"in_reply_to":"ad028c2f_f10756d9","updated":"2022-01-11 16:58:37.000000000","message":"I concur, AccessError would then make sense to expose directly which would represent true state \"your unauthenticated\"","commit_id":"8a09cf2d2f990b37d8f178db1bfa83245d5256c1"}],"sushy/tests/unit/test_auth.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":true,"context_lines":[{"line_number":368,"context_line":"                    \u0027/Sessions/testingfirst\u0027)"},{"line_number":369,"context_line":"        self.sess_basic_auth._session_auth_previously_successful \u003d True"},{"line_number":370,"context_line":"        self.sess_basic_auth._session_resource_id \u003d test_url"},{"line_number":371,"context_line":"        self.root.create_session.side_effect \u003d iter(["},{"line_number":372,"context_line":"            exceptions.ConnectionError(\u0027meow\u0027),"},{"line_number":373,"context_line":"            (self.sess_key, self.sess_uri)"},{"line_number":374,"context_line":"        ])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5cb7c926_fc1ef121","line":371,"range":{"start_line":371,"start_character":47,"end_line":371,"end_character":52},"updated":"2022-02-22 15:33:33.000000000","message":"`iter` not necessary, just list is sufficient","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2ff370fd9303cb481aa6518695e0a3de5a0cdda","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    \u0027/Sessions/testingfirst\u0027)"},{"line_number":369,"context_line":"        self.sess_basic_auth._session_auth_previously_successful \u003d True"},{"line_number":370,"context_line":"        self.sess_basic_auth._session_resource_id \u003d test_url"},{"line_number":371,"context_line":"        self.root.create_session.side_effect \u003d iter(["},{"line_number":372,"context_line":"            exceptions.ConnectionError(\u0027meow\u0027),"},{"line_number":373,"context_line":"            (self.sess_key, self.sess_uri)"},{"line_number":374,"context_line":"        ])"}],"source_content_type":"text/x-python","patch_set":6,"id":"e39ddf4b_1347a3ef","line":371,"range":{"start_line":371,"start_character":47,"end_line":371,"end_character":52},"in_reply_to":"5cb7c926_fc1ef121","updated":"2022-02-24 19:26:59.000000000","message":"Ahh, yeah. Sorry, habit from the days of py2.","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":true,"context_lines":[{"line_number":381,"context_line":"        self.assertIsNone(self.sess_basic_auth.basic_auth._root_resource)"},{"line_number":382,"context_line":"        self.assertIsNone(self.sess_basic_auth.basic_auth._connector)"},{"line_number":383,"context_line":"        self.assertFalse(mock_activate_basic_auth.called)"},{"line_number":384,"context_line":"        # Refresh no longer works, explicit authenticaiton is now required."},{"line_number":385,"context_line":"        self.sess_basic_auth.refresh_session()"},{"line_number":386,"context_line":"        self.conn.set_http_session_auth.assert_not_called()"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8ecf41b6_91efd28e","line":384,"range":{"start_line":384,"start_character":44,"end_line":384,"end_character":59},"updated":"2022-02-22 15:33:33.000000000","message":"authentication","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2ff370fd9303cb481aa6518695e0a3de5a0cdda","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        self.assertIsNone(self.sess_basic_auth.basic_auth._root_resource)"},{"line_number":382,"context_line":"        self.assertIsNone(self.sess_basic_auth.basic_auth._connector)"},{"line_number":383,"context_line":"        self.assertFalse(mock_activate_basic_auth.called)"},{"line_number":384,"context_line":"        # Refresh no longer works, explicit authenticaiton is now required."},{"line_number":385,"context_line":"        self.sess_basic_auth.refresh_session()"},{"line_number":386,"context_line":"        self.conn.set_http_session_auth.assert_not_called()"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7dfde610_a00641a2","line":384,"range":{"start_line":384,"start_character":44,"end_line":384,"end_character":59},"in_reply_to":"8ecf41b6_91efd28e","updated":"2022-02-24 19:26:59.000000000","message":"Done","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"565a24b0a2195d4d3ee46d3796a52e551d78ac4b","unresolved":true,"context_lines":[{"line_number":403,"context_line":"        self.root.create_session.side_effect \u003d ae_exc"},{"line_number":404,"context_line":"        self.sess_basic_auth.set_context(self.root, self.conn)"},{"line_number":405,"context_line":"        self.sess_basic_auth.authenticate()"},{"line_number":406,"context_line":"        # We fall back to basic auth as we failed to authenitcate."},{"line_number":407,"context_line":"        self.assertTrue(mock_activate_basic_auth.called)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @mock.patch.object(auth.SessionOrBasicAuth,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9c4c0ea5_8777fcfc","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":65},"updated":"2022-02-22 15:33:33.000000000","message":"authenticate","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2ff370fd9303cb481aa6518695e0a3de5a0cdda","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        self.root.create_session.side_effect \u003d ae_exc"},{"line_number":404,"context_line":"        self.sess_basic_auth.set_context(self.root, self.conn)"},{"line_number":405,"context_line":"        self.sess_basic_auth.authenticate()"},{"line_number":406,"context_line":"        # We fall back to basic auth as we failed to authenitcate."},{"line_number":407,"context_line":"        self.assertTrue(mock_activate_basic_auth.called)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @mock.patch.object(auth.SessionOrBasicAuth,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3598944f_8385a87b","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":65},"in_reply_to":"9c4c0ea5_8777fcfc","updated":"2022-02-24 19:26:59.000000000","message":"Done","commit_id":"b1bf629a3f1e93d1dbb3a3543c2183155f226f62"}]}
