Skip to content

Commit 3312d29

Browse files
qubixesalanking
authored andcommitted
[#543] Fix issue with parallel downloads to a directory
Add get/put test for large files
1 parent 9206646 commit 3312d29

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

irods/manager/data_object_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def _download(self, obj, local_path, num_threads, **options):
142142
with self.open(obj, 'r', returned_values = data_open_returned_values_, **options) as o:
143143
if self.should_parallelize_transfer (num_threads, o, open_options = options.items()):
144144
f.close()
145-
if not self.parallel_get( (obj,o), local_path, num_threads = num_threads,
145+
if not self.parallel_get( (obj,o), local_file, num_threads = num_threads,
146146
target_resource_name = options.get(kw.RESC_NAME_KW,''),
147147
data_open_returned_values = data_open_returned_values_):
148148
raise RuntimeError("parallel get failed")

irods/test/data_obj_test.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,15 @@ def test_get_replica_size(self):
13041304
resource.remove()
13051305

13061306

1307-
def test_obj_put_get(self):
1307+
def test_obj_put_get_small(self):
1308+
# Test put/get with 16M binary file that will be transferred with a single thread.
1309+
self._check_obj_put_get(1024 * 1024 * 16)
1310+
1311+
def test_obj_put_get_large(self):
1312+
# Test put/get with binary file that is large enough to trigger parallel transfers.
1313+
self._check_obj_put_get(data_object_manager.MAXIMUM_SINGLE_THREADED_TRANSFER_SIZE + 1)
1314+
1315+
def _check_obj_put_get(self, file_size):
13081316
# Can't do one step open/create with older servers
13091317
if self.sess.server_version <= (4, 1, 4):
13101318
self.skipTest('For iRODS 4.1.5 and newer')
@@ -1315,9 +1323,9 @@ def test_obj_put_get(self):
13151323
test_file = os.path.join(test_dir, filename)
13161324
collection = self.coll.path
13171325

1318-
# make random 16M binary file
1326+
# make random binary file
13191327
with open(test_file, 'wb') as f:
1320-
f.write(os.urandom(1024 * 1024 * 16))
1328+
f.write(os.urandom(file_size))
13211329

13221330
# compute file checksum
13231331
digest = self.sha256_checksum(test_file)

0 commit comments

Comments
 (0)