Skip to content

Instantly share code, notes, and snippets.

@chianingwang
Last active July 20, 2018 22:31
Show Gist options
  • Save chianingwang/4290ff3cc95482f1cf571bcf3e976f4d to your computer and use it in GitHub Desktop.
Save chianingwang/4290ff3cc95482f1cf571bcf3e976f4d to your computer and use it in GitHub Desktop.
import hashlib
import itertools
import os
import swiftclient
import time
import logging
def copy_to_swift():
logger = logging.getLogger('swiftclient')
logger.setLevel('DEBUG')
logger.addHandler(logging.StreamHandler())
function_start = time.time()
conn = swiftclient.Connection(
authurl='https://test.swiftstack.org/auth/v1.0',
user='test',
key='xxxx',
auth_version='1',
)
for path, subdirs, files in os.walk('/tmp/test'):
print path
# If it's not a subdir of gluster with files in it, skip.
if subdirs or not files:
continue
#container_name = "conn_test" + files[0][:4]
container_name = "conn_test"
for file in files:
start_write_time = time.time()
conn.put_object(container_name, file, os.path.join(path, file), headers={'if-none-match': '*'})
end_write_time = time.time()
print "Wrote object %s to Swift in %.2fs" % (file, end_write_time - start_write_time)
function_end = time.time()
print "copying to swift took: %.2fs" % (function_end - function_start)
if __name__ == '__main__':
copy_to_swift()
#verify_files_copied_to_swift()
import hashlib
import itertools
import os
import swiftclient
import time
import logging
from swiftclient.multithreading import OutputManager
from swiftclient.service import SwiftError, SwiftService, SwiftUploadObject
def copy_to_swift():
logger = logging.getLogger('swiftclient')
logger.setLevel('DEBUG')
logger.addHandler(logging.StreamHandler())
logger = logging.getLogger('swiftclient.service')
logger.setLevel('DEBUG')
logger.addHandler(logging.StreamHandler())
test_credentials ={'auth_version':'1',
'auth':'https://test.swiftstack.org/auth/v1.0',
'user':'test', 'key':'xxxx'}
function_start = time.time()
with SwiftService(options=test_credentials) as swift, OutputManager() as out_manager:
try:
#obj_start = time.time()
for path, subdirs, files in os.walk("/tmp/test/"):
print path, subdirs, files
# If it's not a subdir of gluster with files in it, skip.
if subdirs or not files:
continue
#container = "bagstore-" + files[0][:4]
container = "service_test"
print "files prepared: %s at %.2fs" % (files, time.time())
objs = [SwiftUploadObject(os.path.join(path, file), object_name=file) for file in files]
obj_start = time.time()
r = swift.upload(container, objs, options={})
for i in r:
print i
'''
for r in swift.upload(container, objs, options={'header': ['if-none-match:*']}):
print "files uploaded: %s at %.2fs" % (files, time.time())
if r['success']:
print "files success: %s at %.2fs" % (files, time.time())
if 'object' in r:
print "files object: %s at %.2fs" % (r['object'], time.time())
#print(r['object'])
elif 'for_object' in r:
print "files for_object: %s at %.2fs" % (r['for_object'], time.time())
print('%s segment %s' % (r['for_object'], r['segment_index']))
else:
error = r['error']
print "files error: %s at %.2fs" % (error, time.time())
if r['action'] == "upload_object":
print("Did not upload object %s to container %s: %s" % (container, r['object'], error))
else:
print(error)
'''
obj_end = time.time()
obj_upload_time = (obj_end - obj_start)
print "files: %s upload took: %.2fs" % (files, obj_upload_time)
except SwiftError as e:
logger.error(e.value)
function_end = time.time()
print "copying to swift took: %.2fs" % (function_end - function_start)
if __name__ == '__main__':
copy_to_swift()
@chianingwang
Copy link
Author

  • test_service.py debug outpu
