Skip to content

Commit 6dc3a8c

Browse files
committed
Merge remote-tracking branch 'origin/master' into benc-stdstreams-bugs
2 parents 6dde5a4 + 410d2cb commit 6dc3a8c

37 files changed

+666
-199
lines changed

.github/workflows/ci.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
main-test-suite:
1111
strategy:
1212
matrix:
13-
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
13+
python-version: ["3.9", "3.10", "3.11", "3.12"]
1414
runs-on: ubuntu-20.04
1515
timeout-minutes: 60
1616

@@ -60,7 +60,7 @@ jobs:
6060
export PARSL_TEST_PRESERVE_NUM_RUNS=7
6161
6262
make test
63-
ln -s .pytest/parsltest-current test_runinfo
63+
ln -s pytest-parsl/parsltest-current test_runinfo
6464
6565
- name: Documentation checks
6666
run: |
@@ -80,11 +80,11 @@ jobs:
8080
# database manager log file or monitoring router log file. It would be better if
8181
# the tests themselves failed immediately when there was a monitoring error, but
8282
# in the absence of that, this is a dirty way to check.
83-
bash -c '! grep ERROR .pytest/parsltest-current/runinfo*/*/database_manager.log'
84-
bash -c '! grep ERROR .pytest/parsltest-current/runinfo*/*/monitoring_router.log'
83+
bash -c '! grep ERROR pytest-parsl/parsltest-current/runinfo*/*/database_manager.log'
84+
bash -c '! grep ERROR pytest-parsl/parsltest-current/runinfo*/*/monitoring_router.log'
8585
8686
# temporary; until test-matrixification
87-
rm -f .pytest/parsltest-current test_runinfo
87+
rm -f pytest-parsl/parsltest-current test_runinfo
8888
8989
- name: Checking parsl-visualize
9090
run: |
@@ -105,6 +105,6 @@ jobs:
105105
name: runinfo-${{ matrix.python-version }}-${{ steps.job-info.outputs.as-ascii }}-${{ github.sha }}
106106
path: |
107107
runinfo/
108-
.pytest/
108+
pytest-parsl/
109109
ci_job_info.txt
110110
compression-level: 9

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ coverage.xml
6363
*.cover
6464
.hypothesis/
6565
/.pytest/
66+
/pytest-parsl/
6667

6768
# Translations
6869
*.mo

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ radical_local_test:
8484

8585
.PHONY: config_local_test
8686
config_local_test: $(CCTOOLS_INSTALL)
87-
pip3 install ".[monitoring,visualization,proxystore]"
87+
pip3 install ".[monitoring,visualization,proxystore,kubernetes]"
8888
PYTHONPATH=/tmp/cctools/lib/python3.8/site-packages pytest parsl/tests/ -k "not cleannet" --config local --random-order --durations 10
8989

9090
.PHONY: site_test

README.rst

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Parsl - Parallel Scripting Library
22
==================================
3-
|licence| |build-status| |docs| |NSF-1550588| |NSF-1550476| |NSF-1550562| |NSF-1550528| |CZI-EOSS|
3+
|licence| |docs| |NSF-1550588| |NSF-1550476| |NSF-1550562| |NSF-1550528| |CZI-EOSS|
44

55
Parsl extends parallelism in Python beyond a single computer.
66

@@ -43,9 +43,6 @@ then explore the `parallel computing patterns <https://parsl.readthedocs.io/en/s
4343
.. |licence| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
4444
:target: https://github.com/Parsl/parsl/blob/master/LICENSE
4545
:alt: Apache Licence V2.0
46-
.. |build-status| image:: https://github.com/Parsl/parsl/actions/workflows/ci.yaml/badge.svg
47-
:target: https://github.com/Parsl/parsl/actions/workflows/ci.yaml
48-
:alt: Build status
4946
.. |docs| image:: https://readthedocs.org/projects/parsl/badge/?version=stable
5047
:target: http://parsl.readthedocs.io/en/stable/?badge=stable
5148
:alt: Documentation Status
@@ -120,7 +117,7 @@ For Developers
120117
Requirements
121118
============
122119

123-
Parsl is supported in Python 3.8+. Requirements can be found `here <requirements.txt>`_. Requirements for running tests can be found `here <test-requirements.txt>`_.
120+
Parsl is supported in Python 3.9+. Requirements can be found `here <requirements.txt>`_. Requirements for running tests can be found `here <test-requirements.txt>`_.
124121

125122
Code of Conduct
126123
===============

codemeta.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@
191191
"name": "The Python Package Index",
192192
"url": "https://pypi.org"
193193
},
194-
"runtimePlatform": "Python 3.8",
194+
"runtimePlatform": "Python 3.9",
195195
"url": "https://github.com/Parsl/parsl",
196196
"developmentStatus": "active",
197-
"programmingLanguage": "Python :: 3.8"
197+
"programmingLanguage": "Python :: 3.9"
198198
}

docs/faq.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ For instance, with conda, follow this `cheatsheet <https://conda.io/docs/_downlo
209209
source activate <my_env>
210210
211211
# Install packages:
212-
conda install <ipyparallel, dill, boto3...>
212+
conda install <dill, boto3...>
213213
214214
215215
How do I run code that uses Python2.X?

