Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
e734a05
snap
andre-merzky Mar 3, 2025
ac30f57
add simple yappi resource manager
andre-merzky Mar 3, 2025
d750b93
Merge branch 'feature/yappi' into fix/flux
andre-merzky Mar 3, 2025
04698dc
merge from devel
andre-merzky Mar 4, 2025
6175b9f
merge from devel
andre-merzky Mar 4, 2025
fbfe1e7
merge from devel
andre-merzky Mar 5, 2025
1d11588
merge from devel
andre-merzky Mar 5, 2025
7e88c30
merge from devel
andre-merzky Mar 5, 2025
d4c333a
merge from devel
andre-merzky Mar 5, 2025
22ff26c
merge from devel
andre-merzky Mar 12, 2025
bfac7ff
merge from devel
andre-merzky Mar 12, 2025
f5378a8
merge from devel
andre-merzky Mar 17, 2025
16d0fcf
merge from devel
andre-merzky Mar 17, 2025
ab92c3f
merge from devel
andre-merzky Mar 18, 2025
19054ec
merge from devel
andre-merzky Mar 18, 2025
0b4a88a
snap
andre-merzky Mar 19, 2025
048e356
snap
andre-merzky Mar 19, 2025
d5e74e0
Merge branch 'fix/flux' of github.com:radical-cybertools/radical.util…
andre-merzky Mar 19, 2025
0825681
snap
andre-merzky Mar 19, 2025
3da53e7
snap
andre-merzky Mar 19, 2025
cc127cb
more details, faster typed-dict
andre-merzky Mar 20, 2025
c3ca6e5
Merge branch 'feature/yappi' into fix/flux
andre-merzky Mar 20, 2025
e78cdb2
capture flux stderr
andre-merzky Mar 20, 2025
1eb90c2
snap
andre-merzky Mar 21, 2025
130dfc5
snap
andre-merzky Mar 21, 2025
f99a189
snap
andre-merzky Mar 24, 2025
b0b4523
snap
andre-merzky Mar 27, 2025
22285ca
snap
andre-merzky Mar 28, 2025
de0a839
snap
andre-merzky Mar 28, 2025
4101b05
snap
andre-merzky Mar 29, 2025
c6b8ae7
snap
andre-merzky Mar 29, 2025
ee2b2e0
snap
andre-merzky Mar 29, 2025
9255139
snap
andre-merzky Mar 30, 2025
268360f
snap
andre-merzky Mar 30, 2025
9ba3d4b
snap
andre-merzky Mar 30, 2025
b21fe40
snap
andre-merzky Mar 30, 2025
11adc53
snap
andre-merzky Mar 30, 2025
d09c285
fix uri detection;
andre-merzky Mar 31, 2025
05663bb
fix uri detection
andre-merzky Apr 1, 2025
9994d68
add missing `_flux_v`
andre-merzky Apr 2, 2025
c363b96
snap
andre-merzky Apr 2, 2025
3ab066d
Merge branch 'fix/flux' of github.com:radical-cybertools/radical.util…
andre-merzky Apr 2, 2025
f398edc
merge from devel
andre-merzky Apr 3, 2025
2062bd1
recover module path hack for flux
andre-merzky Apr 3, 2025
efa166b
fix an exception
andre-merzky Apr 3, 2025
6b686f1
Merge branch 'fix/flux' of github.com:radical-cybertools/radical.util…
andre-merzky Apr 3, 2025
12ec9cd
shield from non-events
andre-merzky Apr 4, 2025
6f4494f
better reporting
andre-merzky Apr 9, 2025
1e0f4a5
better reporting
andre-merzky Apr 9, 2025
1c27f2c
typo
andre-merzky Apr 9, 2025
c8343f2
restructure flux code
andre-merzky Apr 10, 2025
c2cf706
merge from devel
andre-merzky May 28, 2025
c3834a3
type hint fixes
andre-merzky Jun 11, 2025
1f72244
cleanup
andre-merzky Jul 7, 2025
9de2bb3
fix timeout
andre-merzky Jul 30, 2025
bf6e712
updated JobSpec creation
mtitov Aug 13, 2025
0367672
allow env variable being referred as part of the value
mtitov Aug 17, 2025
c507ce2
added control over exit procedures for Flux jobs/tasks (`exit-on-erro…
mtitov Sep 9, 2025
8f1b6ab
fix tests
andre-merzky Sep 24, 2025
8118c16
fix tests
andre-merzky Sep 24, 2025
72c36aa
Update src/radical/utils/flux/flux_helper_v0.py
andre-merzky Sep 29, 2025
cb30eae
respond to comments
andre-merzky Sep 29, 2025
fabc451
Merge branch 'fix/flux' of github.com:radical-cybertools/radical.util…
andre-merzky Sep 29, 2025
19d86b3
respond to comments
andre-merzky Sep 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/radical-stack
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import radical.utils as ru

namespaces = sys.argv[1:]
if not namespaces:
namespaces = ['radical']
namespaces = ['radical', 'rc']

stack = ru.stack(namespaces)

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ ntplib
pyzmq
regex
setproctitle
rc.process

3 changes: 2 additions & 1 deletion src/radical/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
from .zmq import PubSub, Publisher, Subscriber
from .zmq import Server, Client

from .flux import FluxHelper
from .flux import FluxService, FluxHelper

from .logger import DEBUG, INFO, WARNING, WARN, ERROR, CRITICAL, OFF
from .logger import Logger
Expand All @@ -75,6 +75,7 @@
from .profile import read_profiles, combine_profiles, clean_profile
from .profile import TIME, EVENT, COMP, TID, UID, STATE, MSG, ENTITY
from .profile import PROF_KEY_MAX
from .profile import Yappi

from .json_io import read_json, read_json_str, write_json
from .json_io import parse_json, parse_json_str, dumps_json
Expand Down
56 changes: 28 additions & 28 deletions src/radical/utils/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ def env_read(fname: str) -> Dict[str, str]:

# ------------------------------------------------------------------------------
#
def env_write(script_path, env, unset=None, blacklist=None, pre_exec=None):
def env_write(script_path, env, unset=None, blacklist=None, pre_exec=None,
extend=False):

data = '\n'
if unset:
Expand Down Expand Up @@ -104,7 +105,7 @@ def env_write(script_path, env, unset=None, blacklist=None, pre_exec=None):
continue
if not re_snake_case.match(k):
continue
data += "export %s=%s\n" % (k, _quote(env[k]))
data += "export %s=%s\n" % (k, _quote(env[k], extend=extend))
data += '\n'

if funcs:
Expand Down Expand Up @@ -194,14 +195,15 @@ def env_read_lines(lines: List[str]) -> Dict[str, str]:

# ------------------------------------------------------------------------------
#
def _quote(data: str) -> str:
def _quote(data: str, extend: bool = False) -> str:

if "'" in data or '$' in data or '`' in data:
# cannot use single quote, so use double quote and escale all other
# double quotes in the data
# NOTE: we only support these three types of shell directives
data = data.replace('"', '\\"') \
.replace('$', '\\$')
data = data.replace('"', '\\"')
if not extend:
data = data.replace('$', '\\$')
data = '"' + data + '"'

else:
Expand Down Expand Up @@ -407,7 +409,7 @@ def env_prep(environment : Optional[Dict[str,str]] = None,
_, tmp_name = tempfile.mkstemp(prefix=prefix, dir=tgt)

env_write(tmp_name, env=environment, unset=unset, blacklist=blacklist,
pre_exec=pre_exec_cached)
pre_exec=pre_exec_cached, extend=False)
cmd = '/bin/bash -c ". %s && /usr/bin/env"' % tmp_name
out, err, ret = sh_callout(cmd)

Expand All @@ -430,7 +432,7 @@ def env_prep(environment : Optional[Dict[str,str]] = None,
# FIXME: files could also be cached and re-used (copied or linked)
if script_path:
env_write(script_path, env=env, unset=unset, blacklist=blacklist,
pre_exec=pre_exec)
pre_exec=pre_exec, extend=True)

return env

Expand Down Expand Up @@ -544,7 +546,12 @@ def __exit__(self, exc_type: Optional[Exception],
exc_tb : Optional[Any]
) -> None:

if exc_type and self._child:
if self._parent:
while self._data is None:
try : self._data = self._q.get(timeout=1)
except queue.Empty: pass

elif exc_type and self._child:
stacktrace = ' '.join(traceback.format_exception(
exc_type, exc_val, exc_tb))
self._q.put([None, exc_type, exc_val, stacktrace])
Expand All @@ -553,41 +560,34 @@ def __exit__(self, exc_type: Optional[Exception],
os._exit(0)


if self._parent:

while True:
try:
self._data = self._q.get(timeout=1)
break
except queue.Empty:
self._data = None
pass


# --------------------------------------------------------------------------
#
def put(self, data: str) -> None:

if self._child:
self._q.put([data, None, None, None])
self._q.close()
self._q.join_thread()
os._exit(0)
assert self._child

self._q.put([data, None, None, None])
self._q.close()
self._q.join_thread()
os._exit(0)


# --------------------------------------------------------------------------
#
def get(self) -> Any:

assert self._parent

if self._data is None:
return


data, exc_type, exc_val, stacktrace = self._data
if exc_type:
sys.stdout.write('%s [%s]\n' % (exc_type, exc_val))
sys.stdout.write('%s\n\n' % stacktrace)
raise exc_type # pylint: disable=raising-bad-type
sys.stderr.write('envp excepted %s(%s)\n' % (exc_type, exc_val))
sys.stderr.write(stacktrace)
sys.stderr.flush()
raise RuntimeError('envp failed: %s(%s) - check stderr'
% (exc_type, exc_val))

return data

Expand Down
Loading