c0866ceaac
This commit tries to give the user a reason that their SLO manifest was invalid instead of just saying "Invalid SLO Manifest File". It doesn't get every error condition, but it's better than before. Examples of things that now have real error messages include: * bad keys in manifest (e.g. using "name" instead of "path") * bogus range (e.g. "bytes=123-taco") * multiple ranges (e.g. "bytes=10-20,30-40") * bad JSON structure (i.e. not a list of objects) * non-integer size_bytes Also fixed an annoyance with unspecified-size segments that are too small. Previously, if you uploaded a segment reference with '{"size_bytes": null, ...}' in it and the referenced segment was less than 1 MiB, you'd get a response that looked like this: HTTP/1.1 400 Bad Request Content-Length: 62 Content-Type: text/html; charset=UTF-8 X-Trans-Id: txd9ee3b25896642098e4d9-0055dd095a Date: Wed, 26 Aug 2015 00:33:30 GMT Each segment, except the last, must be at least 1048576 bytes. This is true, but not particularly helpful, since it doesn't tell you which of your segments violated the rule. Now you get something more like this: HTTP/1.1 400 Bad Request Content-Length: 49 Content-Type: text/plain X-Trans-Id: tx586e52580bac4956ad8e2-0055dd09c2 Date: Wed, 26 Aug 2015 00:35:14 GMT Errors: /segs/small, Too Small; each segment, except the last... It's not exactly a tutorial on SLO manifests, but at least it names the problematic segment. This also changes the status code for a self-referential manifest from 409 to 400. The rest of the error machinery was using 400, and special-casing self-reference would be really annoying. Besides, now that we're showing more than one error message at a time, what would the right status code be for a manifest with a self-referential segment *and* a segment with a bad range? 400? 409? 404.5? It's much more consistent to just say invalid manifest --> 400. Change-Id: I2275683230b36bc273319254e37c16b9e9b9d69c |
||
---|---|---|
.. | ||
__init__.py | ||
swift_test_client.py | ||
test_account.py | ||
test_container.py | ||
test_object.py | ||
tests.py |