docs/quickstart.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Installation
1010

1111
Parsl is available on `PyPI <https://pypi.org/project/parsl/>`_ and `conda-forge <https://anaconda.org/conda-forge/parsl>`_.
1212

13-
Parsl requires Python3.8+ and has been tested on Linux and macOS.
13+
Parsl requires Python3.9+ and has been tested on Linux.
1414

1515

1616
Installation using Pip
@@ -31,7 +31,7 @@ Installation using Conda
3131

3232
1. Create and activate a new conda environment::
3333

34-
$ conda create --name parsl_py38 python=3.8
34+
$ conda create --name parsl_py38 python=3.9
3535
$ source activate parsl_py38
3636

3737
2. Install Parsl::
@@ -236,7 +236,7 @@ for reporting purposes.
236236

237237
As an NSF-funded project, our ability to track usage metrics is important for continued funding.
238238

239-
You can opt-in by setting ``usage_tracking=True`` in the configuration object (`parsl.config.Config`).
239+
You can opt-in by setting ``usage_tracking=3`` in the configuration object (`parsl.config.Config`).
240240

241241
To read more about what information is collected and how it is used see :ref:`label-usage-tracking`.
242242

docs/reference.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ Executors
7878
parsl.executors.FluxExecutor
7979
parsl.executors.radical.RadicalPilotExecutor
8080

81+
Manager Selectors
82+
=================
83+
84+
.. autosummary::
85+
:toctree: stubs
86+
:nosignatures:
87+
88+
parsl.executors.high_throughput.manager_selector.RandomManagerSelector
89+
parsl.executors.high_throughput.manager_selector.BlockIdManagerSelector
90+
8191
Launchers
8292
=========
8393

docs/userguide/usage_tracking.rst

Lines changed: 128 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,171 @@
11
.. _label-usage-tracking:
22

3-
Usage statistics collection
3+
Usage Statistics Collection
44
===========================
55

6-
Parsl uses an **Opt-in** model to send usage statistics back to the Parsl development team to
7-
measure worldwide usage and improve reliability and usability. The usage statistics are used only for
8-
improvements and reporting. They are not shared in raw form outside of the Parsl team.
9-
6+
Parsl uses an **Opt-in** model for usage tracking, allowing users to decide if they wish to participate. Usage statistics are crucial for improving software reliability and help focus development and maintenance efforts on the most used components of Parsl. The collected data is used solely for enhancements and reporting and is not shared in its raw form outside of the Parsl team.
107

118
Why are we doing this?
129
----------------------
1310

14-
The Parsl development team receives support from government funding agencies. For the team to continue to
15-
receive such funding, and for the agencies themselves to argue for funding, both the team and the agencies
16-
must be able to demonstrate that the scientific community is benefiting from these investments. To this end,
17-
it is important that we provide aggregate usage data about such things as the following:
11+
The Parsl development team relies on funding from government agencies. To sustain this funding and advocate for continued support, it is essential to show that the research community benefits from these investments.
12+
13+
By opting in to share usage data, you actively support the ongoing development and maintenance of Parsl. (See:ref:`What is sent? <what-is-sent>` below).
14+
15+
Opt-In Model
16+
------------
17+
18+
We use an **opt-in model** for usage tracking to respect user privacy and provide full control over shared information. We hope that developers and researchers will choose to send us this information. The reason is that we need this data - it is a requirement for funding.
1819

19-
* How many people use Parsl
20-
* Average job length
21-
* Parsl exit codes
20+
Choose the data you share with Usage Tracking Levels.
2221

23-
By participating in this project, you help justify continuing support for the software on which you rely.
24-
(see :ref:`What is sent? <what-is-sent>` below).
22+
**Usage Tracking Levels:**
2523

