Skip to content

Bug: daemon adaptors do not report progress or status messages #109

@epmog

Description

@epmog

Expected Behaviour

Adaptors running as a daemon should properly pass along openjd_progress and openjd_status messages to the frontend runner.

Current Behaviour

Adaptors using run will work and spit out the proper openjd_progress/openjd_status messages, but daemon run print out nothing since the background process

Reproduction Steps

Here's an the integ adaptor with modifying it to call update_status(progress=0) and update_status(progress=100)

run:

I(openjd-adaptor-runtime) bash-3.2$ python -m integ.AdaptorExample run --run-data '{"hello": "world"}'
...
INFO: on_run: {'hello': 'world'}
openjd_progress: 0
 ...
STDOUT: Performing action: {"name": "print", "args": {"message": "`on_run` is called with run_data: {'hello': 'world'}"}}
STDOUT: App: `on_run` is called with run_data: {'hello': 'world'}
openjd_progress: 100
...

However, when run as a daemon, nothing is hooked up to the stdout. So we're piping the messages nowhere instead of the log.

daemon run:

(openjd-adaptor-runtime) bash-3.2$ python -m integ.AdaptorExample daemon run --connection-file ./AdaptorExampleConnection.json --run-data '{"hello": "world"}'
INFO: Applying user-level configuration: /Users/morgane/.openjd/worker/adaptors/runtime/configuration.json
INFO: Applying user-level configuration: /Users/morgane/.openjd/adaptors/AdaptorExample/AdaptorExample.json
ADAPTOR_OUTPUT: 
ADAPTOR_OUTPUT: INFO: on_run: {'hello': 'world'}
ADAPTOR_OUTPUT: STDOUT: Performing action: {"name": "print", "args": {"message": "`on_run` is called with run_data: {'hello': 'world'}"}}
ADAPTOR_OUTPUT: STDOUT: App: `on_run` is called with run_data: {'hello': 'world'}
ADAPTOR_OUTPUT: STDOUT: Performing action: {"name": "print", "args": {"message": "`on_run` is finished."}}
ADAPTOR_OUTPUT: STDOUT: App: `on_run` is finished.

Code Snippet

def update_status(
cls, *, progress: float | None = None, status_message: str | None = None
) -> None:
"""Using OpenJD stdout prefixes the adaptor will notify the
Worker Agent about the progress, status message, or both"""
if progress is None and status_message is None:
_logger.warning("Both progress and status message were None. Ignoring status update.")
return
if progress is not None:
if math.isfinite(progress):
sys.stdout.write(f"{cls._OPENJD_PROGRESS_STDOUT_PREFIX}{progress}{os.linesep}")
sys.stdout.flush()
else:
_logger.warning(
f"Attempted to set progress to something non-finite: {progress}. "
"Ignoring progress update."
)
if status_message is not None:
sys.stdout.write(f"{cls._OPENJD_STATUS_STDOUT_PREFIX}{status_message}{os.linesep}")
sys.stdout.flush()

This should be going to the log buffer if it's running as a daemon, but we should ensure it continues to work with a normal run. logging might automatically add a prefix, so we may need to control these specific logs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions