Skip to content

Commit c0cf74d

Browse files
authored
Skip calling debug statements with expensive json.dumps() (#238)
* Skip calling debug statements with expensive json.dumps() unless debugging is enabled. * Add typeshed stubs for logging with isEnabledFor() bugfix.
1 parent 6385c96 commit c0cf74d

File tree

7 files changed

+605
-13
lines changed

7 files changed

+605
-13
lines changed

cwltool/draft2tool.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,12 @@ def rm_pending_output_callback(output_callback, jobcachepending,
259259
j.hints = self.hints
260260
j.name = jobname
261261

262-
_logger.debug(u"[job %s] initializing from %s%s",
263-
j.name,
264-
self.tool.get("id", ""),
265-
u" as part of %s" % kwargs["part_of"] if "part_of" in kwargs else "")
266-
_logger.debug(u"[job %s] %s", j.name, json.dumps(joborder, indent=4))
262+
if _logger.isEnabledFor(logging.DEBUG):
263+
_logger.debug(u"[job %s] initializing from %s%s",
264+
j.name,
265+
self.tool.get("id", ""),
266+
u" as part of %s" % kwargs["part_of"] if "part_of" in kwargs else "")
267+
_logger.debug(u"[job %s] %s", j.name, json.dumps(joborder, indent=4))
267268

268269

269270
builder.pathmapper = None
@@ -274,7 +275,8 @@ def rm_pending_output_callback(output_callback, jobcachepending,
274275
builder.pathmapper = self.makePathMapper(reffiles, builder.stagedir, **make_path_mapper_kwargs)
275276
builder.requirements = j.requirements
276277

277-
_logger.debug(u"[job %s] path mappings is %s", j.name, json.dumps({p: builder.pathmapper.mapper(p) for p in builder.pathmapper.files()}, indent=4))
278+
if _logger.isEnabledFor(logging.DEBUG):
279+
_logger.debug(u"[job %s] path mappings is %s", j.name, json.dumps({p: builder.pathmapper.mapper(p) for p in builder.pathmapper.files()}, indent=4))
278280

279281
_check_adjust = partial(check_adjust, builder)
280282

@@ -297,7 +299,8 @@ def rm_pending_output_callback(output_callback, jobcachepending,
297299
if os.path.isabs(j.stdout) or ".." in j.stdout or not j.stdout:
298300
raise validate.ValidationException("stdout must be a relative path")
299301

300-
_logger.debug(u"[job %s] command line bindings is %s", j.name, json.dumps(builder.bindings, indent=4))
302+
if _logger.isEnabledFor(logging.DEBUG):
303+
_logger.debug(u"[job %s] command line bindings is %s", j.name, json.dumps(builder.bindings, indent=4))
301304

302305
dockerReq = self.get_requirement("DockerRequirement")[0]
303306
if dockerReq and kwargs.get("use_container"):
@@ -383,7 +386,8 @@ def collect_output_ports(self, ports, builder, outdir, compute_checksum=True):
383386
if fs_access.exists(custom_output):
384387
with fs_access.open(custom_output, "r") as f:
385388
ret = json.load(f)
386-
_logger.debug(u"Raw output from %s: %s", custom_output, json.dumps(ret, indent=4))
389+
if _logger.isEnabledFor(logging.DEBUG):
390+
_logger.debug(u"Raw output from %s: %s", custom_output, json.dumps(ret, indent=4))
387391
else:
388392
for port in ports:
389393
fragment = shortname(port["id"])

cwltool/job.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,9 @@ def linkoutdir(src, tgt):
315315
_logger.warn(u"[job %s] completed %s", self.name, processStatus)
316316
else:
317317
_logger.debug(u"[job %s] completed %s", self.name, processStatus)
318-
_logger.debug(u"[job %s] %s", self.name, json.dumps(outputs, indent=4))
318+
319+
if _logger.isEnabledFor(logging.DEBUG):
320+
_logger.debug(u"[job %s] %s", self.name, json.dumps(outputs, indent=4))
319321

320322
self.output_callback(outputs, processStatus)
321323

cwltool/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ def load_job_order(args, t, stdin, print_input_deps=False, relative_deps=False,
458458

459459
job_order_object.update({namemap[k]: v for k,v in cmd_line.items()})
460460

461-
_logger.debug(u"Parsed job order from command line: %s", json.dumps(job_order_object, indent=4))
461+
if _logger.isEnabledFor(logging.DEBUG):
462+
_logger.debug(u"Parsed job order from command line: %s", json.dumps(job_order_object, indent=4))
462463
else:
463464
job_order_object = None
464465

cwltool/workflow.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ def receive_output(self, step, outputparms, jobout, processStatus):
229229
_logger.error(u"Output is missing expected field %s" % i["id"])
230230
processStatus = "permanentFail"
231231

232-
_logger.debug(u"[%s] produced output %s", step.name, json.dumps(jobout, indent=4))
232+
if _logger.isEnabledFor(logging.DEBUG):
233+
_logger.debug(u"[%s] produced output %s", step.name, json.dumps(jobout, indent=4))
233234

234235
if processStatus != "success":
235236
if self.processStatus != "permanentFail":
@@ -312,9 +313,13 @@ def valueFromFunc(k, v): # type: (Any, Any) -> Any
312313
# https://github.com/python/mypy/issues/797
313314
callback), 0, **kwargs))
314315
else:
315-
_logger.debug(u"[job %s] job input %s", step.name, json.dumps(inputobj, indent=4))
316+
if _logger.isEnabledFor(logging.DEBUG):
317+
_logger.debug(u"[job %s] job input %s", step.name, json.dumps(inputobj, indent=4))
318+
316319
inputobj = postScatterEval(inputobj)
317-
_logger.debug(u"[job %s] evaluated job input to %s", step.name, json.dumps(inputobj, indent=4))
320+
321+
if _logger.isEnabledFor(logging.DEBUG):
322+
_logger.debug(u"[job %s] evaluated job input to %s", step.name, json.dumps(inputobj, indent=4))
318323
jobs = step.job(inputobj, callback, **kwargs)
319324

320325
step.submitted = True

0 commit comments

Comments
 (0)