)]}'
{"id":"openstack%2Fswift~633857","triplet_id":"openstack%2Fswift~master~I39acade850beb28dcb8a46e1e2c72dd9a428e269","project":"openstack/swift","branch":"master","topic":"bug/1840322","hashtags":[],"change_id":"I39acade850beb28dcb8a46e1e2c72dd9a428e269","subject":"symlink-backed versioned_writes","status":"ABANDONED","created":"2019-01-30 01:55:58.000000000","updated":"2020-01-16 20:44:19.000000000","total_comment_count":144,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"3c2345abd65afeb6586d6328a14cbf8873a4e52a","_number":633857,"virtual_id_number":633857,"owner":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},{"value":-1,"date":"2019-09-11 06:22:08.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"rejected":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"value":-2,"date":"2019-09-11 05:09:43.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"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":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2019-08-26 18:45:09.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":"2019-08-27 17:00:02.000000000","updated_by":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"reviewer":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"state":"REVIEWER"},{"updated":"2019-09-11 06:22:08.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"144b705bda159f73c5d30ad02fd48c809549ffc1","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-01-30 01:55:58.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"7de8e3c9465262336549ea4f81384ab46707cd3c","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-01-30 02:57:24.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/1/check/openstack-tox-docs/2388346/ : FAILURE in 5m 08s\n- swift-tox-py27 http://logs.openstack.org/57/633857/1/check/swift-tox-py27/5635b0f/ : FAILURE in 11m 57s\n- swift-tox-py35 http://logs.openstack.org/57/633857/1/check/swift-tox-py35/8c249c7/ : SUCCESS in 6m 19s\n- swift-tox-py36 http://logs.openstack.org/57/633857/1/check/swift-tox-py36/929ff17/ : SUCCESS in 5m 47s (non-voting)\n- swift-tox-func http://logs.openstack.org/57/633857/1/check/swift-tox-func/09aaaae/ : FAILURE in 10m 22s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/1/check/swift-tox-func-encryption/523ef88/ : FAILURE in 33m 26s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/1/check/swift-tox-func-domain-remap-staticweb/176b1a8/ : FAILURE in 8m 06s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/1/check/swift-tox-func-ec/b9467f9/ : FAILURE in 8m 46s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/1/check/swift-tox-func-s3api/4d49a21/ : FAILURE in 10m 17s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/1/check/swift-tox-func-s3api-ceph-s3tests-tempauth/30ec8bb/ : SUCCESS in 14m 28s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/1/check/swift-probetests-centos-7/442cabd/ : SUCCESS in 33m 52s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/1/check/swift-dsvm-functional/35bf873/ : FAILURE in 21m 38s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/1/check/swift-dsvm-functional-ipv6/4a0358f/ : FAILURE in 17m 24s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/1/check/swift-tox-lower-constraints/c3f1bcb/ : FAILURE in 10m 38s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/1/check/openstack-tox-pep8/2bccc91/ : FAILURE in 6m 04s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/1/check/swift-multinode-rolling-upgrade/021db4d/ : SUCCESS in 17m 38s","accounts_in_message":[],"_revision_number":1},{"id":"981273706a2c8128860ee551f73b236c71ca537e","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-01-30 14:30:40.000000000","message":"Patch Set 1:\n\n(1 comment)\n\nthanks for pushing this up early!  keep going!","accounts_in_message":[],"_revision_number":1},{"id":"52a4c94e3d2f6c1417a4618d5569cc818bd24d8f","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-01-30 18:31:55.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"98e69e862f8077f3867d0333e8516c819c662a3d","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-02-01 10:47:51.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"58902f3865f45b824f499b130f7710826855117b","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-03-04 19:39:22.000000000","message":"Patch Set 1:\n\nOther things to think about:\n\n- container quotas,\n- using different storage policies for primary vs archive containers,\n- interactions with https://review.openstack.org/#/c/342857/ wanting to automatically set expiration dates for not-current versions\n- probably more things...","accounts_in_message":[],"_revision_number":1},{"id":"2114a266e4c798f08f70888d09021df8758187b0","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-12 17:11:08.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"f21c04518ae0d3bea8f04cd70c42cd001436c931","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-12 17:11:28.000000000","message":"Patch Set 2: Code-Review-1 Workflow-1\n\nstill working on this","accounts_in_message":[],"_revision_number":2},{"id":"2bcc08e9d059be5d45535f13de124cd0a73565e3","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-12 18:20:37.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/2/check/openstack-tox-docs/9f9faba/ : FAILURE in 4m 04s\n- swift-build-image http://logs.openstack.org/57/633857/2/check/swift-build-image/ca25e63/ : SUCCESS in 9m 22s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/2/check/swift-tox-py27/ad7b828/ : FAILURE in 10m 57s\n- swift-tox-py36 http://logs.openstack.org/57/633857/2/check/swift-tox-py36/427acd2/ : FAILURE in 10m 00s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/57/633857/2/check/swift-tox-py37/29baad3/ : FAILURE in 15m 22s\n- swift-tox-func http://logs.openstack.org/57/633857/2/check/swift-tox-func/19aa100/ : FAILURE in 11m 09s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/2/check/swift-tox-func-py37/5a0c02b/ : SUCCESS in 8m 57s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/2/check/swift-tox-func-encryption/007f87f/ : FAILURE in 9m 25s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/2/check/swift-tox-func-domain-remap-staticweb/a385470/ : FAILURE in 9m 26s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/2/check/swift-tox-func-ec/98c35ed/ : FAILURE in 11m 26s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/2/check/swift-tox-func-s3api/01e1468/ : FAILURE in 12m 14s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/2/check/swift-tox-func-domain-remap-staticweb-py37/106ad44/ : SUCCESS in 8m 28s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/2/check/swift-tox-func-s3api-ceph-s3tests-tempauth/ff7bdd3/ : SUCCESS in 14m 51s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/2/check/swift-probetests-centos-7/1924701/ : FAILURE in 30m 17s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/2/check/swift-dsvm-functional/d82c901/ : FAILURE in 25m 31s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/2/check/swift-dsvm-functional-py3/374892d/ : FAILURE in 26m 22s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/2/check/swift-dsvm-functional-ipv6/1a1a66b/ : FAILURE in 23m 11s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/2/check/swift-tox-lower-constraints/e7a6bed/ : FAILURE in 11m 01s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/2/check/openstack-tox-pep8/6dd811f/ : FAILURE in 8m 11s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/2/check/swift-multinode-rolling-upgrade/d312dd1/ : FAILURE in 11m 01s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"69f687a8742224203e696dc3945aa0c1184b7d6e","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-15 20:53:06.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"9c394ded54d224a1c90ea9105d064d7da42ca04c","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-15 20:53:29.000000000","message":"Patch Set 3: Code-Review-1 Workflow-1\n\nstill wip","accounts_in_message":[],"_revision_number":3},{"id":"4209c81df1be0dd41b9d83ce57cc793ebe05c788","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-15 21:41:46.000000000","message":"Patch Set 3: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/3/check/openstack-tox-docs/93d56b3/ : FAILURE in 3m 53s\n- swift-build-image http://logs.openstack.org/57/633857/3/check/swift-build-image/023530f/ : SUCCESS in 7m 54s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/3/check/swift-tox-py27/634f8f5/ : FAILURE in 11m 01s\n- swift-tox-py36 http://logs.openstack.org/57/633857/3/check/swift-tox-py36/fa85507/ : FAILURE in 14m 31s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/57/633857/3/check/swift-tox-py37/44bdfda/ : FAILURE in 13m 43s\n- swift-tox-func http://logs.openstack.org/57/633857/3/check/swift-tox-func/ea781f8/ : SUCCESS in 12m 14s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/3/check/swift-tox-func-py37/9b34ed7/ : SUCCESS in 10m 17s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/3/check/swift-tox-func-encryption/20884ec/ : SUCCESS in 10m 21s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/3/check/swift-tox-func-domain-remap-staticweb/73a9559/ : SUCCESS in 9m 42s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/3/check/swift-tox-func-ec/560e0ee/ : SUCCESS in 11m 07s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/3/check/swift-tox-func-s3api/32a612b/ : SUCCESS in 14m 40s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/3/check/swift-tox-func-domain-remap-staticweb-py37/d1296b4/ : SUCCESS in 8m 26s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/3/check/swift-tox-func-s3api-ceph-s3tests-tempauth/9c62d6d/ : SUCCESS in 25m 16s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/3/check/swift-probetests-centos-7/26e6675/ : SUCCESS in 29m 56s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/3/check/swift-dsvm-functional/d8d6f29/ : FAILURE in 22m 28s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/3/check/swift-dsvm-functional-py3/cb418d7/ : FAILURE in 24m 08s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/3/check/swift-dsvm-functional-ipv6/757552c/ : FAILURE in 26m 21s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/3/check/swift-tox-lower-constraints/a68b00b/ : FAILURE in 14m 17s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/3/check/openstack-tox-pep8/5bd4885/ : FAILURE in 6m 03s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/3/check/swift-multinode-rolling-upgrade/f7148da/ : SUCCESS in 19m 22s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"908492a56ef3d121d0324f112625488c8fd8d963","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-17 22:38:00.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"f3bca138fc1fd3ece26304ecfaf1ab8984f62a6a","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-17 22:45:08.000000000","message":"Patch Set 4:\n\n(6 comments)\n\ngetting closer...","accounts_in_message":[],"_revision_number":4},{"id":"30c5eb7185a334272a4cac9a29efa56eb73daf19","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-17 23:21:01.000000000","message":"Patch Set 4: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/4/check/openstack-tox-docs/117b38d/ : FAILURE in 3m 40s\n- swift-build-image http://logs.openstack.org/57/633857/4/check/swift-build-image/14d9903/ : SUCCESS in 8m 02s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/4/check/swift-tox-py27/829979b/ : FAILURE in 10m 45s\n- swift-tox-py36 http://logs.openstack.org/57/633857/4/check/swift-tox-py36/2adf2cf/ : FAILURE in 10m 07s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/57/633857/4/check/swift-tox-py37/7ab0b45/ : FAILURE in 10m 09s\n- swift-tox-func http://logs.openstack.org/57/633857/4/check/swift-tox-func/811de5c/ : SUCCESS in 9m 05s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/4/check/swift-tox-func-py37/53b1caa/ : SUCCESS in 8m 14s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/4/check/swift-tox-func-encryption/dcc505e/ : SUCCESS in 12m 30s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/4/check/swift-tox-func-domain-remap-staticweb/6e44971/ : SUCCESS in 9m 31s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/4/check/swift-tox-func-ec/36bf549/ : SUCCESS in 9m 54s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/4/check/swift-tox-func-s3api/52f4468/ : SUCCESS in 15m 12s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/4/check/swift-tox-func-domain-remap-staticweb-py37/8ffd6cf/ : SUCCESS in 7m 14s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/4/check/swift-tox-func-s3api-ceph-s3tests-tempauth/f105d75/ : SUCCESS in 12m 07s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/4/check/swift-probetests-centos-7/7a6b7f2/ : SUCCESS in 30m 53s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/4/check/swift-dsvm-functional/50c6b7e/ : FAILURE in 23m 29s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/4/check/swift-dsvm-functional-py3/eeb9b08/ : FAILURE in 22m 43s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/4/check/swift-dsvm-functional-ipv6/8485856/ : FAILURE in 21m 24s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/4/check/swift-tox-lower-constraints/34eed49/ : FAILURE in 10m 42s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/4/check/openstack-tox-pep8/0ffe218/ : SUCCESS in 5m 26s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/4/check/swift-multinode-rolling-upgrade/2cccd5c/ : SUCCESS in 15m 08s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"63afffac98cc431a809e57a66c415c69a0c6f9b6","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-18 18:28:45.000000000","message":"Patch Set 4: Code-Review-1\n\n(1 comment)","accounts_in_message":[],"_revision_number":4},{"id":"7eb607c7f8acceedbc59b7f23d0f51720d42ca95","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-18 21:37:33.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"0c7584c5590ce7f070f219e72c5e493f655636ef","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-18 22:14:07.000000000","message":"Patch Set 5: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/5/check/openstack-tox-docs/45abd94/html/ : SUCCESS in 4m 32s\n- swift-build-image http://logs.openstack.org/57/633857/5/check/swift-build-image/849e7b8/ : SUCCESS in 9m 21s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/5/check/swift-tox-py27/60b9759/ : SUCCESS in 14m 14s\n- swift-tox-py36 http://logs.openstack.org/57/633857/5/check/swift-tox-py36/d437efd/ : FAILURE in 10m 48s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/57/633857/5/check/swift-tox-py37/833524c/ : FAILURE in 11m 21s\n- swift-tox-func http://logs.openstack.org/57/633857/5/check/swift-tox-func/7611696/ : SUCCESS in 11m 43s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/5/check/swift-tox-func-py37/709d364/ : SUCCESS in 11m 23s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/5/check/swift-tox-func-encryption/108959d/ : SUCCESS in 12m 58s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/5/check/swift-tox-func-domain-remap-staticweb/278577a/ : SUCCESS in 10m 22s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/5/check/swift-tox-func-ec/778a3b3/ : SUCCESS in 10m 41s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/5/check/swift-tox-func-s3api/e9e4e92/ : SUCCESS in 16m 08s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/5/check/swift-tox-func-domain-remap-staticweb-py37/bc340b3/ : SUCCESS in 8m 50s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/5/check/swift-tox-func-s3api-ceph-s3tests-tempauth/ae640d2/ : SUCCESS in 16m 23s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/5/check/swift-probetests-centos-7/a9aaacb/ : FAILURE in 28m 11s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/5/check/swift-dsvm-functional/09c1316/ : SUCCESS in 29m 18s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/5/check/swift-dsvm-functional-py3/492ddb9/ : FAILURE in 23m 32s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/5/check/swift-dsvm-functional-ipv6/95088d0/ : SUCCESS in 28m 32s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/5/check/swift-tox-lower-constraints/d02aef8/ : FAILURE in 12m 09s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/5/check/openstack-tox-pep8/984c2db/ : SUCCESS in 5m 34s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/5/check/swift-multinode-rolling-upgrade/8d02bd6/ : SUCCESS in 17m 38s (non-voting)","accounts_in_message":[],"_revision_number":5},{"id":"1d04b5a07b6ec2518912c110b6ab0aa546ef0513","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-19 15:49:38.000000000","message":"Uploaded patch set 6.","accounts_in_message":[],"_revision_number":6},{"id":"eacd7fca1410bb362930bd64258ca4c5bb184225","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-07-19 15:51:41.000000000","message":"Patch Set 5:\n\n(2 comments)\n\nmoving on to patch 6...","accounts_in_message":[],"_revision_number":5},{"id":"7cb19e03d431864e0f66dcb94ac65c6cc1cf3cec","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-07-19 17:38:04.000000000","message":"Patch Set 6:\n\n(7 comments)","accounts_in_message":[],"_revision_number":6},{"id":"8a4506ffd7bb284ad3dfcb8e67b539f2dacd7e97","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-19 18:18:09.000000000","message":"Patch Set 6: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/6/check/openstack-tox-docs/0f73719/html/ : SUCCESS in 4m 04s\n- swift-build-image http://logs.openstack.org/57/633857/6/check/swift-build-image/b61f0b9/ : SUCCESS in 8m 42s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/6/check/swift-tox-py27/3f0d606/ : SUCCESS in 11m 15s\n- swift-tox-py36 http://logs.openstack.org/57/633857/6/check/swift-tox-py36/2560faa/ : SUCCESS in 12m 17s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/57/633857/6/check/swift-tox-py37/c1a4c7c/ : SUCCESS in 10m 37s\n- swift-tox-func http://logs.openstack.org/57/633857/6/check/swift-tox-func/23f7d54/ : SUCCESS in 9m 53s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/6/check/swift-tox-func-encryption/5ee3168/ : SUCCESS in 11m 48s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/6/check/swift-tox-func-domain-remap-staticweb/0cb16f3/ : SUCCESS in 10m 34s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/6/check/swift-tox-func-ec/a9db414/ : SUCCESS in 14m 16s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/6/check/swift-tox-func-s3api/5fd8312/ : SUCCESS in 15m 21s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/6/check/swift-tox-func-py37/dda17bc/ : SUCCESS in 11m 12s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/6/check/swift-tox-func-domain-remap-staticweb-py37/2fb22d9/ : SUCCESS in 8m 01s\n- swift-tox-func-ec-py37 http://logs.openstack.org/57/633857/6/check/swift-tox-func-ec-py37/0767253/ : FAILURE in 4m 49s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/6/check/swift-tox-func-s3api-ceph-s3tests-tempauth/91029a2/ : SUCCESS in 13m 45s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/6/check/swift-probetests-centos-7/d9bae04/ : FAILURE in 31m 01s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/6/check/swift-dsvm-functional/419ff36/ : SUCCESS in 33m 27s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/6/check/swift-dsvm-functional-py3/4048430/ : SUCCESS in 32m 03s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/6/check/swift-dsvm-functional-ipv6/8184be7/ : SUCCESS in 32m 43s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/6/check/swift-tox-lower-constraints/130b65f/ : SUCCESS in 13m 09s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/6/check/openstack-tox-pep8/7d48657/ : SUCCESS in 6m 24s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/6/check/swift-multinode-rolling-upgrade/662329c/ : SUCCESS in 19m 00s (non-voting)","accounts_in_message":[],"_revision_number":6},{"id":"f040ca7b465ddfe5d9f8b9c3f50910250eb090c3","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-19 21:04:51.000000000","message":"Patch Set 6: Code-Review-1 Workflow-1\n\n(8 comments)\n\nawesome thanks for the feedback!\n\nI\u0027ve rebased on the updated hardlinks patch and I\u0027ll see what I can start to do to shore this one up","accounts_in_message":[],"_revision_number":6},{"id":"c3f194503d3506ce6b450e4b3b5d648723657b70","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-24 18:03:45.000000000","message":"Uploaded patch set 7.","accounts_in_message":[],"_revision_number":7},{"id":"ef97ba37a89d74beccd7a1bc9284104007908f55","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-24 18:04:15.000000000","message":"Patch Set 7: Code-Review-1 Workflow-1\n\nsome of this works ok on the new hardlinks, i want to get some early feedback from zuul","accounts_in_message":[],"_revision_number":7},{"id":"1ad6efeda95c542943c9a4115240d070fa7c319e","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-24 19:33:40.000000000","message":"Patch Set 7: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/7/check/openstack-tox-docs/aec3e4e/html/ : SUCCESS in 6m 17s\n- swift-build-image http://logs.openstack.org/57/633857/7/check/swift-build-image/6d730b0/ : SUCCESS in 9m 28s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/7/check/swift-tox-py27/b47afec/ : SUCCESS in 12m 07s\n- swift-tox-py36 http://logs.openstack.org/57/633857/7/check/swift-tox-py36/1c198b2/ : SUCCESS in 12m 18s\n- swift-tox-py37 http://logs.openstack.org/57/633857/7/check/swift-tox-py37/2f6010d/ : SUCCESS in 11m 24s\n- swift-tox-func http://logs.openstack.org/57/633857/7/check/swift-tox-func/70e9630/ : FAILURE in 10m 26s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/7/check/swift-tox-func-encryption/f202cbc/ : FAILURE in 11m 17s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/7/check/swift-tox-func-domain-remap-staticweb/baa201e/ : FAILURE in 10m 27s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/7/check/swift-tox-func-ec/453db5e/ : FAILURE in 10m 54s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/7/check/swift-tox-func-s3api/c88cb0d/ : FAILURE in 13m 31s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/7/check/swift-tox-func-py37/5d363df/ : SUCCESS in 12m 31s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/7/check/swift-tox-func-domain-remap-staticweb-py37/06564db/ : SUCCESS in 8m 47s\n- swift-tox-func-ec-py37 http://logs.openstack.org/57/633857/7/check/swift-tox-func-ec-py37/bd97a7b/ : SUCCESS in 8m 40s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/7/check/swift-tox-func-s3api-ceph-s3tests-tempauth/1545428/ : SUCCESS in 14m 45s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/7/check/swift-probetests-centos-7/a19c0d3/ : SUCCESS in 31m 46s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/7/check/swift-dsvm-functional/dfd81ea/ : FAILURE in 22m 52s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/7/check/swift-dsvm-functional-py3/e42eb48/ : FAILURE in 24m 10s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/7/check/swift-dsvm-functional-ipv6/059d9f0/ : FAILURE in 22m 54s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/7/check/swift-tox-lower-constraints/fbc5f86/ : SUCCESS in 14m 52s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/7/check/openstack-tox-pep8/d204b71/ : SUCCESS in 6m 59s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/7/check/swift-multinode-rolling-upgrade/b2a6659/ : SUCCESS in 16m 56s","accounts_in_message":[],"_revision_number":7},{"id":"fc8f24f89722f435ac933cca55c4966c97944735","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-25 20:23:02.000000000","message":"Uploaded patch set 8.","accounts_in_message":[],"_revision_number":8},{"id":"0226346303630ebb6f88390acc031316ac6a2e1a","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-25 20:37:28.000000000","message":"Patch Set 8: Workflow-1\n\n(11 comments)\n\nso i\u0027m at a 1:4 ratio code to tests - sounds about right, and I\u0027m still fixing bugs\n\ncurious if everything is working on zuul at this point\n\nI\u0027m going to rebase my s3 versioning change before I revist the abstraction leakage here","accounts_in_message":[],"_revision_number":8},{"id":"00d42499157cc2284b3bb54ae4b7bdc7c56175d6","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 20:59:59.000000000","message":"Patch Set 8: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/8/check/openstack-tox-docs/85f4b25/html/ : SUCCESS in 5m 59s\n- swift-build-image http://logs.openstack.org/57/633857/8/check/swift-build-image/3587099/ : SUCCESS in 10m 03s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/8/check/swift-tox-py27/a9c263f/ : SUCCESS in 11m 11s\n- swift-tox-py36 http://logs.openstack.org/57/633857/8/check/swift-tox-py36/a23f686/ : SUCCESS in 11m 41s\n- swift-tox-py37 http://logs.openstack.org/57/633857/8/check/swift-tox-py37/93afc01/ : FAILURE in 16m 02s\n- swift-tox-func http://logs.openstack.org/57/633857/8/check/swift-tox-func/0049ec3/ : SUCCESS in 8m 34s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/8/check/swift-tox-func-encryption/3662def/ : SUCCESS in 10m 42s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/8/check/swift-tox-func-domain-remap-staticweb/1a253b3/ : SUCCESS in 9m 22s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/8/check/swift-tox-func-ec/e8420b5/ : SUCCESS in 18m 33s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/8/check/swift-tox-func-s3api/bf5dbc4/ : FAILURE in 14m 39s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/8/check/swift-tox-func-py37/67e8a32/ : SUCCESS in 9m 10s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/8/check/swift-tox-func-domain-remap-staticweb-py37/0abaa96/ : SUCCESS in 7m 14s\n- swift-tox-func-ec-py37 http://logs.openstack.org/57/633857/8/check/swift-tox-func-ec-py37/083a244/ : SUCCESS in 15m 47s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/8/check/swift-tox-func-s3api-ceph-s3tests-tempauth/df3d389/ : FAILURE in 14m 52s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/8/check/swift-probetests-centos-7/9b8979b/ : SUCCESS in 31m 01s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/8/check/swift-dsvm-functional/bd0b31f/ : SUCCESS in 34m 45s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/8/check/swift-dsvm-functional-py3/95403a1/ : SUCCESS in 27m 43s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/8/check/swift-dsvm-functional-ipv6/3627ace/ : SUCCESS in 30m 46s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/8/check/swift-tox-lower-constraints/bd035e1/ : SUCCESS in 18m 15s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/8/check/openstack-tox-pep8/7d07c3e/ : SUCCESS in 6m 54s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/8/check/swift-multinode-rolling-upgrade/f444cab/ : SUCCESS in 16m 16s","accounts_in_message":[],"_revision_number":8},{"id":"d260374efcc2b2085653a7968abdc379f883f2ab","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-25 22:07:00.000000000","message":"Patch Set 8: Code-Review-1\n\ndo this:\n\n\tdiff --git a/swift/common/middleware/versioned_writes.py b/swift/common/middleware/versioned_writes.py\n\tindex 15f473412..706b41a66 100644\n\t--- a/swift/common/middleware/versioned_writes.py\n\t+++ b/swift/common/middleware/versioned_writes.py\n\t@@ -245,6 +245,7 @@ from swift.common.swob import HTTPPreconditionFailed, HTTPServiceUnavailable, \\\n\t     wsgi_unquote\n\t from swift.common.exceptions import (\n\t     ListingIterNotFound, ListingIterError)\n\t+from six.moves.urllib.parse import unquote\n\t \n\t \n\t DELETE_MARKER_CONTENT_TYPE \u003d \u0027application/x-deleted;swift_versions_deleted\u003d1\u0027\n\t@@ -843,6 +844,7 @@ class VersionedWritesContext(WSGIContext):\n\t\t\t\t     continue\n\t\t\t\t _, _, tgt_container, _ \u003d split_path(\n\t\t\t\t     item[\u0027symlink_path\u0027], 4, 4, True)\n\t+                        tgt_container \u003d unquote(tgt_container)\n\t\t\t\t if tgt_container !\u003d location:\n\t\t\t\t     self.logger.debug(\u0027Found non-version symlink to \u0027\n\t\t\t\t\t\t       \u0027%r instead of %r\u0027,\n\n\n\n... and tests","accounts_in_message":[],"_revision_number":8},{"id":"a1dccc2f84f357583067eb8a12d6d5ed0bfa4722","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-26 19:47:23.000000000","message":"Uploaded patch set 9.","accounts_in_message":[],"_revision_number":9},{"id":"f699c87cdeaad7bf37d5abaef441e2451f75a0e1","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-07-26 19:51:41.000000000","message":"Patch Set 9: Code-Review+1\n\n(2 comments)\n\nI\u0027m going to try again to leave this one alone for a few days, if zuul it happy it\u0027s possible we could merge this with an eye towards cleaning it up after the fact; but if we can find any design defects _first_ that would be much better!","accounts_in_message":[],"_revision_number":9},{"id":"724ad49bb9eb1c2458fafc1dc487923b03756438","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-26 20:26:04.000000000","message":"Patch Set 9: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-docs http://logs.openstack.org/57/633857/9/check/openstack-tox-docs/a768c9f/html/ : SUCCESS in 5m 35s\n- swift-build-image http://logs.openstack.org/57/633857/9/check/swift-build-image/307c7b0/ : SUCCESS in 9m 08s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/57/633857/9/check/swift-tox-py27/d4f820f/ : SUCCESS in 12m 37s\n- swift-tox-py36 http://logs.openstack.org/57/633857/9/check/swift-tox-py36/dc564b9/ : SUCCESS in 10m 40s\n- swift-tox-py37 http://logs.openstack.org/57/633857/9/check/swift-tox-py37/70e4558/ : SUCCESS in 12m 35s\n- swift-tox-func http://logs.openstack.org/57/633857/9/check/swift-tox-func/0a4fccf/ : SUCCESS in 18m 21s\n- swift-tox-func-encryption http://logs.openstack.org/57/633857/9/check/swift-tox-func-encryption/1b24b45/ : SUCCESS in 9m 25s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/57/633857/9/check/swift-tox-func-domain-remap-staticweb/54fe163/ : SUCCESS in 10m 09s\n- swift-tox-func-ec http://logs.openstack.org/57/633857/9/check/swift-tox-func-ec/1f0c987/ : SUCCESS in 18m 30s\n- swift-tox-func-s3api http://logs.openstack.org/57/633857/9/check/swift-tox-func-s3api/7ba34fd/ : SUCCESS in 15m 48s\n- swift-tox-func-py37 http://logs.openstack.org/57/633857/9/check/swift-tox-func-py37/d3634d4/ : SUCCESS in 10m 55s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/57/633857/9/check/swift-tox-func-domain-remap-staticweb-py37/b4c2b21/ : SUCCESS in 16m 02s\n- swift-tox-func-ec-py37 http://logs.openstack.org/57/633857/9/check/swift-tox-func-ec-py37/f7ae17f/ : SUCCESS in 16m 40s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/57/633857/9/check/swift-tox-func-s3api-ceph-s3tests-tempauth/b0f739a/ : SUCCESS in 18m 49s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/57/633857/9/check/swift-probetests-centos-7/0f627b3/ : SUCCESS in 32m 12s\n- swift-dsvm-functional http://logs.openstack.org/57/633857/9/check/swift-dsvm-functional/18cef15/ : SUCCESS in 27m 56s\n- swift-dsvm-functional-py3 http://logs.openstack.org/57/633857/9/check/swift-dsvm-functional-py3/744edb9/ : SUCCESS in 32m 44s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/57/633857/9/check/swift-dsvm-functional-ipv6/5012376/ : SUCCESS in 34m 28s\n- swift-tox-lower-constraints http://logs.openstack.org/57/633857/9/check/swift-tox-lower-constraints/25f5fcd/ : SUCCESS in 13m 11s\n- openstack-tox-pep8 http://logs.openstack.org/57/633857/9/check/openstack-tox-pep8/5d78449/ : SUCCESS in 7m 02s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/57/633857/9/check/swift-multinode-rolling-upgrade/e740cca/ : SUCCESS in 15m 51s","accounts_in_message":[],"_revision_number":9},{"id":"87ab88b82b9057b3882209b28f3f2999cc9150c5","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-07-26 21:56:16.000000000","message":"Patch Set 9:\n\n(2 comments)","accounts_in_message":[],"_revision_number":9},{"id":"fbcc842c304679585740f4ed4164923b3aced748","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-08-01 17:42:39.000000000","message":"Patch Set 9:\n\n(6 comments)\n\nI think this is not so bad... I need to figure out the behavior we need on the hardlinks so I can rebase and make sure we\u0027re happy with the listing interactions for hardlinks to slos and symlinks","accounts_in_message":[],"_revision_number":9},{"id":"19ed3e76fe645fed9d41c66cf6515d9fc0ad4215","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-08-02 22:31:56.000000000","message":"Uploaded patch set 10.","accounts_in_message":[],"_revision_number":10},{"id":"e970265edcc87362b1ce2b7f794011d6adb32d4e","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-02 23:41:33.000000000","message":"Patch Set 10: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://logs.opendev.org/57/633857/10/check/openstack-tox-docs/964d3f1/html/ : SUCCESS in 4m 58s\n- grenade-py3 https://logs.opendev.org/57/633857/10/check/grenade-py3/871fc16/ : SUCCESS in 58m 32s\n- tempest-integrated-object-storage https://logs.opendev.org/57/633857/10/check/tempest-integrated-object-storage/fe7d3ff/ : FAILURE in 36m 49s\n- swift-build-image https://logs.opendev.org/57/633857/10/check/swift-build-image/d166e1b/ : SUCCESS in 7m 45s (non-voting)\n- swift-tox-py27 https://logs.opendev.org/57/633857/10/check/swift-tox-py27/2eba2e1/ : SUCCESS in 11m 00s\n- swift-tox-py36 https://logs.opendev.org/57/633857/10/check/swift-tox-py36/e6b1aa8/ : FAILURE in 13m 57s\n- swift-tox-py37 https://logs.opendev.org/57/633857/10/check/swift-tox-py37/92f010e/ : SUCCESS in 12m 03s\n- swift-tox-func https://logs.opendev.org/57/633857/10/check/swift-tox-func/77eaf8f/ : SUCCESS in 13m 04s\n- swift-tox-func-encryption https://logs.opendev.org/57/633857/10/check/swift-tox-func-encryption/65f1aeb/ : SUCCESS in 10m 49s\n- swift-tox-func-domain-remap-staticweb https://logs.opendev.org/57/633857/10/check/swift-tox-func-domain-remap-staticweb/e0e3bd1/ : SUCCESS in 11m 55s\n- swift-tox-func-ec https://logs.opendev.org/57/633857/10/check/swift-tox-func-ec/2dfd960/ : SUCCESS in 13m 12s\n- swift-tox-func-s3api https://logs.opendev.org/57/633857/10/check/swift-tox-func-s3api/bc13147/ : SUCCESS in 13m 09s\n- swift-tox-func-py37 https://logs.opendev.org/57/633857/10/check/swift-tox-func-py37/7575e79/ : SUCCESS in 10m 47s\n- swift-tox-func-domain-remap-staticweb-py37 https://logs.opendev.org/57/633857/10/check/swift-tox-func-domain-remap-staticweb-py37/e039d97/ : SUCCESS in 9m 16s\n- swift-tox-func-ec-py37 https://logs.opendev.org/57/633857/10/check/swift-tox-func-ec-py37/740aa0b/ : SUCCESS in 10m 18s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://logs.opendev.org/57/633857/10/check/swift-tox-func-s3api-ceph-s3tests-tempauth/036c817/ : SUCCESS in 11m 50s (non-voting)\n- swift-probetests-centos-7 https://logs.opendev.org/57/633857/10/check/swift-probetests-centos-7/a7db0ba/ : SUCCESS in 33m 50s\n- swift-dsvm-functional https://logs.opendev.org/57/633857/10/check/swift-dsvm-functional/417c7d8/ : SUCCESS in 28m 56s\n- swift-dsvm-functional-py3 https://logs.opendev.org/57/633857/10/check/swift-dsvm-functional-py3/d41b607/ : SUCCESS in 29m 15s\n- swift-dsvm-functional-ipv6 https://logs.opendev.org/57/633857/10/check/swift-dsvm-functional-ipv6/0594b1d/ : SUCCESS in 28m 16s\n- swift-tox-lower-constraints https://logs.opendev.org/57/633857/10/check/swift-tox-lower-constraints/7853693/ : SUCCESS in 11m 18s\n- openstack-tox-pep8 https://logs.opendev.org/57/633857/10/check/openstack-tox-pep8/9fa5e42/ : SUCCESS in 6m 22s\n- swift-multinode-rolling-upgrade https://logs.opendev.org/57/633857/10/check/swift-multinode-rolling-upgrade/f0822fb/ : SUCCESS in 16m 22s","accounts_in_message":[],"_revision_number":10},{"id":"4f5fac398ed9216a527a5eb2ff7a62b9a38664e9","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-08-15 20:13:19.000000000","message":"Uploaded patch set 11.","accounts_in_message":[],"_revision_number":11},{"id":"af15bf2f43b976f3727280346c2ae2ad8cd79fb4","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-15 20:13:34.000000000","message":"Patch Set 11: Verified-1\n\nMerge Failed.\n\nThis change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.","accounts_in_message":[],"_revision_number":11},{"id":"72e7333b3ede807aac6333b471051e4df3143974","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-15 20:23:04.000000000","message":"Uploaded patch set 12.","accounts_in_message":[],"_revision_number":12},{"id":"deab1374f58805d4bc0e80587aec9df1e1ef8453","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-15 21:29:59.000000000","message":"Uploaded patch set 13.","accounts_in_message":[],"_revision_number":13},{"id":"5ec82f69744d2375cd39d1db8cb93edacf2369e0","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-15 21:34:09.000000000","message":"Uploaded patch set 14.","accounts_in_message":[],"_revision_number":14},{"id":"625fcb338bd349eab6d5ca7b3f0723677b009fa2","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-15 22:43:41.000000000","message":"Patch Set 14: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/582f78b24ff94366b532475e7895d372 : SUCCESS in 7m 16s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/c8e770f1b1ba4e168bc42e624cc77a74 : SUCCESS in 1h 03m 17s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/0b37cd1b3eca4a89bb8dc4c3d460250a : SUCCESS in 46m 51s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/37d355012c474cae868142e27bb08ce6 : SUCCESS in 10m 42s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/ec9536632a064e5fa8522876ed6f7548 : SUCCESS in 11m 06s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/909dffe002764315acc78063e653f2fb : SUCCESS in 10m 21s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/5bfcec6c52c847b9a26702f86e58b39f : SUCCESS in 12m 45s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/d9ffaa97daba4241a245fe8c926d8723 : SUCCESS in 9m 14s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/c5e039fc13514ec2895cf49aa6e7ea3c : SUCCESS in 10m 30s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/aac9d5fbb2774cd5b4c71cfce7dd2a01 : SUCCESS in 10m 02s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/8d47f551265844d59a224232ee9661f3 : SUCCESS in 9m 40s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/ba0dfdced3b64d989b3c3c2f22d12fcc : SUCCESS in 13m 40s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/8b13a0d8da354894b626d00848551a33 : SUCCESS in 11m 48s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/da3199364cba412298caa7be35bd9e1b : SUCCESS in 9m 20s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/ae3408d786a94b97ab26e8fbbcd48495 : SUCCESS in 10m 55s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/058cc941e8814ca1bd82f0ebca96cf0c : SUCCESS in 9m 41s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/fa535a213b9c418c908adc766517fd7e : FAILURE in 11m 03s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/2b0cf490458c44cdbf42a2e90cc6d18d : SUCCESS in 14m 15s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/82b68a494a814205a953a467f8808a11 : SUCCESS in 28m 54s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/5f624668611a4c9eaebae06aac3980d4 : SUCCESS in 31m 16s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/674b4cf3b2fc46b88b6a3efe59c63f01 : SUCCESS in 29m 45s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/5e5dfb1ae4cf410884c3c0304c28db16 : SUCCESS in 30m 12s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/35a0cc8bd4be489e986104494d8208b5 : SUCCESS in 12m 13s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/7e0d8a923bc0498ca48176c3ba9ef4eb : SUCCESS in 5m 34s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/95f58f4504d54d4dbd42b5c90d0957fc : SUCCESS in 22m 11s","accounts_in_message":[],"_revision_number":14},{"id":"0a5ed28c8e8b51bb953de422c39c359b5767ecaf","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-08-16 15:17:59.000000000","message":"Uploaded patch set 15.","accounts_in_message":[],"_revision_number":15},{"id":"2acb59346dc5bcf0f0ae9a2a9a627274249b341a","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-16 16:24:53.000000000","message":"Patch Set 15: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c573a417f8b145eaa6e94b22b4b7c58e : SUCCESS in 7m 00s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/ba4f5db8f384487aafca7e1cf3ab6245 : SUCCESS in 1h 01m 08s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/4504c74b0c674b0c849f7714944d3353 : SUCCESS in 58m 50s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/14fbec46eb664f3d9c702b9bfc505ddc : SUCCESS in 8m 22s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/08c361dae07a4891b4b87731b831291b : SUCCESS in 11m 17s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/9800fd92805e40b0a752eab72643738e : SUCCESS in 11m 14s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/3ab0c72784f144f2be4f19ea3df8fc4c : SUCCESS in 11m 34s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/aa6184b24424466499b5d5adcb4b8245 : SUCCESS in 8m 48s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/0bdd17402fe64c659cdbf002649ff19a : SUCCESS in 11m 12s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/a15e8fcc035340729e0fc9f5b6e26516 : SUCCESS in 9m 04s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/91c885099aac4e89a2ee45fa44976eff : SUCCESS in 10m 30s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/26b1fb1a972f427e9dea1cf30f1909da : SUCCESS in 14m 07s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/9e17e4d9373f4d6e97238ae2332b028c : SUCCESS in 11m 30s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/2ba5288d9e37417ea7799e26959cb5c8 : SUCCESS in 10m 34s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/1e4e467337e249b2a3d25194f4f7f1c0 : SUCCESS in 9m 37s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/bc77dc4b2621476faddeb4a6471561b4 : SUCCESS in 9m 28s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/21feec0ff5ae43dc9a96d2c1f8101a4f : SUCCESS in 11m 36s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/48da26ae37e84d59be2debbad38831c6 : SUCCESS in 13m 56s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/86c4407d03f64b78923dcf1058e4c51a : SUCCESS in 31m 05s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/bdb044420ca24aad8fd5e2fc739073ad : SUCCESS in 33m 59s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/b0b32447307846cebbdff51051786fec : SUCCESS in 29m 17s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/4f66b439c2c04662b45de93affefb89e : SUCCESS in 29m 51s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/86132554236f414b8b28518bf9452185 : SUCCESS in 11m 42s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/acca0bf3d6664021893496f97cefcf01 : SUCCESS in 7m 30s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/3c230bdf9a114d16a1718b4b5e745f00 : SUCCESS in 21m 31s","accounts_in_message":[],"_revision_number":15},{"id":"18c55b0494abb3e400e0ba310e03f2bbe3d30739","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-21 15:28:07.000000000","message":"Patch Set 15:\n\n(12 comments)\n\nfirst pass, still making my way through tests, overall looks good, thanks for working on this!","accounts_in_message":[],"_revision_number":15},{"id":"dff752d6c2da2cc4a53a8b6b9963bb008c9fa168","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-21 17:54:20.000000000","message":"Uploaded patch set 16: Patch Set 15 was rebased.","accounts_in_message":[],"_revision_number":16},{"id":"4a3cf6538bc9540d83c8de981d7b13caabdaca9c","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-21 19:00:58.000000000","message":"Patch Set 16: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/28b435fb541544a887ef031d4ac272ea : SUCCESS in 5m 36s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/faf53420166049ccb7d504c36a9cb889 : SUCCESS in 1h 01m 57s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/76f2b6a88a2c4a4788f23792d2b51e58 : SUCCESS in 52m 42s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/c166df6a0f8740e0bb33db3a97e88410 : SUCCESS in 9m 24s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/6293ae56755f487b908a1b77d9208f88 : SUCCESS in 15m 27s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/38603332b8ce40489c1dba023b638a5c : SUCCESS in 13m 55s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/f67d7c15015f477398ce702debe28e02 : SUCCESS in 18m 44s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/a30c7b8109d64959995e02f65fc238a8 : SUCCESS in 9m 48s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/07d73ad34b0c4da9a38e98c5735e85d1 : SUCCESS in 12m 54s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/a8791a265f3b489592eb37e8cee43f20 : SUCCESS in 10m 49s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/98502ec83320464f98d0af99debbf3ae : SUCCESS in 12m 15s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/53eb7020f434426f89de91005b73df4b : SUCCESS in 16m 56s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/26400ef1688e4bfbbd4958d2710d071e : SUCCESS in 13m 57s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/d23aa37920d643a7a8c2432b0af0ee40 : SUCCESS in 12m 27s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/339796021fff4183a80146f9eacf4b38 : SUCCESS in 12m 29s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/3ec2444c45be480cabda517480d55e82 : SUCCESS in 13m 33s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/94d828374e90405798dd2d39990b7610 : SUCCESS in 14m 22s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/11000637a0314d71865c20f343f738a5 : SUCCESS in 14m 14s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/986dc6a79ccb4083bcfa026ee8cab898 : SUCCESS in 35m 08s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/1892d1fda503486689c2656ca084b0b9 : SUCCESS in 27m 48s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/bbef5a8654724dd5a12a336bb06bf3cb : SUCCESS in 32m 45s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/9e17e8b3ae6243d09e41f73a3c87efe3 : SUCCESS in 28m 08s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/9bfaaf761b164faa8cf75dab29c9a84a : SUCCESS in 14m 33s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9acb76bfdf274d8ca82382b7a38758b4 : SUCCESS in 6m 03s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/404263ffe47649b68111e1e509e5ad08 : SUCCESS in 21m 57s","accounts_in_message":[],"_revision_number":16},{"id":"cdd9e9260f8230a2d1616eeb8d54207fb1f154fa","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-21 20:45:52.000000000","message":"Patch Set 16:\n\n(15 comments)\n\nMostly looked at func tests changes so far, but it\u0027s looking good! I pushed up https://review.opendev.org/#/c/677824/ as a follow-up that you could squash in if you like.\n\nOne thing I noticed: 14 tests won\u0027t pass with symloop_max \u003d 1; they all error out with 409s. They still pass with use_symlinks \u003d false, though; maybe something is up with SYMLOOP_EXTEND?","accounts_in_message":[],"_revision_number":16},{"id":"5667900c9b17727b63fc4c04cdb7b35fe4e2c9c6","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-22 12:11:57.000000000","message":"Uploaded patch set 17.","accounts_in_message":[],"_revision_number":17},{"id":"7dd41bf9853425e6fef14d9bdd5be5d5484144f3","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-22 12:12:29.000000000","message":"Patch Set 17:\n\n(11 comments)\n\napplied some of the suggested changes.","accounts_in_message":[],"_revision_number":17},{"id":"c44515433c2a779375a6483f8ede998edb52f356","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-22 12:59:25.000000000","message":"Uploaded patch set 18.","accounts_in_message":[],"_revision_number":18},{"id":"dc6fe62284286a4cf9667ad577d8ef2ae6b8546b","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-22 14:45:45.000000000","message":"Patch Set 18: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4adb009c866249f68356b823e45c8bca : SUCCESS in 6m 58s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/41d0e90093e444f9829f80130b3e3935 : SUCCESS in 1h 00m 18s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/3c1dfdcfc8534cc185bd69478e7b8fb8 : SUCCESS in 57m 21s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/81e7358342544e0d968b0b5bd4a9f98c : SUCCESS in 9m 57s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/ff0058863b244064b958550fccc9d0c1 : SUCCESS in 12m 32s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/f7eac090fb0a4f5cac76df80308fc811 : SUCCESS in 10m 04s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/82b25fe4674b455eb05eab62370df176 : SUCCESS in 13m 43s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/c9b045b8b4f846e09119505b680aa942 : SUCCESS in 11m 49s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/9be29b3efae742a2a1d36a147c0e3bc6 : SUCCESS in 12m 04s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/4baacb9fbf314926947cae00e32657cc : SUCCESS in 12m 55s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/98a779c2e0ce462aa232d719fba9b420 : SUCCESS in 11m 31s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/6a337fa19c4b4a20b7420c3b85f1a8c9 : SUCCESS in 14m 23s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/ef9e852295784162b6094ca9fbfd6a8f : SUCCESS in 10m 31s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/b725f62854ab45e79dea8e9f2929e6fa : SUCCESS in 10m 18s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/d722fad18997430d962984f12a90ca35 : SUCCESS in 13m 08s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/93b564b8105d4d459381ee269cef44c1 : SUCCESS in 13m 12s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/5f2a9e5aa7ed4cdb870c30bc5dc0e6b8 : SUCCESS in 15m 09s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/0d29e0b0d1fb4fa182c9aa4aa9c81207 : SUCCESS in 15m 15s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/c0d4c0420a6141f6bf422692d629c1f0 : SUCCESS in 30m 53s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/1047618a0393496fb837962a3e135230 : SUCCESS in 34m 08s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/0707552f9c6b41a99a6b49e4d88ea643 : SUCCESS in 32m 14s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/a89f174da90244efb3d1a9772f01629a : SUCCESS in 32m 13s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/0f1dc16fe3984c7fb440c84015f45ef6 : SUCCESS in 13m 11s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a22653e2025349b0a088a7ea4fb5f202 : FAILURE in 6m 14s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/29db268a213b4947a200cdb6f567648b : SUCCESS in 22m 06s","accounts_in_message":[],"_revision_number":18},{"id":"571fcc99eda5828d26575fba392cacf1fb36fc6d","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-22 18:21:07.000000000","message":"Patch Set 18:\n\n(35 comments)\n\nI need to walk through that pop() code more...","accounts_in_message":[],"_revision_number":18},{"id":"2ec059fd81f2fc3e63a390c82e856905bbd284d6","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-22 22:44:21.000000000","message":"Patch Set 18:\n\n(7 comments)","accounts_in_message":[],"_revision_number":18},{"id":"30b5b00065da6106bc49416f6a7f5f21cfc442d0","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-23 23:19:19.000000000","message":"Patch Set 18:\n\n(2 comments)","accounts_in_message":[],"_revision_number":18},{"id":"c8a9dcdf436711fcf4833a259800a2b5f6a9656a","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-26 18:45:08.000000000","message":"Uploaded patch set 19.","accounts_in_message":[],"_revision_number":19},{"id":"dd73c8a44268244991b7a3212c73bf1b6c28a782","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-26 18:45:09.000000000","message":"Patch Set 18:\n\n(12 comments)","accounts_in_message":[],"_revision_number":18},{"id":"4e822cc1dab1d7c7cd7652241a136c1118ed8306","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-26 19:50:04.000000000","message":"Patch Set 19: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6dad98876b784198b61743b7c582eccd : SUCCESS in 6m 18s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/5dc8c3878b3140089f980a9738da374a : SUCCESS in 1h 02m 43s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/7538565776a44964a49f2c90616af98a : SUCCESS in 58m 37s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/5ea54ad9ee30476292af4dadf411eb57 : SUCCESS in 10m 03s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/8a662aa717284501ac946c968812cac5 : SUCCESS in 18m 02s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/3056191ceb484b649505b686ab1b006a : SUCCESS in 12m 01s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/336fe414319a4daabab63e3c7c274283 : SUCCESS in 17m 07s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/f94b6a8f71e54f409f471a18393bbc38 : SUCCESS in 10m 40s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/82185df2daa245268eee8e97a1b88d24 : SUCCESS in 17m 56s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/7c56d13976554031a9c91a929c55963c : SUCCESS in 11m 14s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/03f581acd82d46d782feacda8adbb6bc : SUCCESS in 18m 32s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/8a1d7a50ffcf45d183ae873b281d805a : SUCCESS in 16m 30s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/27695d839d8c4ce8b32ae3bf3742a133 : SUCCESS in 19m 53s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/21e45c1c20454b60897cbdbb63955dc1 : SUCCESS in 13m 47s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/bd521e99e7b54378a5630230f8b1ae7a : SUCCESS in 13m 49s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/9b40ab9bd49842a1a2dd92c3e27e309a : SUCCESS in 12m 54s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/cf102b68210e449fb6a5ad1f7af5a6b9 : SUCCESS in 21m 46s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/5cb0c535d5264298a7ebc9be56d500fc : SUCCESS in 17m 55s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/d9919cdfb0b0427d900663b930bdcd75 : FAILURE in 29m 28s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/296ebd142c524644b4956915f178b914 : SUCCESS in 30m 36s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/f7e0d1898cb244348780ab61e4ee7c82 : SUCCESS in 35m 39s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/383fabbfe3754624a33839800a71ead3 : SUCCESS in 31m 31s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/7d0bd2bbee6b4db4bf09cf29057df9fd : SUCCESS in 19m 57s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/09c0ce7ed82844e5a1cae4430274f397 : SUCCESS in 7m 49s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/d123c5ca7a0b43468067b8b536dac4aa : SUCCESS in 29m 01s","accounts_in_message":[],"_revision_number":19},{"id":"5b5100869d4d1f0b13a2fc35ea54118844a79d65","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-08-26 21:16:59.000000000","message":"Patch Set 19:\n\n(1 comment)","accounts_in_message":[],"_revision_number":19},{"id":"e0ed1637ce1d533803b9d895befaa871ce10f1ec","author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"date":"2019-08-27 10:19:28.000000000","message":"Patch Set 17:\n\n(1 comment)","accounts_in_message":[],"_revision_number":17},{"id":"afa9f97e983e9fd2e234949a8a30bcf89ef93d3f","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2019-08-27 17:00:02.000000000","message":"Patch Set 19: Code-Review-2 Workflow-1\n\nw/o a more invasive change to the naming scheme of versioned writes we may not be able to make this do everything we want it to do for us","accounts_in_message":[],"_revision_number":19},{"id":"3e4be117b7a3a9eb77f4f21734c5ca5d6f70dfbb","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2019-09-11 05:09:43.000000000","message":"Uploaded patch set 20.","accounts_in_message":[],"_revision_number":20},{"id":"cd6fb0b4ddedc4ebe0bb89f1d07da1ae0e7d09f5","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-09-11 06:22:08.000000000","message":"Patch Set 20: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2ea72af3a5294dbfb616e887c4ca33e0 : SUCCESS in 4m 47s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/f8ae3ba59c414366bf2b11247c4d9550 : FAILURE in 1h 11m 15s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/0cbe4bfc30984fe38c735d02c5f4c270 : SUCCESS in 1h 07m 02s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/85a9543027a8432a90f778a2d46b14dc : SUCCESS in 8m 05s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/c28468650f7f4647a8a50d8f0027f81e : SUCCESS in 23m 27s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/a3fc10c3f4d9486a9194101c37123e53 : SUCCESS in 13m 15s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/680e1212ec2b47ceb34397e3a65e343a : SUCCESS in 22m 11s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/9f63241f339a459fa2200f79b8c45f82 : SUCCESS in 9m 28s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/283200e270aa4bcaaabfd5f7f4ee9c7f : SUCCESS in 18m 36s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/9a60c467cd4d4241975ec6d3580603ba : SUCCESS in 9m 19s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/c59d48d71efc46d399cb18fd292a81bb : SUCCESS in 21m 49s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/6a7b6fa8ebe34f10a551e3bb85222435 : SUCCESS in 14m 34s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/cf9fcef379004843860e7fe31cbb446b : SUCCESS in 8m 45s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/fae1cde4626b49989246f65eb402e6cc : SUCCESS in 9m 16s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/174776ba9321417faf4e183f687c07b3 : SUCCESS in 10m 46s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/e394de2487d84ad0a9e094e0467cb886 : SUCCESS in 15m 08s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/8ead74601ea54bbe9d509905c8953088 : SUCCESS in 15m 11s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/1d83542f27114985925132e66ff50f07 : TIMED_OUT in 31m 08s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/b5e1e2446a9e4f4ebb9589a8d3e5a797 : SUCCESS in 33m 45s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/9995be1895dd4e1bbe889d02dda65284 : SUCCESS in 36m 55s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/4a15bebb74fd43298c73084f3ac394c0 : SUCCESS in 32m 36s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/e76069ba6a36452086624b42beff22b9 : SUCCESS in 29m 29s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/eb5af23cc8dd4ea8a61a292259bcbb05 : SUCCESS in 14m 55s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a9bb07c17a464e6685bea5105f5ee6ee : SUCCESS in 7m 21s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/749513bc4593421bbb5a01b4d1e89f46 : SUCCESS in 17m 12s","accounts_in_message":[],"_revision_number":20},{"id":"a7647fe8689d0e05da3f08a588686752999714a8","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2020-01-16 20:44:19.000000000","message":"Abandoned\n\nAbandoned in favor of https://review.opendev.org/#/c/682382/","accounts_in_message":[],"_revision_number":20}],"current_revision_number":20,"current_revision":"c5cab23ee349d6214b83d5b0c726c1fc4359aed8","revisions":{"ae7138acecf3a22e0373a6806a8519bd4bf85a56":{"kind":"REWORK","_number":1,"created":"2019-01-30 01:55:58.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/1"}}},"commit":{"parents":[{"commit":"c831e51342870b3b884edc7765e858b4dee12844","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c831e51342870b3b884edc7765e858b4dee12844"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"subject":"WIP: symlink-backed versioned_writes","message":"WIP: symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n- cause the proxy to resolve the symlink on ?symlink\u003dget GETs\n\nWIP because:\n- need to fix delete_pop behavior\n- follow 307s on POST\n- look for symlink\u003dget on GET and manually follow\n- verify SLO/DLO/COPY behavior\n- add more checks that container listings look like they should be parse-able\n- fix up all the many, many tests I broke\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ae7138acecf3a22e0373a6806a8519bd4bf85a56"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ae7138acecf3a22e0373a6806a8519bd4bf85a56"}]},"branch":"refs/heads/master"},"7078a89e7d694ecfa9afa70b3ce54c3a9093131f":{"kind":"REWORK","_number":2,"created":"2019-07-12 17:11:08.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/2"}}},"commit":{"parents":[{"commit":"50ab20d8f7b91f7f2ddf722ddae4a3ffe51e475f","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/50ab20d8f7b91f7f2ddf722ddae4a3ffe51e475f"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-12 17:10:34.000000000","tz":-300},"subject":"WIP: symlink-backed versioned_writes","message":"WIP: symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n- cause the proxy to resolve the symlink on ?symlink\u003dget GETs\n\nWIP because:\n- need to fix delete_pop behavior\n- follow 307s on POST\n- look for symlink\u003dget on GET and manually follow\n- verify SLO/DLO/COPY behavior\n- add more checks that container listings look like they should be parse-able\n- fix up all the many, many tests I broke\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7078a89e7d694ecfa9afa70b3ce54c3a9093131f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7078a89e7d694ecfa9afa70b3ce54c3a9093131f"}]},"branch":"refs/heads/master"},"54ef2aead698a88b87640aa49cb80c0b858668f0":{"kind":"REWORK","_number":3,"created":"2019-07-15 20:53:06.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/3"}}},"commit":{"parents":[{"commit":"5311ab490d04ae24d2899f94be28dc77df1561a0","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5311ab490d04ae24d2899f94be28dc77df1561a0"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-15 20:48:37.000000000","tz":-300},"subject":"WIP: symlink-backed versioned_writes","message":"WIP: symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n- cause the proxy to resolve the symlink on ?symlink\u003dget GETs\n\nWIP because:\n- need to fix delete_pop behavior\n- follow 307s on POST\n- look for symlink\u003dget on GET and manually follow\n- verify SLO/DLO/COPY behavior\n- add more checks that container listings look like they should be parse-able\n- fix up all the many, many tests I broke\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/54ef2aead698a88b87640aa49cb80c0b858668f0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/54ef2aead698a88b87640aa49cb80c0b858668f0"}]},"branch":"refs/heads/master"},"6a7c667304920fae07d4161e6430f4f641bc54b0":{"kind":"REWORK","_number":4,"created":"2019-07-17 22:38:00.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/4"}}},"commit":{"parents":[{"commit":"5311ab490d04ae24d2899f94be28dc77df1561a0","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5311ab490d04ae24d2899f94be28dc77df1561a0"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-17 22:36:57.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6a7c667304920fae07d4161e6430f4f641bc54b0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6a7c667304920fae07d4161e6430f4f641bc54b0"}]},"branch":"refs/heads/master"},"29ee9f17a2539fc681353cbeee8532e0cefbef98":{"kind":"REWORK","_number":5,"created":"2019-07-18 21:37:33.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/5"}}},"commit":{"parents":[{"commit":"5311ab490d04ae24d2899f94be28dc77df1561a0","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5311ab490d04ae24d2899f94be28dc77df1561a0"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-18 21:37:13.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/29ee9f17a2539fc681353cbeee8532e0cefbef98"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/29ee9f17a2539fc681353cbeee8532e0cefbef98"}]},"branch":"refs/heads/master"},"8f43dfd4f8e0b5b11740e75955deff478e89c409":{"kind":"REWORK","_number":6,"created":"2019-07-19 15:49:38.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/6"}}},"commit":{"parents":[{"commit":"5311ab490d04ae24d2899f94be28dc77df1561a0","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5311ab490d04ae24d2899f94be28dc77df1561a0"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-19 14:50:16.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8f43dfd4f8e0b5b11740e75955deff478e89c409"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8f43dfd4f8e0b5b11740e75955deff478e89c409"}]},"branch":"refs/heads/master"},"3db064a1df3d8f3ec64b1deaecd286c884d5e92c":{"kind":"REWORK","_number":7,"created":"2019-07-24 18:03:45.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/7"}}},"commit":{"parents":[{"commit":"dfa8baad96c6668751eef7c264edea6ca0ce5a90","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/dfa8baad96c6668751eef7c264edea6ca0ce5a90"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-24 18:03:21.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3db064a1df3d8f3ec64b1deaecd286c884d5e92c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3db064a1df3d8f3ec64b1deaecd286c884d5e92c"}]},"branch":"refs/heads/master"},"10d64be4f9f63fa8af122aae2d9fee76027587f5":{"kind":"REWORK","_number":8,"created":"2019-07-25 20:23:02.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/8","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/8","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/8"}}},"commit":{"parents":[{"commit":"a0c5197a26008069e210e5a02e071986e3aa4676","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a0c5197a26008069e210e5a02e071986e3aa4676"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-25 20:15:29.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/10d64be4f9f63fa8af122aae2d9fee76027587f5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/10d64be4f9f63fa8af122aae2d9fee76027587f5"}]},"branch":"refs/heads/master"},"009ebede372747410b242e46c70d2ce431f9ad46":{"kind":"REWORK","_number":9,"created":"2019-07-26 19:47:23.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/9","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/9","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/9"}}},"commit":{"parents":[{"commit":"a0c5197a26008069e210e5a02e071986e3aa4676","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a0c5197a26008069e210e5a02e071986e3aa4676"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-07-26 19:47:06.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/009ebede372747410b242e46c70d2ce431f9ad46"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/009ebede372747410b242e46c70d2ce431f9ad46"}]},"branch":"refs/heads/master"},"3f59ad358bcadd886052acabc3d9d3e5ff0e68ac":{"kind":"REWORK","_number":10,"created":"2019-08-02 22:31:56.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/10","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/10","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/10"}}},"commit":{"parents":[{"commit":"dfbc0e8f781f9fd7cb9cfb1669826bc63225e4e7","subject":"Allow \"harder\" symlinks","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/dfbc0e8f781f9fd7cb9cfb1669826bc63225e4e7"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-08-02 22:31:37.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3f59ad358bcadd886052acabc3d9d3e5ff0e68ac"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/3f59ad358bcadd886052acabc3d9d3e5ff0e68ac"}]},"branch":"refs/heads/master"},"05709816b1ac9a84de70e1fa20f2f631dc65a49b":{"kind":"REWORK","_number":11,"created":"2019-08-15 20:13:19.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/11","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/11","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/11"}}},"commit":{"parents":[{"commit":"a7857ab076671a1ef1e91fc3ec3af2ac7f845396","subject":"Allow \"static symlinks\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a7857ab076671a1ef1e91fc3ec3af2ac7f845396"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-08-15 19:53:20.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/05709816b1ac9a84de70e1fa20f2f631dc65a49b"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/05709816b1ac9a84de70e1fa20f2f631dc65a49b"}]},"branch":"refs/heads/master"},"333af4966beb7ed130099404776d75a397319401":{"kind":"REWORK","_number":12,"created":"2019-08-15 20:23:04.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/12","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/12","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/12"}}},"commit":{"parents":[{"commit":"2c685a144fadcb1971aac1a90a943b6dc78458e1","subject":"Allow \"static symlinks\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2c685a144fadcb1971aac1a90a943b6dc78458e1"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-08-15 20:22:36.000000000","tz":-420},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/333af4966beb7ed130099404776d75a397319401"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/333af4966beb7ed130099404776d75a397319401"}]},"branch":"refs/heads/master"},"26df5832d60feefa53525bd44ee6ee41ae56ec3d":{"kind":"REWORK","_number":13,"created":"2019-08-15 21:29:59.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/13","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/13","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/13"}}},"commit":{"parents":[{"commit":"2c685a144fadcb1971aac1a90a943b6dc78458e1","subject":"Allow \"static symlinks\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2c685a144fadcb1971aac1a90a943b6dc78458e1"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-08-15 21:29:53.000000000","tz":-420},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/26df5832d60feefa53525bd44ee6ee41ae56ec3d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/26df5832d60feefa53525bd44ee6ee41ae56ec3d"}]},"branch":"refs/heads/master"},"1ee505184c3b61d54fcfa7c8f6a949b43af0ede6":{"kind":"REWORK","_number":14,"created":"2019-08-15 21:34:09.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/14","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/14","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/14"}}},"commit":{"parents":[{"commit":"2c685a144fadcb1971aac1a90a943b6dc78458e1","subject":"Allow \"static symlinks\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2c685a144fadcb1971aac1a90a943b6dc78458e1"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-08-15 21:33:52.000000000","tz":-420},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/1ee505184c3b61d54fcfa7c8f6a949b43af0ede6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/1ee505184c3b61d54fcfa7c8f6a949b43af0ede6"}]},"branch":"refs/heads/master"},"b2a7005bc7d9ba0610957e73e3f507731b146d2a":{"kind":"REWORK","_number":15,"created":"2019-08-16 15:17:59.000000000","uploader":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"ref":"refs/changes/57/633857/15","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/15","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/15 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/15 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/15 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/15"}}},"commit":{"parents":[{"commit":"2c685a144fadcb1971aac1a90a943b6dc78458e1","subject":"Allow \"static symlinks\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2c685a144fadcb1971aac1a90a943b6dc78458e1"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","date":"2019-08-16 15:17:33.000000000","tz":-300},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b2a7005bc7d9ba0610957e73e3f507731b146d2a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b2a7005bc7d9ba0610957e73e3f507731b146d2a"}]},"branch":"refs/heads/master"},"cbc9e052491a9dc36f6920489d6bb395d23d5533":{"kind":"TRIVIAL_REBASE","_number":16,"created":"2019-08-21 17:54:20.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/16","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/16","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/16 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/16 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/16 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/16"}}},"commit":{"parents":[{"commit":"f70520239c7fa2d22e4b9ee604bfaf7123b39095","subject":"Merge \"Fix symlink docstring\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f70520239c7fa2d22e4b9ee604bfaf7123b39095"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-08-21 17:27:09.000000000","tz":-420},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/cbc9e052491a9dc36f6920489d6bb395d23d5533"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/cbc9e052491a9dc36f6920489d6bb395d23d5533"}]},"branch":"refs/heads/master"},"0141140aa6a4301a04cb4b292179f985bf7d82fe":{"kind":"REWORK","_number":17,"created":"2019-08-22 12:11:57.000000000","uploader":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"ref":"refs/changes/57/633857/17","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/17","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/17 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/17 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/17 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/17"}}},"commit":{"parents":[{"commit":"f70520239c7fa2d22e4b9ee604bfaf7123b39095","subject":"Merge \"Fix symlink docstring\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f70520239c7fa2d22e4b9ee604bfaf7123b39095"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","date":"2019-08-22 12:11:39.000000000","tz":120},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0141140aa6a4301a04cb4b292179f985bf7d82fe"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0141140aa6a4301a04cb4b292179f985bf7d82fe"}]},"branch":"refs/heads/master"},"6081dca15047588197288dae5dceaf2d77113000":{"kind":"REWORK","_number":18,"created":"2019-08-22 12:59:25.000000000","uploader":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"ref":"refs/changes/57/633857/18","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/18","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/18 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/18 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/18 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/18"}}},"commit":{"parents":[{"commit":"f70520239c7fa2d22e4b9ee604bfaf7123b39095","subject":"Merge \"Fix symlink docstring\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f70520239c7fa2d22e4b9ee604bfaf7123b39095"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","date":"2019-08-22 12:59:14.000000000","tz":120},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6081dca15047588197288dae5dceaf2d77113000"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6081dca15047588197288dae5dceaf2d77113000"}]},"branch":"refs/heads/master"},"77ebb1754dbb521fc2b7cfe024d30c909090c8ac":{"kind":"REWORK","_number":19,"created":"2019-08-26 18:45:08.000000000","uploader":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"ref":"refs/changes/57/633857/19","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/19","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/19 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/19 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/19 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/19"}}},"commit":{"parents":[{"commit":"f70520239c7fa2d22e4b9ee604bfaf7123b39095","subject":"Merge \"Fix symlink docstring\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f70520239c7fa2d22e4b9ee604bfaf7123b39095"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","date":"2019-08-26 18:44:30.000000000","tz":120},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/77ebb1754dbb521fc2b7cfe024d30c909090c8ac"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/77ebb1754dbb521fc2b7cfe024d30c909090c8ac"}]},"branch":"refs/heads/master"},"c5cab23ee349d6214b83d5b0c726c1fc4359aed8":{"kind":"REWORK","_number":20,"created":"2019-09-11 05:09:43.000000000","uploader":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"ref":"refs/changes/57/633857/20","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/57/633857/20","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/20 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/20 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/57/633857/20 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/57/633857/20"}}},"commit":{"parents":[{"commit":"f4df7c31dfe6d9ad953c2cea586a7d83711959e6","subject":"Merge \"diskfile: Add some argument validation\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f4df7c31dfe6d9ad953c2cea586a7d83711959e6"}]}],"author":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-01-30 01:17:40.000000000","tz":-480},"committer":{"name":"Tim Burke","email":"tim.burke@gmail.com","date":"2019-09-11 03:33:24.000000000","tz":-420},"subject":"symlink-backed versioned_writes","message":"symlink-backed versioned_writes\n\nPreviously, versioned_writes worked by copying data between the primary\nand archive containers, resulting in a lot of data movement even when no\ndata should actually be deleted or otherwise lost.\n\nFurther, this could lead to data loss: if two PUTs for the same name\narrive at approximately the same time, you could see\n\n- PUT at t101 archives the current object from t1\n- PUT at t102 archives the current object *which is still from t1*\n- Either:\n    - PUT at t101 completes\n    - PUT at t102 completes, and data from t101 *is lost*\n  -- or --\n    - PUT at t102 completes\n    - PUT at t101 completes, and data from t102 is lost\n\nBy using symlinks, we can direct client PUTs to directly their archive\nlocation. This has several benefits:\n\n- Less data movement. A new PUT or DELETE no longer requires that we\n  move as much as an extra 5GiB of data.\n- Fewer race conditions. In the above scenario, all three of t1, t101,\n  and t102 are saved to the archive container. There is still a race to\n  determine which of t101 or t102 is \"current\", but no data is lost.\n- Simplified notion of whether data is \"protected\". Now, any data PUT\n  while versioning is enabled will be saved by default.\n\nNote that we want to preserve some existing behaviors:\n\n- Listing the primary container should still give the \"current\" etag and\n  size for objects within it. (Though, to avoid double counting, the\n  X-Container-Bytes-Used should reflect the size of the symlink.)\n- User-created symlinks should still be versioned as normal (and as\n  already tested via functional tests).\n\nTo satisfy these, introduce the idea of a \"versioning symlink\" -- when\nencountered in a container with versioning enabled, it will\n\n- be ignored when archiving old versions\n- carry enough information to fix container listings\n- cause the proxy to follow 307s on POSTs\n\nThe use_symlinks option in [versioned_writes] must be enabled to take\nadvantage of these implementation improvements.\n\nCo-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e\nCloses-Bug: #1840322\nChange-Id: I39acade850beb28dcb8a46e1e2c72dd9a428e269\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c5cab23ee349d6214b83d5b0c726c1fc4359aed8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c5cab23ee349d6214b83d5b0c726c1fc4359aed8"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
