Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
fe3b7df
Bump to ODL 2025-03 (Titanium) MRI versions
Tobianas Mar 3, 2025
c14be94
Update cluster-admin revision
Tobianas Mar 4, 2025
9a06b86
Migrate to Pekko
Tobianas Mar 4, 2025
df809f2
Convert mdsal-singleton-impl to bnd-parent
Tobianas Mar 4, 2025
aa3ca82
Reimplement TermInfoStore
Tobianas Mar 4, 2025
9a8fbf1
Remove TransactionRateLimiter
Tobianas Mar 4, 2025
69fab18
Use 'member-name' from odl-controller-cds-types
Tobianas Mar 4, 2025
0bd03b8
Move DefaultNetconfTimer
Tobianas Mar 4, 2025
035fa25
Use databind in NetconfMessageTransformer
Tobianas Mar 4, 2025
c2fb362
Promote restconf.server.api.ServerException
Tobianas Mar 5, 2025
aa780e2
Integrate ContextListener
Tobianas Jul 1, 2025
9ae49b1
Split out protocol/databind
Tobianas Mar 5, 2025
8666373
Bump BGP-LS yang model
Tobianas Mar 5, 2025
7634453
Use ODL CompletingServerRequest
Tobianas Mar 5, 2025
ff92fbe
Bump distributed-datastore-provider
Tobianas Mar 11, 2025
fb9f8c4
Update Graph with new BGP-LS
Tobianas Mar 11, 2025
cc57949
Add shiro.realm.RealmAuthProvider
Tobianas Jul 1, 2025
e74822f
Remove RemoteOpsProviderConfig.newInstance()
Tobianas Mar 18, 2025
5d03a7d
Reduce parameters of NetconfTopologySchemaAssembler
Tobianas Jun 24, 2025
644a164
Use org.eclipse.jdt.annotation.Nullable
Tobianas Jun 24, 2025
7f08dec
Use Duration instead for FiniteDuration
Tobianas Jun 24, 2025
eb1d3aa
Use DatabindPath in PatchEntity
Tobianas Jul 8, 2025
e202d93
Eliminate Ask-based messages
Tobianas Jul 23, 2025
207b9dd
Separate test dependencies
Tobianas Jul 24, 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 .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,4 @@ jobs:
with:
app-name: lighty-rnc-app
test-script-file: ${GITHUB_WORKSPACE}/.github/workflows/lighty-rnc-app/test-lighty-rnc-app-cluster.sh
override-helm-values: lighty.replicaCount=3,lighty.akka.isSingleNode=false,nodePort.useNodePort=false,lighty.moduleTimeOut=120,resources=null
override-helm-values: lighty.replicaCount=3,lighty.pekko.isSingleNode=false,nodePort.useNodePort=false,lighty.moduleTimeOut=120,resources=null
2 changes: 1 addition & 1 deletion docs/ODL-migration-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ using MyModule instance.
```
public static void main(String[] args) {
...
//1. initialize and start Lighty controller (MD-SAL, Controller, YangTools, Akka)
//1. initialize and start Lighty controller (MD-SAL, Controller, YangTools, Pekko)
LightyController lightyController = new LightyControllerBuilder()
.from(controllerConfiguration)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,5 @@ Selector labels
{{- define "lighty-rcgnmi-app-helm.selectorLabels" -}}
app.kubernetes.io/name: {{ include "lighty-rcgnmi-app-helm.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ .Values.lighty.akka.discovery.podSelectorName }}: {{ .Values.lighty.akka.discovery.podSelectorValue }}
{{ .Values.lighty.pekko.discovery.podSelectorName }}: {{ .Values.lighty.pekko.discovery.podSelectorValue }}
{{- end -}}
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,22 @@ data:
"unit":"MILLISECONDS"
},
"actorSystemConfig":{
{{- if .Values.lighty.akka.isSingleNode }}
"akkaConfigPath":"singlenode/akka-default.conf",
{{- if .Values.lighty.pekko.isSingleNode }}
"pekkoConfigPath":"singlenode/pekko-default.conf",
{{- else }}
"akkaConfigPath":"{{ .Values.lighty.configDirectoryName }}/{{ .Values.lighty.akka.akkaNodeConfigFilename }}",
"pekkoConfigPath":"{{ .Values.lighty.configDirectoryName }}/{{ .Values.lighty.pekko.pekkoNodeConfigFilename }}",
{{- end }}
"factoryAkkaConfigPath":"singlenode/factory-akka-default.conf"
"factoryPekkoConfigPath":"singlenode/factory-pekko.conf"
},
"schemaServiceConfig":{
"topLevelModels":[
{ "usedBy": "CONTROLLER", "name": "odl-general-entity", "revision": "2015-09-30", "nameSpace": "urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity"},
{ "usedBy": "CONTROLLER", "name": "ietf-yang-types", "revision": "2013-07-15", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-yang-types"},
{ "usedBy": "CONTROLLER", "name": "iana-if-type", "revision": "2023-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:iana-if-type"},
{ "usedBy": "CONTROLLER", "name": "odl-entity-owners" , "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:entity-owners"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2015-10-13", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2025-01-31", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name": "opendaylight-l2-types", "revision": "2013-08-27", "nameSpace": "urn:opendaylight:l2:types"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2023-12-29", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2025-01-30", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "ietf-interfaces", "revision":"2018-02-20", "nameSpace":"urn:ietf:params:xml:ns:yang:ietf-interfaces"},
{ "usedBy": "RESTCONF", "name": "ietf-restconf-monitoring", "revision": "2017-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring"},
{ "usedBy": "RESTCONF", "name": "sal-remote-augment", "revision": "2023-11-03", "nameSpace": "urn:sal:restconf:event:subscription"},
Expand Down Expand Up @@ -75,24 +75,22 @@ data:
</Loggers>
</Configuration>

akka-node-k8s.conf: |
akka {
pekko-node-k8s.conf: |
pekko {

log-level = "debug"

actor {
warn-about-java-serializer-usage = off
provider = "akka.cluster.ClusterActorRefProvider"
provider = "org.apache.pekko.cluster.ClusterActorRefProvider"
serializers {
java = "akka.serialization.JavaSerializer"
proto = "akka.remote.serialization.ProtobufSerializer"
readylocal = "org.opendaylight.controller.cluster.datastore.messages.ReadyLocalTransactionSerializer"
java = "org.apache.pekko.serialization.JavaSerializer"
proto = "org.apache.pekko.remote.serialization.ProtobufSerializer"
simpleReplicatedLogEntry = "org.opendaylight.controller.cluster.raft.persisted.SimpleReplicatedLogEntrySerializer"
}

serialization-bindings {
"com.google.protobuf.Message" = proto
"org.opendaylight.controller.cluster.datastore.messages.ReadyLocalTransaction" = readylocal
"org.opendaylight.controller.cluster.raft.persisted.SimpleReplicatedLogEntry" = simpleReplicatedLogEntry
}
}
Expand All @@ -101,42 +99,42 @@ data:
remote {
artery {
canonical.hostname = ${?HOSTNAME}
canonical.port = {{ .Values.lighty.akka.remotingPort }}
canonical.port = {{ .Values.lighty.pekko.remotingPort }}
bind-hostname = 0.0.0.0
bind-port = {{ .Values.lighty.akka.remotingPort }}
bind-port = {{ .Values.lighty.pekko.remotingPort }}
}
}

cluster {
seed-nodes = []
roles = [
"{{ .Values.lighty.akka.memberNamePrefix }}"${?HOSTNAME}
"{{ .Values.lighty.pekko.memberNamePrefix }}"${?HOSTNAME}
]
downing-provider-class = "akka.cluster.sbr.SplitBrainResolverProvider"
downing-provider-class = "org.apache.pekko.cluster.sbr.SplitBrainResolverProvider"
split-brain-resolver {
active-strategy = "{{ .Values.lighty.akka.sbrStrategy }}"
active-strategy = "{{ .Values.lighty.pekko.sbrStrategy }}"
}
}

management.http.hostname = ${?HOSTNAME}
management.http.bind-hostname = "0.0.0.0"
management.http.port = {{ .Values.lighty.akka.managementPort }}
management.http.bind-port = {{ .Values.lighty.akka.managementPort }}
management.http.port = {{ .Values.lighty.pekko.managementPort }}
management.http.bind-port = {{ .Values.lighty.pekko.managementPort }}

management.cluster.bootstrap {
new-cluster-enabled = on
contact-point-discovery {
required-contact-point-nr = {{ .Values.lighty.akka.minimumClusterNodes }} // minimun number of nodes to bootstrap the cluster
required-contact-point-nr = {{ .Values.lighty.pekko.minimumClusterNodes }} // minimun number of nodes to bootstrap the cluster
}
}

discovery {
method = kubernetes-api
kubernetes-api {
class = akka.discovery.kubernetes.KubernetesApiServiceDiscovery
pod-namespace = {{ .Values.lighty.akka.discovery.podNamespace | quote }} // in which namespace cluster is running
pod-label-selector = "{{ .Values.lighty.akka.discovery.podSelectorName }}={{ .Values.lighty.akka.discovery.podSelectorValue }}" // selector - to find other cluster nodes
pod-port-name = {{ .Values.lighty.akka.discovery.portName | quote }} // name of cluster management port
class = org.apache.pekko.discovery.kubernetes.KubernetesApiServiceDiscovery
pod-namespace = {{ .Values.lighty.pekko.discovery.podNamespace | quote }} // in which namespace cluster is running
pod-label-selector = "{{ .Values.lighty.pekko.discovery.podSelectorName }}={{ .Values.lighty.pekko.discovery.podSelectorValue }}" // selector - to find other cluster nodes
pod-port-name = {{ .Values.lighty.pekko.discovery.portName | quote }} // name of cluster management port
}
}

Expand All @@ -158,7 +156,7 @@ data:
journal {
leveldb {
# Set native = off to use a Java-only implementation of leveldb.
# Note that the Java-only version is not currently considered by Akka to be production quality,
# Note that the Java-only version is not currently considered by Pekko to be production quality,
# but being Java-only makes it work also on platforms where native leveldb is not available.

#native = on
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,15 @@ spec:
-Dlog4j.configurationFile={{ .Values.lighty.configDirectoryName }}/{{ .Values.lighty.loggerConfigFilename }}"
{{- end }}
ports:
# akka remoting
# pekko remoting
- name: remoting
containerPort: {{ .Values.lighty.akka.remotingPort }}
containerPort: {{ .Values.lighty.pekko.remotingPort }}
protocol: TCP
# When
# akka.management.cluster.bootstrap.contact-point-discovery.port-name
# pekko.management.cluster.bootstrap.contact-point-discovery.port-name
# is defined, it must correspond to this name:
- name: management
containerPort: {{ .Values.lighty.akka.managementPort }}
containerPort: {{ .Values.lighty.pekko.managementPort }}
protocol: TCP
# restconf port
- name: restconf
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ spec:
service:
name: {{ include "lighty-rcgnmi-app-helm.fullname" . }}
port:
number: {{ .Values.lighty.akka.managementPort }}
number: {{ .Values.lighty.pekko.managementPort }}
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ spec:
ports:
{{- if .Values.nodePort.exposeManagement }}
- protocol: TCP
name: http-akka
port: {{ .Values.lighty.akka.managementPort }}
name: http-pekko
port: {{ .Values.lighty.pekko.managementPort }}
{{- if .Values.nodePort.useNodePort }}
targetPort: {{ .Values.lighty.akka.managementPort }}
targetPort: {{ .Values.lighty.pekko.managementPort }}
nodePort: {{ .Values.nodePort.managementNodePort }}
{{- end }}
{{- end }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,21 @@ lighty:
enableJmxRemoting: true
jmxPort: 1099

akka:
# If true, overrides akka cluster configuration with default single-node
pekko:
# If true, overrides pekko cluster configuration with default single-node
isSingleNode: true
# SplitBrainResolver strategy supported (out-of-the-box) by akka
# SplitBrainResolver strategy supported (out-of-the-box) by pekko
sbrStrategy: keep-majority
# Name of the config file must be same as property in configmap
akkaNodeConfigFilename: "akka-node-k8s.conf"
# At least three nodes are required for akka voting
pekkoNodeConfigFilename: "pekko-node-k8s.conf"
# At least three nodes are required for pekko voting
minimumClusterNodes: 3
# Prefix for akka member name; in configmap POD IP address will be appended to prefix
# Prefix for pekko member name; in configmap POD IP address will be appended to prefix
memberNamePrefix: "member-"
remotingPort: 2552
managementPort: 8558
discovery:
# Where should akka look for other members to form cluster
# Where should pekko look for other members to form cluster
podSelectorName: "app"
podSelectorValue: "lighty-k8s-cluster"
portName: "management"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ public static RcGnmiAppConfiguration loadConfiguration(final Path path) throws C
LOG.debug("Loading lighty.io controller module configuration...");
final ControllerConfiguration controllerConfig = ControllerConfigUtils
.getConfiguration(Files.newInputStream(path));
final Config akkaConfig = controllerConfig.getActorSystemConfig().getConfig().resolve();
controllerConfig.getActorSystemConfig().setConfig(akkaConfig);
final Config pekkoConfig = controllerConfig.getActorSystemConfig().getConfig().resolve();
controllerConfig.getActorSystemConfig().setConfig(pekkoConfig);
LOG.debug("Loading lighty.io RESTCONF module configuration...");
final RestConfConfiguration restconfConfig = RestConfConfigUtils
.getRestConfConfiguration(Files.newInputStream(path));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
"unit":"MILLISECONDS"
},
"actorSystemConfig":{
"akkaConfigPath":"singlenode/akka-default.conf",
"factoryAkkaConfigPath":"singlenode/factory-akka-default.conf"
"pekkoConfigPath":"singlenode/pekko-default.conf",
"factoryPekkoConfigPath":"singlenode/factory-pekko.conf"
},
"schemaServiceConfig":{
"topLevelModels":[
Expand All @@ -27,8 +27,8 @@
{ "usedBy": "CONTROLLER", "name": "iana-if-type", "revision": "2023-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:iana-if-type"},
{ "usedBy": "CONTROLLER", "name": "odl-entity-owners", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:entity-owners"},
{ "usedBy": "CONTROLLER", "name": "opendaylight-l2-types", "revision": "2013-08-27", "nameSpace": "urn:opendaylight:l2:types"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2023-12-29", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2015-10-13", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2025-01-30", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2025-01-31", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name":"ietf-interfaces", "revision":"2018-02-20", "nameSpace":"urn:ietf:params:xml:ns:yang:ietf-interfaces"},
{ "usedBy": "RESTCONF", "name": "ietf-yang-library", "revision": "2019-01-04", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-yang-library"},
{ "usedBy": "RESTCONF", "name": "ietf-restconf-monitoring", "revision": "2017-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring"},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@
"unit":"MILLISECONDS"
},
"actorSystemConfig":{
"akkaConfigPath":"singlenode/akka-default.conf",
"factoryAkkaConfigPath":"singlenode/factory-akka-default.conf"
"pekkoConfigPath":"singlenode/pekko-default.conf",
"factoryPekkoConfigPath":"singlenode/factory-pekko.conf"
},
"schemaServiceConfig":{
"topLevelModels":[
{ "usedBy": "CONTROLLER", "name": "odl-general-entity", "revision": "2015-09-30", "nameSpace": "urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity"},
{ "usedBy": "CONTROLLER", "name": "opendaylight-l2-types", "revision": "2013-08-27", "nameSpace": "urn:opendaylight:l2:types"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2023-12-29", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "distributed-datastore-provider", "revision": "2025-01-30", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider"},
{ "usedBy": "CONTROLLER", "name": "ietf-yang-types", "revision": "2013-07-15", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-yang-types"},
{ "usedBy": "CONTROLLER", "name": "iana-if-type", "revision": "2023-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:iana-if-type"},
{ "usedBy": "CONTROLLER", "name": "odl-entity-owners" , "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:entity-owners"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2015-10-13", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name": "cluster-admin", "revision": "2025-01-31", "nameSpace": "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin"},
{ "usedBy": "CONTROLLER", "name": "ietf-interfaces", "revision":"2018-02-20", "nameSpace":"urn:ietf:params:xml:ns:yang:ietf-interfaces"},
{ "usedBy": "RESTCONF", "name": "ietf-yang-library", "revision": "2019-01-04", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-yang-library"},
{ "usedBy": "RESTCONF", "name": "ietf-restconf-monitoring", "revision": "2017-01-26", "nameSpace": "urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring"},
Expand Down
2 changes: 1 addition & 1 deletion lighty-applications/lighty-rnc-app-aggregator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ To build and start the lighty.io RNC application using Docker in a local environ

## Example Postman collection
For convenience, we provide [postman-collection](lighty-rnc-app/Lighty-RNC.postman_collection.json) which contains
example http requests (RESTCONF and Akka) for communicating with Lighty RNC application.
example http requests (RESTCONF and Pekko) for communicating with Lighty RNC application.
_Note: IP addresses and port numbers may differ depending on deployment._
## Deployment via helm chart
### Prerequisites
Expand Down
Loading
Loading