26-
Opt-In
27-
------
24+
* **Level 1:** Only basic information such as Python version, Parsl version, and platform name (Linux, MacOS, etc.)
25+
* **Level 2:** Level 1 information and configuration information including provider, executor, and launcher names.
26+
* **Level 3:** Level 2 information and workflow execution details, including the number of applications run, failures, and execution time.
2827

29-
We have chosen opt-in collection rather than opt-out with the hope that developers and researchers
30-
will choose to send us this information. The reason is that we need this data - it is a requirement for funding.
28+
By enabling usage tracking, you support Parsl's development.
3129

32-
By opting-in, and allowing these statistics to be reported back, you are explicitly supporting the
33-
further development of Parsl.
30+
**To opt-in, set** ``usage_tracking`` **to the desired level (1, 2, or 3) in the configuration object** (``parsl.config.Config``) **.**
3431

35-
If you wish to opt in to usage reporting, set ``usage_tracking=True`` in the configuration object (`parsl.config.Config`).
32+
Example:
3633

34+
.. code-block:: python3
35+
36+
config = Config(
37+
executors=[
38+
HighThroughputExecutor(
39+
...
40+
)
41+
],
42+
usage_tracking=3
43+
)
3744
3845
.. _what-is-sent:
3946

4047
What is sent?
4148
-------------
4249

43-
* IP address
44-
* Run UUID
45-
* Start and end times
46-
* Number of executors used
47-
* Number of failures
48-
* Parsl and Python version
49-
* OS and OS version
50-
50+
The data collected depends on the tracking level selected:
51+
52+
* **Level 1:** Only basic information such as Python version, Parsl version, and platform name (Linux, MacOS, etc.)
53+
* **Level 2:** Level 1 information and configuration information including provider, executor, and launcher names.
54+
* **Level 3:** Level 2 information and workflow execution details, including the number of applications run, failures, and execution time.
55+
56+
**Example Messages:**
57+
58+
- At launch:
59+
60+
.. code-block:: json
61+
62+
{
63+
"correlator":"6bc7484e-5693-48b2-b6c0-5889a73f7f4e",
64+
"parsl_v":"1.3.0-dev",
65+
"python_v":"3.12.2",
66+
"platform.system":"Darwin",
67+
"tracking_level":3,
68+
"components":[
69+
{
70+
"c":"parsl.config.Config",
71+
"executors_len":1,
72+
"dependency_resolver":false
73+
},
74+
"parsl.executors.threads.ThreadPoolExecutor"
75+
],
76+
"start":1727156153
77+
}
78+
79+
- On closure (Tracking Level 3 only):
80+
81+
.. code-block:: json
82+
83+
{
84+
"correlator":"6bc7484e-5693-48b2-b6c0-5889a73f7f4e",
85+
"execution_time":31,
86+
"components":[
87+
{
88+
"c":"parsl.dataflow.dflow.DataFlowKernel",
89+
"app_count":3,
90+
"app_fails":0
91+
},
92+
{
93+
"c":"parsl.config.Config",
94+
"executors_len":1,
95+
"dependency_resolver":false
96+
},
97+
"parsl.executors.threads.ThreadPoolExecutor"
98+
],
99+
"end":1727156156
100+
}
101+
102+
**All messages sent are logged in the** ``parsl.log`` **file, ensuring complete transparency.**
51103

52104
How is the data sent?
53105
---------------------
54106

55-
The data is sent via UDP. While this may cause us to lose some data, it drastically reduces the possibility
56-
that the usage statistics reporting will adversely affect the operation of the software.
107+
Data is sent using **UDP** to minimize the impact on workflow performance. While this may result in some data loss, it significantly reduces the chances of usage tracking affecting the software's operation.
57108

109+
The data is processed through AWS CloudWatch to generate a monitoring dashboard, providing valuable insights into usage patterns.
58110

59111
When is the data sent?
60112
----------------------
61113

62-
The data is sent twice per run, once when Parsl starts a script, and once when the script is completed.
114+
Data is sent twice per run:
63115

116+
1. At the start of the script.
117+
2. Upon script completion (for Tracking Level 3).
64118

65119
What will the data be used for?
66120
-------------------------------
67121

68-
The data will be used for reporting purposes to answer questions such as:
122+
The data will help the Parsl team understand Parsl usage and make development and maintenance decisions, including:
123+
124+
* Focus development and maintenance on the most-used components of Parsl.
125+
* Determine which Python versions to continue supporting.
126+
* Track the age of Parsl installations.
127+
* Assess how long it takes for most users to adopt new changes.
128+
* Track usage statistics to report to funders.
129+
130+
Usage Statistics Dashboard
131+
--------------------------
69132

