Skip to content

Commit 179ec9e

Browse files
committed
When nprocs != 4, varn test program may hang
ensure num_reqs == 0, when rank >= 4 skip file content check, if nprocs < 4
1 parent 8e85613 commit 179ec9e

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

test/tst_var_iput_varn.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
comm = MPI.COMM_WORLD
2727
rank = comm.Get_rank()
28-
size = comm.Get_size()
28+
nprocs = comm.Get_size()
2929
xdim = 4
3030
ydim = 10
3131

@@ -95,10 +95,9 @@
9595
[0, 0, 0, 2, 1, 1, 1, 3, 3, 3]], np.float32)
9696

9797

98-
# reference data for 1<=size<=3
99-
dataref[dataref >= size] = -1
10098
# total number of put requests for the test programs
101-
num_reqs = 10
99+
num_reqs = 10 if rank < 4 else 0
100+
num_vars = 20
102101

103102
# allocate write buffer
104103
buf_len = 0
@@ -121,11 +120,14 @@ def setUp(self):
121120
dy = f.def_dim('y',ydim)
122121

123122
# define 20 netCDF variables
124-
for i in range(num_reqs * 2):
123+
for i in range(num_vars):
125124
v = f.def_var(f'data{i}', pnetcdf.NC_FLOAT, (dx, dy))
126-
# initialize variable values
125+
126+
# leaving define mode
127127
f.enddef()
128-
for i in range(num_reqs * 2):
128+
129+
# initialize variable values
130+
for i in range(num_vars):
129131
v = f.variables[f'data{i}']
130132
v[:] = np.full((xdim, ydim), -1, dtype=np.float32)
131133

@@ -137,41 +139,41 @@ def setUp(self):
137139
req_id = v.iput_var(data, start = starts, count = counts, num = num_subarrays)
138140
# track the reqeust ID for each write reqeust
139141
req_ids.append(req_id)
140-
f.end_indep()
142+
141143
# all processes commit those 10 requests to the file at once using wait_all (collective i/o)
142144
req_errs = [None] * num_reqs
143145
f.wait_all(num_reqs, req_ids, req_errs)
146+
144147
# check request error msg for each unsuccessful requests
145148
for i in range(num_reqs):
146149
if strerrno(req_errs[i]) != "NC_NOERR":
147150
print(f"Error on request {i}:", strerror(req_errs[i]))
148151

149-
# post 10 requests to write an array of values for the last 10 variables w/o tracking req ids
150-
for i in range(num_reqs, num_reqs * 2):
151-
v = f.variables[f'data{i}']
152+
# post 10 requests to write an array of values for the last 10 variables w/o tracking req ids
153+
for i in range(num_reqs):
154+
v = f.variables[f'data{num_reqs + i}']
152155
# post the request to write an array of values
153156
v.iput_var(data, start = starts, count = counts, num = num_subarrays)
154157

155158
# all processes commit all pending requests to the file at once using wait_all (collective i/o)
156159
f.wait_all(num = pnetcdf.NC_PUT_REQ_ALL)
157160
f.close()
158-
assert validate_nc_file(os.environ.get('PNETCDF_DIR'), self.file_path) == 0 if os.environ.get('PNETCDF_DIR') is not None else True
159161

162+
if rank == 0:
163+
if os.environ.get('PNETCDF_DIR') is not None:
164+
assert validate_nc_file(os.environ.get('PNETCDF_DIR'), self.file_path) == 0
160165

161-
def tearDown(self):
162-
# remove the temporary files if the test file ouptut directory not specified
163-
comm.Barrier()
164-
if (rank == 0) and not((len(sys.argv) == 2) and os.path.isdir(sys.argv[1])):
165-
os.remove(self.file_path)
166-
167166
def runTest(self):
168-
"""testing variable iput varn for CDF-5/CDF-2/CDF-1 file format"""
169-
170-
f = pnetcdf.File(self.file_path, 'r')
171-
# test iput_varn and collective i/o wait_all
172-
for i in range(num_reqs * 2):
173-
v = f.variables[f'data{i}']
174-
assert_array_equal(v[:], dataref)
167+
if nprocs < 4:
168+
return
169+
170+
if rank == 0:
171+
# check contents of the output file
172+
f = pnetcdf.File(self.file_path, 'r', comm=MPI.COMM_SELF)
173+
for i in range(num_vars):
174+
v = f.variables[f'data{i}']
175+
assert_array_equal(v[:], dataref)
176+
f.close
175177

176178
if __name__ == '__main__':
177179
suite = unittest.TestSuite()

0 commit comments

Comments
 (0)