)]}'
{"api-ref/source/parameters.yaml":[{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object may or may not exist."},{"line_number":838,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":839,"context_line":"    container and object before you include them in this header."},{"line_number":840,"context_line":"   in: header"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"ba5201f7_390ba1d7","line":837,"updated":"2017-01-06 17:06:49.000000000","message":"Nitpicky, but \"The object may or may not exist.\" sounds a bit weird to me. Maybe something like \"The object does not need to exist at the time of symlink creation.\"","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a4a7bea1e4501b6e5dec304e6ce6b00ac088c122","unresolved":false,"context_lines":[{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object may or may not exist."},{"line_number":838,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":839,"context_line":"    container and object before you include them in this header."},{"line_number":840,"context_line":"   in: header"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"ba5201f7_4a07a281","line":837,"in_reply_to":"ba5201f7_390ba1d7","updated":"2017-01-06 19:46:33.000000000","message":"Done","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object may or may not exist."},{"line_number":838,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":839,"context_line":"    container and object before you include them in this header."},{"line_number":840,"context_line":"   in: header"},{"line_number":841,"context_line":"   required: false"},{"line_number":842,"context_line":"   type: string"},{"line_number":843,"context_line":"X-Symlink-Target-Account:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"ba5201f7_79a7e90a","line":840,"updated":"2017-01-06 17:06:49.000000000","message":"Looks like your in/required/type lines are indented by one too many spaces each.","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a4a7bea1e4501b6e5dec304e6ce6b00ac088c122","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object may or may not exist."},{"line_number":838,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":839,"context_line":"    container and object before you include them in this header."},{"line_number":840,"context_line":"   in: header"},{"line_number":841,"context_line":"   required: false"},{"line_number":842,"context_line":"   type: string"},{"line_number":843,"context_line":"X-Symlink-Target-Account:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"ba5201f7_6a0aa68b","line":840,"in_reply_to":"ba5201f7_79a7e90a","updated":"2017-01-06 19:46:33.000000000","message":"Done","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":833,"context_line":"X-Symlink-Target:"},{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_b1a68851","line":836,"updated":"2017-01-09 18:39:40.000000000","message":"is it a \"path name\" or just \"path\" ? The latter sounds more familiar to me.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":833,"context_line":"X-Symlink-Target:"},{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_93d7c1be","line":836,"in_reply_to":"ba5201f7_b1a68851","updated":"2017-01-09 21:13:54.000000000","message":"Done","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_11fd946e","line":837,"updated":"2017-01-09 18:39:40.000000000","message":"nit s/object/target object/ just for absolute clarity","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":834,"context_line":"  description: |"},{"line_number":835,"context_line":"    Set to specify that this is a symlink object."},{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_134e7196","line":837,"in_reply_to":"ba5201f7_11fd946e","updated":"2017-01-09 21:13:54.000000000","message":"Done","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."},{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_f14d709a","line":839,"updated":"2017-01-09 18:39:40.000000000","message":"IDK if there is any official guideline but I feel that third person reads better in docs i.e. \"The path value should be UTF8 encoded and URL encoded.\"\n\nBut, I see other places where second person is used. Oh well!","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b0095aa2ce0467f3b3b9e3471f460e6ee930f923","unresolved":false,"context_lines":[{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."},{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_85167fa5","line":839,"in_reply_to":"ba5201f7_533f19d6","updated":"2017-01-10 10:23:27.000000000","message":"absolutely ok. I noticed as I went on that this doc is littered with 2nd person so stick with the current style for consistency.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":836,"context_line":"    The value is the relative path name of the target object in the"},{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The object does not need to exist"},{"line_number":838,"context_line":"    at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."},{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_533f19d6","line":839,"in_reply_to":"ba5201f7_f14d709a","updated":"2017-01-09 21:13:54.000000000","message":"I\u0027ll change all the uses of second person in another patch, and change it here in a merge.  if that is ok.  i used that statement for consistency.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"},{"line_number":843,"context_line":"  type: string"},{"line_number":844,"context_line":"X-Symlink-Target-Account:"},{"line_number":845,"context_line":"  description: |"},{"line_number":846,"context_line":"    Set to specify that this is a cross-account symlink to"},{"line_number":847,"context_line":"    an object in the account specified in the value."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_fc50e70c","line":844,"updated":"2017-01-09 18:39:40.000000000","message":"is there a reason why the account cannot be optionally included in the target path, so avoid having two headers? or does that get impossible to parse when account may be missing? I\u0027m wondering if there might be a way to represent \"this account\" by a double slash e.g. //container/object vs /other_account/container/object","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a55ff4d91260d7ec98271d6280fdb4400b04542e","unresolved":false,"context_lines":[{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"},{"line_number":843,"context_line":"  type: string"},{"line_number":844,"context_line":"X-Symlink-Target-Account:"},{"line_number":845,"context_line":"  description: |"},{"line_number":846,"context_line":"    Set to specify that this is a cross-account symlink to"},{"line_number":847,"context_line":"    an object in the account specified in the value."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_b8f37d09","line":844,"in_reply_to":"ba5201f7_131cb176","updated":"2017-01-11 06:25:08.000000000","message":"Thiago said that he had discussed this earlier with ppai and torgomatic, and all agreed it was better to follow this 2 header approach.  He mentioned one of the reasons is that it it\u0027s easier to parse, since x-symlink-target could be \u0027container/dir1/dir2/obj\u0027, so you can\u0027t just split path on / and expect the first one to be account.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"},{"line_number":843,"context_line":"  type: string"},{"line_number":844,"context_line":"X-Symlink-Target-Account:"},{"line_number":845,"context_line":"  description: |"},{"line_number":846,"context_line":"    Set to specify that this is a cross-account symlink to"},{"line_number":847,"context_line":"    an object in the account specified in the value."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_131cb176","line":844,"in_reply_to":"ba5201f7_fc50e70c","updated":"2017-01-09 21:13:54.000000000","message":"I like this idea.  we can chat about this with Thiago.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":845,"context_line":"  description: |"},{"line_number":846,"context_line":"    Set to specify that this is a cross-account symlink to"},{"line_number":847,"context_line":"    an object in the account specified in the value."},{"line_number":848,"context_line":"    You must UTF-8-encode and then URL-encode the account name"},{"line_number":849,"context_line":"    before you include them in this header."},{"line_number":850,"context_line":"  in: header"},{"line_number":851,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_d12f8ca5","line":848,"updated":"2017-01-09 18:39:40.000000000","message":"As above re third person.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"  description: |"},{"line_number":1099,"context_line":"    If you include the ``symlink\u003dtrue`` query parameter on a GET/HEAD"},{"line_number":1100,"context_line":"    request, and the object is a symlink, then the response will include"},{"line_number":1101,"context_line":"    data from the symlink itself rather than from the target."},{"line_number":1102,"context_line":"  in: query"},{"line_number":1103,"context_line":"  required: false"},{"line_number":1104,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_a91c6014","line":1101,"updated":"2017-01-09 18:39:40.000000000","message":"possibly worth calling out \"data and metadata\"","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"  description: |"},{"line_number":1099,"context_line":"    If you include the ``symlink\u003dtrue`` query parameter on a GET/HEAD"},{"line_number":1100,"context_line":"    request, and the object is a symlink, then the response will include"},{"line_number":1101,"context_line":"    data from the symlink itself rather than from the target."},{"line_number":1102,"context_line":"  in: query"},{"line_number":1103,"context_line":"  required: false"},{"line_number":1104,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba5201f7_b305a515","line":1101,"in_reply_to":"ba5201f7_a91c6014","updated":"2017-01-09 21:13:54.000000000","message":"Done","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The target object does not need to"},{"line_number":838,"context_line":"    exist at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."},{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"},{"line_number":843,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"ba5201f7_32b52cd0","line":840,"updated":"2017-01-10 00:26:40.000000000","message":"same as dlo? newlines in names?  probably fine.\n\ndo we reject non-urlencoded names?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    format \u003ccontainer\u003e/\u003cobject\u003e.  The target object does not need to"},{"line_number":838,"context_line":"    exist at the time of symlink creation."},{"line_number":839,"context_line":"    You must UTF-8-encode and then URL-encode the names of the"},{"line_number":840,"context_line":"    container and object before you include them in this header."},{"line_number":841,"context_line":"  in: header"},{"line_number":842,"context_line":"  required: false"},{"line_number":843,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"ba5201f7_b79ab5c3","line":840,"in_reply_to":"ba5201f7_32b52cd0","updated":"2017-01-11 06:24:57.000000000","message":"As far as I know, this is exactly like the dlo manifest header or X-Copy-From header values.  I have added a trello card to create a test and update docs if needed though:\nhttps://trello.com/c/HDcDNCVr/15-create-a-test-for-non-urlencoded-names-in-x-symlink-target","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"}],"api-ref/source/storage-object-services.inc":[{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":139,"context_line":"   - X-Openstack-Request-Id: X-Openstack-Request-Id"},{"line_number":140,"context_line":"   - Date: Date"},{"line_number":141,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":142,"context_line":"   - X-Symlink-Target"},{"line_number":143,"context_line":"   - X-Symlink-Target-Account"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_39c00150","line":142,"updated":"2017-01-06 17:06:49.000000000","message":"X-Symlink-Target: X-Symlink-Target","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a4a7bea1e4501b6e5dec304e6ce6b00ac088c122","unresolved":false,"context_lines":[{"line_number":139,"context_line":"   - X-Openstack-Request-Id: X-Openstack-Request-Id"},{"line_number":140,"context_line":"   - Date: Date"},{"line_number":141,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":142,"context_line":"   - X-Symlink-Target"},{"line_number":143,"context_line":"   - X-Symlink-Target-Account"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_aa000e67","line":142,"in_reply_to":"ba5201f7_39c00150","updated":"2017-01-06 19:46:33.000000000","message":"Oops - I guess I made those additions too quickly! thanks.","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":140,"context_line":"   - Date: Date"},{"line_number":141,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":142,"context_line":"   - X-Symlink-Target"},{"line_number":143,"context_line":"   - X-Symlink-Target-Account"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_99d1ed25","line":143,"updated":"2017-01-06 17:06:49.000000000","message":"X-Symlink-Target-Account: X-Symlink-Target-Account","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":258,"context_line":"   - X-Object-Meta-name: X-Object-Meta-name"},{"line_number":259,"context_line":"   - If-None-Match: If-None-Match"},{"line_number":260,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":261,"context_line":"   - X-Symlink-Target"},{"line_number":262,"context_line":"   - X-Symlink-Target-Account"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_590b057d","line":261,"updated":"2017-01-06 17:06:49.000000000","message":"Same thing","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Alternatively, you can use PUT with the ``X-Copy-From`` request"},{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  Although using this method, there is no way to specify a "},{"line_number":304,"context_line":"symlink as a source without the link being followed for the COPY."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_442cfc98","line":303,"updated":"2017-01-06 17:06:49.000000000","message":"I\u0027m a little confused. Would this mean the same thing as \"If you use this method to copy a symlink object, the object referred to by the symlink will be copied\"?","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a4a7bea1e4501b6e5dec304e6ce6b00ac088c122","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Alternatively, you can use PUT with the ``X-Copy-From`` request"},{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  Although using this method, there is no way to specify a "},{"line_number":304,"context_line":"symlink as a source without the link being followed for the COPY."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_0af2fa99","line":303,"in_reply_to":"ba5201f7_442cfc98","updated":"2017-01-06 19:46:33.000000000","message":"Thanks, I took your wording and added a little more explanation.","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":410,"context_line":"   - X-Object-Meta-name: X-Object-Meta-name"},{"line_number":411,"context_line":"   - X-Fresh-Metadata: X-Fresh-Metadata"},{"line_number":412,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":413,"context_line":"   - X-Symlink-Target"},{"line_number":414,"context_line":"   - X-Symlink-Target-Account"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_399ba119","line":413,"updated":"2017-01-06 17:06:49.000000000","message":"^","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"f5a1f342ba96b7000d12a47fa994d12b5b903297","unresolved":false,"context_lines":[{"line_number":602,"context_line":"   - Date: Date"},{"line_number":603,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":604,"context_line":"   - Content-Type: Content-Type_obj_resp"},{"line_number":605,"context_line":"   - X-Symlink-Target"},{"line_number":606,"context_line":"   - X-Symlink-Target-Account"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"ba5201f7_79a1a945","line":605,"updated":"2017-01-06 17:06:49.000000000","message":"^","commit_id":"cc48a244a3eb8461539ef491b7667dad1e30baf4"},{"author":{"_account_id":21231,"name":"Bryan Keller","email":"kellerbr@us.ibm.com","username":"bkeller"},"change_message_id":"3ccef27229eb5fb6e6c9341d0af57188e9628e99","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the symlink parameter is suppliked on the request."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"The COPY operation always creates an object. If you use this"},{"line_number":308,"context_line":"operation on an existing object, you replace the existing object"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"ba5201f7_c56b83b5","line":305,"updated":"2017-01-06 19:59:48.000000000","message":"suppliked :|\n\nEverything else LGTM though.","commit_id":"6d3a58da692327b86ba6e5dc87709b715e428649"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"7e98113c4053905bdc4e66468e504afa50834df4","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the symlink parameter is suppliked on the request."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"The COPY operation always creates an object. If you use this"},{"line_number":308,"context_line":"operation on an existing object, you replace the existing object"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"ba5201f7_05f2eb99","line":305,"in_reply_to":"ba5201f7_c56b83b5","updated":"2017-01-06 20:17:53.000000000","message":"oh geez.  Ok, I *might* also add a note about not using post-as-copy with symlinks.  i am gonna look to see if there is a place for that outside the symlink mw docs.  will fix after that.","commit_id":"6d3a58da692327b86ba6e5dc87709b715e428649"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the symlink parameter is supplied on the request."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"The COPY operation always creates an object. If you use this"},{"line_number":308,"context_line":"operation on an existing object, you replace the existing object"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_a991c054","line":305,"updated":"2017-01-09 18:39:40.000000000","message":"is this referring to the symlink\u003dtrue query parameter? If so then perhaps spell it out and enclose ``symlink\u003dtrue`` in the back ticks.\n\nnit \"on the request\"? vs \"with the request\"\n\nwhy is this the case?","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the symlink parameter is supplied on the request."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"The COPY operation always creates an object. If you use this"},{"line_number":308,"context_line":"operation on an existing object, you replace the existing object"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_8e3ddabd","line":305,"in_reply_to":"ba5201f7_a991c054","updated":"2017-01-09 21:13:54.000000000","message":"fixed wording.\n\nAs for why the query parameter is lost for this type of query, I don\u0027t know why that happens.  I will need to investigate.  I was recording the current behavior as implementation is now to discuss.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":320,"context_line":"The segment objects are not copied. Instead, both the original"},{"line_number":321,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_2c2a3e7f","line":323,"updated":"2017-01-09 18:39:40.000000000","message":"what if it is not zero-bytes?","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":320,"context_line":"The segment objects are not copied. Instead, both the original"},{"line_number":321,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_8e64fae5","line":323,"in_reply_to":"ba5201f7_2c2a3e7f","updated":"2017-01-09 21:13:54.000000000","message":"explained now that if not zero-byte, then you get a 400 \"Symlink requests require a zero byte body\".","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":321,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_c9c36437","line":324,"updated":"2017-01-09 18:39:40.000000000","message":"is that by using X-Symlink-*-Target headers? If so, be specific.\n\nnit: again \"on the request\" vs \"in the request\" in previous paragraph\"","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":321,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_ae029eb2","line":324,"in_reply_to":"ba5201f7_c9c36437","updated":"2017-01-09 21:13:54.000000000","message":"Done","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_294eb096","line":325,"updated":"2017-01-09 18:39:40.000000000","message":"we have inconsistent use of \"query parameter\" vs \"query string\" in previous paragraph. I think that strictly \"symlink\u003dtrue\" is part of the query string","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b0095aa2ce0467f3b3b9e3471f460e6ee930f923","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_85cbdf1d","line":325,"in_reply_to":"ba5201f7_0e7d6ae7","updated":"2017-01-10 10:23:27.000000000","message":"I think that a parameter in a url is a different thing vs query string. But at same time I\u0027m sure I myself may have referred to query strings that contain parameters.\n\nBah, we engineers are terrible at writing docs :)","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_0e7d6ae7","line":325,"in_reply_to":"ba5201f7_294eb096","updated":"2017-01-09 21:13:54.000000000","message":"Ill change to query string for now, but I see that query parameter is used for similar things in this document.  I will have to do more digging on the difference between query string and parameter.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"All metadata is"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_ec4af6ab","line":326,"updated":"2017-01-09 18:39:40.000000000","message":"we seem to jump from copying a zero byte object to copying a symlink in this paragraph and not describe some cases.\n\nFeels like a table might be helpful:\n\n                          plain object,    symlink to X\n                          -------------    ------------\n  symlink\u003dtrue            plain object     symlink to X\n  X-Symlink-Target\u003dY      symlink to Y     symlink to X??\n  (X-Symlink-Target\u003dY and symlink to Y     symlink to X??\n    symlink\u003dtrue)","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":323,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"All metadata is"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_2c4cf775","line":326,"in_reply_to":"ba5201f7_ec4af6ab","updated":"2017-01-09 21:13:54.000000000","message":"I have clarified this some, but I will also create a table.  that will be in the revision after next (I want to get this patchset up quickly today)","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"All metadata is"},{"line_number":330,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_cc3372f5","line":327,"updated":"2017-01-09 18:39:40.000000000","message":"So, this surprised me and is different from the behaviour for other metadata (as described in next paragraph). Is this a deliberate choice (ignore new symlink headers) of unavoidable consequence of implementation?","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":324,"context_line":"by specifying the target object on the COPY request."},{"line_number":325,"context_line":"If you include the ``symlink\u003dtrue`` query parameter on a COPY,"},{"line_number":326,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":327,"context_line":"as opposed to any symlink target headers on the request."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"All metadata is"},{"line_number":330,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_0c48135b","line":327,"in_reply_to":"ba5201f7_cc3372f5","updated":"2017-01-09 21:13:54.000000000","message":"I am not sure why this happens.  I have just recorded the observed behavior in the current patch so we can discuss desired behavior here.\n\nBut, from reading the \"you include the\n``multipart-manifest\u003dget`` query string in the COPY request.\nThe new object contains the same manifest as the original.\"  I am wondering now what happens if you attempt to change the manifest on a copy in a similar way.  This might be tied to your next comment and the next paragraph.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":329,"context_line":"All metadata is"},{"line_number":330,"context_line":"preserved during the object copy. If you specify metadata on the"},{"line_number":331,"context_line":"request to copy the object, either PUT or COPY , the metadata"},{"line_number":332,"context_line":"overwrites any conflicting keys on the target (new) object."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Example requests and responses:"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_0cfe5a05","line":332,"updated":"2017-01-09 18:39:40.000000000","message":"wow, this paragraph is confusing. First it says all metadata is preserved. Then it says it may not be!","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":329,"context_line":"All metadata is"},{"line_number":330,"context_line":"preserved during the object copy. If you specify metadata on the"},{"line_number":331,"context_line":"request to copy the object, either PUT or COPY , the metadata"},{"line_number":332,"context_line":"overwrites any conflicting keys on the target (new) object."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Example requests and responses:"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_ac71c779","line":332,"in_reply_to":"ba5201f7_0cfe5a05","updated":"2017-01-09 21:13:54.000000000","message":"that paragraph was already there.  I think I understand what it is saying, except i am not sure what it means for keys to conflict.  Does that mean matching an existing key?  It seems like this might only be true for user-meta, since both X-Symlink-Target (and a manifest header?) seem to remain as the original regardless.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b0095aa2ce0467f3b3b9e3471f460e6ee930f923","unresolved":false,"context_lines":[{"line_number":329,"context_line":"All metadata is"},{"line_number":330,"context_line":"preserved during the object copy. If you specify metadata on the"},{"line_number":331,"context_line":"request to copy the object, either PUT or COPY , the metadata"},{"line_number":332,"context_line":"overwrites any conflicting keys on the target (new) object."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Example requests and responses:"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_c57167e2","line":332,"in_reply_to":"ba5201f7_ac71c779","updated":"2017-01-10 10:23:27.000000000","message":"not blaming you :)\n\nyeah, with a COPY is any x-meta-object key sent with the request overwrites same key that was on source of copy. But otherwise source meta keys are preserved, so unlike a post you can selectively update some headers by copying an object to same url.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":412,"context_line":"   - X-Fresh-Metadata: X-Fresh-Metadata"},{"line_number":413,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":414,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":415,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"Response Parameters"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_bf548eca","line":415,"updated":"2017-01-09 18:39:40.000000000","message":"but these are ignored if the source is a symlink, correct? I\u0027m not sure I like that, but if it is the case then i think it warrants mentioning in the header definition (so a separate entry in parameters.yaml for the copy headers)","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":412,"context_line":"   - X-Fresh-Metadata: X-Fresh-Metadata"},{"line_number":413,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":414,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":415,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"Response Parameters"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_cc9feb4e","line":415,"in_reply_to":"ba5201f7_bf548eca","updated":"2017-01-09 21:13:54.000000000","message":"Ok - I will work on that along with the tables.  so this wont be in the next patchset, but the one after that.  I need to double check that behavior, discover why it is like that, as well and chat with Thiago on whether we can easily change this.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a55ff4d91260d7ec98271d6280fdb4400b04542e","unresolved":false,"context_lines":[{"line_number":412,"context_line":"   - X-Fresh-Metadata: X-Fresh-Metadata"},{"line_number":413,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":414,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":415,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"Response Parameters"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_9ebdc1d9","line":415,"in_reply_to":"ba5201f7_cc9feb4e","updated":"2017-01-11 06:25:08.000000000","message":"I think we have come to the symlink header not being appropriate for a COPY, similar to how we have no manifest header listed as an option here.  correct me if i am wrong.\n\nI did, however, add a symlink_copy parameter to the request list for COPY.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":453,"context_line":"deletes the manifest object."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"A DELETE request made to a symlink path will delete the symlink"},{"line_number":456,"context_line":"rather than the target object."},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"An alternative to using the DELETE operation is to use"},{"line_number":459,"context_line":"the POST operation with the ``bulk-delete`` query parameter."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_3ff25e07","line":456,"updated":"2017-01-09 18:39:40.000000000","message":"have we considered using query string \"symlink\u003dget\" instead of \"symlink\u003dtrue\", to match *lo manifests, and allowing for (future) implementation of \"symlink\u003ddelete\"?","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":453,"context_line":"deletes the manifest object."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"A DELETE request made to a symlink path will delete the symlink"},{"line_number":456,"context_line":"rather than the target object."},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"An alternative to using the DELETE operation is to use"},{"line_number":459,"context_line":"the POST operation with the ``bulk-delete`` query parameter."}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_6cafdf7d","line":456,"in_reply_to":"ba5201f7_3ff25e07","updated":"2017-01-09 21:13:54.000000000","message":"Sounds like a good idea to me.  Let\u0027s chat with Thiago.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"Create or update object metadata"},{"line_number":618,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":".. rest_method::  POST /v1/{account}/{container}/{object}"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_ff8d362b","line":618,"updated":"2017-01-09 18:39:40.000000000","message":"It is likely to get messy, but this section should say something about what happens with POSTs to symlinks.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"Create or update object metadata"},{"line_number":618,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":".. rest_method::  POST /v1/{account}/{container}/{object}"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_6c599f8e","line":618,"in_reply_to":"ba5201f7_ff8d362b","updated":"2017-01-09 21:13:54.000000000","message":"Done","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":639,"context_line":"All metadata is preserved during the object copy. If you specify"},{"line_number":640,"context_line":"metadata on the request to copy the object, either PUT or COPY ,"},{"line_number":641,"context_line":"the metadata overwrites any conflicting keys on the target (new)"},{"line_number":642,"context_line":"object."},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"A POST request deletes any existing custom metadata that you added"},{"line_number":645,"context_line":"with a previous PUT or POST request. Consequently, you must specify"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_5f02c270","line":642,"updated":"2017-01-09 18:39:40.000000000","message":"except for X-Symlink-Target headers? so is a COPY with X-Symlink-Target going to have a different result than a POST with X-Symlink-Target header? (The POST will return an error but the header is applied I think?)","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"a1fac3d59c7ef5b023203402032947bab5b621cd","unresolved":false,"context_lines":[{"line_number":639,"context_line":"All metadata is preserved during the object copy. If you specify"},{"line_number":640,"context_line":"metadata on the request to copy the object, either PUT or COPY ,"},{"line_number":641,"context_line":"the metadata overwrites any conflicting keys on the target (new)"},{"line_number":642,"context_line":"object."},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"A POST request deletes any existing custom metadata that you added"},{"line_number":645,"context_line":"with a previous PUT or POST request. Consequently, you must specify"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"ba5201f7_2cedd78e","line":642,"in_reply_to":"ba5201f7_5f02c270","updated":"2017-01-09 21:13:54.000000000","message":"the code was recently changed to immediately reject any POST request that includes the X-Symlink-Target. There were issues when allowing that value to be posted to the symlink.  You have to always set a symlink using a PUT.","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":26,"context_line":"If this is a large object, the response body contains the"},{"line_number":27,"context_line":"concatenated content of the segment objects. To get the manifest"},{"line_number":28,"context_line":"instead of concatenated segment objects for a static large object,"},{"line_number":29,"context_line":"use the ``multipart-manifest`` query parameter."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Example requests and responses:"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_b294bc44","line":29,"updated":"2017-01-10 00:26:40.000000000","message":"mention symlink disambiguation here too","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":26,"context_line":"If this is a large object, the response body contains the"},{"line_number":27,"context_line":"concatenated content of the segment objects. To get the manifest"},{"line_number":28,"context_line":"instead of concatenated segment objects for a static large object,"},{"line_number":29,"context_line":"use the ``multipart-manifest`` query parameter."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Example requests and responses:"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_53f8b249","line":29,"in_reply_to":"ba5201f7_b294bc44","updated":"2017-01-11 06:24:57.000000000","message":"Thanks for mentioning - donno how I missed that.\n\nWhen I tested out this behavior, the symlink\u003dtrue has no affect on SLO.  I tested these cases:\n\n(slo comes before symlink in my pipeline)\n\n- some segments are symlinks\n . normal GET : symlink is followed\n . use symlink\u003dtrue : symlink is still followed\n- make the request using a symlink to the manifest:\n . normal GET : symlink is followed, SLO returned\n . use manifest GET : symlink is followed, manifest returned \n . use symlink\u003dtrue : symlink is followed, SLO returned\n . use BOTH params : symlink is followed, manifest returned\n\nIs this desired behavior?  I\u0027ll add to docs when we decide what should happen.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"   - temp_url_sig: temp_url_sig"},{"line_number":111,"context_line":"   - temp_url_expires: temp_url_expires"},{"line_number":112,"context_line":"   - filename: filename"},{"line_number":113,"context_line":"   - multipart-manifest: multipart-manifest_get"},{"line_number":114,"context_line":"   - Range: Range"},{"line_number":115,"context_line":"   - If-Match: If-Match"},{"line_number":116,"context_line":"   - If-None-Match: If-None-Match"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_280cc33a","line":113,"updated":"2017-01-10 12:44:10.000000000","message":"need to insert symlink here","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":110,"context_line":"   - temp_url_sig: temp_url_sig"},{"line_number":111,"context_line":"   - temp_url_expires: temp_url_expires"},{"line_number":112,"context_line":"   - filename: filename"},{"line_number":113,"context_line":"   - multipart-manifest: multipart-manifest_get"},{"line_number":114,"context_line":"   - Range: Range"},{"line_number":115,"context_line":"   - If-Match: If-Match"},{"line_number":116,"context_line":"   - If-None-Match: If-None-Match"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_fe132d5a","line":113,"in_reply_to":"ba5201f7_280cc33a","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"   - Date: Date"},{"line_number":141,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":142,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":143,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_c88ed726","line":143,"updated":"2017-01-10 12:44:10.000000000","message":"you need different versions of the definition in the yaml file for the responses, so the description doesn\u0027t describing setting the value. See x-object-manifest and x-object-manifest_resp for an example. The response version often starts with \"If present, ...\"","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":140,"context_line":"   - Date: Date"},{"line_number":141,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":142,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":143,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_3e1e9563","line":143,"in_reply_to":"ba5201f7_c88ed726","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"0ed8049395e0aea2c9229d434d5d56c6c4becb7b","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the the ``symlink\u003dtrue`` query string is"},{"line_number":306,"context_line":"supplied with the request."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_6fb3510b","line":305,"range":{"start_line":305,"start_character":26,"end_line":305,"end_character":42},"updated":"2017-01-09 21:43:35.000000000","message":"this should not be the case. if \u0027symlink\u003dtrue\u0027 then the symlink itself should be copied. will check code and make sure we have tests for this.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the the ``symlink\u003dtrue`` query string is"},{"line_number":306,"context_line":"supplied with the request."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_7e82dd53","line":305,"range":{"start_line":305,"start_character":26,"end_line":305,"end_character":42},"in_reply_to":"ba5201f7_124668bf","updated":"2017-01-11 06:24:57.000000000","message":"turns out this does work.  modified docs.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the the ``symlink\u003dtrue`` query string is"},{"line_number":306,"context_line":"supplied with the request."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_124668bf","line":305,"range":{"start_line":305,"start_character":26,"end_line":305,"end_character":42},"in_reply_to":"ba5201f7_6f43516d","updated":"2017-01-10 00:26:40.000000000","message":"I think a PUT with x-copy-from head and symlink querystring (on the PUT request!) can mean x-copy-from: /a/c/o?symlink\u003dtrue\n\nIf it doesn\u0027t work that way and we say it doesn\u0027t work that way it\u0027s ok with me too.  I don\u0027t think there is a sane way to spell this request.  Use a COPY.  Or better yet - just create a new zero-byte symlink that points to the correct target!","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"04828e4daacfec1c9393bfe806e7f82ff43d9fd3","unresolved":false,"context_lines":[{"line_number":302,"context_line":"header to accomplish the same operation as the COPY object"},{"line_number":303,"context_line":"operation.  If you use this method to copy a symlink object,"},{"line_number":304,"context_line":"the object referred to by the symlink will be copied regardless"},{"line_number":305,"context_line":"of whether or not the the ``symlink\u003dtrue`` query string is"},{"line_number":306,"context_line":"supplied with the request."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"The COPY operation always creates an object. If you use this"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_6f43516d","line":305,"range":{"start_line":305,"start_character":26,"end_line":305,"end_character":42},"in_reply_to":"ba5201f7_6fb3510b","updated":"2017-01-09 21:46:04.000000000","message":"I think I remember why this is different.  Because the URL provided in the request is different - in one case, it is the source, while the other case it is the target for the COPY.  So with this one, there is no way to specify the symlink query string on the one you want.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"0ed8049395e0aea2c9229d434d5d56c6c4becb7b","unresolved":false,"context_lines":[{"line_number":321,"context_line":"The segment objects are not copied. Instead, both the original"},{"line_number":322,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":325,"context_line":"by specifying ``X-Symlink-Target`` in the COPY request."},{"line_number":326,"context_line":"If an attempt is made to create a symlink by copying an object"},{"line_number":327,"context_line":"with a body, then a 400 is returned."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"If the source is a symlink itself, and you include the"},{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_0fc5655a","line":327,"range":{"start_line":324,"start_character":0,"end_line":327,"end_character":36},"updated":"2017-01-09 21:43:35.000000000","message":"mm...wondering if we should prevent this? It seems more like a non-feature","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":321,"context_line":"The segment objects are not copied. Instead, both the original"},{"line_number":322,"context_line":"and new manifest objects share the same set of segment objects."},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"You may copy a zero-byte object in order to create a symlink"},{"line_number":325,"context_line":"by specifying ``X-Symlink-Target`` in the COPY request."},{"line_number":326,"context_line":"If an attempt is made to create a symlink by copying an object"},{"line_number":327,"context_line":"with a body, then a 400 is returned."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"If the source is a symlink itself, and you include the"},{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_b253dc6b","line":327,"range":{"start_line":324,"start_character":0,"end_line":327,"end_character":36},"in_reply_to":"ba5201f7_0fc5655a","updated":"2017-01-10 00:26:40.000000000","message":"+100 non-feature - curious how much code it would take to reject this request - if it\u0027s troublesome to detect/prevent - let\u0027s at a minimum not advertise this insanity.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"0ed8049395e0aea2c9229d434d5d56c6c4becb7b","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_eff10197","line":333,"updated":"2017-01-09 21:43:35.000000000","message":"I think this should be the behavior whenever the users sends either COPY or PUT with X-Copy-From","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"6a10886dd71025d0f7fcb75ba40f3dce076b416b","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_7ac3df57","line":333,"in_reply_to":"ba5201f7_0a1d3666","updated":"2017-01-10 17:23:35.000000000","message":"@Alistair, the issue with using symlink\u003dget now is that Clay proposed we allow users to POST to a symlink if they send symlink\u003dtrue. I think in this case it would be strange to see:\n  POST v1/a/c/sym?symlink\u003dget\n\nThoughts?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94d651856ab21720e79ed4e2e7b74d49e2681f71","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_d49ae16d","line":333,"in_reply_to":"ba5201f7_0a1d3666","updated":"2017-01-10 17:12:11.000000000","message":"So after double checking the tests, the behavior for COPY and PUT with X-Copy-From is the same; meaning, both of these requests copy the symlink:\n  COPY /a/c/symlink_obj?symlink\u003dtrue\n  Destination: c/new_symlink_obj\nand\n  PUT a/c/new_symlink_obj?symlink\u003dtrue\n  X-Copy-From: c/symlink_obj\n\nAlso this is not different from SLO, where one can copy the manifest like this:\n  PUT a/c/new_manifest?multipart-manifest\u003dget\n  X-Copy-From: c/manifest\n\nWe could change to what Clay and Alistair suggested, but I think that would change the current slo behavior, or at least add to it, but I\u0027m guessing we might not want make an API change (even thou it doesn\u0027t look to be documented or even tested)?? Thoughts?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2cec0a5f7a44ceacf304f1500b36cbc55cdc3cb8","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_9d04fdc6","line":333,"in_reply_to":"ba5201f7_7ac3df57","updated":"2017-01-10 17:38:49.000000000","message":"the reason for suggesting symlink\u003dget on an earlier review was to allow symlink\u003ddelete on a DELETE request to be a future possibility and consistent with multipart-manifest\u003ddelete with an slo, which causes the manifest and its \"target\" segments to be deleted. \n\n(The logic is a little strange because in other case multipart-manifest\u003d* implies the request acts only on the manifest object, but multipart-manifest\u003ddelete actualy cause a request that otherwise acts only on the manifest to act on the segments too.)\n\nmaybe that is crazy, IDK, but it seemed like ti gave us more future options vs a boolean. We could have symlink\u003dpost for a POST?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_0a1d3666","line":333,"in_reply_to":"ba5201f7_b2011c3c","updated":"2017-01-10 12:44:10.000000000","message":"Can we easily support \n\n  PUT a/c/new_symlink_obj\n  X-Copy-From: c/symlink_obj?symlink\u003dtrue\n\nresulting in the raw symlink copied to  a/c/new_symlink_obj?\nThat seems consistent with:\n\n  COPY /a/c/symlink_obj?symlink\u003dtrue\n  Destination: c/new_symlink_obj\n\nwhereas:\n\n  PUT a/c/new_symlink_obj?symlink\u003dtrue\n  X-Copy-From: c/symlink_obj\n\nseems like a bad request, and the symlink\u003dtrue should at best be ignored, the copied object is the dereferenced target.\n\nNote I am hoping that we can actually use symlink\u003dget rather than \u003dtrue, for consistency with xlo. That would make it more obviously weird to have symlink\u003dget in a PUT url.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2cec0a5f7a44ceacf304f1500b36cbc55cdc3cb8","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_faa18f47","line":333,"in_reply_to":"ba5201f7_d49ae16d","updated":"2017-01-10 17:38:49.000000000","message":"Re copying with PUT and x-copy-from, I agree with Thiago. I looked again at SLO copying and the tests here [1] and that would suggest that for consistency this should be supported:\n\n  PUT a/c/new_symlink_obj?symlink\u003dtrue\n  X-Copy-From: c/symlink_obj\n\ncontrary to my earlier comment.\n\n[1] https://github.com/openstack/swift/blob/b94d0db9aaf117080bdcebda4b44bd02eb25749e/test/unit/common/middleware/test_copy.py#L260-L260","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_b2011c3c","line":333,"in_reply_to":"ba5201f7_eff10197","updated":"2017-01-10 00:26:40.000000000","message":"I like how this works for COPY.\n\nfor X-Copy-From, if it\u0027s trivial/obvious to \"steal\" the qs from the PUT request in an isolated way and add it to the GET side of the COPY I\u0027m fine with that from an API point of view - if it\u0027s troublesome to implement maybe we can request.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":330,"context_line":"``symlink\u003dtrue`` query string with the COPY request,"},{"line_number":331,"context_line":"then the source symlink will be copied with its target header,"},{"line_number":332,"context_line":"as opposed to anything specified using ``X-Symlink-Target`` in the"},{"line_number":333,"context_line":"request."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"All metadata is"},{"line_number":336,"context_line":"preserved during the object copy. If you specify metadata on the"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_be58c5fb","line":333,"in_reply_to":"ba5201f7_faa18f47","updated":"2017-01-11 06:24:57.000000000","message":"I think my next version captures the results of all this.  let me know if there is something outstanding.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":585,"context_line":"   - temp_url_sig: temp_url_sig"},{"line_number":586,"context_line":"   - temp_url_expires: temp_url_expires"},{"line_number":587,"context_line":"   - filename: filename"},{"line_number":588,"context_line":"   - multipart-manifest: multipart-manifest_head"},{"line_number":589,"context_line":"   - X-Newest: X-Newest"},{"line_number":590,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_e828fb87","line":588,"updated":"2017-01-10 12:44:10.000000000","message":"need to insert symlink here","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":585,"context_line":"   - temp_url_sig: temp_url_sig"},{"line_number":586,"context_line":"   - temp_url_expires: temp_url_expires"},{"line_number":587,"context_line":"   - filename: filename"},{"line_number":588,"context_line":"   - multipart-manifest: multipart-manifest_head"},{"line_number":589,"context_line":"   - X-Newest: X-Newest"},{"line_number":590,"context_line":"   - X-Trans-Id-Extra: X-Trans-Id-Extra"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_1e50f15d","line":588,"in_reply_to":"ba5201f7_e828fb87","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":610,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":611,"context_line":"   - Content-Type: Content-Type_obj_resp"},{"line_number":612,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":613,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_88768f3c","line":613,"updated":"2017-01-10 12:44:10.000000000","message":"you need different versions of the definition in the yaml file for the responses, so the description doesn\u0027t describing setting the value. See x-object-manifest and x-object-manifest_resp for an example. The response version often starts with \"If present, ...\"","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":610,"context_line":"   - X-Static-Large-Object: X-Static-Large-Object"},{"line_number":611,"context_line":"   - Content-Type: Content-Type_obj_resp"},{"line_number":612,"context_line":"   - X-Symlink-Target: X-Symlink-Target"},{"line_number":613,"context_line":"   - X-Symlink-Target-Account: X-Symlink-Target-Account"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_7ec73d12","line":613,"in_reply_to":"ba5201f7_88768f3c","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":672,"context_line":"  can be used to upload an archive (tar file). The archive is then extracted"},{"line_number":673,"context_line":"  to create objects."},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_4acf3eb3","line":675,"updated":"2017-01-10 12:44:10.000000000","message":"s/post/a POST request/\n\nAlternatively: \"A POST request must not include X-Symlink-Target header. If it does then a 400 status code is returned and the object metadata is not modified.\"\n\nAlso does X-Symlink-Target-Account in a POST get same 400 response? If not then it should IMHO for consistency.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94d651856ab21720e79ed4e2e7b74d49e2681f71","unresolved":false,"context_lines":[{"line_number":672,"context_line":"  can be used to upload an archive (tar file). The archive is then extracted"},{"line_number":673,"context_line":"  to create objects."},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_f978c0fa","line":675,"in_reply_to":"ba5201f7_4acf3eb3","updated":"2017-01-10 17:12:11.000000000","message":"Re: X-Symlink-Target-Account. Currently any requests that contains \u0027Target-Account\u0027 but not \u0027X-Symlink-Target\u0027, then the header is ignored. \n\nThat should be documented, but does it change your opinion? should we return errors instead of ignoring?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":672,"context_line":"  can be used to upload an archive (tar file). The archive is then extracted"},{"line_number":673,"context_line":"  to create objects."},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_de7029df","line":675,"in_reply_to":"ba5201f7_f978c0fa","updated":"2017-01-11 06:24:57.000000000","message":"I changed to what Alistair proposed.  And I updated the parameters descriptions to capture the dependency of having x-symlink-target be set for a symlink.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"28000e3cb2eb2bc9b0d24181471b02077073a01c","unresolved":false,"context_lines":[{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_afc37989","line":678,"updated":"2017-01-09 21:27:18.000000000","message":"I will change this statement not to use \"clients\". I had copied/pasted from the middleware docs.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94d651856ab21720e79ed4e2e7b74d49e2681f71","unresolved":false,"context_lines":[{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_79021040","line":678,"in_reply_to":"ba5201f7_4a2bbe33","updated":"2017-01-10 17:12:11.000000000","message":"Yeah, I think this one is especially tricky to document because we know (at least that\u0027s the current plan) that the tiering feature will send POSTs to a symlink and then redirect to the target when it gets the 307 error.\n\nSo should we say that clients should be aware of the behavior and plan accordingly?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_f941873a","line":678,"in_reply_to":"ba5201f7_79021040","updated":"2017-01-11 06:24:57.000000000","message":"i reworded, but if you do want a \"plan accordingly\", let me know.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"01397ba295b4ff64899fd5b9007152fb6803fe06","unresolved":false,"context_lines":[{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_f280048e","line":678,"in_reply_to":"ba5201f7_afc37989","updated":"2017-01-10 00:26:40.000000000","message":"Users?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":675,"context_line":"If ``X-Symlink-Target`` is specified in post, then a 400 is returned, and"},{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_4a2bbe33","line":678,"in_reply_to":"ba5201f7_f280048e","updated":"2017-01-10 12:44:10.000000000","message":"\"POST requests should not be sent to a symlink\" ?\n\nIn RFCs there is a convention for use of \"should\" vs \"must\" - IIRC \"should\" implies you can do it but its not recommended, whereas \"must\" implies you\u0027ll see an error if you try this.\n\nSounds like this is a \"should\" case.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"},{"line_number":682,"context_line":"but the request will result in a 300-series error response to the client."}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_ca1fae07","line":679,"updated":"2017-01-10 12:44:10.000000000","message":"not sure we need to state this reasoning in an API doc","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":676,"context_line":"no data is modified."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"},{"line_number":682,"context_line":"but the request will result in a 300-series error response to the client."}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_d97123aa","line":679,"in_reply_to":"ba5201f7_ca1fae07","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"},{"line_number":682,"context_line":"but the request will result in a 300-series error response to the client."},{"line_number":683,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_2a9cba68","line":680,"updated":"2017-01-10 12:44:10.000000000","message":"nit: I would put this sentence before the previous starting \"They are never \", so you say what would happen, then say what will not happen.\n\nAlso s/When/If/ - we just said it shouldn\u0027t happen so If sounds more appropriate than when.","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"02555713fc9194c772c3dec8aaa028f3d1031bce","unresolved":false,"context_lines":[{"line_number":677,"context_line":""},{"line_number":678,"context_line":"Clients should not send POST requests to a symlink. They are never redirected"},{"line_number":679,"context_line":"to the target object. Because of eventual consistency the object server can"},{"line_number":680,"context_line":"never know for sure if the current object is a symlink or not. When a POST"},{"line_number":681,"context_line":"request is sent to a symlink, the metadata will be applied to the symlink,"},{"line_number":682,"context_line":"but the request will result in a 300-series error response to the client."},{"line_number":683,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"ba5201f7_f968a7bc","line":680,"in_reply_to":"ba5201f7_2a9cba68","updated":"2017-01-11 06:24:57.000000000","message":"Done","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"}],"doc/source/api/object_api_v1_overview.rst":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fd1a29f86faf7a681ae17dd4bb8177ecb5354e1e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"   -  Upload objects directly to the Object Storage system from a"},{"line_number":92,"context_line":"      browser by using form **POST** middleware."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"   -  Create symbolic links to existing objects."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The account, container, and object hierarchy affects the way you"},{"line_number":97,"context_line":"interact with the Object Storage API."}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba5201f7_1fd75a24","line":94,"updated":"2017-01-09 18:39:40.000000000","message":"I think that elsewhere it says the target does not need to exist, so s/existing objects/object paths/","commit_id":"ed889e8a734543209e90878debe723b522cc8d3d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"004eff6d83f3161d55339f3c69e2801f909ea8c6","unresolved":false,"context_lines":[{"line_number":91,"context_line":"   -  Upload objects directly to the Object Storage system from a"},{"line_number":92,"context_line":"      browser by using form **POST** middleware."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"   -  Create symbolic links to existing objects."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The account, container, and object hierarchy affects the way you"},{"line_number":97,"context_line":"interact with the Object Storage API."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba5201f7_88b92f31","line":94,"updated":"2017-01-10 12:44:10.000000000","message":"see comment on v3 - object don\u0027t need to exist to be symlinked?","commit_id":"ad45220f97d6044539657227851a425c9ae52a50"}]}