/tmp/test/ [] ['test1.txt', '100MB', 'test2.txt', 'test3.txt']
files prepared: ['test1.txt', '100MB', 'test2.txt', 'test3.txt'] at 1532125083.91s
REQ: curl -i https://test.swiftstack.org/auth/v1.0 -X GET
RESP STATUS: 200 OK
RESP HEADERS: {u'Content-Length': u'0', u'Set-Cookie': u'X-Auth-Token=AUT...', u'X-Trans-Id': u'tx95da73540ea042c2a2272-005b525f9c', u'X-Auth-Token': u'AUTH_tk5f01bb73e...', u'X-Storage-Token': u'AUTH_tk5f01bb73e...', u'Date': u'Fri, 20 Jul 2018 22:18:04 GMT', u'X-Storage-Url': u'https://test.swiftstack.org/v1/AUTH_test', u'Content-Type': u'text/plain; charset=UTF-8', u'X-Openstack-Request-Id': u'tx95da73540ea042c2a2272-005b525f9c'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test -X PUT -H "Content-Length: 0" -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 201 Created
RESP HEADERS: {u'Date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'Content-Length': u'0', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'txb4640d73f28d48478b0de-005b525f9c', u'X-Trans-Id': u'txb4640d73f28d48478b0de-005b525f9c'}
{u'action': u'create_container', u'headers': {}, u'container': u'service_test', u'response_dict': {'status': 201, 'headers': {u'date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'content-length': u'0', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'txb4640d73f28d48478b0de-005b525f9c', u'x-trans-id': u'txb4640d73f28d48478b0de-005b525f9c'}, 'reason': 'Created', 'response_dicts': [{'status': 201, 'headers': {u'date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'content-length': u'0', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'txb4640d73f28d48478b0de-005b525f9c', u'x-trans-id': u'txb4640d73f28d48478b0de-005b525f9c'}, 'reason': 'Created'}]}, u'success': True}
REQ: curl -i https://test.swiftstack.org/auth/v1.0 -X GET
RESP STATUS: 200 OK
RESP HEADERS: {u'Content-Length': u'0', u'Set-Cookie': u'X-Auth-Token=AUT...', u'X-Trans-Id': u'tx6d302d3c30b647078ed8e-005b525f9d', u'X-Auth-Token': u'AUTH_tk5f01bb73e...', u'X-Storage-Token': u'AUTH_tk5f01bb73e...', u'Date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'X-Storage-Url': u'https://test.swiftstack.org/v1/AUTH_test', u'Content-Type': u'text/plain; charset=UTF-8', u'X-Openstack-Request-Id': u'tx6d302d3c30b647078ed8e-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/auth/v1.0 -X GET
RESP STATUS: 200 OK
RESP HEADERS: {u'Content-Length': u'0', u'Set-Cookie': u'X-Auth-Token=AUT...', u'X-Trans-Id': u'tx6a0dc5ef1360481abc763-005b525f9d', u'X-Auth-Token': u'AUTH_tk5f01bb73e...', u'X-Storage-Token': u'AUTH_tk5f01bb73e...', u'Date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'X-Storage-Url': u'https://test.swiftstack.org/v1/AUTH_test', u'Content-Type': u'text/plain; charset=UTF-8', u'X-Openstack-Request-Id': u'tx6a0dc5ef1360481abc763-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/auth/v1.0 -X GET
RESP STATUS: 200 OK
RESP HEADERS: {u'Content-Length': u'0', u'Set-Cookie': u'X-Auth-Token=AUT...', u'X-Trans-Id': u'txa3c0886b06ae476e87208-005b525f9d', u'X-Auth-Token': u'AUTH_tk5f01bb73e...', u'X-Storage-Token': u'AUTH_tk5f01bb73e...', u'Date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'X-Storage-Url': u'https://test.swiftstack.org/v1/AUTH_test', u'Content-Type': u'text/plain; charset=UTF-8', u'X-Openstack-Request-Id': u'txa3c0886b06ae476e87208-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/auth/v1.0 -X GET
RESP STATUS: 200 OK
RESP HEADERS: {u'Content-Length': u'0', u'Set-Cookie': u'X-Auth-Token=AUT...', u'X-Trans-Id': u'tx6d45abfe5f4d492f82d9e-005b525f9d', u'X-Auth-Token': u'AUTH_tk5f01bb73e...', u'X-Storage-Token': u'AUTH_tk5f01bb73e...', u'Date': u'Fri, 20 Jul 2018 22:18:05 GMT', u'X-Storage-Url': u'https://test.swiftstack.org/v1/AUTH_test', u'Content-Type': u'text/plain; charset=UTF-8', u'X-Openstack-Request-Id': u'tx6d45abfe5f4d492f82d9e-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/100MB -I -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 404 Not Found
RESP HEADERS: {u'Date': u'Fri, 20 Jul 2018 22:18:08 GMT', u'Content-Length': u'0', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'txa832e0a6fc404345a1fa9-005b525f9d', u'X-Trans-Id': u'txa832e0a6fc404345a1fa9-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test3.txt -I -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 404 Not Found
RESP HEADERS: {u'Date': u'Fri, 20 Jul 2018 22:18:08 GMT', u'Content-Length': u'0', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'txdd39557d18f24afeb47b1-005b525f9d', u'X-Trans-Id': u'txdd39557d18f24afeb47b1-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test1.txt -I -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 404 Not Found
RESP HEADERS: {u'Date': u'Fri, 20 Jul 2018 22:18:08 GMT', u'Content-Length': u'0', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx9bcb9df4113344b7a03bf-005b525f9d', u'X-Trans-Id': u'tx9bcb9df4113344b7a03bf-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test2.txt -I -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 404 Not Found
RESP HEADERS: {u'Date': u'Fri, 20 Jul 2018 22:18:08 GMT', u'Content-Length': u'0', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx86f19f5c030e44d9a0f7d-005b525f9d', u'X-Trans-Id': u'tx86f19f5c030e44d9a0f7d-005b525f9d'}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test1.txt -X PUT -H "Content-Length: 36" -H "x-object-meta-mtime: 1532121001.394691" -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 201 Created
RESP HEADERS: {u'Content-Length': u'0', u'Last-Modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'X-Trans-Id': u'tx5f12c7bcb4084323a12da-005b525fa0', u'Date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx5f12c7bcb4084323a12da-005b525fa0'}
{u'status': u'uploaded', u'large_object': False, u'container': u'service_test', u'success': True, u'object': u'test1.txt', u'headers': {u'x-object-meta-mtime': u'1532121001.394691'}, u'attempts': 1, u'action': u'upload_object', u'path': '/tmp/test/test1.txt', u'response_dict': {'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx5f12c7bcb4084323a12da-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx5f12c7bcb4084323a12da-005b525fa0'}, 'reason': 'Created', 'response_dicts': [{'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx5f12c7bcb4084323a12da-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx5f12c7bcb4084323a12da-005b525fa0'}, 'reason': 'Created'}]}}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test2.txt -X PUT -H "Content-Length: 36" -H "x-object-meta-mtime: 1532121032.576181" -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 201 Created
RESP HEADERS: {u'Content-Length': u'0', u'Last-Modified': u'Fri, 20 Jul 2018 22:18:10 GMT', u'Etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'X-Trans-Id': u'tx49675e5f688b4e74b4b36-005b525fa1', u'Date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx49675e5f688b4e74b4b36-005b525fa1'}
{u'status': u'uploaded', u'large_object': False, u'container': u'service_test', u'success': True, u'object': u'test2.txt', u'headers': {u'x-object-meta-mtime': u'1532121032.576181'}, u'attempts': 1, u'action': u'upload_object', u'path': '/tmp/test/test2.txt', u'response_dict': {'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:10 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx49675e5f688b4e74b4b36-005b525fa1', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx49675e5f688b4e74b4b36-005b525fa1'}, 'reason': 'Created', 'response_dicts': [{'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:10 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx49675e5f688b4e74b4b36-005b525fa1', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx49675e5f688b4e74b4b36-005b525fa1'}, 'reason': 'Created'}]}}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/test3.txt -X PUT -H "Content-Length: 36" -H "x-object-meta-mtime: 1532121035.473536" -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 201 Created
RESP HEADERS: {u'Content-Length': u'0', u'Last-Modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'X-Trans-Id': u'tx245d979a8c2e4b239093d-005b525fa0', u'Date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx245d979a8c2e4b239093d-005b525fa0'}
{u'status': u'uploaded', u'large_object': False, u'container': u'service_test', u'success': True, u'object': u'test3.txt', u'headers': {u'x-object-meta-mtime': u'1532121035.473536'}, u'attempts': 1, u'action': u'upload_object', u'path': '/tmp/test/test3.txt', u'response_dict': {'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx245d979a8c2e4b239093d-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx245d979a8c2e4b239093d-005b525fa0'}, 'reason': 'Created', 'response_dicts': [{'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'b32ff06838cb19dc773b6ced72a8ed03', u'x-trans-id': u'tx245d979a8c2e4b239093d-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:09 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx245d979a8c2e4b239093d-005b525fa0'}, 'reason': 'Created'}]}}
REQ: curl -i https://test.swiftstack.org/v1/AUTH_test/service_test/100MB -X PUT -H "Content-Length: 104857600" -H "x-object-meta-mtime: 1532121063.552078" -H "X-Auth-Token: AUTH_tk5f01bb73e..."
RESP STATUS: 201 Created
RESP HEADERS: {u'Content-Length': u'0', u'Last-Modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'Etag': u'978fe39760e4d83e05c41579c35c3596', u'X-Trans-Id': u'tx44a91570c94b4fc9b9a8b-005b525fa0', u'Date': u'Fri, 20 Jul 2018 22:18:50 GMT', u'Content-Type': u'text/html; charset=UTF-8', u'X-Openstack-Request-Id': u'tx44a91570c94b4fc9b9a8b-005b525fa0'}
{u'status': u'uploaded', u'large_object': False, u'container': u'service_test', u'success': True, u'object': u'100MB', u'headers': {u'x-object-meta-mtime': u'1532121063.552078'}, u'attempts': 1, u'action': u'upload_object', u'path': '/tmp/test/100MB', u'response_dict': {'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'978fe39760e4d83e05c41579c35c3596', u'x-trans-id': u'tx44a91570c94b4fc9b9a8b-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:50 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx44a91570c94b4fc9b9a8b-005b525fa0'}, 'reason': 'Created', 'response_dicts': [{'status': 201, 'headers': {u'content-length': u'0', u'last-modified': u'Fri, 20 Jul 2018 22:18:09 GMT', u'etag': u'978fe39760e4d83e05c41579c35c3596', u'x-trans-id': u'tx44a91570c94b4fc9b9a8b-005b525fa0', u'date': u'Fri, 20 Jul 2018 22:18:50 GMT', u'content-type': u'text/html; charset=UTF-8', u'x-openstack-request-id': u'tx44a91570c94b4fc9b9a8b-005b525fa0'}, 'reason': 'Created'}]}}
ERROR:root:message
None
files: ['test1.txt', '100MB', 'test2.txt', 'test3.txt'] upload took: 46.61s
copying to swift took: 46.62s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment