|
Illustrating the ceph DLO/SLO byte range
|
|
|
|
I used a fedora host for running the tests (the "test host")
|
|
python-swift client not available in rhel7 or epel.
|
|
( not tested: virtualenv+pip should work. )
|
|
ceph and radosgw can be hosted on fedora | centos | whatever. (the "radosgw host")
|
|
I used an all in one setup, but the details shouldn't matter.
|
|
|
|
1. create creds.
|
|
as root on the radosgw host.
|
|
radosgw-admin user create --uid=janedoe --display-name="Jane Doe" \
|
|
--access-key=11BS02LGFB6AL6H1ADMW \
|
|
--secret=vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY
|
|
|
|
radosgw-admin subuser create --uid janedoe --subuser=swift \
|
|
--display-name 'Jane Doe, Swift' \
|
|
--secret='E9T2rUZNu2gxUjcwUBO8n/Ev4KX6/GprEuH4qhu1' \
|
|
--key-type swift --access=full
|
|
|
|
2.
|
|
as root on the test host,
|
|
dnf install python-swiftclient
|
|
|
|
3.
|
|
as myself, on the test host
|
|
(vary url etc to match your setup
|
|
export ST_AUTH="http://10.17.152.69/auth/1.0"
|
|
export ST_KEY='E9T2rUZNu2gxUjcwUBO8n/Ev4KX6/GprEuH4qhu1'
|
|
export ST_USER=janedoe:swift
|
|
|
|
4. set, start python, initial configuration
|
|
python
|
|
import swiftclient.client
|
|
from os import environ
|
|
|
|
auth = environ.get('ST_AUTH')
|
|
auth_version = environ.get('ST_AUTH_VERSION', '1.0')
|
|
user = environ.get('ST_USER')
|
|
key = environ.get('ST_KEY')
|
|
|
|
container = "container"
|
|
myobj = "myobj"
|
|
|
|
3. connect to server
|
|
|
|
url, token = swiftclient.client.get_auth(auth, user, key,
|
|
auth_version=auth_version)
|
|
|
|
parsed, c = swiftclient.client.http_connection(url)
|
|
|
|
4. make container
|
|
|
|
e = swiftclient.client.put_container(url, token, container,
|
|
http_conn = (parsed, c))
|
|
e
|
|
# e here should be nothing (on success)
|
|
|
|
4. make object with nz + z segment: match customer pattern.
|
|
|
|
e = swiftclient.client.put_object(url, token, container, myobj + "/00000001",
|
|
"a short bit of text", http_conn = (parsed, c))
|
|
e
|
|
e = swiftclient.client.put_object(url, token, container, myobj + "/00000002",
|
|
http_conn = (parsed, c))
|
|
e
|
|
e = swiftclient.client.put_object(url, token, container, myobj,
|
|
headers={'X-Object-Manifest': container + "/" + myobj + "/"},
|
|
http_conn = (parsed, c))
|
|
e
|
|
# from here on, e values here will be etags: random strings.
|
|
# also rh, rc: rh headers, rc content.
|
|
|
|
5. try out a byte range.
|
|
|
|
headers = {'Range': 'bytes=5-20'}
|
|
|
|
rh,rc = swiftclient.client.get_object(url, token, container, myobj,
|
|
http_conn = (parsed, c), headers=headers)
|
|
rh
|
|
rc
|
|
|
|
error 416 is BAD.
|
|
Should see:
|
|
rh = .. content length 14
|
|
rc = 'rt bit of text'
|
|
|
|
9. cleanup - make all shiny and new
|
|
at cmd line, with ST settings,
|
|
swift list
|
|
swift delete container
|
|
swift list
|
|
|
|
refs,
|
|
python-swiftclient-doc-3.0.0-1.fc24.noarch
|
|
file:///usr/share/doc/python-swiftclient-doc/html/swiftclient.html#module-swiftclient.utils
|
|
http://docs.openstack.org/developer/swift/overview_large_objects.html
|
|
https://bugs.launchpad.net/swift/+bug/1047658
|