70-
* How many unique users are using Parsl?
71-
* To determine patterns of usage - is activity increasing or decreasing?
133+
The collected data is aggregated and displayed on a publicly accessible dashboard. This dashboard provides an overview of how Parsl is being used across different environments and includes metrics such as:
72134

73-
We will also use this information to improve Parsl by identifying software faults.
135+
* Total workflows executed over time
136+
* Most-used Python and Parsl versions
137+
* Most common platforms and executors and more
74138

75-
* What percentage of tasks complete successfully?
76-
* Of the tasks that fail, what is the most common fault code returned?
139+
`Find the dashboard here <https://cloudwatch.amazonaws.com/dashboard.html?dashboard=Parsl-Usage-Tracking-Stats&context=eyJSIjoidXMtZWFzdC0xIiwiRCI6ImN3LWRiLTA0Njc5ODQ4MjQwNiIsIlUiOiJ1cy1lYXN0LTFfNW41R1BwYVd0IiwiQyI6IjN2bzJmbzAxYnI1dm92YjY2dGEwcmo2dmNkIiwiSSI6InVzLWVhc3QtMTplMjYyZGZkMy05NjI2LTQ4YTMtYjBkOC1jYWYwYWU1NzA4M2EiLCJPIjoiYXJuOmF3czppYW06OjA0Njc5ODQ4MjQwNjpyb2xlL3NlcnZpY2Utcm9sZS9DV0RCU2hhcmluZy1QdWJsaWNSZWFkT25seUFjY2Vzcy1UTlBOMk5COSIsIk0iOiJQdWJsaWMifQ==&start=PT3H&end=null>`_
77140

141+
Leaderboard
142+
-----------
143+
144+
**Opting in to usage tracking also allows you to participate in the Parsl Leaderboard.
145+
To participate in the leaderboard, you can deanonymize yourself using the** ``project_name`` **parameter in the parsl configuration object** (``parsl.config.Config``) **.**
146+
147+
`Find the Parsl Leaderboard here <https://cloudwatch.amazonaws.com/dashboard.html?dashboard=Parsl-Usage-Tracking-Stats&context=eyJSIjoidXMtZWFzdC0xIiwiRCI6ImN3LWRiLTA0Njc5ODQ4MjQwNiIsIlUiOiJ1cy1lYXN0LTFfNW41R1BwYVd0IiwiQyI6IjN2bzJmbzAxYnI1dm92YjY2dGEwcmo2dmNkIiwiSSI6InVzLWVhc3QtMTplMjYyZGZkMy05NjI2LTQ4YTMtYjBkOC1jYWYwYWU1NzA4M2EiLCJPIjoiYXJuOmF3czppYW06OjA0Njc5ODQ4MjQwNjpyb2xlL3NlcnZpY2Utcm9sZS9DV0RCU2hhcmluZy1QdWJsaWNSZWFkT25seUFjY2Vzcy1UTlBOMk5COSIsIk0iOiJQdWJsaWMifQ==&start=PT3H&end=null>`_
148+
149+
Example:
150+
151+
.. code-block:: python3
152+
153+
config = Config(
154+
executors=[
155+
HighThroughputExecutor(
156+
...
157+
)
158+
],
159+
usage_tracking=3,
160+
project_name="my-test-project"
161+
)
162+
163+
Every run of parsl with usage tracking **Level 1** or **Level 2** earns you **1 point**. And every run with usage tracking **Level 3**, earns you **2 points**.
164+
78165
Feedback
79166
--------
80167

81-
Please send us your feedback at [email protected]. Feedback from our user communities will be
168+
Please send us your feedback at [email protected]. Feedback from our user communities will be
82169
useful in determining our path forward with usage tracking in the future.
170+
171+
**Please consider turning on usage tracking to support the continued development of Parsl.**

mypy.ini

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,6 @@ ignore_missing_imports = True
137137
[mypy-copy_reg.*]
138138
ignore_missing_imports = True
139139

140-
[mypy-ipyparallel.*]
141-
ignore_missing_imports = True
142-
143-
[mypy-ipython_genutils.*]
144-
ignore_missing_imports = True
145-
146140
[mypy-cmreslogging.handlers.*]
147141
ignore_missing_imports = True
148142

0 commit comments

Comments
 (0)