)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e591d13708dc5ce252057442b163cbeeca7eb3b0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8719be53_1fdfad1a","updated":"2023-02-09 21:00:52.000000000","message":"what happens if you have --use-dlo and --use-slo?","commit_id":"063900a980784dc58392a630d36a5f265a117acf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f347c3d3192e4fe2ad705908a346780f1a81746","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"27d334d8_9e2f44a5","updated":"2023-03-22 16:04:58.000000000","message":"There\u0027s at least one bit of follow-up I should probably do. IDK what to make of the comments around tests -- if you\u0027ve got better ideas for them, I\u0027d probably +2/+A an improvement.","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ea0b65e4_245f2750","updated":"2023-03-22 14:23:12.000000000","message":"this works great!\n\nvagrant@saio:~$ swift upload --help\nUsage: swift upload [--changed] [--skip-identical] [--segment-size \u003csize\u003e]\n                    [--segment-container \u003ccontainer\u003e] [--leave-segments]\n                    [--object-threads \u003cthread\u003e] [--segment-threads \u003cthreads\u003e]\n                    [--meta \u003cname:value\u003e] [--header \u003cheader\u003e] [--use-slo]\n                    [--use-dlo] [--ignore-checksum] [--skip-container-put]\n                    [--object-name \u003cobject-name\u003e]\n                    \u003ccontainer\u003e \u003cfile_or_directory\u003e [\u003cfile_or_directory\u003e] [...]\n\nUploads specified files and directories to the given container.\n\nPositional arguments:\n  \u003ccontainer\u003e           Name of container to upload to.\n  \u003cfile_or_directory\u003e   Name of file or directory to upload. Specify multiple\n                        times for multiple uploads. If \"-\" is specified, reads\n                        content from standard input (--object-name is required\n                        in this case).\n\nOptional arguments:\n  -c, --changed         Only upload files that have changed since the last\n                        upload.\n  --skip-identical      Skip uploading files that are identical on both sides.\n  -S, --segment-size \u003csize\u003e\n                        Upload files in segments no larger than \u003csize\u003e (in\n                        Bytes) and then create a \"manifest\" file that will\n                        download all the segments as if it were the original\n                        file.\n  --segment-container \u003ccontainer\u003e\n                        Upload the segments into the specified container. If\n                        not specified, the segments will be uploaded to a\n                        \u003ccontainer\u003e_segments container to not pollute the\n                        main \u003ccontainer\u003e listings.\n  --leave-segments      Indicates that you want the older segments of manifest\n                        objects left alone (in the case of overwrites).\n  --object-threads \u003cthreads\u003e\n                        Number of threads to use for uploading full objects.\n                        Default is 10.\n  --segment-threads \u003cthreads\u003e\n                        Number of threads to use for uploading object segments.\n                        Default is 10.\n  -m, --meta \u003cname:value\u003e\n                        Sets a meta data item. This option may be repeated.\n                        Example: -m Color:Blue -m Size:Large\n  -H, --header \u003cheader:value\u003e\n                        Adds a customized request header. This option may be\n                        repeated. Example: -H \"content-type:text/plain\"\n                         -H \"Content-Length: 4000\".\n  --use-slo             When used in conjunction with --segment-size it will\n                        create a Static Large Object. Deprecated; this is now\n                        the default behavior when the cluster supports it.\n  --use-dlo             When used in conjunction with --segment-size it will\n                        create a Dynamic Large Object. May be useful with old\n                        swift clusters.\n  --ignore-checksum     Turn off checksum validation for uploads.\n  --skip-container-put  Assume all necessary containers already exist; don\u0027t\n                        automatically try to create them.\n  --object-name \u003cobject-name\u003e\n                        Upload file and name object to \u003cobject-name\u003e or upload\n                        dir and use \u003cobject-name\u003e as object prefix instead of\n                        folder name.\nvagrant@saio:~$ ls\npython-swiftclient  swift  test\nvagrant@saio:~$ dd if\u003d/dev/zero of\u003dtest.big bs\u003d1 count\u003d20\n20+0 records in\n20+0 records out\n20 bytes copied, 0.0028593 s, 7.0 kB/s\nvagrant@saio:~$ dd if\u003d/dev/zero of\u003dtest.big bs\u003d1M count\u003d20\n20+0 records in\n20+0 records out\n20971520 bytes (21 MB, 20 MiB) copied, 0.0680073 s, 308 MB/s\nvagrant@saio:~$ swift upload test test.big --segment-size 1M --use-dlo\ntest.big segment 0\ntest.big segment 5\ntest.big segment 4\ntest.big segment 2\ntest.big segment 3\ntest.big segment 1\ntest.big segment 9\ntest.big segment 8\ntest.big segment 6\ntest.big segment 7\ntest.big segment 10\ntest.big segment 14\ntest.big segment 13\ntest.big segment 11\ntest.big segment 15\ntest.big segment 12\ntest.big segment 16\ntest.big segment 17\ntest.big segment 18\ntest.big segment 19\ntest.big\nvagrant@saio:~$ swift list test --json\n[\n  {\n    \"bytes\": 0,\n    \"content_type\": \"application/octet-stream\",\n    \"hash\": \"d41d8cd98f00b204e9800998ecf8427e\",\n    \"last_modified\": \"2023-03-22T14:19:26.543710\",\n    \"name\": \"test.big\"\n  }\n]\nvagrant@saio:~$ swift stat -v test test.big\n                   URL: http://saio:8080/v1/AUTH_test/test/test.big\n            Auth Token: AUTH_tkf90d7a3baaf241abbcf6fae6fe49bffd\n               Account: AUTH_test\n             Container: test\n                Object: test.big\n          Content Type: application/octet-stream\n        Content Length: 20971520\n         Last Modified: Wed, 22 Mar 2023 14:19:27 GMT\n                  ETag: \"17f6dfdf10fcc1b6cb17a22018d6ba77\"\n              Manifest: test_segments/test.big/1679494746.090127/20971520/1048576/\n            Meta Mtime: 1679494746.090127\n           X-Timestamp: 1679494766.54371\n         Accept-Ranges: bytes\n            X-Trans-Id: txa6a83b3360ad4bc0b3a80-00641b0e7f\nX-Openstack-Request-Id: txa6a83b3360ad4bc0b3a80-00641b0e7f\nvagrant@saio:~$ swift list test_segments\ntest.big/1679494746.090127/20971520/1048576/00000000\ntest.big/1679494746.090127/20971520/1048576/00000001\ntest.big/1679494746.090127/20971520/1048576/00000002\ntest.big/1679494746.090127/20971520/1048576/00000003\ntest.big/1679494746.090127/20971520/1048576/00000004\ntest.big/1679494746.090127/20971520/1048576/00000005\ntest.big/1679494746.090127/20971520/1048576/00000006\ntest.big/1679494746.090127/20971520/1048576/00000007\ntest.big/1679494746.090127/20971520/1048576/00000008\ntest.big/1679494746.090127/20971520/1048576/00000009\ntest.big/1679494746.090127/20971520/1048576/00000010\ntest.big/1679494746.090127/20971520/1048576/00000011\ntest.big/1679494746.090127/20971520/1048576/00000012\ntest.big/1679494746.090127/20971520/1048576/00000013\ntest.big/1679494746.090127/20971520/1048576/00000014\ntest.big/1679494746.090127/20971520/1048576/00000015\ntest.big/1679494746.090127/20971520/1048576/00000016\ntest.big/1679494746.090127/20971520/1048576/00000017\ntest.big/1679494746.090127/20971520/1048576/00000018\ntest.big/1679494746.090127/20971520/1048576/00000019\nvagrant@saio:~$ swift upload test test.big --segment-size 1M\ntest.big segment 0\ntest.big segment 1\ntest.big segment 2\ntest.big segment 3\ntest.big segment 4\ntest.big segment 7\ntest.big segment 9\ntest.big segment 5\ntest.big segment 8\ntest.big segment 6\ntest.big segment 10\ntest.big segment 11\ntest.big segment 13\ntest.big segment 12\ntest.big segment 14\ntest.big segment 19\ntest.big segment 18\ntest.big segment 15\ntest.big segment 17\ntest.big segment 16\ntest.big/1679494746.090127/20971520/1048576/00000004\ntest.big/1679494746.090127/20971520/1048576/00000003\ntest.big/1679494746.090127/20971520/1048576/00000002\ntest.big/1679494746.090127/20971520/1048576/00000009\ntest.big/1679494746.090127/20971520/1048576/00000000\ntest.big/1679494746.090127/20971520/1048576/00000001\ntest.big/1679494746.090127/20971520/1048576/00000005\ntest.big/1679494746.090127/20971520/1048576/00000007\ntest.big/1679494746.090127/20971520/1048576/00000008\ntest.big/1679494746.090127/20971520/1048576/00000006\ntest.big/1679494746.090127/20971520/1048576/00000011\ntest.big/1679494746.090127/20971520/1048576/00000010\ntest.big/1679494746.090127/20971520/1048576/00000012\ntest.big/1679494746.090127/20971520/1048576/00000015\ntest.big/1679494746.090127/20971520/1048576/00000016\ntest.big/1679494746.090127/20971520/1048576/00000014\ntest.big/1679494746.090127/20971520/1048576/00000018\ntest.big/1679494746.090127/20971520/1048576/00000013\ntest.big/1679494746.090127/20971520/1048576/00000019\ntest.big/1679494746.090127/20971520/1048576/00000017\ntest.big\nvagrant@saio:~$ swift stat -v test test.big\n                   URL: http://saio:8080/v1/AUTH_test/test/test.big\n            Auth Token: AUTH_tkf90d7a3baaf241abbcf6fae6fe49bffd\n               Account: AUTH_test\n             Container: test\n                Object: test.big\n          Content Type: application/octet-stream\n        Content Length: 20971520\n         Last Modified: Wed, 22 Mar 2023 14:20:24 GMT\n                  ETag: \"17f6dfdf10fcc1b6cb17a22018d6ba77\"\n            Meta Mtime: 1679494746.090127\n X-Static-Large-Object: True\n           X-Timestamp: 1679494823.47509\n         Accept-Ranges: bytes\n       X-Manifest-Etag: 5051ed6bd27ba5b8483e30c3dd34e242\n            X-Trans-Id: tx48b04e55d4194b58b59ad-00641b0ead\nX-Openstack-Request-Id: tx48b04e55d4194b58b59ad-00641b0ead\nvagrant@saio:~$ swift info --json | jq .slo\n{\n  \"allow_async_delete\": true,\n  \"max_manifest_segments\": 1000,\n  \"max_manifest_size\": 8388608,\n  \"min_segment_size\": 1,\n  \"yield_frequency\": 10\n}\n","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"}],"swiftclient/service.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":196,"context_line":"_default_local_options \u003d {"},{"line_number":197,"context_line":"    \u0027sync_to\u0027: None,"},{"line_number":198,"context_line":"    \u0027sync_key\u0027: None,"},{"line_number":199,"context_line":"    \u0027use_slo\u0027: True,"},{"line_number":200,"context_line":"    \u0027segment_size\u0027: None,"},{"line_number":201,"context_line":"    \u0027segment_container\u0027: None,"},{"line_number":202,"context_line":"    \u0027leave_segments\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"45346bc0_95b7eb09","line":199,"updated":"2022-11-14 22:20:56.000000000","message":"love it!  easy!","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":1501,"context_line":"                options[\u0027use_slo\u0027] \u003d False"},{"line_number":1502,"context_line":"            else:"},{"line_number":1503,"context_line":"                if not cap_result[\u0027success\u0027]:"},{"line_number":1504,"context_line":"                    options[\u0027use_slo\u0027] \u003d False"},{"line_number":1505,"context_line":"                else:"},{"line_number":1506,"context_line":"                    options[\u0027use_slo\u0027] \u003d \u0027slo\u0027 in cap_result[\u0027capabilities\u0027]"},{"line_number":1507,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"08c7bed4_1c5261e1","line":1504,"updated":"2023-03-22 14:23:12.000000000","message":"cap_results[\u0027success\u0027] \u003d\u003d False, but no ClientException?  Can we assume this means there\u0027s no slo available?","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f347c3d3192e4fe2ad705908a346780f1a81746","unresolved":true,"context_lines":[{"line_number":1501,"context_line":"                options[\u0027use_slo\u0027] \u003d False"},{"line_number":1502,"context_line":"            else:"},{"line_number":1503,"context_line":"                if not cap_result[\u0027success\u0027]:"},{"line_number":1504,"context_line":"                    options[\u0027use_slo\u0027] \u003d False"},{"line_number":1505,"context_line":"                else:"},{"line_number":1506,"context_line":"                    options[\u0027use_slo\u0027] \u003d \u0027slo\u0027 in cap_result[\u0027capabilities\u0027]"},{"line_number":1507,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"34f3c875_a859bee8","line":1504,"in_reply_to":"08c7bed4_1c5261e1","updated":"2023-03-22 16:04:58.000000000","message":"Seemed safest/most defensible to fall back to old behavior. Note that I don\u0027t think we can actually *hit* this code path, given how `SwiftService.get_capabilities()` never sets success to False.","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"}],"swiftclient/shell.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                    [--segment-container \u003ccontainer\u003e] [--leave-segments]"},{"line_number":980,"context_line":"                    [--object-threads \u003cthread\u003e] [--segment-threads \u003cthreads\u003e]"},{"line_number":981,"context_line":"                    [--meta \u003cname:value\u003e] [--header \u003cheader\u003e]"},{"line_number":982,"context_line":"                    [--use-slo] [--ignore-checksum] [--skip-container-put]"},{"line_number":983,"context_line":"                    [--object-name \u003cobject-name\u003e]"},{"line_number":984,"context_line":"                    \u003ccontainer\u003e \u003cfile_or_directory\u003e [\u003cfile_or_directory\u003e] [...]"},{"line_number":985,"context_line":"\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"d5f39511_b51df342","line":982,"updated":"2022-11-14 22:20:56.000000000","message":"maybe just sub --use-slo with --use-dlo (since --use-slo is default)","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"532bb1f307b9607eb5bb8441ee67f476dfe960b3","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                    [--segment-container \u003ccontainer\u003e] [--leave-segments]"},{"line_number":980,"context_line":"                    [--object-threads \u003cthread\u003e] [--segment-threads \u003cthreads\u003e]"},{"line_number":981,"context_line":"                    [--meta \u003cname:value\u003e] [--header \u003cheader\u003e]"},{"line_number":982,"context_line":"                    [--use-slo] [--ignore-checksum] [--skip-container-put]"},{"line_number":983,"context_line":"                    [--object-name \u003cobject-name\u003e]"},{"line_number":984,"context_line":"                    \u003ccontainer\u003e \u003cfile_or_directory\u003e [\u003cfile_or_directory\u003e] [...]"},{"line_number":985,"context_line":"\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"70fc3055_204b7928","line":982,"in_reply_to":"57406546_c552a10a","updated":"2023-03-21 19:46:58.000000000","message":"Probably want to list both since I\u0027ll change this so default behavior will check /info to see what\u0027s available.","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e591d13708dc5ce252057442b163cbeeca7eb3b0","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                    [--segment-container \u003ccontainer\u003e] [--leave-segments]"},{"line_number":980,"context_line":"                    [--object-threads \u003cthread\u003e] [--segment-threads \u003cthreads\u003e]"},{"line_number":981,"context_line":"                    [--meta \u003cname:value\u003e] [--header \u003cheader\u003e]"},{"line_number":982,"context_line":"                    [--use-slo] [--ignore-checksum] [--skip-container-put]"},{"line_number":983,"context_line":"                    [--object-name \u003cobject-name\u003e]"},{"line_number":984,"context_line":"                    \u003ccontainer\u003e \u003cfile_or_directory\u003e [\u003cfile_or_directory\u003e] [...]"},{"line_number":985,"context_line":"\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9b4a7c60_212f4d3d","line":982,"in_reply_to":"57406546_c552a10a","updated":"2023-02-09 21:00:52.000000000","message":"maybe better to have [--use-(slo|dlo)] or something","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e3ff8dd2288cf481ae289e1db1bb2c6fca83fb76","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                    [--segment-container \u003ccontainer\u003e] [--leave-segments]"},{"line_number":980,"context_line":"                    [--object-threads \u003cthread\u003e] [--segment-threads \u003cthreads\u003e]"},{"line_number":981,"context_line":"                    [--meta \u003cname:value\u003e] [--header \u003cheader\u003e]"},{"line_number":982,"context_line":"                    [--use-slo] [--ignore-checksum] [--skip-container-put]"},{"line_number":983,"context_line":"                    [--object-name \u003cobject-name\u003e]"},{"line_number":984,"context_line":"                    \u003ccontainer\u003e \u003cfile_or_directory\u003e [\u003cfile_or_directory\u003e] [...]"},{"line_number":985,"context_line":"\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"57406546_c552a10a","line":982,"in_reply_to":"d5f39511_b51df342","updated":"2022-11-17 21:31:27.000000000","message":"Agreed","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":1094,"context_line":"        help\u003d\u0027When used in conjunction with --segment-size, it will \u0027"},{"line_number":1095,"context_line":"        \u0027create a Static Large Object.\u0027)"},{"line_number":1096,"context_line":"    parser.add_argument("},{"line_number":1097,"context_line":"        \u0027--use-dlo\u0027, action\u003d\u0027store_false\u0027, dest\u003d\"use_slo\", default\u003dTrue,"},{"line_number":1098,"context_line":"        help\u003d\u0027When used in conjunction with --segment-size, it will \u0027"},{"line_number":1099,"context_line":"        \u0027create a Dynamic Large Object.\u0027)"},{"line_number":1100,"context_line":"    parser.add_argument("}],"source_content_type":"text/x-python","patch_set":1,"id":"638f1112_a392910f","line":1097,"updated":"2022-11-14 22:20:56.000000000","message":"love store_false with dest, nice!","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":1094,"context_line":"        help\u003d\u0027When used in conjunction with --segment-size, it will \u0027"},{"line_number":1095,"context_line":"        \u0027create a Static Large Object.\u0027)"},{"line_number":1096,"context_line":"    parser.add_argument("},{"line_number":1097,"context_line":"        \u0027--use-dlo\u0027, action\u003d\u0027store_false\u0027, dest\u003d\"use_slo\", default\u003dNone,"},{"line_number":1098,"context_line":"        help\u003d\u0027When used in conjunction with --segment-size, it will \u0027"},{"line_number":1099,"context_line":"        \u0027create a Dynamic Large Object.\u0027)"},{"line_number":1100,"context_line":"    parser.add_argument("}],"source_content_type":"text/x-python","patch_set":3,"id":"37316cb9_9543e8af","line":1097,"updated":"2023-03-22 14:23:12.000000000","message":"doh!  --use-dlo sets use_slo to False during parsing","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"    if from_stdin:"},{"line_number":1171,"context_line":"        if not options[\u0027use_slo\u0027]:"},{"line_number":1172,"context_line":"            options[\u0027use_slo\u0027] \u003d True"},{"line_number":1173,"context_line":"        if not options[\u0027segment_size\u0027]:"},{"line_number":1174,"context_line":"            options[\u0027segment_size\u0027] \u003d DEFAULT_STDIN_SEGMENT"},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1b4d8207_aa022291","line":1172,"updated":"2023-03-22 14:23:12.000000000","message":"so we use_slo explicitly when from_stdin","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f347c3d3192e4fe2ad705908a346780f1a81746","unresolved":true,"context_lines":[{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"    if from_stdin:"},{"line_number":1171,"context_line":"        if not options[\u0027use_slo\u0027]:"},{"line_number":1172,"context_line":"            options[\u0027use_slo\u0027] \u003d True"},{"line_number":1173,"context_line":"        if not options[\u0027segment_size\u0027]:"},{"line_number":1174,"context_line":"            options[\u0027segment_size\u0027] \u003d DEFAULT_STDIN_SEGMENT"},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"cba42df6_345cd2bc","line":1172,"in_reply_to":"1b4d8207_aa022291","updated":"2023-03-22 16:04:58.000000000","message":"Good catch! We should probably change that to\n\n if options[\u0027use_slo\u0027] is None:\n\nsince it\u0027s pretty weird to be able to say `swift upload c - --object-name o --use-dlo` and have it upload an SLO...\n\nBut yeah, we\u0027ve always used SLOs for stdin uploads.","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":1174,"context_line":"            options[\u0027segment_size\u0027] \u003d DEFAULT_STDIN_SEGMENT"},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"    options[\u0027object_uu_threads\u0027] \u003d options[\u0027object_threads\u0027]"},{"line_number":1177,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1178,"context_line":"        try:"},{"line_number":1179,"context_line":"            objs \u003d []"},{"line_number":1180,"context_line":"            dir_markers \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"575fee94_e8ef65b9","line":1177,"updated":"2023-03-22 14:23:12.000000000","message":"so we expect to pass ing options.use_slo \u003d\u003d options.use_dlo \u003d\u003d None by default\n\nWhat does --use-dlo *do* exactly?","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f347c3d3192e4fe2ad705908a346780f1a81746","unresolved":true,"context_lines":[{"line_number":1174,"context_line":"            options[\u0027segment_size\u0027] \u003d DEFAULT_STDIN_SEGMENT"},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"    options[\u0027object_uu_threads\u0027] \u003d options[\u0027object_threads\u0027]"},{"line_number":1177,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1178,"context_line":"        try:"},{"line_number":1179,"context_line":"            objs \u003d []"},{"line_number":1180,"context_line":"            dir_markers \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"f455dfb3_eb8df8ae","line":1177,"in_reply_to":"575fee94_e8ef65b9","updated":"2023-03-22 16:04:58.000000000","message":"I think you already figured it out, but there is no `options.use_dlo`, only `options.use_slo`. It used to be a binary thing, but now it\u0027s trinary:\n\n- `options.use_slo is True` -\u003e definitely upload as SLO\n- `options.use_slo is False` -\u003e definitely upload as DLO\n- `options.use_slo is None` -\u003e check whether SLO is available; if so use that, otherwise use DLO","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"}],"test/unit/test_service.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":1422,"context_line":"                                         options\u003ddict(s._options,"},{"line_number":1423,"context_line":"                                                      segment_size\u003d10,"},{"line_number":1424,"context_line":"                                                      leave_segments\u003dTrue,"},{"line_number":1425,"context_line":"                                                      use_slo\u003dFalse))"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"            mtime \u003d r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027]"},{"line_number":1428,"context_line":"            self.assertEqual(expected_mtime, mtime)"}],"source_content_type":"text/x-python","patch_set":1,"id":"88fa4cfa_41bfb46e","line":1425,"updated":"2022-11-14 22:20:56.000000000","message":"changes to this test look legit","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":1456,"context_line":"                \u0027action\u0027: \u0027upload_object\u0027,"},{"line_number":1457,"context_line":"                \u0027attempts\u0027: 2,"},{"line_number":1458,"context_line":"                \u0027container\u0027: \u0027test_c\u0027,"},{"line_number":1459,"context_line":"                \u0027headers\u0027: {},"},{"line_number":1460,"context_line":"                \u0027large_object\u0027: True,"},{"line_number":1461,"context_line":"                \u0027object\u0027: \u0027テスト/dummy.dat\u0027,"},{"line_number":1462,"context_line":"                \u0027manifest_response_dict\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"fb0685fc_78430e28","line":1459,"updated":"2022-11-14 22:20:56.000000000","message":"no expected headers?","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"532bb1f307b9607eb5bb8441ee67f476dfe960b3","unresolved":true,"context_lines":[{"line_number":1456,"context_line":"                \u0027action\u0027: \u0027upload_object\u0027,"},{"line_number":1457,"context_line":"                \u0027attempts\u0027: 2,"},{"line_number":1458,"context_line":"                \u0027container\u0027: \u0027test_c\u0027,"},{"line_number":1459,"context_line":"                \u0027headers\u0027: {},"},{"line_number":1460,"context_line":"                \u0027large_object\u0027: True,"},{"line_number":1461,"context_line":"                \u0027object\u0027: \u0027テスト/dummy.dat\u0027,"},{"line_number":1462,"context_line":"                \u0027manifest_response_dict\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"51ee0771_ad1104f3","line":1459,"in_reply_to":"fb0685fc_78430e28","updated":"2023-03-21 19:46:58.000000000","message":"Cribbed from the DLO test -- see L1397","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":1503,"context_line":"            self.assertEqual(r[\u0027path\u0027], f.name)"},{"line_number":1504,"context_line":"            del r[\u0027path\u0027]"},{"line_number":1505,"context_line":""},{"line_number":1506,"context_line":"            #self.assertEqual(r[\u0027headers\u0027][\u0027x-static-large-object\u0027], \u0027True\u0027)"},{"line_number":1507,"context_line":"            #del r[\u0027headers\u0027][\u0027x-static-large-object\u0027]"},{"line_number":1508,"context_line":"            self.maxDiff\u003dNone"},{"line_number":1509,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7d6e8cc0_9011e036","line":1506,"updated":"2022-11-14 22:20:56.000000000","message":"i think this assert should be fine - do we not actually get headers in the response object?","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                                         obj\u003d\u0027テスト/dummy.dat\u0027,"},{"line_number":1450,"context_line":"                                         options\u003ddict(s._options,"},{"line_number":1451,"context_line":"                                                      segment_size\u003d10,"},{"line_number":1452,"context_line":"                                                      leave_segments\u003dTrue))"},{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"            mtime \u003d r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027]"},{"line_number":1455,"context_line":"            self.assertEqual(expected_mtime, mtime)"}],"source_content_type":"text/x-python","patch_set":3,"id":"cfec5207_929496e0","line":1452,"updated":"2023-03-22 14:23:12.000000000","message":"so there\u0027s no explicit use_slo\u003dFalse here","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"}],"test/unit/test_shell.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":886,"context_line":"        connection.return_value.head_container.return_value \u003d {"},{"line_number":887,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":888,"context_line":"        argv \u003d [\"\", \"upload\", \"container/pseudo-folder/nested\","},{"line_number":889,"context_line":"                self.tmpfile, \"-S\", \"10\", \"--use-slo\"]"},{"line_number":890,"context_line":"        with open(self.tmpfile, \"wb\") as fh:"},{"line_number":891,"context_line":"            fh.write(b\u002712345678901234567890\u0027)"},{"line_number":892,"context_line":"        swiftclient.shell.main(argv)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a244f970_2ac00390","side":"PARENT","line":889,"updated":"2022-11-14 22:20:56.000000000","message":"is this the the one test that was validating --use-slo and we took it out?","commit_id":"7f4855dd1bed11528216c43c85e576736cc46958"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"486cacd9bd6c3965f241096282c47853f3c57cb5","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":1088,"context_line":"        connection.return_value.attempts \u003d 0"},{"line_number":1089,"context_line":"        argv \u003d [\"\", \"upload\", \"container\", self.tmpfile,"},{"line_number":1090,"context_line":"                \"--use-slo\", \"-S\", \"10\"]"},{"line_number":1091,"context_line":"        connection.return_value.head_object.side_effect \u003d ["},{"line_number":1092,"context_line":"            {\u0027x-static-large-object\u0027: \u0027true\u0027,  # For the upload call"},{"line_number":1093,"context_line":"             \u0027content-length\u0027: \u002720\u0027}]"}],"source_content_type":"text/x-python","patch_set":1,"id":"64ba9098_5a35dbe5","line":1090,"updated":"2022-11-14 22:20:56.000000000","message":"oh, no here\u0027s a test_shell with --use-slo 👍","commit_id":"1d7b1899c5f7f172c56badd487f6f6a885c1581b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":930,"context_line":"            \u0027pseudo-folder/nested\u0027 + self.tmpfile,"},{"line_number":931,"context_line":"            \u0027\u0027,"},{"line_number":932,"context_line":"            content_length\u003d0,"},{"line_number":933,"context_line":"            headers\u003d{\u0027x-object-manifest\u0027: mock.ANY,"},{"line_number":934,"context_line":"                     \u0027x-object-meta-mtime\u0027: mock.ANY},"},{"line_number":935,"context_line":"            response_dict\u003d{})"},{"line_number":936,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4cf95c87_a0a6bc49","line":933,"updated":"2023-03-22 14:23:12.000000000","message":"is the DLO manifest name really that indeterminate in this test?","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c65255be02563c71f80b2bf8dd17e6fb123d21c1","unresolved":true,"context_lines":[{"line_number":991,"context_line":"        connection.return_value.head_container.return_value \u003d {"},{"line_number":992,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":993,"context_line":"        argv \u003d [\"\", \"upload\", \"container\", \"--skip-container-put\","},{"line_number":994,"context_line":"                self.tmpfile, \"-S\", \"10\", \"--use-dlo\"]"},{"line_number":995,"context_line":"        with open(self.tmpfile, \"wb\") as fh:"},{"line_number":996,"context_line":"            fh.write(b\u002712345678901234567890\u0027)"},{"line_number":997,"context_line":"        swiftclient.shell.main(argv)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fb8482c4_e5acd486","line":994,"updated":"2023-03-22 14:23:12.000000000","message":"i guess this is showing us that --use-dlo is working... or that the info call hasn\u0027t been mocked to \"support slo\"","commit_id":"6a8675e897e634abd26d993181ac4a45b9cf16f7"}]}
