)]}'
{"id":"openstack%2Fswift~126923","triplet_id":"openstack%2Fswift~master~Id8e02f84f48370edda7fb0c46e030db3b53a71e3","project":"openstack/swift","branch":"master","topic":"fsync-dir","hashtags":[],"change_id":"Id8e02f84f48370edda7fb0c46e030db3b53a71e3","subject":"fsync() on directories","status":"MERGED","created":"2014-10-08 14:36:42.000000000","updated":"2015-03-13 01:55:16.000000000","submitted":"2015-03-13 01:55:15.000000000","submitter":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"total_comment_count":49,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"3cc1a6494148a7904225e3a83b785590e4297b45","_number":126923,"virtual_id_number":126923,"owner":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"all":[{"value":0,"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":2,"date":"2015-03-13 01:55:15.000000000","_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},{"value":0,"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"value":0,"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},{"value":0,"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},{"value":0,"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},{"value":0,"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},{"value":0,"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},{"value":0,"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},{"value":0,"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"value":0,"date":"2015-03-04 07:39:42.000000000","_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},{"value":0,"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},{"value":0,"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},{"value":0,"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},{"value":0,"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"all":[{"value":0,"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},{"value":2,"date":"2015-03-04 13:26:17.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"value":0,"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},{"value":2,"date":"2015-03-12 03:14:50.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},{"value":0,"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},{"value":0,"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},{"value":0,"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},{"value":0,"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},{"value":0,"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"value":0,"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},{"value":0,"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},{"value":0,"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},{"value":0,"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},{"value":1,"date":"2015-03-05 19:24:08.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"}],"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":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"all":[{"value":0,"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},{"value":0,"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"value":0,"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},{"value":1,"date":"2015-03-13 00:28:27.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},{"value":0,"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},{"value":0,"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},{"value":0,"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},{"value":0,"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},{"value":0,"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"value":0,"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},{"value":0,"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},{"value":0,"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},{"value":0,"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},{"value":0,"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"}],"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":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},{"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2014-10-15 10:49:08.000000000","updated_by":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"reviewer":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"state":"REVIEWER"},{"updated":"2014-10-16 21:24:27.000000000","updated_by":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"reviewer":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"state":"REVIEWER"},{"updated":"2014-11-26 16:45:27.000000000","updated_by":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"reviewer":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"state":"REVIEWER"},{"updated":"2014-12-01 13:50:52.000000000","updated_by":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"reviewer":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"state":"REVIEWER"},{"updated":"2014-12-04 04:45:36.000000000","updated_by":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"reviewer":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"state":"REVIEWER"},{"updated":"2014-12-11 17:19:04.000000000","updated_by":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"reviewer":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"state":"REVIEWER"},{"updated":"2015-02-12 05:50:55.000000000","updated_by":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"reviewer":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"state":"REVIEWER"},{"updated":"2015-02-25 19:47:02.000000000","updated_by":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"reviewer":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"state":"REVIEWER"},{"updated":"2015-02-25 19:47:10.000000000","updated_by":{"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},"reviewer":{"_account_id":1009,"name":"Greg Lange","email":"greglange@gmail.com","username":"greglange"},"state":"REVIEWER"},{"updated":"2015-02-25 19:47:22.000000000","updated_by":{"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},"reviewer":{"_account_id":7433,"name":"Richard Hawkins","email":"richard.hawkins@rackspace.com","username":"hurricanerix"},"state":"REVIEWER"},{"updated":"2015-03-04 07:39:42.000000000","updated_by":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"reviewer":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2015-03-04 13:26:17.000000000","updated_by":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"reviewer":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"state":"REVIEWER"},{"updated":"2015-03-05 19:24:08.000000000","updated_by":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"reviewer":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"state":"REVIEWER"},{"updated":"2015-03-13 00:28:27.000000000","updated_by":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"reviewer":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"state":"REVIEWER"},{"updated":"2015-03-13 01:55:15.000000000","updated_by":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"reviewer":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"state":"REVIEWER"}],"messages":[{"id":"6ec6d665f2e488304dfee9e973f6e40e3cb1035f","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-08 14:36:42.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"e0c635099ab754f9be2dd129696f92d743283c29","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-08 14:37:05.000000000","message":"Patch Set 1: Workflow-1","accounts_in_message":[],"_revision_number":1},{"id":"36e91ebc34166bbc5b222c574642f26a40edee7b","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-08 14:46:31.000000000","message":"Patch Set 1:\n\nLooking forward to some comments from the community to know if this is even done at the right place or not! Thanks.","accounts_in_message":[],"_revision_number":1},{"id":"1d2169d37781335af8d7ba46cc4c117995357cbf","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-08 14:57:57.000000000","message":"Patch Set 1:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/545/ : SUCCESS","accounts_in_message":[],"_revision_number":1},{"id":"cb9bb60d5081d6db30accfbed5424605ad2410cc","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-10-08 15:46:28.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded.\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/1/check/gate-swift-pep8/03cdeb9 : SUCCESS in 1m 55s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/1/check/gate-swift-docs/a2e9527/doc/build/html/ : SUCCESS in 2m 05s\n- gate-swift-python26 http://logs.openstack.org/23/126923/1/check/gate-swift-python26/3c055cf : SUCCESS in 4m 46s\n- gate-swift-python27 http://logs.openstack.org/23/126923/1/check/gate-swift-python27/cfec81d : SUCCESS in 3m 46s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/1/check/check-tempest-dsvm-full/46fd310 : SUCCESS in 45m 30s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/1/check/check-tempest-dsvm-postgres-full/e8595ca : SUCCESS in 56m 03s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/1/check/check-tempest-dsvm-neutron-full/7ca15ea : SUCCESS in 1h 04m 02s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/1/check/check-tempest-dsvm-neutron-heat-slow/f2f8100 : SUCCESS in 26m 58s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/1/check/check-grenade-dsvm/f4261fd : SUCCESS in 50m 19s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/1/check/gate-tempest-dsvm-large-ops/ae8db2a : SUCCESS in 23m 56s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/1/check/gate-tempest-dsvm-neutron-large-ops/c207250 : SUCCESS in 34m 10s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/1/check/gate-swift-tox-func/000f157 : SUCCESS in 3m 33s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/1/check/check-swift-dsvm-functional/0ea37d1 : SUCCESS in 19m 02s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/1/check/check-devstack-dsvm-cells/ad77aff : SUCCESS in 17m 54s","accounts_in_message":[],"_revision_number":1},{"id":"f065f622ca72cba695e08fad5e66f1ab8b351ac8","author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"date":"2014-10-08 16:52:45.000000000","message":"Patch Set 1: Code-Review-1\n\nQuick thoughts:\n\nDon\u0027t make it configurable. If this is really needed for durability, just do it. The only way I\u0027d make it configurable is if the performance cost is really large, and that\u0027ll require benchmarks to prove. Also, benchmark results would be lovely. :)\n\nI\u0027d prefer a separate method for fsyncing the directory instead of jamming it into renamer(). \n\nCan you use swift.common.utils.fsync() instead of os.fsync()? Not sure if it works on directories or not, but I imagine we have it for a reason (though I don\u0027t know what that reason is).\n\nLook for other callers of renamer(), like the account and container processes, and see if they also need to fsync the containing directory. IIRC, account and container PUT both do the atomic-rename thing as well, but there may be others.","accounts_in_message":[],"_revision_number":1},{"id":"a3eda424e0d32e5d80a2b4f790ba3f81a45f563f","author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"date":"2014-10-08 18:34:24.000000000","message":"Patch Set 1: Code-Review-1 Workflow-1\n\nGreat to start this, agree with Sam\u0027s comments, look for direct use of os.rename and other file creation sequences.","accounts_in_message":[],"_revision_number":1},{"id":"8c0898fb95faec26e0d0727c179c799821ff976e","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-08 21:40:57.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"e4a015c0e49003cad94d8fca4312765280f6a8e4","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-10-08 22:28:18.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed.  For information on how to proceed, see https://wiki.openstack.org/wiki/GerritJenkinsGit#Test_Failures\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/2/check/gate-swift-pep8/d9afacc : SUCCESS in 1m 30s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/2/check/gate-swift-docs/558c399/doc/build/html/ : SUCCESS in 2m 33s\n- gate-swift-python26 http://logs.openstack.org/23/126923/2/check/gate-swift-python26/c81bd1e : SUCCESS in 3m 44s\n- gate-swift-python27 http://logs.openstack.org/23/126923/2/check/gate-swift-python27/b272445 : SUCCESS in 2m 56s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/2/check/check-tempest-dsvm-full/1079b9d : FAILURE in 14m 33s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/2/check/check-tempest-dsvm-postgres-full/44f1097 : FAILURE in 14m 42s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/2/check/check-tempest-dsvm-neutron-full/5787368 : FAILURE in 15m 35s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/2/check/check-tempest-dsvm-neutron-heat-slow/e2acbb4 : FAILURE in 13m 16s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/2/check/check-grenade-dsvm/423cca3 : SUCCESS in 44m 57s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/2/check/gate-tempest-dsvm-large-ops/e1544b3 : FAILURE in 12m 44s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/2/check/gate-tempest-dsvm-neutron-large-ops/8d09ef0 : FAILURE in 12m 46s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/2/check/gate-swift-tox-func/5ebfcd3 : SUCCESS in 3m 53s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/2/check/check-swift-dsvm-functional/20e915e : FAILURE in 13m 27s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/2/check/check-devstack-dsvm-cells/1331317 : FAILURE in 14m 52s","accounts_in_message":[],"_revision_number":2},{"id":"ea0522f4c058e98c9ab90b6492457ef88ac2cac4","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-08 22:33:53.000000000","message":"Patch Set 2:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/549/ : SUCCESS","accounts_in_message":[],"_revision_number":2},{"id":"1ebc9a893bf5da985bc4addc857ed99669c1683d","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-09 22:35:12.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"4942c3457d4c5968b90d67abe5d54c4281aa9b6b","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-09 22:43:32.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"379048e682b4047b2808cfa09ad5cfd67d5d4c0e","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-09 22:59:10.000000000","message":"Patch Set 3:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/559/ : SUCCESS","accounts_in_message":[],"_revision_number":3},{"id":"dc3725d459f0bcc488cd61640f33bb19de25a3a8","author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"date":"2014-10-09 23:18:57.000000000","message":"Patch Set 4: Code-Review-1\n\n(3 comments)","accounts_in_message":[],"_revision_number":4},{"id":"f73a235638787adbafe2160c6717d36bf2189e8b","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-09 23:24:20.000000000","message":"Patch Set 4:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/560/ : SUCCESS","accounts_in_message":[],"_revision_number":4},{"id":"a622fff5d7a0cea7de617f272b36a8c802867b0c","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-10-09 23:36:03.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded.\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/4/check/gate-swift-pep8/30c8c3f : SUCCESS in 1m 24s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/4/check/gate-swift-docs/e8cd99f/doc/build/html/ : SUCCESS in 1m 44s\n- gate-swift-python26 http://logs.openstack.org/23/126923/4/check/gate-swift-python26/ed95f09 : SUCCESS in 3m 53s\n- gate-swift-python27 http://logs.openstack.org/23/126923/4/check/gate-swift-python27/8c9c1ba : SUCCESS in 3m 00s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/4/check/check-tempest-dsvm-full/666cd56 : SUCCESS in 47m 23s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/4/check/check-tempest-dsvm-postgres-full/e94edbd : SUCCESS in 47m 40s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/4/check/check-tempest-dsvm-neutron-full/87292c9 : SUCCESS in 52m 27s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/4/check/check-tempest-dsvm-neutron-heat-slow/185ae3d : SUCCESS in 22m 14s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/4/check/check-grenade-dsvm/899bb7d : SUCCESS in 51m 44s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/4/check/gate-tempest-dsvm-large-ops/e13ca8b : SUCCESS in 23m 20s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/4/check/gate-tempest-dsvm-neutron-large-ops/21b03b5 : SUCCESS in 17m 53s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/4/check/gate-swift-tox-func/5934f36 : SUCCESS in 2m 58s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/4/check/check-swift-dsvm-functional/bd42df6 : SUCCESS in 15m 13s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/4/check/check-devstack-dsvm-cells/dd9d3a9 : SUCCESS in 12m 59s","accounts_in_message":[],"_revision_number":4},{"id":"2f8ec4b83e811fa3310c138f758a1b7328c12d88","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-15 07:23:27.000000000","message":"Patch Set 4:\n\n(2 comments)","accounts_in_message":[],"_revision_number":4},{"id":"41854bda571a95879d37d7be124c9e09e710c52e","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-15 07:23:57.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"64fa69466b72ff66709b626a560be345e1e87d43","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-15 07:47:21.000000000","message":"Patch Set 5:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/595/ : SUCCESS","accounts_in_message":[],"_revision_number":5},{"id":"dd8a48dcd2f2c330f6d05c6cfb54cdd234666909","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-10-15 08:18:30.000000000","message":"Patch Set 5: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see https://wiki.openstack.org/wiki/GerritJenkinsGit#Test_Failures\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/5/check/gate-swift-pep8/40f4467 : SUCCESS in 1m 28s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/5/check/gate-swift-docs/f2f444d/doc/build/html/ : SUCCESS in 2m 17s\n- gate-swift-python26 http://logs.openstack.org/23/126923/5/check/gate-swift-python26/a4bd7b7 : FAILURE in 1m 31s\n- gate-swift-python27 http://logs.openstack.org/23/126923/5/check/gate-swift-python27/4fc6343 : SUCCESS in 2m 31s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/5/check/check-tempest-dsvm-full/623cd97 : SUCCESS in 40m 45s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/5/check/check-tempest-dsvm-postgres-full/2fc6c2b : SUCCESS in 46m 50s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/5/check/check-tempest-dsvm-neutron-full/7c40a5e : SUCCESS in 54m 29s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/5/check/check-tempest-dsvm-neutron-heat-slow/e2b8440 : SUCCESS in 19m 11s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/5/check/check-grenade-dsvm/f5ccf24 : SUCCESS in 52m 47s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/5/check/gate-tempest-dsvm-large-ops/f3df9f7 : SUCCESS in 25m 50s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/5/check/gate-tempest-dsvm-neutron-large-ops/910654f : SUCCESS in 19m 37s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/5/check/gate-swift-tox-func/ef0b0b1 : SUCCESS in 2m 39s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/5/check/check-swift-dsvm-functional/57ccf2e : SUCCESS in 17m 44s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/5/check/check-devstack-dsvm-cells/c722bdc : SUCCESS in 12m 57s","accounts_in_message":[],"_revision_number":5},{"id":"45196668ebc2c15de563eb549411349914f129e1","author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"date":"2014-10-15 10:49:08.000000000","message":"Patch Set 5:\n\n(8 comments)\n\nDoesn\u0027t the parent of the quarantined directory need to be fsync\u0027d?  I have marked a number of places, but there appears to be one more in swift/obj/updater.py.\n\nAlso, since we do dirname on every call to fsync_dir(), perhaps rename to fsync_dirof() and bury dirname call?","accounts_in_message":[],"_revision_number":5},{"id":"ad7af28c8e4bde841554cc50ef2b8d91c3f840db","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-15 11:26:30.000000000","message":"Patch Set 5:\n\n(2 comments)\n\nThanks Sam and Peter for your comments.","accounts_in_message":[],"_revision_number":5},{"id":"14d1663e2b5b9430230a4aaa5fc7069dad5ad64e","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-10-16 05:35:04.000000000","message":"Uploaded patch set 6.","accounts_in_message":[],"_revision_number":6},{"id":"cf7eceb88b76e11526095b65dfe60c42990ab74d","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-10-16 05:58:09.000000000","message":"Patch Set 6:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/602/ : SUCCESS","accounts_in_message":[],"_revision_number":6},{"id":"926fc583fefaea7bb1ee993c9839b0b9288f8b19","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-10-16 06:26:10.000000000","message":"Patch Set 6: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/6/check/gate-swift-pep8/2f028b1 : SUCCESS in 1m 00s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/6/check/gate-swift-docs/287872e/doc/build/html/ : SUCCESS in 1m 37s\n- gate-swift-python26 http://logs.openstack.org/23/126923/6/check/gate-swift-python26/6cde219 : SUCCESS in 3m 11s\n- gate-swift-python27 http://logs.openstack.org/23/126923/6/check/gate-swift-python27/1f0bd7c : SUCCESS in 2m 30s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/6/check/check-tempest-dsvm-full/3877541 : SUCCESS in 44m 18s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/6/check/check-tempest-dsvm-postgres-full/0f8610a : SUCCESS in 47m 04s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/6/check/check-tempest-dsvm-neutron-full/70666b4 : SUCCESS in 51m 01s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/6/check/check-tempest-dsvm-neutron-heat-slow/96e8db2 : SUCCESS in 20m 50s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/6/check/check-grenade-dsvm/5664397 : SUCCESS in 47m 12s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/6/check/gate-tempest-dsvm-large-ops/0350442 : SUCCESS in 18m 13s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/6/check/gate-tempest-dsvm-neutron-large-ops/1eae745 : SUCCESS in 17m 26s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/6/check/gate-swift-tox-func/4d757b8 : SUCCESS in 2m 49s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/6/check/check-swift-dsvm-functional/3e50f08 : SUCCESS in 17m 44s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/6/check/check-devstack-dsvm-cells/7251e4d : SUCCESS in 16m 15s","accounts_in_message":[],"_revision_number":6},{"id":"6a2dc6da13472ca9fa5fdd85d8d98a700f051378","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-10-16 17:45:16.000000000","message":"Patch Set 6:\n\nppai, would it make sense to add the link (http://lwn.net/Articles/457667/) to the article that prompted this patch to the commit message?\n\nalso, it seems we are adding a separate call right after (almost) every call to renamer, are we sure we are not better of just putting the fsync call inside renamer? just thinking of the pros and cons","accounts_in_message":[],"_revision_number":6},{"id":"9425d5b6a554c86bfdcb37bfec5979603e4bc3bd","author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"date":"2014-10-16 21:24:27.000000000","message":"Patch Set 6:\n\n@Thiago: it\u0027s that \"almost\" that makes the difference IMO. If we\u0027re creating a new, good thing (DB or object), we should pay the price of an fsync() since it\u0027s necessary to really get the thing committed to disk. However, for quarantines, I don\u0027t think it\u0027s necessary since the DB/object in question is invalid. If we lose a quarantine rename, then the next pass of the auditor will just do it again; we don\u0027t really lose anything, so we don\u0027t need to pay the cost.\n\nOf course, quarantines are relatively rare, but still...","accounts_in_message":[],"_revision_number":6},{"id":"f3ae5c9a188360d23f6cdeac521dce2d2114cd92","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-13 06:42:22.000000000","message":"Uploaded patch set 7.","accounts_in_message":[],"_revision_number":7},{"id":"523882e831b2a28ea556a9a72f7a8ec3e77ad2d4","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-11-13 07:05:52.000000000","message":"Patch Set 7:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/659/ : SUCCESS","accounts_in_message":[],"_revision_number":7},{"id":"1cb72eb997413760a45026564d3ab526f904452c","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-11-13 07:51:19.000000000","message":"Patch Set 7: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/7/check/gate-swift-pep8/6c8eec5 : SUCCESS in 1m 11s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/7/check/gate-swift-docs/cedc83e/doc/build/html/ : SUCCESS in 1m 38s\n- gate-swift-python27 http://logs.openstack.org/23/126923/7/check/gate-swift-python27/ac00b35 : SUCCESS in 3m 01s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/7/check/check-tempest-dsvm-full/2d02ce6 : SUCCESS in 48m 41s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/7/check/check-tempest-dsvm-postgres-full/5a8fe25 : SUCCESS in 46m 01s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/7/check/check-tempest-dsvm-neutron-full/d900abf : SUCCESS in 1h 08m 44s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/7/check/check-tempest-dsvm-neutron-heat-slow/55fd5ff : SUCCESS in 21m 55s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/7/check/check-grenade-dsvm/ed5aff0 : SUCCESS in 41m 48s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/7/check/gate-tempest-dsvm-large-ops/a4346dd : SUCCESS in 25m 12s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/7/check/gate-tempest-dsvm-neutron-large-ops/95761bc : SUCCESS in 19m 14s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/7/check/gate-swift-tox-func/1fb8194 : SUCCESS in 3m 06s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/7/check/check-swift-dsvm-functional/c25eb3d : SUCCESS in 16m 32s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/7/check/check-devstack-dsvm-cells/bc38f41 : SUCCESS in 12m 26s","accounts_in_message":[],"_revision_number":7},{"id":"e30e1ca57ad108b40d8ad44ec09a83eabcfcf327","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-14 14:30:27.000000000","message":"Patch Set 7:\n\nWould it make sense to perform `fsync` of the target dirent after a `rename` operation in `swift.common.utils.renamer` itself instead of adding a call to `fsync_dirof` after `renamer` calls (maybe optionally disabling it, something like `renamer(old, new, fsync_dirent\u003dTrue)`)?\n\nI don\u0027t think there are many reasons *not* to `fsync` a target dirent after a rename, and it\u0027s all too easy to forget.","accounts_in_message":[],"_revision_number":7},{"id":"b36b0e2f683884aa0df38e2fbf67db63ee8c5d40","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-14 17:48:58.000000000","message":"Patch Set 7:\n\n@Nicolas Well, that was the initial idea, as you can see from the first patch set.","accounts_in_message":[],"_revision_number":7},{"id":"c2053a31fe786540ab300bba0ab9295451281d9a","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-15 23:49:51.000000000","message":"Patch Set 7:\n\nThanks, guess I should get used to the Gerrit UI a bit.\n\nI guess I agree with both Thiago and Samuel, as in: it\u0027d be better to have fsync of the dirent in the renamer (so you can\u0027t forget it), but it\u0027s not always required (as Samuel pointed out). Hence the sugestion to make it a \u0027True-by-default\u0027 argument, so one can disable the fsync explicitly when not required, but getting it by default otherwise (and as such potentially paying some price for it if it isn\u0027t strictly necessary, thought not compromising correctness at any time).","accounts_in_message":[],"_revision_number":7},{"id":"2ae1fccaae807123b6f27bd49d9522fd7a18c71d","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-11-17 02:35:05.000000000","message":"Patch Set 7:\n\nNicolas suggestion seems like a good one to me. It would simplify the code and allow to have fsync off when desired.","accounts_in_message":[],"_revision_number":7},{"id":"1927fd85a1d455dbbad6891a7080fa5ad4741159","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-18 05:25:11.000000000","message":"Patch Set 7:\n\nThanks Nicolas for the suggestion. Sounds reasonable to me.","accounts_in_message":[],"_revision_number":7},{"id":"73cce8644e62a5a4a3966ca7e2722491775b9db4","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-18 09:56:08.000000000","message":"Patch Set 7:\n\n(1 comment)","accounts_in_message":[],"_revision_number":7},{"id":"f863f51f6e8973b9f6f0c6d5cc7063798b61d17f","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-18 10:13:56.000000000","message":"Patch Set 7:\n\n(1 comment)","accounts_in_message":[],"_revision_number":7},{"id":"1bdebac5432600479dd33f96f11d914a487b1248","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-18 10:21:34.000000000","message":"Uploaded patch set 8.","accounts_in_message":[],"_revision_number":8},{"id":"e091e88ae0957615804c677e8b67f59927241d96","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-11-18 10:58:42.000000000","message":"Patch Set 8:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/684/ : SUCCESS","accounts_in_message":[],"_revision_number":8},{"id":"a58a5d762efce672ddc5ccc84c365c138cc21aab","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-11-18 11:33:14.000000000","message":"Patch Set 8: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/8/check/gate-swift-pep8/2dfcb10 : SUCCESS in 1m 21s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/8/check/gate-swift-docs/6904d3a/doc/build/html/ : SUCCESS in 1m 27s\n- gate-swift-python27 http://logs.openstack.org/23/126923/8/check/gate-swift-python27/38e9bc0 : SUCCESS in 2m 28s\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/8/check/check-tempest-dsvm-full/42fbdc7 : SUCCESS in 54m 07s\n- check-tempest-dsvm-postgres-full http://logs.openstack.org/23/126923/8/check/check-tempest-dsvm-postgres-full/3ac51ee : SUCCESS in 46m 37s\n- check-tempest-dsvm-neutron-full http://logs.openstack.org/23/126923/8/check/check-tempest-dsvm-neutron-full/145bd93 : SUCCESS in 57m 21s\n- check-tempest-dsvm-neutron-heat-slow http://logs.openstack.org/23/126923/8/check/check-tempest-dsvm-neutron-heat-slow/90de2e2 : SUCCESS in 20m 34s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/8/check/check-grenade-dsvm/7475206 : SUCCESS in 45m 47s\n- gate-tempest-dsvm-large-ops http://logs.openstack.org/23/126923/8/check/gate-tempest-dsvm-large-ops/85e4012 : SUCCESS in 23m 37s\n- gate-tempest-dsvm-neutron-large-ops http://logs.openstack.org/23/126923/8/check/gate-tempest-dsvm-neutron-large-ops/e6e8972 : SUCCESS in 20m 01s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/8/check/gate-swift-tox-func/2c38676 : SUCCESS in 3m 19s (non-voting)\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/8/check/check-swift-dsvm-functional/37b20e6 : SUCCESS in 17m 53s\n- check-devstack-dsvm-cells http://logs.openstack.org/23/126923/8/check/check-devstack-dsvm-cells/4aeeeac : SUCCESS in 15m 04s","accounts_in_message":[],"_revision_number":8},{"id":"7ed41496c5c7f73eaebbf4f339a5377df9af8dbe","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-11-18 19:20:04.000000000","message":"Patch Set 8: Code-Review+1","accounts_in_message":[],"_revision_number":8},{"id":"1aea639bd55104cb11e547af349551542c29c022","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-18 22:59:06.000000000","message":"Patch Set 8: Code-Review+1","accounts_in_message":[],"_revision_number":8},{"id":"bb2bb30d5a2f6435403ab9f768b4cd7b609742bd","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2014-11-19 19:19:37.000000000","message":"Patch Set 8:\n\n(1 comment)\n\n@Sam and others - if I understand it, when a corrupt db file is renamed to be a quarantined file, the rename may succeed (i.e. the db file has gone and the quarantine db file is on disk), but the quarantined db may still get lost if its dir tree is not sync\u0027d - are we saying that\u0027s ok? How could that quarantined file be recreated on next pass? (pardon me if thats a dumb question!)","accounts_in_message":[],"_revision_number":8},{"id":"3d91808a5053d8c1920f9dcf7edbc937453bc1e9","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-19 19:57:51.000000000","message":"Patch Set 8:\n\n@Alistair No, that\u0027s not the way it works. Here\u0027s the sequence:\n\nAssume \u0027/dir\u0027 exists, and is synced to disk. `/dir/file` and `/dir/file.tmp` don\u0027t exist (although it\u0027s easy to figure out what happens if they do).\n\n1. `open(\u0027/dir/file.tmp\u0027, O_WRONLY | O_CREAT | O_EXCL)`\nUpon crash \u0026 reboot: `file.tmp` might be there, or might not be\n2. `fsync(dirent_of_dir)`\nUpon crash \u0026 reboot: `file.tmp` will be there\n3. write to file\nUpon crash \u0026 reboot: `file.tmp` will be there, data can be incomplete\n4. `fsync(file.tmp)`\nUpon crash \u0026 reboot: `file.tmp` will be there, data will be complete\n5. `rename(\u0027/dir/file.tmp\u0027, \u0027/dir/file\u0027)`\nUpon crash \u0026 reboot: one of `file.tmp` or `file` will be there, and complete\n6. `fsync(dirent_of_dir)`\nUpon crash \u0026 reboot: `file` will be there, and complete, and `file.tmp` won\u0027t\n\nYou\u0027re right about the directory tree thing, when creating folders one should sync down from the point which might not be synced to disk yet. Whether it\u0027s sufficient to only sync the lowest folder in the tree is filesystem-dependent.\n\nNote: all of the above is based on my limited understanding of this whole thing, I can\u0027t guarantee no data will be eaten.\nAlso keep write buffers and such things in mind (fsync doesn\u0027t always go all the way to the platter, sadly enough).\n\nAnyway, especially in (uncommon) \u0027failure scenario\u0027 cases, it doesn\u0027t hurt to be better safe than sorry. A superfluous fsync won\u0027t hurt you.","accounts_in_message":[],"_revision_number":8},{"id":"5138d61e39007e4cab7cdb351013f408c03da77a","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-20 06:05:16.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"3c041cae252670e5e4bbb58363f406b4ebc7f99b","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-11-20 20:30:14.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"697ecb85f1b7a8b7a0909b5a842b0dc839e1ad70","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-20 20:56:09.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"98ab110a9f9c03babb8c08c30d5d3e75124e04cc","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-11-20 21:33:44.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"31595a4990d18f2501267a7bece5e0f0a12541d6","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-11-21 05:24:00.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"e4f46423c9aba1df850fd0c0067b9df3b085225a","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2014-11-21 11:33:37.000000000","message":"Patch Set 8:\n\n(1 comment)\n\n@Nicolas re quarantined files, the scenario I am wondering about is when the rename moves file from one dir to another. So for example during container replication (I use * to indicate modified inodes that are not fsynced):\n\n 1. Start with fsync\u0027d file /device/containers/part/suffix/hash/hash.db\n 2. mkdirs creates /device/quarantined*/containers*/hash*\n 3. Rename corrupt db to /device/quarantined*/containers*/hash*/hash.db\n 4. Proposal is NO fsync of dir /device/quarantined*/containers*/hash*/\n 5. Replication rsyncs new file to /device/tmp*/hash.db*\n 6. fsync of /device/tmp*/hash.db\n 7. rename /device/tmp*/hash.db to /device/containers/part/suffix/hash*/hash.db\n 8. fsync containing dir /device/containers/part/suffix/hash\n 9. crash/restart\n 10. replicated db file is ok /device/containers/part/suffix/hash/hash.db\n 11. quarantined file is lost /device/quarantined*/containers*/hash*/hash.db\n\nAssuming that scenario is correct (I\u0027m happy to be proven wrong!) then the quarantined file is lost and will not recovered.","accounts_in_message":[],"_revision_number":8},{"id":"c8f10afad4cfa29c589b5bbf26a21c052a0fed25","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-21 12:30:28.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"70857e5746fd9a3495e2d47064a211e7e7b687cc","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-11-21 12:38:13.000000000","message":"Patch Set 8: -Code-Review\n\n@Alistair\n\nI think one could say \"An entry doesn\u0027t exist in some dirent unless the dirent is fsync\u0027ed\". As such, step 4 (not syncing /device/quarantined*/containers*/hash*/ after creating it) could be troublesome. If that fsync would be there (i.e. syncing dirs as they are created, maybe using the approach to create all members of a tree, then sync them from bottom to top, hopinig all fsync\u0027s but the first are free), the overal mechanism looks correct to me?\n\nTurning my +1 CR into 0 for now.","accounts_in_message":[],"_revision_number":8},{"id":"bcec3633763003cde05b7be1ac502a1f6a43b51c","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2014-12-01 09:03:41.000000000","message":"Patch Set 8: Code-Review-1\n\n(3 comments)\n\nI like the general idea of this patch, and so far it works and does what it says. Nice!\n\nPlease have a look at my inline comments, just adding a -1 for now because I think there is some unused code and the default argument might need a change. WDYT?\n\nI\u0027m fine with the additional time it takes, given that the methods where rename(fsync_containing_dir\u003dTrue) is called usually take much longer than the rename call itself and the additional time is very small (about 400 microseconds in my tests).","accounts_in_message":[],"_revision_number":8},{"id":"8d06cd07f3856bb56e2bb4807d76305627e95ce5","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-01 10:24:32.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"e127812d1b041d380ecadf55cc6cdc543e577aec","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-01 13:42:36.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"355c90c8c3364a6181c86bd9033a2d3f67bb40f5","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-01 13:43:45.000000000","message":"Patch Set 8:\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"1dfc61eb2a01b845163f1977d2fc5e8008ba908f","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2014-12-01 13:50:52.000000000","message":"Patch Set 8: -Code-Review\n\n(1 comment)","accounts_in_message":[],"_revision_number":8},{"id":"9e80cff5723ac9d9c380aa9cf2471aa44ec32419","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2014-12-04 04:45:36.000000000","message":"Patch Set 8:\n\nYou have responded with a comment of \u0027done\u0027 in response to peoples comments in patchset 8, so assume a patchset 9 is on the way?","accounts_in_message":[],"_revision_number":8},{"id":"79b1e6b1501ceb5b57799e8632495353b17c1203","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-04 08:39:21.000000000","message":"Patch Set 8:\n\nYes Matthew. fsync_dirof will go away. I\u0027m just waiting for consensus on whether quarantines dir parent should be fsync\u0027d or not. And also whether it\u0027s really required to fsync all the way up directory structure till root.","accounts_in_message":[],"_revision_number":8},{"id":"16d68e06e9ac1dbd6cf878b3d944750fa7a8892d","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-10 07:23:45.000000000","message":"Uploaded patch set 9.","accounts_in_message":[],"_revision_number":9},{"id":"9fc7a75bea64f267738da4813be9b3f97095a15f","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-10 07:32:03.000000000","message":"Patch Set 9:\n\nI did some small benchmark(https://gist.github.com/prashanthpai/090582236a7c0f97a4be) of doing fsync on parent dir after _every_ successful mkdir. I compared various makedirs() and similar implementations. \n\nTotal object dirs \u003d 600\n\nFrom 3 runs:\n \nPython\u0027s os.makedirs(): 0.25343298912\nPython\u0027s os.makedirs() with fsync parent: 13.0757229328\nSOF\u0027s makedirs_sof(): 0.182667970657\nSOF\u0027s makedirs_sof() with fsync parent: 11.6728160381\nmkdir_p(): 0.197416067123\nmkdir_p() with fsync parent: 6.68533587456\n \nPython\u0027s os.makedirs(): 0.19565320015\nPython\u0027s os.makedirs() with fsync parent: 11.878759861\nSOF\u0027s makedirs_sof(): 0.219174146652\nSOF\u0027s makedirs_sof() with fsync parent: 11.8734719753\nmkdir_p(): 0.229892969131\nmkdir_p() with fsync parent: 7.03394794464\n \nPython\u0027s os.makedirs(): 0.200845003128\nPython\u0027s os.makedirs() with fsync parent: 13.3661031723\nSOF\u0027s makedirs_sof(): 0.246089935303\nSOF\u0027s makedirs_sof() with fsync parent: 14.0421459675\nmkdir_p(): 0.215840101242\nmkdir_p() with fsync parent: 6.04389977455\n\n\nIt _is_ expensive to do a fsync on parent dir every time a directory is created.","accounts_in_message":[],"_revision_number":9},{"id":"3a1a8e4e1f6ec8dc24506cf2b1270ce65a59ec97","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-12-10 07:37:17.000000000","message":"Patch Set 9:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/834/ : SUCCESS","accounts_in_message":[],"_revision_number":9},{"id":"c10917164b6e612cfee0ab0fa36d0f9c937f24ac","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-12-10 07:52:57.000000000","message":"Patch Set 9: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/9/check/gate-swift-pep8/6719d98 : SUCCESS in 59s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/9/check/gate-swift-docs/04e4ecc/doc/build/html/ : SUCCESS in 1m 13s\n- gate-swift-python27 http://logs.openstack.org/23/126923/9/check/gate-swift-python27/820dd63 : SUCCESS in 3m 08s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/9/check/gate-swift-tox-func/9d425e7 : SUCCESS in 2m 57s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/9/check/check-tempest-dsvm-full/e4c370d : SUCCESS in 28m 08s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/9/check/check-grenade-dsvm/e461acb : SUCCESS in 28m 20s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/9/check/check-swift-dsvm-functional/742f7e1 : SUCCESS in 16m 07s","accounts_in_message":[],"_revision_number":9},{"id":"2abb5fb3061219aad799e81de56402045c3b8a05","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-10 09:54:37.000000000","message":"Patch Set 9:\n\nThe above results are from a xfs partition. Below are results from ext4 which is much worse:\n\nTotal object dirs \u003d 600\n \nPython\u0027s os.makedirs(): 0.207631111145\nPython\u0027s os.makedirs() with fsync parent: 29.7783930302\nSOF\u0027s makedirs_sof(): 0.191598892212\nSOF\u0027s makedirs_sof() with fsync parent: 26.4955410957\nmkdir_p(): 0.224982976913\nmkdir_p() with fsync parent: 26.7786519527\n \nPython\u0027s os.makedirs(): 0.209560871124\nPython\u0027s os.makedirs() with fsync parent: 28.9737579823\nSOF\u0027s makedirs_sof(): 0.102016925812\nSOF\u0027s makedirs_sof() with fsync parent: 27.9761450291\nmkdir_p(): 0.209478139877\nmkdir_p() with fsync parent: 25.9787409306\n \nPython\u0027s os.makedirs(): 0.239386796951\nPython\u0027s os.makedirs() with fsync parent: 24.7475090027\nSOF\u0027s makedirs_sof(): 0.268579006195\nSOF\u0027s makedirs_sof() with fsync parent: 28.1915450096\nmkdir_p(): 0.256554841995\nmkdir_p() with fsync parent: 25.5990989208","accounts_in_message":[],"_revision_number":9},{"id":"ef83743857454d27d946b7817dbc0ab697b261aa","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-10 13:16:31.000000000","message":"Patch Set 9:\n\nPrashanth: I believe your code (at least the `makedirs` replacement) is simply sync\u0027ing too much (it calls `fsync` on almost every directory it creates twice I believe).\n\nCould you try this version?\n\n def mkdir_nicolast(path, existing\u003d\u0027/\u0027, fsync\u003dFalse):\n     \u0027\u0027\u0027Recursively create a directory\n \n     If provided, `existing` should be a path which is a parent of the path to be\n     created, and already exists.\n \n     If `fsync` is `True`, parent directories of created directories are\n     `fsync`ed.\n     \u0027\u0027\u0027\n \n     abspath \u003d os.path.abspath(path)\n     assert abspath.startswith(existing)\n     assert os.path.exists(existing)\n     relpath \u003d os.path.relpath(abspath, existing)\n \n     todo \u003d relpath.split(os.path.sep)\n     created \u003d []\n     done \u003d existing.rstrip(os.path.sep)\n \n     for part in todo:\n         done \u003d \u0027%s%s%s\u0027 % (done, os.path.sep, part)\n \n         if not os.path.exists(done):\n             os.mkdir(done)\n             created.append(done)\n \n     if fsync:\n         # From deepest to highest path in the tree...\n         for path in created[::-1]:\n             fd \u003d os.open(path, os.O_DIRECTORY | os.O_RDONLY)\n             try:\n                 os.fsync(fd)\n             finally:\n                 os.close(fd)\n \n         # In case we created a dir right below `existing`\n         if len(created) \u003d\u003d len(todo):\n             fd \u003d os.open(existing, os.O_DIRECTORY | os.O_RDONLY)\n             try:\n                 os.fsync(fd)\n             finally:\n                 os.close(fd)\n\nI adapted your script to only run the original `makedirs` version and mine above in the `fsync` case, replaced the `hash_path` import with a function which returns the hexdigest of the MD5sum of its argument, and call my version as follows:\n\n existing \u003d os.getcwd()\n start \u003d time.time()\n for p in paths:\n     mkdir_nicolast(p, existing\u003dexisting, fsync\u003dTrue)\n end \u003d time.time()\n print \u0027mkdir_nicolast() with fsync parent:\u0027, end - start\n clear()\n\nFinally, I reworked `clear` not to mess with `/proc` but read a line from `stdin` at which point I should flush the caches using `/proc` in a root terminal, as well as to run `find object* | wc -l` to make sure the same number of directories are actually created.\n\nHere are the results, ext4 on Luks (encrypted) on an LVM LV on an SSD in my laptop:\n\n $ python makedirs_comp.py \n Total object dirs \u003d 600\n find: ‘objects*’: No such file or directory\n 0\n Please drop caches...\n  Python\u0027s os.makedirs() with fsync parent: 8.4642560482\n 1233\n Please drop caches...\n  mkdir_nicolast() with fsync parent: 4.11679911613\n 1233 \n Please drop caches...\n  Python\u0027s os.makedirs() with fsync parent: 8.20022797585\n 1233\n Please drop caches...\n  mkdir_nicolast() with fsync parent: 4.22129297256\n 1233\n Please drop caches...\n  Python\u0027s os.makedirs() with fsync parent: 8.41717910767\n 1233\n Please drop caches...\n  mkdir_nicolast() with fsync parent: 4.33549404144\n 1233\n Please drop caches...\n\nYou can use `strace` to inspect timings, here\u0027s a snippet when using my implementation. Note I removed some of the output, and added some whitespace to clarify the separate calls to the function:\n\n $ strace -ff -e mkdir,open,fsync,close -T python makedirs_comp.py\n ...\n Please drop caches...\n mkdir(\"/home/nicolas/Temp/objects\", 0777) \u003d 0 \u003c0.000135\u003e\n mkdir(\"/home/nicolas/Temp/objects/0\", 0777) \u003d 0 \u003c0.000036\u003e\n mkdir(\"/home/nicolas/Temp/objects/0/eee\", 0777) \u003d 0 \u003c0.000077\u003e\n mkdir(\"/home/nicolas/Temp/objects/0/eee/74e63d79c1c179d239a352b80c0d4eee\", 0777) \u003d 0 \u003c0.000070\u003e\n open(\"/home/nicolas/Temp/objects/0/eee/74e63d79c1c179d239a352b80c0d4eee\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000025\u003e\n fsync(3)                                \u003d 0 \u003c0.012301\u003e\n close(3)                                \u003d 0 \u003c0.000021\u003e\n open(\"/home/nicolas/Temp/objects/0/eee\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000030\u003e\n fsync(3)                                \u003d 0 \u003c0.000014\u003e\n close(3)                                \u003d 0 \u003c0.000016\u003e\n open(\"/home/nicolas/Temp/objects/0\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000009\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n open(\"/home/nicolas/Temp/objects\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000008\u003e\n fsync(3)                                \u003d 0 \u003c0.000005\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n open(\"/home/nicolas/Temp\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000008\u003e\n fsync(3)                                \u003d 0 \u003c0.000005\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n\n mkdir(\"/home/nicolas/Temp/objects-1\", 0777) \u003d 0 \u003c0.000050\u003e\n mkdir(\"/home/nicolas/Temp/objects-1/1\", 0777) \u003d 0 \u003c0.000036\u003e\n mkdir(\"/home/nicolas/Temp/objects-1/1/161\", 0777) \u003d 0 \u003c0.000033\u003e\n mkdir(\"/home/nicolas/Temp/objects-1/1/161/15424f62d83ea4639769e752ad305161\", 0777) \u003d 0 \u003c0.000031\u003e\n open(\"/home/nicolas/Temp/objects-1/1/161/15424f62d83ea4639769e752ad305161\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000009\u003e\n fsync(3)                                \u003d 0 \u003c0.015763\u003e\n close(3)                                \u003d 0 \u003c0.000013\u003e\n open(\"/home/nicolas/Temp/objects-1/1/161\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000020\u003e\n fsync(3)                                \u003d 0 \u003c0.000008\u003e\n close(3)                                \u003d 0 \u003c0.000007\u003e\n open(\"/home/nicolas/Temp/objects-1/1\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000010\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n open(\"/home/nicolas/Temp/objects-1\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000027\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000007\u003e\n open(\"/home/nicolas/Temp\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000008\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000007\u003e\n\n mkdir(\"/home/nicolas/Temp/objects-2\", 0777) \u003d 0 \u003c0.000076\u003e\n mkdir(\"/home/nicolas/Temp/objects-2/7\", 0777) \u003d 0 \u003c0.000046\u003e\n mkdir(\"/home/nicolas/Temp/objects-2/7/546\", 0777) \u003d 0 \u003c0.000039\u003e\n mkdir(\"/home/nicolas/Temp/objects-2/7/546/612344afd76b960e4f59eb778de6f546\", 0777) \u003d 0 \u003c0.000045\u003e\n open(\"/home/nicolas/Temp/objects-2/7/546/612344afd76b960e4f59eb778de6f546\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000009\u003e\n fsync(3)                                \u003d 0 \u003c0.003948\u003e\n close(3)                                \u003d 0 \u003c0.000017\u003e\n open(\"/home/nicolas/Temp/objects-2/7/546\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000008\u003e\n fsync(3)                                \u003d 0 \u003c0.000007\u003e\n close(3)                                \u003d 0 \u003c0.000012\u003e\n open(\"/home/nicolas/Temp/objects-2/7\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000010\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n open(\"/home/nicolas/Temp/objects-2\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000007\u003e\n fsync(3)                                \u003d 0 \u003c0.000006\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n open(\"/home/nicolas/Temp\", O_RDONLY|O_DIRECTORY) \u003d 3 \u003c0.000008\u003e\n fsync(3)                                \u003d 0 \u003c0.000005\u003e\n close(3)                                \u003d 0 \u003c0.000006\u003e\n\n mkdir(\"/home/nicolas/Temp/objects/2\", 0777) \u003d 0 \u003c0.000038\u003e\n ...\n\nAs you can see, the very first `fsync` call (deepest in the tree) is \u0027expensive\u0027, but later ones are almost free.\n\nLooking to this trace output, I noticed my implementation is calling `fsync` on the lowest dir in the tree, but that\u0027s not required so the code could/should be adapted to skip last item in `created`.","accounts_in_message":[],"_revision_number":9},{"id":"cde86ef4597accc5d8b306cb4389d04ffc583fa1","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-10 13:47:31.000000000","message":"Patch Set 9:\n\nThank you so much Nicholas. That makes sense!","accounts_in_message":[],"_revision_number":9},{"id":"12cd73ad7d7c198670c93e0fc23769bbc19abe64","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-10 22:41:28.000000000","message":"Patch Set 9:\n\nNext to not syncing the \u0027deepest\u0027 directory, there\u0027s one more obvious improvement to my version: currently it runs too many `stat` calls. Whenever the first non-existent directory is found, all the ones below won\u0027t exist either, so traversing `todo` until the first non-existent entry is found, then create what\u0027s left `todo` one by one could help a bit as well.","accounts_in_message":[],"_revision_number":9},{"id":"901122c41cb34781fa7d200c327fca1a1fa8b7e1","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-10 23:08:13.000000000","message":"Patch Set 9:\n\nhttps://gist.github.com/NicolasT/19a6e3d6482091115ff3","accounts_in_message":[],"_revision_number":9},{"id":"9888f803a0e238721f3af2b69ac6c65b8001e042","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-11 07:14:03.000000000","message":"Patch Set 9:\n\nThanks again Nicholas for all the help! What do think of this ?\n\nhttps://gist.github.com/prashanthpai/32f6b692c7a802749ab1\n\nAFAICT, it does no unnecessary fsync\u0027s and looks clean.","accounts_in_message":[],"_revision_number":9},{"id":"53398ccb64d19e46d58211343212d852b6fae9f4","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-11 09:48:07.000000000","message":"Patch Set 9:\n\n- I think there\u0027s something wrong in your code which handles an `OSError` in `renamer`? Just retrying won\u0027t really help.\n- The order is wrong. I believe you should first create the target directory, make sure it\u0027s on the platter (by syncing any parent dir as required), only then rename, and finally sync the target directory.","accounts_in_message":[],"_revision_number":9},{"id":"502fee3075073d004101c6f7b3b2cbd1ff15d3f3","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-11 13:30:56.000000000","message":"Uploaded patch set 10.","accounts_in_message":[],"_revision_number":10},{"id":"66fb55d656aa6589c43adce77f7f6966353da68e","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2014-12-11 13:44:26.000000000","message":"Patch Set 10:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/842/ : SUCCESS","accounts_in_message":[],"_revision_number":10},{"id":"689dfb4c2150e594d9b46ae3f112a827a742f257","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2014-12-11 13:59:34.000000000","message":"Patch Set 10: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/10/check/gate-swift-pep8/36c9ccd : SUCCESS in 1m 11s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/10/check/gate-swift-docs/324545c/doc/build/html/ : SUCCESS in 2m 12s\n- gate-swift-python27 http://logs.openstack.org/23/126923/10/check/gate-swift-python27/3ecbb83 : SUCCESS in 3m 11s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/10/check/gate-swift-tox-func/b93752c : SUCCESS in 3m 13s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/10/check/check-tempest-dsvm-full/b2da6db : SUCCESS in 28m 33s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/10/check/check-grenade-dsvm/bbce8f7 : SUCCESS in 25m 24s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/10/check/check-swift-dsvm-functional/8d1ddb5 : SUCCESS in 17m 17s","accounts_in_message":[],"_revision_number":10},{"id":"88e309f7c5f55cfb124d4a517e4cd0cf82330a6f","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2014-12-11 15:17:21.000000000","message":"Patch Set 10: Code-Review-1\n\n(1 comment)\n\nI agree with Nicolas that the OSError handling seems wrong. \n\nIn Swiftonfile, Peter Portante wrote a nice method where it always try to create the target directory first, with the assumption that in a heavily loaded system, there\u0027s a greater likelihood that parents dirs might already exist, thus avoiding all the stat calls to go up the directory tree. It does not currently sync directories that were created, but it could be added to the code.\n\nTake a look here: https://github.com/stackforge/swiftonfile/blob/master/swiftonfile/swift/obj/diskfile.py#L770","accounts_in_message":[],"_revision_number":10},{"id":"c38353b5725dc1a7c420f0f958024b6458f21c86","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-11 17:10:10.000000000","message":"Patch Set 10:\n\n(1 comment)","accounts_in_message":[],"_revision_number":10},{"id":"df41f2f1e8ea9325c5e8fda68ac137426e5994a5","author":{"_account_id":13777,"name":"Nicolas Trangez","email":"ikke@nicolast.be","username":"nicolast"},"date":"2014-12-11 17:19:04.000000000","message":"Patch Set 10:\n\n(1 comment)","accounts_in_message":[],"_revision_number":10},{"id":"fb028fed9fc3a5c6bb472c63415b40a954905962","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2014-12-22 09:07:55.000000000","message":"Patch Set 10:\n\nI\u0027m not totally convinced of _not_ making this configurable. Here\u0027s some simple benchmark on renamer vs renamer with fsync:\n\nhttps://gist.github.com/prashanthpai/e246be62656f25d7e31b\n\nRenamer with fsync (only on first parent dir) itself is 3 to 4 times slower. It would be a little more slower if every parent dir is fsync\u0027d. Each fsync on dir is 3 additional sys calls (open,fsync,close).","accounts_in_message":[],"_revision_number":10},{"id":"bd09af3c5ce2f0a4404beeec343829cb0dbdbbdd","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-01-07 12:19:29.000000000","message":"Uploaded patch set 11.","accounts_in_message":[],"_revision_number":11},{"id":"48bc10226c554f13e09349d40bcc14f640b2a0e5","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-01-07 12:32:58.000000000","message":"Patch Set 11:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/951/ : SUCCESS","accounts_in_message":[],"_revision_number":11},{"id":"2e7e422c3a2a2233a1a74ff414b55146bf0b2a3f","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-01-07 13:22:24.000000000","message":"Patch Set 11: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see http://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/11/check/gate-swift-pep8/46612be/ : SUCCESS in 1m 34s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/11/check/gate-swift-docs/63d721b//doc/build/html/ : SUCCESS in 3m 03s\n- gate-swift-python27 http://logs.openstack.org/23/126923/11/check/gate-swift-python27/226d6f2/ : SUCCESS in 3m 06s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/11/check/gate-swift-tox-func/38f851e/ : SUCCESS in 5m 27s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/11/check/check-tempest-dsvm-full/220f142/ : SUCCESS in 44m 40s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/11/check/check-grenade-dsvm/97d41a3/ : FAILURE in 39m 36s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/11/check/check-swift-dsvm-functional/5ced105/ : SUCCESS in 28m 34s","accounts_in_message":[],"_revision_number":11},{"id":"3282ff6c52e5091015b23d0b6c3f845e15a0793d","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2015-01-07 13:58:40.000000000","message":"Patch Set 11:\n\nrecheck no bug","accounts_in_message":[],"_revision_number":11},{"id":"180962770e4320c3df53652a148636910a55daa1","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-01-07 14:00:11.000000000","message":"Patch Set 11:\n\nMerge Failed.\n\nThis change was unable to be automatically merged with the current state of the repository. Please rebase your change and upload a new patchset.","accounts_in_message":[],"_revision_number":11},{"id":"a31fbd0e43491b36b427cfe3e39cfd409e235fcd","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-01-07 14:20:19.000000000","message":"Patch Set 11:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/952/ : SUCCESS","accounts_in_message":[],"_revision_number":11},{"id":"d161f64c69ed464fdd67fdbff7b33c3966019047","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-01-08 08:47:30.000000000","message":"Uploaded patch set 12.","accounts_in_message":[],"_revision_number":12},{"id":"a20bed9050c2f5929a46653139717ea8e378ad97","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-01-08 09:01:00.000000000","message":"Patch Set 12:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/965/ : SUCCESS","accounts_in_message":[],"_revision_number":12},{"id":"bad89eb27b5de2c46ac4d7b3ed945ac72e1e1ce9","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-01-08 09:50:06.000000000","message":"Patch Set 12: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/12/check/gate-swift-pep8/0001f2c/ : SUCCESS in 1m 10s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/12/check/gate-swift-docs/b659175//doc/build/html/ : SUCCESS in 1m 32s\n- gate-swift-python27 http://logs.openstack.org/23/126923/12/check/gate-swift-python27/7a2f792/ : SUCCESS in 2m 32s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/12/check/gate-swift-tox-func/e5a7475/ : SUCCESS in 6m 01s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/12/check/check-tempest-dsvm-full/3257a0d/ : SUCCESS in 39m 42s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/12/check/check-grenade-dsvm/62413ee/ : SUCCESS in 35m 31s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/12/check/check-swift-dsvm-functional/985d399/ : SUCCESS in 24m 59s","accounts_in_message":[],"_revision_number":12},{"id":"16b95a138f0a1a935c38932bbaac7e8c57e54a45","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-01-08 11:51:06.000000000","message":"Patch Set 12:\n\nMade the option configurable as the benchmark clearly showed slowdown in performance of renamer method.","accounts_in_message":[],"_revision_number":12},{"id":"ea63a653cae11fd07fbedc443a025eb18a0e39f7","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-01-21 15:06:25.000000000","message":"Patch Set 12:\n\n@Prashanth thanks for all your work on this.\n\nI have been making some measurements on the performance impact as measured at the interface to the ObjectController. My method and initial results for XFS can be found here:\n\nhttps://gist.github.com/alistairncoles/c27a6d99486aede44519","accounts_in_message":[],"_revision_number":12},{"id":"ddd4d2cfd26c9436ee60d0a8eb62d7ddc4314eda","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-01-22 05:58:05.000000000","message":"Patch Set 12:\n\nThat\u0027s great! Thank you Alistair. From your benchmark, I take it that making it configurable is the right way to move forward considering the slow down (may or may not be perceived by a client as you mentioned)  when objects are small and when write cache is disabled.","accounts_in_message":[],"_revision_number":12},{"id":"6bf21650323d305044be104e3815100110b4f34c","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-01-22 05:59:22.000000000","message":"Patch Set 12:\n\n(1 comment)","accounts_in_message":[],"_revision_number":12},{"id":"6cc70eab44fc29b89c59726cf9dffcaedb135462","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-01-23 16:50:43.000000000","message":"Patch Set 12:\n\nI added some measurements with ext4 here [1]. Noticeably more variance in batches of PUTs under same conditions when compared with XFS.\n\n@Prashanth the question I am considering is what guidance we would give customers w.r.t. the config option, and how to explain it w.r.t. data file fsync not being configurable.\n\n[1] https://gist.github.com/alistairncoles/c27a6d99486aede44519#comment-1379025","accounts_in_message":[],"_revision_number":12},{"id":"befec4ce2de5f8a434662ba9998f5bf87d0742d0","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2015-02-12 01:33:47.000000000","message":"Patch Set 12:\n\nnotes from an in-person discussion at the hackathon:\n\nwe like this, but don\u0027t have a config option. turn it on.\n\nAlistair will will check if theres any difference on syncing the tree vs just the parent dir.","accounts_in_message":[],"_revision_number":12},{"id":"88be18acc702c4936179c2d6294d68d48b145713","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-12 05:08:20.000000000","message":"Patch Set 12:\n\nThanks John. The option is already configurable in object-server.conf file. Are you suggesting to make it configurable to DB servers too ? OR are you suggesting more fine grained control something like this with three possible options:\n\n    fsync_dir \u003d (none/entire_tree/just_parent)","accounts_in_message":[],"_revision_number":12},{"id":"a9a5fc20e8f695c761a742c52b44501dc93ef026","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-12 05:14:08.000000000","message":"Patch Set 12:\n\nOr to entirely get rid of the option and make it always on ?","accounts_in_message":[],"_revision_number":12},{"id":"9b12f0aa6979c971accf7be808ee7cf4f37d0a60","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2015-02-12 05:50:55.000000000","message":"Patch Set 12:\n\n@Prashanth, after our discussion we thought it is better to remove the option all together and just have it on by default. \n\nQuestion: did you run any benchmards testing the solution where the fsync is done on a all new created directories as opposed to only the leaf directory. If so, can you share any results?\n\nThanks!","accounts_in_message":[],"_revision_number":12},{"id":"3616e0c23accc8d530a25318cef4d24c7f658258","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-12 05:57:54.000000000","message":"Patch Set 12:\n\nThanks for clarification. Yes I did. My benchmark covered only the methods involved in change. Here are the results\n\nhttps://gist.github.com/prashanthpai/e246be62656f25d7e31b#comment-1361395","accounts_in_message":[],"_revision_number":12},{"id":"c1b62e71ae188741ed7b96fea738c02cad4fd13b","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-12 09:14:08.000000000","message":"Uploaded patch set 13.","accounts_in_message":[],"_revision_number":13},{"id":"921b18ee341fe984aba6eae1b7f8e7d441a2a857","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-02-12 10:21:37.000000000","message":"Patch Set 13: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/13/check/gate-swift-pep8/6272d53/ : SUCCESS in 1m 29s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/13/check/gate-swift-docs/f38756d//doc/build/html/ : SUCCESS in 2m 08s\n- gate-swift-python27 http://logs.openstack.org/23/126923/13/check/gate-swift-python27/01349d8/ : SUCCESS in 3m 07s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/13/check/gate-swift-tox-func/966d118/ : SUCCESS in 5m 12s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/13/check/check-tempest-dsvm-full/74fcf39/ : SUCCESS in 52m 41s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/13/check/check-grenade-dsvm/9771689/ : SUCCESS in 46m 33s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/13/check/check-swift-dsvm-functional/78ea6b3/ : SUCCESS in 24m 53s","accounts_in_message":[],"_revision_number":13},{"id":"2ac4b394a12326d2794b1d404ff7b2df91160786","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-12 11:05:29.000000000","message":"Patch Set 13:\n\n(1 comment)","accounts_in_message":[],"_revision_number":13},{"id":"b2a67f6050d6ee2d1c1a5161c96d61cce29393f1","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-02-19 16:27:22.000000000","message":"Patch Set 13:\n\nI re-ran my benchmarks with only the leaf dir being fsync\u0027d and saw no significant difference in performance. This is in contrast to Prashanth\u0027s results which show some extra time for the parent dir syncs.\n\nResults appended here https://gist.github.com/alistairncoles/c27a6d99486aede44519","accounts_in_message":[],"_revision_number":13},{"id":"32b6f3d9674aec7310e42844d73146b7ba6f85af","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-02-26 06:37:12.000000000","message":"Patch Set 14: Commit message was updated","accounts_in_message":[],"_revision_number":14},{"id":"ec0280556c3bf686b128cd3aecf9d53f8c26679e","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-02-26 06:50:39.000000000","message":"Patch Set 14:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/1092/ : SUCCESS","accounts_in_message":[],"_revision_number":14},{"id":"ab598829c986490924b8177f2a6457c344f6f498","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-02-26 07:49:53.000000000","message":"Patch Set 14: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/14/check/gate-swift-pep8/e049f7f/ : SUCCESS in 1m 30s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/14/check/gate-swift-docs/96e996d//doc/build/html/ : SUCCESS in 1m 54s\n- gate-swift-python27 http://logs.openstack.org/23/126923/14/check/gate-swift-python27/ad5d2c1/ : SUCCESS in 3m 16s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/14/check/gate-swift-tox-func/bb412b5/ : SUCCESS in 7m 22s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/14/check/check-tempest-dsvm-full/8ccae5f/ : SUCCESS in 1h 11m 18s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/14/check/check-grenade-dsvm/c793cf0/ : SUCCESS in 1h 10m 48s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/14/check/check-swift-dsvm-functional/72ff49b/ : SUCCESS in 30m 12s","accounts_in_message":[],"_revision_number":14},{"id":"2727e38e550c15fa7cd275e5b406b2968f28756f","author":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"date":"2015-02-26 12:17:50.000000000","message":"Patch Set 14: Code-Review+1","accounts_in_message":[],"_revision_number":14},{"id":"fdddf896a0bcc43883ad92ecd06aa0f89feebed7","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-03-02 06:38:33.000000000","message":"Uploaded patch set 15.","accounts_in_message":[],"_revision_number":15},{"id":"6b22070e04f8f541460aa9f81635506cfcbb826a","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-03-02 06:52:43.000000000","message":"Patch Set 15:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/1133/ : SUCCESS","accounts_in_message":[],"_revision_number":15},{"id":"9fb97fd52b58b3b8840f0fd1dc465d9d2517dfcd","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-03-02 07:37:06.000000000","message":"Patch Set 15: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/15/check/gate-swift-pep8/88acb13/ : SUCCESS in 1m 28s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/15/check/gate-swift-docs/5e87bed//doc/build/html/ : SUCCESS in 2m 08s\n- gate-swift-python27 http://logs.openstack.org/23/126923/15/check/gate-swift-python27/6414617/ : SUCCESS in 2m 43s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/15/check/gate-swift-tox-func/580f3d7/ : SUCCESS in 5m 17s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/15/check/check-tempest-dsvm-full/e64635b/ : SUCCESS in 50m 49s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/15/check/check-grenade-dsvm/b60ed78/ : SUCCESS in 51m 27s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/15/check/check-swift-dsvm-functional/b76eddf/ : SUCCESS in 27m 38s","accounts_in_message":[],"_revision_number":15},{"id":"7e9b34d089beb97b54bcc68870051683a8193cbf","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-03-03 16:56:46.000000000","message":"Patch Set 15: Code-Review-1\n\n(6 comments)\n\nI\u0027m only putting -1 on this because I think we need a test on renamer with fsync\u003dFalse, to verify those use cases don\u0027t trigger an fsync. And one of the mocks has incorrect arg order.\n\nI think I convinced myself that the drive-by change moving the existence check outside of the lock in invalidate_hashes was benign, but hope some other eyes look at that too.\n\nOtherwise, I am in favor in principle of this change.","accounts_in_message":[],"_revision_number":15},{"id":"c7feb862816536c1ea8cfa9efe0c88d9a634c909","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-03-04 07:25:07.000000000","message":"Patch Set 15:\n\n(5 comments)\n\nThanks Alistair for your comments.","accounts_in_message":[],"_revision_number":15},{"id":"3588ae2cc4867126373bc86cdc35557a367e9a0f","author":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"date":"2015-03-04 07:25:48.000000000","message":"Uploaded patch set 16.","accounts_in_message":[],"_revision_number":16},{"id":"e77d8c249d1789da0275e2216e0f15b7a9cf566b","author":{"_account_id":13052,"name":"SwiftStack Cluster CI","email":"openstack-ci@swiftstack.com","username":"swiftstack-cluster-ci","tags":["SERVICE_USER"]},"date":"2015-03-04 07:39:42.000000000","message":"Patch Set 16:\n\nBuild succeeded \n\n* cluster-tox-func https://8b86aea46fb38e6450f2-0e5f4c086da474abc1df58826577db2f.ssl.cf1.rackcdn.com/126923/1160/ : SUCCESS","accounts_in_message":[],"_revision_number":16},{"id":"93bcf3f34d4cd9b42ddd84ec49d90ac16cd026eb","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-03-04 13:24:01.000000000","message":"Patch Set 15:\n\n(1 comment)","accounts_in_message":[],"_revision_number":15},{"id":"4dbc7fc4154823afc454ab472d336484e81a90f3","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2015-03-04 13:26:17.000000000","message":"Patch Set 16: Code-Review+2\n\nI\u0027m OK with this. However, it would be great to have the opinion of more cores/organisations/operators.\n\n@Prashanth - thanks for all your work on this!","accounts_in_message":[],"_revision_number":16},{"id":"9151dfb818e4d2e0f1a8ede5b7498fac1ba496fc","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-03-04 17:42:32.000000000","message":"Patch Set 16: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-swift-pep8 http://logs.openstack.org/23/126923/16/check/gate-swift-pep8/a9d4a77/ : SUCCESS in 1m 27s\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/16/check/gate-swift-docs/f077959//doc/build/html/ : SUCCESS in 2m 13s\n- gate-swift-python27 http://logs.openstack.org/23/126923/16/check/gate-swift-python27/321fbe4/ : SUCCESS in 3m 20s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/16/check/gate-swift-tox-func/3e16a9a/ : SUCCESS in 5m 28s (non-voting)\n- check-tempest-dsvm-full http://logs.openstack.org/23/126923/16/check/check-tempest-dsvm-full/2c16de6/ : SUCCESS in 42m 52s\n- check-grenade-dsvm http://logs.openstack.org/23/126923/16/check/check-grenade-dsvm/ad53c6e/ : SUCCESS in 42m 59s\n- check-swift-dsvm-functional http://logs.openstack.org/23/126923/16/check/check-swift-dsvm-functional/721bd6d/ : SUCCESS in 29m 54s","accounts_in_message":[],"_revision_number":16},{"id":"b33904d759a309a28923224e310de068d4a5f579","author":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"date":"2015-03-05 19:24:08.000000000","message":"Patch Set 16: Code-Review+1","accounts_in_message":[],"_revision_number":16},{"id":"b52f3db74391915130cae86cf9c9a6d3c8ef508b","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2015-03-12 03:14:50.000000000","message":"Patch Set 16: Code-Review+2\n\nlgtm","accounts_in_message":[],"_revision_number":16},{"id":"87b4c80672bed017a8e31034f252e456d052595b","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2015-03-13 00:28:27.000000000","message":"Patch Set 16: Workflow+1","accounts_in_message":[],"_revision_number":16},{"id":"1fee17cb2aa4029641b5a5b689197a04d620bf65","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-03-13 00:28:29.000000000","message":"Patch Set 16: -Verified\n\nStarting gate jobs.\nhttp://status.openstack.org/zuul/","accounts_in_message":[],"_revision_number":16},{"id":"44a35707fc35dea9e450fb13441ad912f17b0176","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-03-13 01:55:15.000000000","message":"Patch Set 16: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- gate-swift-docs http://docs-draft.openstack.org/23/126923/16/gate/gate-swift-docs/f18c314//doc/build/html/ : SUCCESS in 2m 21s\n- gate-swift-pep8 http://logs.openstack.org/23/126923/16/gate/gate-swift-pep8/dba3e26/ : SUCCESS in 1m 26s\n- gate-swift-python27 http://logs.openstack.org/23/126923/16/gate/gate-swift-python27/07a3e6e/ : SUCCESS in 2m 39s\n- gate-swift-tox-func http://logs.openstack.org/23/126923/16/gate/gate-swift-tox-func/fc92ed5/ : SUCCESS in 4m 51s (non-voting)\n- gate-tempest-dsvm-full http://logs.openstack.org/23/126923/16/gate/gate-tempest-dsvm-full/09fb9eb/ : SUCCESS in 43m 59s\n- gate-grenade-dsvm http://logs.openstack.org/23/126923/16/gate/gate-grenade-dsvm/7664fc0/ : SUCCESS in 44m 36s\n- gate-swift-dsvm-functional http://logs.openstack.org/23/126923/16/gate/gate-swift-dsvm-functional/bd23bc7/ : SUCCESS in 22m 37s","accounts_in_message":[],"_revision_number":16},{"id":"6ca710a44b7a8c81f43d8ec9831c9a2ff582e652","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2015-03-13 01:55:16.000000000","message":"Change has been successfully merged into the git repository.","accounts_in_message":[],"_revision_number":16}],"current_revision_number":16,"current_revision":"a6f630f27cc20ab4ae1cf53b6840b817aba576a0","revisions":{"059454cf524c933a6e180d18540a79a2dc75c675":{"kind":"REWORK","_number":1,"created":"2014-10-08 14:36:42.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/1"}}},"commit":{"parents":[{"commit":"6d5206325afbb7a48ff4f37c67ef0141168cab46","subject":"Add a reference to the OpenStack security guide","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6d5206325afbb7a48ff4f37c67ef0141168cab46"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:36:35.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nTODO:\nAdd tests.\nAssuming performance implications, consider making this configurable.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/059454cf524c933a6e180d18540a79a2dc75c675"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/059454cf524c933a6e180d18540a79a2dc75c675"}]},"branch":"refs/heads/master"},"3e006a1fb01661c5a52b5ddbbf429f680ee8d1c7":{"kind":"REWORK","_number":2,"created":"2014-10-08 21:40:57.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/2"}}},"commit":{"parents":[{"commit":"6d5206325afbb7a48ff4f37c67ef0141168cab46","subject":"Add a reference to the OpenStack security guide","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6d5206325afbb7a48ff4f37c67ef0141168cab46"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 21:00:06.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nSubstituted direct calls to os.rename() with renamer() which does\nfsync on containing directories and is supposed to be durable.\n\nTODO:\nAdd tests.\nIf performance cost is large, consider making this configurable.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3e006a1fb01661c5a52b5ddbbf429f680ee8d1c7"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3e006a1fb01661c5a52b5ddbbf429f680ee8d1c7"}]},"branch":"refs/heads/master"},"7ca11a2d0759e82e8a4e0eda2218dd052e9d6a0b":{"kind":"REWORK","_number":3,"created":"2014-10-09 22:35:12.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/3"}}},"commit":{"parents":[{"commit":"6d5206325afbb7a48ff4f37c67ef0141168cab46","subject":"Add a reference to the OpenStack security guide","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6d5206325afbb7a48ff4f37c67ef0141168cab46"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-09 22:31:29.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nSubstituted direct calls to os.rename() with renamer() which now\ndoes a fsync on containing directories and is supposed to be durable.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7ca11a2d0759e82e8a4e0eda2218dd052e9d6a0b"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7ca11a2d0759e82e8a4e0eda2218dd052e9d6a0b"}]},"branch":"refs/heads/master"},"6ae57a7a7647b9594641db7f719bc03f29f4e82e":{"kind":"REWORK","_number":4,"created":"2014-10-09 22:43:32.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/4"}}},"commit":{"parents":[{"commit":"6d5206325afbb7a48ff4f37c67ef0141168cab46","subject":"Add a reference to the OpenStack security guide","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6d5206325afbb7a48ff4f37c67ef0141168cab46"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-09 22:43:15.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nSubstituted direct calls to os.rename() with renamer() which now\ndoes a fsync on containing directories and is supposed to be durable.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6ae57a7a7647b9594641db7f719bc03f29f4e82e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6ae57a7a7647b9594641db7f719bc03f29f4e82e"}]},"branch":"refs/heads/master"},"38fa4a87f0f5a392e17ef7acb89899e83b2b1842":{"kind":"REWORK","_number":5,"created":"2014-10-15 07:23:57.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/5"}}},"commit":{"parents":[{"commit":"6986f7272ce6b4ada209bc84f1da19602c9e6b83","subject":"Merge \"Convert maximum length to integer in name_check\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6986f7272ce6b4ada209bc84f1da19602c9e6b83"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-15 07:18:59.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nObject and DB file creation now includes a fsync on containing\ndirectory and is supposed to be durable.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/38fa4a87f0f5a392e17ef7acb89899e83b2b1842"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/38fa4a87f0f5a392e17ef7acb89899e83b2b1842"}]},"branch":"refs/heads/master"},"33527d0c3ae0b93f0b549ee8fc47180fcdcea38c":{"kind":"REWORK","_number":6,"created":"2014-10-16 05:35:04.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/6"}}},"commit":{"parents":[{"commit":"6986f7272ce6b4ada209bc84f1da19602c9e6b83","subject":"Merge \"Convert maximum length to integer in name_check\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6986f7272ce6b4ada209bc84f1da19602c9e6b83"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-16 05:17:28.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nObject and DB file creation now includes a fsync on containing\ndirectory of final target path.\n\nIn case of quarantining bad DBs, the containing directory of\nsource path is fsynced.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/33527d0c3ae0b93f0b549ee8fc47180fcdcea38c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/33527d0c3ae0b93f0b549ee8fc47180fcdcea38c"}]},"branch":"refs/heads/master"},"786725183c6b833a3ea9822539fa2d99eab89bdf":{"kind":"TRIVIAL_REBASE_WITH_MESSAGE_UPDATE","_number":7,"created":"2014-11-13 06:42:22.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/7"}}},"commit":{"parents":[{"commit":"75cca493341ba724d2514511909c772db700ba09","subject":"Merge \"Fix bug in swift-ring-builder list_parts\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/75cca493341ba724d2514511909c772db700ba09"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-11-13 06:40:07.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nObject and DB file creation now includes a fsync on containing\ndirectory of final target path.\n\nIn case of quarantining bad DBs, the containing directory of\nsource path is fsynced.\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/786725183c6b833a3ea9822539fa2d99eab89bdf"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/786725183c6b833a3ea9822539fa2d99eab89bdf"}]},"branch":"refs/heads/master"},"43130b422cbddcbbb7f3f07d146f8bded95a41ad":{"kind":"REWORK","_number":8,"created":"2014-11-18 10:21:34.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/8","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/8","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/8"}}},"commit":{"parents":[{"commit":"2792fe81a93dbaa95e58f14099db5e11dd8cde68","subject":"Show the sum of every policy\u0027s amount in /recon/async","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2792fe81a93dbaa95e58f14099db5e11dd8cde68"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-11-18 10:13:08.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nby default. This can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/43130b422cbddcbbb7f3f07d146f8bded95a41ad"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/43130b422cbddcbbb7f3f07d146f8bded95a41ad"}]},"branch":"refs/heads/master"},"efe5fd2d7bfc76b7882da657ed41ec2a96a7156c":{"kind":"REWORK","_number":9,"created":"2014-12-10 07:23:45.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/9","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/9","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/9"}}},"commit":{"parents":[{"commit":"2792fe81a93dbaa95e58f14099db5e11dd8cde68","subject":"Show the sum of every policy\u0027s amount in /recon/async","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2792fe81a93dbaa95e58f14099db5e11dd8cde68"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-12-10 07:22:48.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nby default. This can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/efe5fd2d7bfc76b7882da657ed41ec2a96a7156c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/efe5fd2d7bfc76b7882da657ed41ec2a96a7156c"}]},"branch":"refs/heads/master"},"9f0423589e24a2fabeabf396a5a496e0e547faa2":{"kind":"REWORK","_number":10,"created":"2014-12-11 13:30:56.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/10","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/10","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/10"}}},"commit":{"parents":[{"commit":"2792fe81a93dbaa95e58f14099db5e11dd8cde68","subject":"Show the sum of every policy\u0027s amount in /recon/async","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2792fe81a93dbaa95e58f14099db5e11dd8cde68"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-12-11 13:14:36.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/9f0423589e24a2fabeabf396a5a496e0e547faa2"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/9f0423589e24a2fabeabf396a5a496e0e547faa2"}]},"branch":"refs/heads/master"},"d3f103f14fa4041bf8055d148264c0c7f9b951ca":{"kind":"REWORK","_number":11,"created":"2015-01-07 12:19:29.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/11","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/11","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/11"}}},"commit":{"parents":[{"commit":"1f1cdceabe06b8300b761df68fa244106ece4172","subject":"Merge \"Fix the GET\u0027s response code when there is a missing segment in LO\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/1f1cdceabe06b8300b761df68fa244106ece4172"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-01-07 09:34:03.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. Account and container DBs are not created very\nfrequently. But objects are! A configurable option is provided to turn\noff fsyncing dirs in object-server.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem. Those are never fsync\u0027d.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d3f103f14fa4041bf8055d148264c0c7f9b951ca"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d3f103f14fa4041bf8055d148264c0c7f9b951ca"}]},"branch":"refs/heads/master"},"b01622f9adef6570085a1c37accd87e90ad4724e":{"kind":"REWORK","_number":12,"created":"2015-01-08 08:47:30.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/12","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/12","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/12"}}},"commit":{"parents":[{"commit":"2162ed6b0335b502eb5f7e3b1d98b9837d448288","subject":"Merge \"Substituted object storage paragraph with simple definition\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2162ed6b0335b502eb5f7e3b1d98b9837d448288"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-01-08 07:16:08.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. Account and container DBs are not created very\nfrequently. But objects are! A configurable option is provided to turn\noff fsyncing dirs in object-server.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem. Those are never fsync\u0027d.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b01622f9adef6570085a1c37accd87e90ad4724e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b01622f9adef6570085a1c37accd87e90ad4724e"}]},"branch":"refs/heads/master"},"4c7aae118302508a3a2259ed004780fbc50dc4e0":{"kind":"REWORK","_number":13,"created":"2015-02-12 09:14:08.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/13","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/13","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/13"}}},"commit":{"parents":[{"commit":"69797efcbba2076eae944754e0a8585122374544","subject":"small bug with account to account copy","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/69797efcbba2076eae944754e0a8585122374544"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-02-12 09:13:31.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. Account and container DBs are not created very\nfrequently. But objects are! A configurable option is provided to turn\noff fsyncing dirs in object-server.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem. Those are never fsync\u0027d.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/4c7aae118302508a3a2259ed004780fbc50dc4e0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/4c7aae118302508a3a2259ed004780fbc50dc4e0"}]},"branch":"refs/heads/master"},"39df4cd80b9abb9e53e38abff0ddd2b41eb189a0":{"kind":"NO_CODE_CHANGE","_number":14,"created":"2015-02-26 06:37:12.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/14","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/14","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/14"}}},"commit":{"parents":[{"commit":"69797efcbba2076eae944754e0a8585122374544","subject":"small bug with account to account copy","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/69797efcbba2076eae944754e0a8585122374544"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-02-26 06:37:12.000000000","tz":0},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. However, no configurable option is provided to turn it off.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem prematurely. Those were never fsync\u0027d.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/39df4cd80b9abb9e53e38abff0ddd2b41eb189a0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/39df4cd80b9abb9e53e38abff0ddd2b41eb189a0"}]},"branch":"refs/heads/master"},"6e2ebb282a538e8aa477e90478b9bc477cec4291":{"kind":"REWORK","_number":15,"created":"2015-03-02 06:38:33.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/15","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/15","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/15 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/15 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/15 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/15"}}},"commit":{"parents":[{"commit":"41058ba809ab7f3da52f6f539c78fc5bd7c3fc9c","subject":"Merge \"Ring checker in swift-recon\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/41058ba809ab7f3da52f6f539c78fc5bd7c3fc9c"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-03-02 06:33:24.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. However, no configurable option is provided to\nturn it off.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem. Those are never fsync\u0027d. This has been\nfixed.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6e2ebb282a538e8aa477e90478b9bc477cec4291"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6e2ebb282a538e8aa477e90478b9bc477cec4291"}]},"branch":"refs/heads/master"},"a6f630f27cc20ab4ae1cf53b6840b817aba576a0":{"kind":"REWORK","_number":16,"created":"2015-03-04 07:25:48.000000000","uploader":{"_account_id":8542,"name":"Prashanth Pai","email":"ppai@redhat.com","username":"pai"},"ref":"refs/changes/23/126923/16","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/23/126923/16","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/16 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/16 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/23/126923/16 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/23/126923/16"}}},"commit":{"parents":[{"commit":"23f55b2ebc008ae7460f7b52de2083a803a0956b","subject":"Merge \"Fix object replicator partition cleanup\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/23f55b2ebc008ae7460f7b52de2083a803a0956b"}]}],"author":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2014-10-08 14:19:39.000000000","tz":330},"committer":{"name":"Prashanth Pai","email":"ppai@redhat.com","date":"2015-03-04 07:03:56.000000000","tz":330},"subject":"fsync() on directories","message":"fsync() on directories\n\nrenamer() method now does a fsync on containing directory of target path\nand also on parent dirs of newly created directories, by default.\nThis can be explicitly turned off in cases where it is not\nnecessary (For example- quarantines).\n\nThe following article explains why this is necessary:\nhttp://lwn.net/Articles/457667/\n\nAlthough, it may seem like the right thing to do, this change does come\nat a performance penalty. However, no configurable option is provided to\nturn it off.\n\nAlso, lock_path() inside invalidate_hash() was always creating part of\nobject path in filesystem. Those are never fsync\u0027d. This has been\nfixed.\n\nChange-Id: Id8e02f84f48370edda7fb0c46e030db3b53a71e3\nSigned-off-by: Prashanth Pai \u003cppai@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a6f630f27cc20ab4ae1cf53b6840b817aba576a0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a6f630f27cc20ab4ae1cf53b6840b817aba576a0"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
