)]}'
{"id":"openstack%2Fpython-swiftclient~246943","triplet_id":"openstack%2Fpython-swiftclient~master~If1084da371b7ecd69c1ad3bc46c707b42d9eab51","project":"openstack/python-swiftclient","branch":"master","topic":"bug/1517447","hashtags":[],"change_id":"If1084da371b7ecd69c1ad3bc46c707b42d9eab51","subject":"Fix swift client reauthentication","status":"ABANDONED","created":"2015-11-18 14:25:49.000000000","updated":"2015-12-21 12:00:42.000000000","total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"503bcd79b2663bcd522ea2915d982e8975a4b105","_number":246943,"virtual_id_number":246943,"owner":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"all":[{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},{"value":1,"date":"2015-11-18 15:59:08.000000000","_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"disliked":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"all":[{"value":-1,"date":"2015-11-19 12:33:47.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"date":"2015-11-20 17:51:06.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},{"value":0,"date":"2015-11-20 12:02:55.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},{"value":-1,"date":"2015-11-18 20:04:32.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"value":1,"date":"2015-11-18 18:16:27.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":-1,"default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},{"value":0,"permitted_voting_range":{"min":-1,"max":0},"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2015-11-18 15:59:08.000000000","updated_by":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"reviewer":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"state":"REVIEWER"},{"updated":"2015-11-18 18:16:27.000000000","updated_by":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"reviewer":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"state":"REVIEWER"},{"updated":"2015-11-18 20:04:32.000000000","updated_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"reviewer":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"state":"REVIEWER"},{"updated":"2015-11-19 12:33:47.000000000","updated_by":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"reviewer":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"state":"REVIEWER"},{"updated":"2015-11-20 17:51:06.000000000","updated_by":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"reviewer":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"state":"REVIEWER"}],"messages":[{"id":"2cae39c2cb03119d030d3c77bed43dca13cfbfc3","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-11-18 14:25:49.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"19c1f6103f102f452d17a522809eaffbcdbf2ab1","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-18 15:52:36.000000000","message":"Patch Set 1: Code-Review+1","accounts_in_message":[],"_revision_number":1},{"id":"c9c4d2729c479b05d06c2dfc04628abd6a920f4b","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-11-18 15:59:08.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-python-swiftclient-python26 http://logs.openstack.org/43/246943/1/check/gate-python-swiftclient-python26/94db317/ : SUCCESS in 55s\n- gate-python-swiftclient-pep8 http://logs.openstack.org/43/246943/1/check/gate-python-swiftclient-pep8/d3a7948/ : SUCCESS in 43s\n- gate-python-swiftclient-docs http://docs-draft.openstack.org/43/246943/1/check/gate-python-swiftclient-docs/49e929d//doc/build/html/ : SUCCESS in 58s\n- gate-python-swiftclient-python27 http://logs.openstack.org/43/246943/1/check/gate-python-swiftclient-python27/aa485a5/ : SUCCESS in 54s\n- gate-python-swiftclient-python34 http://logs.openstack.org/43/246943/1/check/gate-python-swiftclient-python34/b66f147/ : SUCCESS in 1m 47s\n- gate-python-swiftclient-pypy http://logs.openstack.org/43/246943/1/check/gate-python-swiftclient-pypy/0301b95/ : SUCCESS in 1m 24s (non-voting)\n- gate-tempest-dsvm-neutron-src-python-swiftclient http://logs.openstack.org/43/246943/1/check/gate-tempest-dsvm-neutron-src-python-swiftclient/10d97ee/ : SUCCESS in 1h 15m 10s\n- gate-swift-dsvm-functional http://logs.openstack.org/43/246943/1/check/gate-swift-dsvm-functional/58b29a1/ : SUCCESS in 36m 52s\n- gate-swiftclient-dsvm-functional http://logs.openstack.org/43/246943/1/check/gate-swiftclient-dsvm-functional/bdd3c04/ : SUCCESS in 31m 44s","accounts_in_message":[],"_revision_number":1},{"id":"95840044aa69dd2a9ecc75cba1ec097400d767c6","author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"date":"2015-11-18 18:16:27.000000000","message":"Patch Set 1: Code-Review+1","accounts_in_message":[],"_revision_number":1},{"id":"025563cf8c42eef1e198ea4780963d96648245d3","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2015-11-18 20:04:32.000000000","message":"Patch Set 1: Code-Review-1\n\n(1 comment)\n\nI think the better way to fix this is to address the exception that was raised, not avoiding the reset function. I\u0027m fairly certain https://review.openstack.org/#/c/226897/ should address this (by making segmented uploads resettable). Mike, would you mind testing it against your scenario?","accounts_in_message":[],"_revision_number":1},{"id":"c56e34a39d96daaa3d619361bd7d5c27515c69c6","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-11-18 22:55:19.000000000","message":"Patch Set 1: Code-Review+1\n\n(1 comment)\n\n@Tim. Thanks for your comment sir. Unfortunately your code doesn\u0027t help here, it\u0027s the same story http://paste.openstack.org/show/479357/ as before - _reset_func raises an exception :(\n\nAnd I think it\u0027s a right thing to avoid a reset function if we just want to reauth, because no data has been transferred and there is nothing we need to reset.","accounts_in_message":[],"_revision_number":1},{"id":"fc7a031fefeab18ee6f991122484f17990413c65","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2015-11-19 06:12:31.000000000","message":"Patch Set 1:\n\n(1 comment)\n\nAh, I hadn\u0027t read the linked bug closely enough. See what you think of https://review.openstack.org/247310; I think that should work better. Plus, it\u0027ll retry in many more cases than just 401. It could be simpler with the resettable change in the other patch, but this should work with swiftclient today.","accounts_in_message":[],"_revision_number":1},{"id":"405b791febca99be2a6af4e232bffbe4e967d0cf","author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"date":"2015-11-19 12:33:47.000000000","message":"Patch Set 1: Code-Review-1\n\n(1 comment)\n\nSee comments - We need to be able to guarantee that the body has not been touched if we want to reset.","accounts_in_message":[],"_revision_number":1},{"id":"ad5f860cbc4233f6d71e7ca8123afc2748c1ffc8","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-11-19 16:10:36.000000000","message":"Patch Set 1:\n\nThank you for your comments :)\n\n@Tim, you do not take into account that we can get a stream in Glance (not a local file) and we won\u0027t be able to reset it. That\u0027s why your code is doesn\u0027t fix the bug. We have optional buffering for swift driver, but it won\u0027t help in common case.\n\n@Joel, if you\u0027re sure it may happen that Swift could read several bytes before Unauthorized exception occurs, it means that we have to come back to my previous solution with \"will_expire_soon\" function in glance_store. The idea is to check token expiration time before sending the put_object request, and if it\u0027s \u003c 30 seconds, then reconnect. https://review.openstack.org/#/c/199049/7\nFrankly speaking I tested this patch on devstack where tried to upload and download a big file with small token expiration. After that two files were identical. It made me think that reset is not required in these cases.","accounts_in_message":[],"_revision_number":1},{"id":"2cb82382cf4e58932041980ea60ef51057b77802","author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"date":"2015-11-19 16:25:21.000000000","message":"Patch Set 1:\n\nHi Mike,\n\nThanks for the response. The test I conducted is described below, let me know what you think about the conclusions I\u0027ve drawn.\n\nI wrote a very simple test client/server using requests and simplehttpserver. The only function of the server was to respond with a 401 in the case of a PUT request, and the client simply tried to make a put request using a requests session and a subclassed BytesIO object as the body. All my subclass did was override the BytesIO read() method to notify me if reads had occurred.\n\nI believe this is the simplest representation of the situation we\u0027re seeing that I could create.\n\nRunning this code I see several read()s before the client drops out due to the 401 response. This seems to suggest to me that I can\u0027t guarantee that the complete body would be uploaded after a reset.","accounts_in_message":[],"_revision_number":1},{"id":"ffb77d0b8ece7ec081b084d72d9cfe5108e4929a","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-11-19 17:09:11.000000000","message":"Patch Set 1:\n\n@Joel, yes sir. I\u0027m not able to perform the test you described, but I trust you :) Tim\u0027s solution doesn\u0027t work as well, because we can\u0027t reset it in some cases...\n\nIt seems that there is only one working solution with \u0027will_expire_soon\u0027. Anyway I wanted to implement it for Multitenant driver, so, it\u0027s not hard.\n\nI will abandon this commit next week if you don\u0027t mind.","accounts_in_message":[],"_revision_number":1},{"id":"93bd60f80d08bea5322c023f0465114a3e1cb7cb","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-19 17:33:44.000000000","message":"Patch Set 1: -Code-Review\n\nI find some of this area of client code tricky -- so bear with me if what follows isn\u0027t 100% correct.\n\nAm I right that a 401 can be returned in two different ways?\n\nThe first way (A):\n\nthe swift client sends invalid credentials to the keystone server and receives a 401.\n\nThe second way (B):\n\nthe swift client sends a token to the swift proxy and receives a 401.\n\nIn the case of only (A) no bytes have been sent to the swift proxy and no bytes have been read from the input stream (I think). And trying again should be safe. Although, if you\u0027re using the same credentials you\u0027re likely to just get another 401.\n\n\nIn (B)\u0027s case, the client will send the headers -- including Expect: 100-continue\n\n\n ####\n T 10.0.0.95:53184 -\u003e 10.0.0.95:8080 [AP]\n PUT /v1/AUTH_88cffb9c8aee457788066c97b359585b/container1/babel.cfg HTTP/1.1.\n User-Agent: curl/7.35.0.\n Host: 10.0.0.95:8080.\n Accept: */*.\n X-Auth-Token: x.\n Content-Length: 1048576.\n Expect: 100-continue.\n .\n\nand will receive a 401 without having sent any data over the wire:\n\n\n T 10.0.0.95:8080 -\u003e 10.0.0.95:53184 [AP]\n HTTP/1.1 401 Unauthorized.\n Content-Length: 131.\n Content-Type: text/html; charset\u003dUTF-8.\n Www-Authenticate: Swift realm\u003d\"AUTH_88cffb9c8aee457788066c97b359585b\".\n WWW-Authenticate: Keystone uri\u003d\u0027http://10.0.0.95:5000\u0027.\n X-Trans-Id: tx62516920814146518e916-00564e0510.\n Date: Thu, 19 Nov 2015 17:21:20 GMT.\n .\n \u003chtml\u003e\u003ch1\u003eUnauthorized\u003c/h1\u003e\u003cp\u003eThis server could not verify that you are authorized to access the document you requested.\u003c/p\u003e\u003c/html\u003e\n\nOf course this doesn\u0027t prove that requests hasn\u0027t read in any of the input stream, but I\u0027d be interested in a re-run of Joel\u0027s test which included a Expect: 100-continue (if not there already). It\u0027s possible that could affect what goes over the wire/whether the input is read.","accounts_in_message":[],"_revision_number":1},{"id":"6ca8f13dc3eddf2c3c79560009a307a115e4d4ef","author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"date":"2015-11-19 17:44:39.000000000","message":"Patch Set 1:\n\nHi Stuart,\n\nI can\u0027t see any issues with your logic here. I\u0027m happy to try the simple test for case (B) against an actual swift storage server with an invalid token and the expect header, but that will take me a little bit longer.\n\nIt might be possible for us to add code to detect when the reading of the body has started (we\u0027re doing a lot of wrapping the body already) rather than relying on the current behaviour of the requests library...\n\nAnyone got any thoughts on that?","accounts_in_message":[],"_revision_number":1},{"id":"1662bd683ba7db9045ff54fbf7f3d41daac844ca","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2015-11-19 17:52:24.000000000","message":"Patch Set 1:\n\nStuart,\n\nI\u0027m not sure requests supports 100-continue, unfortunately. I can\u0027t find any reference to it in the source, anyway. I can certainly test it, though.\n\nJoel,\n\nGood point on just watching the body for reads; we may as well. At any rate, I\u0027m certainly not opposed.","accounts_in_message":[],"_revision_number":1},{"id":"644aa7a72bc662a3ffbc884f4e2e005f7ac37387","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-19 18:07:49.000000000","message":"Patch Set 1:\n\nIndeed. No support for 100-continue in requests:\n\nhttps://github.com/kennethreitz/requests/issues/713\n\nDoing a simple test, all the data gets PUT when using the Swift client ... then you get a 401. 100-continue behaviour would be nicer if it was available.\n\nNot 100% sure why Mike\u0027s tests seemed to work ok.\n\nMike, any idea which call was generating the 401? Was it put_object, or something else?","accounts_in_message":[],"_revision_number":1},{"id":"43b4278e20ef641c1ea9bb1c55ae1045ab9e9b2a","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-20 09:59:39.000000000","message":"Patch Set 1:\n\nInterestingly, folks have tried adding 100-continue support to the client before:\n\nhttps://blueprints.launchpad.net/python-swiftclient/+spec/should-use-100-continue-header\n\nPatch is here: https://review.openstack.org/#/c/55517/12\n\nJohn Dickinson seemed to like the idea (a lot).\n\n(It\u0027s from before the client switched to the requests library, so that particular approach wouldn\u0027t work now I think.)","accounts_in_message":[],"_revision_number":1},{"id":"4ea6078e6e75cfda025283c9434a4f4f0964ce8b","author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"date":"2015-11-20 10:21:34.000000000","message":"Patch Set 1:\n\nSadly it looks like even library that correctly implements the 100-continue spec wouldn\u0027t necessarily save us here:\n\nhttps://tools.ietf.org/html/rfc7231#page-35\n\nIt doesn\u0027t need to wait for the response before starting to send the body...","accounts_in_message":[],"_revision_number":1},{"id":"27de90fb73668ae26111bbbe98da66ee05922003","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-20 10:41:10.000000000","message":"Patch Set 1:\n\n@Joel\n\nIn the curl example I posted above (PUT /v1/AUTH_88cffb9c8aee457788066c97b359585b/container1/babel.cfg ...) curl didn\u0027t send any data over the wire because its 100-continue header prompted a 401 rather than a \u0027continue\u0027 from the server.\n\nCouldn\u0027t a a client which behaved this way (only begins to read data after getting a continue response) potentially safely reauth? (I may be missing something here...)","accounts_in_message":[],"_revision_number":1},{"id":"6999690d6a428140d871c0471e7e0bf259496b3b","author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"date":"2015-11-20 10:50:17.000000000","message":"Patch Set 1:\n\nHi Stuart,\n\nYes, a client that waits for a 100-continue before reading the body would indeed be safe to retry, but there\u0027s nothing in the spec that states that the client **must** wait for the 100-continue (or indeed how long it should wait) before starting to send the message body.\n\nIt would depend entirely on a specific library implementation.","accounts_in_message":[],"_revision_number":1},{"id":"05ce0cb8aca03d8768005a9c8d0d051e832a77e0","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-11-20 12:02:55.000000000","message":"Patch Set 1: -Code-Review\n\nIt was a long discussion here without me... I\u0027m sure that 401\u0027s were generated after PUT object requests and retries worked fine. Indeed, in common case I can\u0027t guarantee that body hadn\u0027t been read before that.\n\nSo, it\u0027s like the problem of post office - if you send a package and you forget to apply a stamp, then post-office has to return the package back to you. And it\u0027s suggested that all package\u0027s contents should be untouched, but there is no guarantee at all :)\n\nI\u0027m okay to abandon this patch, because there is another solution that is proofed to work.","accounts_in_message":[],"_revision_number":1},{"id":"856b88a70edd4c83ff79e444937de063f0f25ce0","author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"date":"2015-11-20 17:51:06.000000000","message":"Patch Set 1:\n\nJust for fun, I applied http://bugs.python.org/file26357/issue1346874-273.patch and made the equivalent change to requests/HTTPAdapter/send (for the Transfer-encoding: chunked case).\n\nThis seemed to work ok for standalone swift calls. So it seems possible to support 100-continue in principle, though whether the code would be tidy enough to land is another question.","accounts_in_message":[],"_revision_number":1},{"id":"98f94cacf948daa1e6f478fd540c28a46e885f7b","author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"date":"2015-12-21 12:00:42.000000000","message":"Abandoned","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"33291a6e56d87fee977682e401e5a20c7c84fcd8","revisions":{"33291a6e56d87fee977682e401e5a20c7c84fcd8":{"kind":"REWORK","_number":1,"created":"2015-11-18 14:25:49.000000000","uploader":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"ref":"refs/changes/43/246943/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-swiftclient","ref":"refs/changes/43/246943/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/43/246943/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/43/246943/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-swiftclient refs/changes/43/246943/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-swiftclient refs/changes/43/246943/1"}}},"commit":{"parents":[{"commit":"50978ddf6304ff1702d88498fff74c14fdab132b","subject":"Merge \"Centralize header parsing\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/50978ddf6304ff1702d88498fff74c14fdab132b"}]}],"author":{"name":"Mike Fedosin","email":"mfedosin@mirantis.com","date":"2015-11-18 13:55:17.000000000","tz":180},"committer":{"name":"Mike Fedosin","email":"mfedosin@mirantis.com","date":"2015-11-18 14:25:46.000000000","tz":180},"subject":"Fix swift client reauthentication","message":"Fix swift client reauthentication\n\nThis commit fixes retrying mechanism if token expires.\n\nCurrently client has an ability to reauthenticate if\nuser credentails were provided, but it doesn\u0027t work\nbecause an exception occures before it. The existing\ncode allows to avoid raising this exception if\n\u0027retried_auth\u0027 flag is set.\n\nChange-Id: If1084da371b7ecd69c1ad3bc46c707b42d9eab51\nCloses-bug: #1517447\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/33291a6e56d87fee977682e401e5a20c7c84fcd8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-swiftclient/commit/33291a6e56d87fee977682e401e5a20c7c84fcd8"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
