Project

General

Profile

Download (2.38 KB) Statistics
| Branch: | Tag: | Revision:
import os
import random
import subprocess
import sys

MEGA = 2**20

def main():
if len(sys.argv) < 6:
print 'ERROR: not enough arguments provided'
return -1
# Assign input arguments
write_path = sys.argv[1]
min_chunks_per_file = int(sys.argv[2])
max_chunks_per_file = int(sys.argv[3])
chunk_size = int(sys.argv[4])
max_write_amount = int(sys.argv[5])
# Do some basic input validation for S&G
if min_chunks_per_file > max_chunks_per_file:
print 'ERROR: specified minimum chunks per file is larger than '\
'specified maximum chunks per file'
return -1
if chunk_size > max_write_amount:
print 'ERROR: specified chunk size is larger than specified maximum '\
'write amount'
amount_written = 0
file_counter = 0
chunk_idx_counter = 0
total_written = 0
keep_running = True
while keep_running:
# Create the file name and randomly determine the number of blocks
file_name = '%08X' % file_counter
file_counter += 1
chunks_per_file = random.randint(min_chunks_per_file, max_chunks_per_file)
file_size = chunks_per_file * chunk_size
# Make sure we don't write more than intended
if (total_written + file_size) > max_write_amount:
chunks_per_file = (max_write_amount - total_written) / chunk_size
file_size = chunks_per_file * chunk_size
keep_running = False
# Print out status
sys.stdout.write('Creating file "%s" with %5d chunks - %7d MB ... ' %
(file_name, chunks_per_file, file_size))
sys.stdout.flush()
# Make the "file" directory
path = os.path.join(write_path, file_name)
os.mkdir(path)
# Create each of the actual chunk files
for chunk in xrange(chunks_per_file):
chunk_name = '%016X' % chunk_idx_counter
chunk_idx_counter += 1
chunk_path = os.path.join(path, chunk_name)
command = 'head -c %d /dev/zero > %s' % (chunk_size * MEGA, chunk_path)
subprocess.call(command, shell=True)
sys.stdout.write('DONE\n')
total_written += file_size
print ' Total written: %d MB' % total_written
if __name__ == '__main__':
sys.exit(main())
(3-3/4)