Skip to content

Commit 7538ced

Browse files
bdoyle0182Brendan Doyle
andauthored
Apache Pekko Migration (#5551)
Apache Pekko Migration --------- Co-authored-by: Brendan Doyle <[email protected]>
1 parent c435fad commit 7538ced

File tree

454 files changed

+2296
-2015
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

454 files changed

+2296
-2015
lines changed

.github/workflows/2-system.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ on:
2929
env:
3030
# openwhisk env
3131
TEST_SUITE: System
32-
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing -e container_pool_akka_client=false"
32+
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing -e container_pool_pekko_client=false"
3333
GRADLE_PROJS_SKIP: ""
3434

3535
## secrets

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ Learn more at [http://openwhisk.apache.org](http://openwhisk.apache.org).
4545
* [OpenWhisk Community and Support](#openwhisk-community-and-support)
4646
* [Project Repository Structure](#project-repository-structure)
4747

48+
### Notice of Breaking Upgrade 10/17/2025
49+
50+
Apache Openwhisk has migrated to the Apache Pekko framework. The master branch as of 10/17/2025 uses Apache Pekko. This change results in a breaking change such that you must re-deploy new clusters and cutover traffic to the new cluster. All other changes should be transient to you other than instead of using Akka configuration overrides in your deployments, you would now need to update those to use the Pekko equivalent. A 3.x release branch will eventually follow this
51+
change.
52+
4853
### Quick Start
4954

5055
The easiest way to start using OpenWhisk is to install the "Standalone" OpenWhisk stack.

ansible/controller.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
# configuration settings. (Plugins are found in the
4444
# 'roles/controller/tasks' directory for now.)
4545
controller_plugins:
46-
# Join an akka cluster rather than running standalone akka
47-
- "join_akka_cluster"
46+
# Join an pekko cluster rather than running standalone pekko
47+
- "join_pekko_cluster"
4848

4949
roles:
5050
- controller

ansible/environments/local/group_vars/all

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ kafka_topics_invoker_retentionMS: 300000
4545

4646
env_hosts_dir: "{{ playbook_dir }}/environments/local"
4747

48-
container_pool_akka_client: true
48+
container_pool_pekko_client: true
4949
runtimes_enable_concurrency: true
5050
limit_action_concurrency_max: 500
5151
namespace_default_limit_action_concurrency_max: 500

ansible/group_vars/all

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ controller:
9999
timeoutFactor: "{{ controller_timeout_factor | default(2) }}"
100100
timeoutAddon: "{{ controller_timeout_addon | default('1 m') }}"
101101
instances: "{{ groups['controllers'] | length }}"
102-
akka:
102+
pekko:
103103
provider: cluster
104104
cluster:
105105
basePort: 8000
@@ -517,10 +517,10 @@ scheduler:
517517
instances: "{{ groups['schedulers'] | length }}"
518518
username: "{{ scheduler_username | default('scheduler.user') }}"
519519
password: "{{ scheduler_password | default('scheduler.pass') }}"
520-
akka:
520+
pekko:
521521
provider: cluster
522522
cluster:
523-
basePort: 25520
523+
basePort: 17355
524524
host: "{{ groups['schedulers'] | map('extract', hostvars, 'ansible_host') | list }}"
525525
bindPort: 3551
526526
# at this moment all schedulers are seed nodes

ansible/roles/controller/tasks/deploy.yml

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -443,18 +443,42 @@
443443
>> /logs/{{ controller_name }}_logs.log 2>&1"
444444

445445
- name: wait until the Controller in this host is up and running
446-
uri:
447-
url:
448-
"{{controller.protocol}}://{{ansible_host}}:{{controller_port}}/ping"
449-
validate_certs: "no"
450-
client_key:
451-
"{{ controller.confdir }}/{{ controller_name }}/{{ controller.ssl.key }}"
452-
client_cert:
453-
"{{ controller.confdir }}/{{ controller_name }}/{{ controller.ssl.cert }}"
454-
register: result
455-
until: result.status == 200
456-
retries: 12
457-
delay: 10
446+
block:
447+
- name: ping controller health endpoint
448+
uri:
449+
url: "{{ controller.protocol }}://{{ ansible_host }}:{{ controller_port }}/ping"
450+
validate_certs: no
451+
client_key: "{{ controller.confdir }}/{{ controller_name }}/{{ controller.ssl.key }}"
452+
client_cert: "{{ controller.confdir }}/{{ controller_name }}/{{ controller.ssl.cert }}"
453+
return_content: yes
454+
user: "{{ controller.username }}"
455+
password: "{{ controller.password }}"
456+
force_basic_auth: yes
457+
register: result
458+
until: result.status == 200
459+
retries: 12
460+
delay: 10
461+
failed_when: result.status is defined and result.status not in [200]
462+
rescue:
463+
- name: dump controller docker logs
464+
shell: |
465+
docker logs {{ controller_name }} >/tmp/controller-docker.log 2>&1 || true
466+
cat /tmp/controller-docker.log
467+
register: controller_logs
468+
failed_when: false
469+
- name: output controller logs for debugging
470+
debug:
471+
var: controller_logs.stdout_lines
472+
- name: dump controller file logs
473+
shell: |
474+
cat /var/tmp/wsklogs/{{ controller_name }}/{{ controller_name }}_logs.log
475+
register: controller_file_logs
476+
failed_when: false
477+
- name: output controller file logs for debugging
478+
debug:
479+
var: controller_file_logs.stdout_lines
480+
- fail:
481+
msg: "Controller failed to start; logs emitted above"
458482

459483
- name: warm up activation path
460484
uri:

ansible/roles/controller/tasks/join_akka_cluster.yml renamed to ansible/roles/controller/tasks/join_pekko_cluster.yml

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,37 @@
1717
---
1818
#
1919
# Controller 'plugin' that will add the items necessary to the controller
20-
# environment to cause the controller to join a specified akka cluster
20+
# environment to cause the controller to join a specified pekko cluster
2121
#
2222

23-
- name: add akka port to ports_to_expose
23+
- name: add pekko port to ports_to_expose
2424
set_fact:
2525
ports_to_expose: >-
2626
{{ ports_to_expose }} +
27-
[ "{{ (controller.akka.cluster.basePort + (controller_index | int)) }}:"
28-
+ "{{ controller.akka.cluster.bindPort }}" ]
27+
[ "{{ (controller.pekko.cluster.basePort + (controller_index | int)) }}:"
28+
+ "{{ controller.pekko.cluster.bindPort }}" ]
2929
3030
- name: add seed nodes to controller environment
3131
set_fact:
3232
env: >-
3333
{{ env | combine({
34-
'CONFIG_akka_cluster_seedNodes_' ~ seedNode.0:
35-
'akka://controller-actor-system@'~seedNode.1~':'~(controller.akka.cluster.basePort+seedNode.0)
34+
'CONFIG_pekko_cluster_seedNodes_' ~ seedNode.0:
35+
'pekko://controller-actor-system@'~seedNode.1~':'~(controller.pekko.cluster.basePort+seedNode.0)
3636
}) }}
37-
with_indexed_items: "{{ controller.akka.cluster.seedNodes }}"
37+
with_indexed_items: "{{ controller.pekko.cluster.seedNodes }}"
3838
loop_control:
3939
loop_var: seedNode
4040

41-
- name: Add akka environment to controller environment
41+
- name: Add pekko environment to controller environment
4242
vars:
43-
akka_env:
44-
"CONFIG_akka_actor_provider": "{{ controller.akka.provider }}"
45-
"CONFIG_akka_remote_artery_canonical_hostname":
46-
"{{ controller.akka.cluster.host[(controller_index | int)] }}"
47-
"CONFIG_akka_remote_artery_canonical_port":
48-
"{{ controller.akka.cluster.basePort + (controller_index | int) }}"
49-
"CONFIG_akka_remote_artery_bind_port":
50-
"{{ controller.akka.cluster.bindPort }}"
43+
pekko_env:
44+
"CONFIG_pekko_actor_provider": "{{ controller.pekko.provider }}"
45+
"CONFIG_pekko_remote_artery_canonical_hostname":
46+
"{{ controller.pekko.cluster.host[(controller_index | int)] }}"
47+
"CONFIG_pekko_remote_artery_canonical_port":
48+
"{{ controller.pekko.cluster.basePort + (controller_index | int) }}"
49+
"CONFIG_pekko_remote_artery_bind_hostname": "0.0.0.0"
50+
"CONFIG_pekko_remote_artery_bind_port":
51+
"{{ controller.pekko.cluster.bindPort }}"
5152
set_fact:
52-
env: "{{ env | combine(akka_env) }}"
53+
env: "{{ env | combine(pekko_env) }}"

ansible/roles/invoker/tasks/deploy.yml

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@
288288
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_max": "{{ namespace_default_limit_action_concurrency_max | default() }}"
289289
"CONFIG_whisk_activation_payload_max": "{{ limit_activation_payload | default() }}"
290290
"CONFIG_whisk_transactions_header": "{{ transactions.header }}"
291-
"CONFIG_whisk_containerPool_akkaClient": "{{ container_pool_akka_client | default('false') | lower }}"
291+
"CONFIG_whisk_containerPool_pekkoClient": "{{ container_pool_pekko_client | default('false') | lower }}"
292292
"CONFIG_whisk_containerFactory_containerArgs_extraEnvVars_0": "__OW_ALLOW_CONCURRENT={{ runtimes_enable_concurrency | default('false') }}"
293293
"CONFIG_whisk_invoker_protocol": "{{ invoker.protocol }}"
294294
"CONFIG_whisk_invoker_https_keystorePath": "/conf/{{ invoker.ssl.keystore.name }}"
@@ -447,13 +447,31 @@
447447
when: not lean
448448

449449
- name: wait until Invoker is up and running
450-
uri:
451-
url: "{{ invoker.protocol }}://{{ ansible_host }}:{{ invoker.port + (invoker_index | int) }}/ping"
452-
validate_certs: "no"
453-
client_key: "{{ invoker.confdir }}/{{ invoker_name }}/{{ invoker.ssl.key }}"
454-
client_cert: "{{ invoker.confdir }}/{{ invoker_name }}/{{ invoker.ssl.cert }}"
455-
register: result
456-
until: result.status == 200
457-
retries: 12
458-
delay: 5
450+
block:
451+
- uri:
452+
url: "{{ invoker.protocol }}://{{ ansible_host }}:{{ invoker.port + (invoker_index | int) }}/ping"
453+
validate_certs: "no"
454+
client_key: "{{ invoker.confdir }}/{{ invoker_name }}/{{ invoker.ssl.key }}"
455+
client_cert: "{{ invoker.confdir }}/{{ invoker_name }}/{{ invoker.ssl.cert }}"
456+
register: result
457+
until: result.status == 200
458+
retries: 12
459+
delay: 5
460+
rescue:
461+
- name: dump invoker docker logs for debugging
462+
shell: "docker logs {{ invoker_name }}"
463+
register: invoker_logs
464+
failed_when: false
465+
- name: output invoker docker logs for debugging
466+
debug:
467+
var: invoker_logs.stdout_lines
468+
- name: dump invoker file logs from /var/tmp/wsklogs
469+
shell: "cat /var/tmp/wsklogs/{{ invoker_name }}/{{ invoker_name }}_logs.log"
470+
register: invoker_file_logs
471+
failed_when: false
472+
- name: output invoker file logs for debugging
473+
debug:
474+
var: invoker_file_logs.stdout_lines
475+
- fail:
476+
msg: "Invoker failed to start; logs emitted above"
459477
when: not lean

ansible/roles/schedulers/tasks/deploy.yml

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122

123123
"WHISK_SCHEDULER_ENDPOINTS_HOST": "{{ ansible_host }}"
124124
"WHISK_SCHEDULER_ENDPOINTS_RPCPORT": "{{ scheduler.grpc.basePort + (scheduler_index | int)}}"
125-
"WHISK_SCHEDULER_ENDPOINTS_AKKAPORT": "{{ scheduler.akka.cluster.basePort + (scheduler_index | int) }}"
125+
"WHISK_SCHEDULER_ENDPOINTS_PEKKOPORT": "{{ scheduler.pekko.cluster.basePort + (scheduler_index | int) }}"
126126
"CONFIG_whisk_scheduler_protocol": "{{ scheduler.protocol }}"
127127
"CONFIG_whisk_scheduler_maxPeek": "{{ scheduler.maxPeek }}"
128128
"CONFIG_whisk_scheduler_dataManagementService_retryInterval": "{{ scheduler.dataManagementService.retryInterval }}"
@@ -348,14 +348,36 @@
348348
>> /logs/{{ scheduler_name }}_logs.log 2>&1"
349349

350350
- name: wait until the Scheduler in this host is up and running
351-
uri:
352-
url:
353-
"{{scheduler.protocol}}://{{ansible_host}}:{{scheduler_port}}/ping"
354-
validate_certs: "no"
355-
register: result
356-
until: result.status == 200
357-
retries: 12
358-
delay: 5
351+
block:
352+
- name: ping scheduler health endpoint
353+
uri:
354+
url:
355+
"{{scheduler.protocol}}://{{ansible_host}}:{{scheduler_port}}/ping"
356+
validate_certs: "no"
357+
register: result
358+
until: result.status == 200
359+
retries: 12
360+
delay: 5
361+
rescue:
362+
- name: dump scheduler docker logs
363+
shell: |
364+
docker logs {{ scheduler_name }} >/tmp/scheduler-docker.log 2>&1 || true
365+
cat /tmp/scheduler-docker.log
366+
register: scheduler_logs
367+
failed_when: false
368+
- name: output scheduler logs for debugging
369+
debug:
370+
var: scheduler_logs.stdout_lines
371+
- name: dump scheduler file logs
372+
shell: |
373+
cat /var/tmp/wsklogs/{{ scheduler_name }}/{{ scheduler_name }}_logs.log
374+
register: scheduler_file_logs
375+
failed_when: false
376+
- name: output scheduler file logs for debugging
377+
debug:
378+
var: scheduler_file_logs.stdout_lines
379+
- fail:
380+
msg: "Scheduler failed to start; logs emitted above"
359381

360382
- name: create scheduler jmx.yml
361383
template:

ansible/roles/schedulers/tasks/join_akka_cluster.yml renamed to ansible/roles/schedulers/tasks/join_pekko_cluster.yml

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,37 @@
1717
---
1818
#
1919
# Scheduler 'plugin' that will add the items necessary to the scheduler
20-
# environment to cause the scheduler to join a specified akka cluster
20+
# environment to cause the scheduler to join a specified pekko cluster
2121
#
2222

23-
- name: add akka port to ports_to_expose
23+
- name: add pekko port to ports_to_expose
2424
set_fact:
2525
ports_to_expose: >-
2626
{{ ports_to_expose }} +
27-
[ "{{ (scheduler.akka.cluster.basePort + (scheduler_index | int)) }}:"
28-
+ "{{ scheduler.akka.cluster.bindPort }}" ]
27+
[ "{{ (scheduler.pekko.cluster.basePort + (scheduler_index | int)) }}:"
28+
+ "{{ scheduler.pekko.cluster.bindPort }}" ]
2929
3030
- name: add seed nodes to scheduler environment
3131
set_fact:
3232
env: >-
3333
{{ env | combine({
34-
'CONFIG_akka_cluster_seedNodes_' ~ seedNode.0:
35-
'akka://scheduler-actor-system@'~seedNode.1~':'~(scheduler.akka.cluster.basePort+seedNode.0)
34+
'CONFIG_pekko_cluster_seedNodes_' ~ seedNode.0:
35+
'pekko://scheduler-actor-system@'~seedNode.1~':'~(scheduler.pekko.cluster.basePort+seedNode.0)
3636
}) }}
37-
with_indexed_items: "{{ scheduler.akka.cluster.seedNodes }}"
37+
with_indexed_items: "{{ scheduler.pekko.cluster.seedNodes }}"
3838
loop_control:
3939
loop_var: seedNode
4040

41-
- name: Add akka environment to scheduler environment
41+
- name: Add pekko environment to scheduler environment
4242
vars:
43-
akka_env:
44-
"CONFIG_akka_actor_provider": "{{ scheduler.akka.provider }}"
45-
"CONFIG_akka_remote_artery_canonical_hostname":
46-
"{{ scheduler.akka.cluster.host[(scheduler_index | int)] }}"
47-
"CONFIG_akka_remote_artery_canonical_port":
48-
"{{ scheduler.akka.cluster.basePort + (scheduler_index | int) }}"
49-
"CONFIG_akka_remote_artery_bind_port":
50-
"{{ scheduler.akka.cluster.bindPort }}"
43+
pekko_env:
44+
"CONFIG_pekko_actor_provider": "{{ scheduler.pekko.provider }}"
45+
"CONFIG_pekko_remote_artery_canonical_hostname":
46+
"{{ scheduler.pekko.cluster.host[(scheduler_index | int)] }}"
47+
"CONFIG_pekko_remote_artery_canonical_port":
48+
"{{ scheduler.pekko.cluster.basePort + (scheduler_index | int) }}"
49+
"CONFIG_pekko_remote_artery_bind_hostname": "0.0.0.0"
50+
"CONFIG_pekko_remote_artery_bind_port":
51+
"{{ scheduler.pekko.cluster.bindPort }}"
5152
set_fact:
52-
env: "{{ env | combine(akka_env) }}"
53+
env: "{{ env | combine(pekko_env) }}"

0 commit comments

Comments
 (0)