mirror of
https://github.com/ceph/s3-tests.git
synced 2025-02-03 03:56:36 +00:00
Handle and report errors in readwrite test workers.
This commit is contained in:
parent
f3b5ed6ccc
commit
b54e1cbe99
1 changed files with 69 additions and 26 deletions
|
@ -7,6 +7,7 @@ import gevent.monkey; gevent.monkey.patch_all()
|
||||||
import optparse
|
import optparse
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
import random
|
import random
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
@ -21,22 +22,47 @@ def reader(bucket, worker_id, queue):
|
||||||
count = 0
|
count = 0
|
||||||
for key in bucket.list():
|
for key in bucket.list():
|
||||||
fp = realistic.FileVerifier()
|
fp = realistic.FileVerifier()
|
||||||
start = time.time()
|
result = dict(
|
||||||
key.get_contents_to_file(fp)
|
|
||||||
end = time.time()
|
|
||||||
elapsed = end - start
|
|
||||||
queue.put(
|
|
||||||
dict(
|
|
||||||
type='r',
|
type='r',
|
||||||
bucket=bucket.name,
|
bucket=bucket.name,
|
||||||
key=key.name,
|
key=key.name,
|
||||||
#TODO chunks
|
#TODO chunks
|
||||||
start=start,
|
|
||||||
duration=int(round(elapsed * NANOSECOND)),
|
|
||||||
#TODO error, fp.valid()
|
|
||||||
worker=worker_id,
|
worker=worker_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
try:
|
||||||
|
key.get_contents_to_file(fp)
|
||||||
|
except gevent.GreenletExit:
|
||||||
|
raise
|
||||||
|
except Exception as e:
|
||||||
|
# stop timer ASAP, even on errors
|
||||||
|
end = time.time()
|
||||||
|
result.update(
|
||||||
|
error=dict(
|
||||||
|
msg=str(e),
|
||||||
|
traceback=traceback.format_exc(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
# certain kinds of programmer errors make this a busy
|
||||||
|
# loop; let parent greenlet get some time too
|
||||||
|
time.sleep(0)
|
||||||
|
else:
|
||||||
|
end = time.time()
|
||||||
|
|
||||||
|
if not fp.valid():
|
||||||
|
result.update(
|
||||||
|
error=dict(
|
||||||
|
msg='md5sum check failed',
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
elapsed = end - start
|
||||||
|
result.update(
|
||||||
|
start=start,
|
||||||
|
duration=int(round(elapsed * NANOSECOND)),
|
||||||
|
)
|
||||||
|
queue.put(result)
|
||||||
count += 1
|
count += 1
|
||||||
if count == 0:
|
if count == 0:
|
||||||
gevent.sleep(1)
|
gevent.sleep(1)
|
||||||
|
@ -64,23 +90,40 @@ def writer(bucket, worker_id, queue, file_size=1, file_stddev=0, file_name_seed=
|
||||||
objname = next(names)
|
objname = next(names)
|
||||||
key = bucket.new_key(objname)
|
key = bucket.new_key(objname)
|
||||||
|
|
||||||
start = time.time()
|
result = dict(
|
||||||
key.set_contents_from_file(fp)
|
|
||||||
end = time.time()
|
|
||||||
elapsed = end - start
|
|
||||||
|
|
||||||
queue.put(
|
|
||||||
dict(
|
|
||||||
type='w',
|
type='w',
|
||||||
bucket=bucket.name,
|
bucket=bucket.name,
|
||||||
key=key.name,
|
key=key.name,
|
||||||
#TODO chunks
|
#TODO chunks
|
||||||
start=start,
|
|
||||||
duration=int(round(elapsed * NANOSECOND)),
|
|
||||||
#TODO error
|
|
||||||
worker=worker_id,
|
worker=worker_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
try:
|
||||||
|
key.set_contents_from_file(fp)
|
||||||
|
except gevent.GreenletExit:
|
||||||
|
raise
|
||||||
|
except Exception as e:
|
||||||
|
# stop timer ASAP, even on errors
|
||||||
|
end = time.time()
|
||||||
|
result.update(
|
||||||
|
error=dict(
|
||||||
|
msg=str(e),
|
||||||
|
traceback=traceback.format_exc(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
# certain kinds of programmer errors make this a busy
|
||||||
|
# loop; let parent greenlet get some time too
|
||||||
|
time.sleep(0)
|
||||||
|
else:
|
||||||
|
end = time.time()
|
||||||
|
|
||||||
|
elapsed = end - start
|
||||||
|
result.update(
|
||||||
|
start=start,
|
||||||
|
duration=int(round(elapsed * NANOSECOND)),
|
||||||
|
)
|
||||||
|
queue.put(result)
|
||||||
|
|
||||||
def parse_options():
|
def parse_options():
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
|
|
Loading…
Add table
Reference in a new issue