2026-10-07 17:12:58 +02:00
|
|
|
# Changelog
|
|
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
Every release groups its `Added`, `Improved` and `Fixed` entries by the cloud they apply to:
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- **All clouds**: changes that behave the same on every cloud.
|
|
|
|
|
- **AWS**, **Azure**, **Google Cloud**, **Oracle Cloud** and **DigitalOcean**: what is specific to that
|
|
|
|
|
cloud's templates.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
The AWS, Azure and Google Cloud templates live in this folder. The Oracle Cloud and DigitalOcean templates live
|
|
|
|
|
in the [openvidu-oracle](https://github.com/OpenVidu/openvidu-oracle) and
|
|
|
|
|
[openvidu-digitalocean](https://github.com/OpenVidu/openvidu-digitalocean) repositories.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
## 3.10.0 (unreleased)
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
### Added
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### All clouds
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- Elastic and High Availability deployments replace an unhealthy Media Node with a new one automatically,
|
|
|
|
|
keeping the same number of Media Nodes. Before, a broken Media Node stayed in the cluster until it was
|
|
|
|
|
replaced by hand. Every Media Node runs a health watchdog (the `openvidu-media-health` systemd service)
|
|
|
|
|
that checks its media server every 30 seconds and asks the cloud to replace the node when:
|
|
|
|
|
- the media server does not accept connections for 5 minutes,
|
|
|
|
|
- the media server answers with errors or timeouts for 10 minutes (not counted while the node's CPU is
|
|
|
|
|
saturated, because an overloaded media server briefly reports itself as not ready),
|
|
|
|
|
- the node's installation failed (after a 10 minute wait, so the failure can be inspected and a persistent
|
|
|
|
|
problem does not create new nodes in a loop),
|
|
|
|
|
- or the node's installation has not finished 90 minutes after it booted.
|
|
|
|
|
- Safeguards of the Media Node watchdog:
|
|
|
|
|
- No Media Node is replaced while no Master Node is reachable: a Master Node outage makes every Media Node
|
|
|
|
|
fail its health check at once, and a new node could not join the cluster either. Once a Master Node is
|
|
|
|
|
back, the media server gets its full time window to reconnect before the watchdog acts.
|
|
|
|
|
- Failures are not counted during the first 15 minutes after OpenVidu (re)starts on the node.
|
|
|
|
|
- The watchdog pauses itself while a node is drained during a normal scale-in.
|
|
|
|
|
- `journalctl -u openvidu-media-health` on a Media Node shows what it is doing, and
|
|
|
|
|
`sudo touch /etc/openvidu/media-health.disabled` pauses it (for example during manual maintenance);
|
|
|
|
|
deleting the file resumes it.
|
openvidu-deployment: a fixed number of Media Nodes on AWS, Azure and Google Cloud
Elastic and High Availability deployments on AWS, Azure and Google Cloud can
run a fixed number of Media Nodes, as DigitalOcean and Oracle Cloud already
could, with the same parameter: FixedNumberOfMediaNodes on AWS,
fixedNumberOfMediaNodes on the other clouds. 0, the default, keeps
autoscaling; a value greater than 0 runs exactly that many Media Nodes and
ignores the initial, minimum, maximum and target CPU parameters. A redeploy
with another value changes the number or switches mode, both ways.
- AWS: the Auto Scaling Group's min, max and desired are the fixed number
and the scaling policy is not created. A Media Node the number no longer
needs is drained by the existing lifecycle hook, as in a scale-in.
- Google Cloud: no autoscaler; the scale-in function, which now runs in both
modes, keeps the managed instance group at the fixed number, abandoning an
extra Media Node so it drains and deletes itself, or resizing the group up.
The group's target size is set at creation only, the function's source is
named by its hash so a code change redeploys it, and `moved` blocks keep
existing autoscalers when the template is applied again.
- Azure: the autoscale setting stays, pinned to the fixed number (minimum =
maximum = default). Azure refuses an autoscale minimum below the Media
Nodes running, which protect themselves from scale-in, so lowering it is a
manual drain first (manual scale, then stop_media_node.sh on each extra
Media Node) and then the redeploy; the CHANGELOG and the documentation
describe it. The portal's form gets the field.
Verified live with ov-cloud-tester's sc-fixed-media-nodes scenario on
Elastic (Google Cloud, AWS and Azure): deploy with 2, lower to 1 (the Media
Node removed served its Room through a 1200 s hold and left once it was
closed), back to autoscaling with no Media Node added or removed.
2026-10-27 19:09:59 +01:00
|
|
|
- Elastic and High Availability deployments on AWS, Azure and Google Cloud can run a fixed number of Media
|
|
|
|
|
Nodes, as DigitalOcean and Oracle Cloud already could, with the same parameter: `FixedNumberOfMediaNodes`
|
|
|
|
|
on AWS, `fixedNumberOfMediaNodes` on the other clouds. With a value greater than 0 the deployment runs
|
|
|
|
|
exactly that many Media Nodes with no autoscaling, and the initial, minimum, maximum and target CPU
|
|
|
|
|
parameters are ignored. The default, 0, keeps autoscaling. An unhealthy Media Node is still replaced.
|
|
|
|
|
Changing the number, or switching between the two modes, is a redeploy of the template with the new value.
|
|
|
|
|
Raising the number adds Media Nodes. On AWS and Google Cloud, lowering it drains the Media Nodes it removes
|
|
|
|
|
gracefully, as in a scale-in: each one stops accepting new Rooms and is removed when its ongoing Rooms,
|
|
|
|
|
recordings and ingests end. Azure does not accept a number below the Media Nodes running, because they
|
|
|
|
|
protect themselves from scale-in: drain the extra ones first (manual scale, then
|
|
|
|
|
`/usr/local/bin/stop_media_node.sh` on each, which removes itself the same graceful way) and then redeploy.
|
|
|
|
|
The administration documentation of each cloud describes the steps.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### AWS
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- An unhealthy Media Node is marked unhealthy in its Auto Scaling Group, which drains it and launches a new
|
|
|
|
|
one.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### Azure
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- An unhealthy Media Node is reimaged in its Virtual Machine Scale Set, so the number of instances never
|
|
|
|
|
changes.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### Google Cloud
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- An unhealthy Media Node is recreated in its managed instance group with a fresh disk. The group's native
|
|
|
|
|
autohealing (TCP health check on port 7880), now also enabled in High Availability deployments, covers a
|
|
|
|
|
Media Node VM that stops responding altogether.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### Oracle Cloud
|
2026-10-07 17:12:58 +02:00
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
- An unhealthy Media Node is terminated and its instance pool launches a new one. With a fixed number of
|
|
|
|
|
Media Nodes, the node is detached from the pool, which launches its replacement, and then terminated.
|
|
|
|
|
|
|
|
|
|
#### DigitalOcean
|
|
|
|
|
|
|
|
|
|
- With autoscaling, an unhealthy Media Node is tagged so the autoscaler deletes it and creates a new one. With
|
|
|
|
|
a fixed number of Media Nodes, the Droplet is rebuilt in place.
|
2026-10-07 17:12:58 +02:00
|
|
|
|
openvidu-deployment: the same defaults and parameter names on every cloud
The templates of the five clouds had drifted apart. On AWS, Azure and Google
Cloud:
- 200 GB disk for the single node and the Master Nodes, the default where
the template sets its size: Azure and Google Cloud raise it from 100 GB,
as do the AWS High Availability Master Nodes. On Google Cloud an existing
single node or Elastic Master Node keeps its disk when the template is
applied again.
- Google Cloud boots the latest Ubuntu 24.04 (the ubuntu-2404-lts image
family) instead of an image pinned in December 2024; an existing single
node or Master Node is not recreated when a newer image is published.
- Same parameter names on every Terraform and Bicep template, with the old
names deprecated but still honored (they win when set): rtcEngine on the
Google Cloud single node, whose documented name was not applied, and
masterNodeInstanceType on Google Cloud High Availability.
- Azure no longer opens port 9000 (MinIO) on the single node and Elastic:
MinIO does not run there, and the other clouds closed it in 3.9.0.
- The Media Nodes install with the same arguments on every cloud: Azure
passes --master-node-private-ip and no longer --enabled-modules, and the
user-data names the variable MASTER_NODE_PRIVATE_IP everywhere.
The CHANGELOG also lists the DigitalOcean and Oracle Cloud changes made in
their repositories (v2compatibility by default, masterNodeInstanceType,
the Oracle single node size and disk, rtcEngine).
2026-10-27 19:11:15 +01:00
|
|
|
### Improved
|
|
|
|
|
|
|
|
|
|
#### All clouds
|
|
|
|
|
|
|
|
|
|
- The single node and the Master Nodes get a 200 GB disk by default on every cloud where the template sets
|
|
|
|
|
its size. Azure and Google Cloud raise it from 100 GB (single node, Elastic Master Node and High
|
|
|
|
|
Availability Master Nodes), as do the High Availability Master Nodes on AWS and the Elastic and High
|
|
|
|
|
Availability Master Nodes on Oracle Cloud. Oracle Cloud single node, which used the size of the image
|
|
|
|
|
(about 47 GB), now sets 200 GB. AWS single node and Elastic Master Node already had 200 GB, and on
|
|
|
|
|
DigitalOcean the disk comes with the Droplet size. On Google Cloud and Oracle Cloud single node and the
|
|
|
|
|
Google Cloud Elastic Master Node, an existing deployment keeps its disk when the template is applied again.
|
|
|
|
|
Where the size is a parameter, set it to 100 when you apply the new template to an existing deployment
|
|
|
|
|
(`masterNodesDiskSize` on Google Cloud, `masterNodeDiskSize` on Oracle Cloud): Google Cloud recreates a
|
|
|
|
|
Master Node whose disk size changes.
|
|
|
|
|
- Parameter names are the same on every Terraform and Bicep template. The old names still work and take
|
|
|
|
|
precedence when set, but they are deprecated and will be removed in a future release:
|
|
|
|
|
- Google Cloud and Oracle Cloud single node: `RTCEngine` is now `rtcEngine`, as in their Elastic and High
|
|
|
|
|
Availability templates and on Azure and DigitalOcean.
|
|
|
|
|
- Google Cloud and DigitalOcean High Availability: `masterNodesInstanceType` is now
|
|
|
|
|
`masterNodeInstanceType`, as in every Elastic template and in Azure High Availability.
|
|
|
|
|
|
|
|
|
|
#### Google Cloud
|
|
|
|
|
|
|
|
|
|
- Every machine boots the latest Ubuntu 24.04 image (the `ubuntu-2404-lts` image family), as on the other
|
|
|
|
|
clouds. Before, the templates were pinned to an image from December 2024. An existing single node or Master
|
|
|
|
|
Node is not recreated when a newer image is published. The Media Nodes move to the image family once: the
|
|
|
|
|
first time the new template is applied to an existing Elastic or High Availability deployment, its Media
|
|
|
|
|
Nodes are replaced.
|
|
|
|
|
|
|
|
|
|
#### Oracle Cloud
|
|
|
|
|
|
|
|
|
|
- Single node defaults to 2 OCPUs and 8 GB of memory, the size of its own Elastic Master Node and of the
|
|
|
|
|
4 vCPU and 8 GB machines of AWS and DigitalOcean. Before, it had 4 OCPUs with only 4 GB of memory.
|
|
|
|
|
|
2026-10-07 17:12:58 +02:00
|
|
|
### Fixed
|
|
|
|
|
|
2026-10-07 17:18:33 +02:00
|
|
|
#### All clouds
|
|
|
|
|
|
|
|
|
|
- High Availability: publishing to an RTMP ingress failed. OpenVidu returns the ingress URL on port 1945
|
|
|
|
|
(`rtmps://<your-domain>:1945/rtmp`), but the load balancer only accepted RTMP on port 1935. The load
|
|
|
|
|
balancer now accepts RTMPS on port 1945. Publish to the URL OpenVidu returns when the ingress is created, and
|
|
|
|
|
allow port 1945 in any firewall in front of your publishers.
|
|
|
|
|
|
|
|
|
|
#### AWS
|
|
|
|
|
|
|
|
|
|
- Single node and Elastic: the Elastic IP was attached only after the instance had started booting, so the
|
|
|
|
|
domain could be derived from a temporary public IP, or the instance could start without Internet access and
|
|
|
|
|
fail its installation. The Elastic IP is now known in advance, and the instance waits up to 10 minutes for
|
|
|
|
|
it before installing anything.
|
2026-10-27 19:03:50 +01:00
|
|
|
|
|
|
|
|
#### Azure
|
|
|
|
|
|
|
|
|
|
- Elastic and High Availability: redeploying the template always failed, so no parameter could be changed
|
|
|
|
|
after the first deployment:
|
|
|
|
|
- `InUseSubnetCannotBeDeleted`: the Master Nodes' subnets were declared outside the virtual network, so a
|
|
|
|
|
redeploy tried to delete them while the Master Nodes used them. Every subnet is now declared inside the
|
|
|
|
|
virtual network.
|
|
|
|
|
- `'Service Uri' must not be empty`: Azure Automation returns the URI of a webhook only when it creates it,
|
|
|
|
|
so the scale-in action group lost it on every redeploy. Every deployment now creates the scale-in webhook
|
|
|
|
|
under a new name. The webhooks of earlier deployments stay unused in the Automation account until they
|
|
|
|
|
expire.
|
|
|
|
|
|
openvidu-deployment: a fixed number of Media Nodes on AWS, Azure and Google Cloud
Elastic and High Availability deployments on AWS, Azure and Google Cloud can
run a fixed number of Media Nodes, as DigitalOcean and Oracle Cloud already
could, with the same parameter: FixedNumberOfMediaNodes on AWS,
fixedNumberOfMediaNodes on the other clouds. 0, the default, keeps
autoscaling; a value greater than 0 runs exactly that many Media Nodes and
ignores the initial, minimum, maximum and target CPU parameters. A redeploy
with another value changes the number or switches mode, both ways.
- AWS: the Auto Scaling Group's min, max and desired are the fixed number
and the scaling policy is not created. A Media Node the number no longer
needs is drained by the existing lifecycle hook, as in a scale-in.
- Google Cloud: no autoscaler; the scale-in function, which now runs in both
modes, keeps the managed instance group at the fixed number, abandoning an
extra Media Node so it drains and deletes itself, or resizing the group up.
The group's target size is set at creation only, the function's source is
named by its hash so a code change redeploys it, and `moved` blocks keep
existing autoscalers when the template is applied again.
- Azure: the autoscale setting stays, pinned to the fixed number (minimum =
maximum = default). Azure refuses an autoscale minimum below the Media
Nodes running, which protect themselves from scale-in, so lowering it is a
manual drain first (manual scale, then stop_media_node.sh on each extra
Media Node) and then the redeploy; the CHANGELOG and the documentation
describe it. The portal's form gets the field.
Verified live with ov-cloud-tester's sc-fixed-media-nodes scenario on
Elastic (Google Cloud, AWS and Azure): deploy with 2, lower to 1 (the Media
Node removed served its Room through a 1200 s hold and left once it was
closed), back to autoscaling with no Media Node added or removed.
2026-10-27 19:09:59 +01:00
|
|
|
A redeploy still cannot set the fixed, minimum or maximum number of Media Nodes below the Media Nodes
|
2026-10-27 19:03:50 +01:00
|
|
|
running (`UnsupportedCapacity`); the administration documentation describes how to remove them first.
|
2026-10-28 11:59:09 +01:00
|
|
|
- Professional single node, Elastic and High Availability: the network security group rule for WebRTC over
|
|
|
|
|
TCP opened only ports 50000 and 60000 instead of the range between them. It now opens 50000-60000, as the
|
|
|
|
|
rule for UDP does.
|
openvidu-deployment: the same defaults and parameter names on every cloud
The templates of the five clouds had drifted apart. On AWS, Azure and Google
Cloud:
- 200 GB disk for the single node and the Master Nodes, the default where
the template sets its size: Azure and Google Cloud raise it from 100 GB,
as do the AWS High Availability Master Nodes. On Google Cloud an existing
single node or Elastic Master Node keeps its disk when the template is
applied again.
- Google Cloud boots the latest Ubuntu 24.04 (the ubuntu-2404-lts image
family) instead of an image pinned in December 2024; an existing single
node or Master Node is not recreated when a newer image is published.
- Same parameter names on every Terraform and Bicep template, with the old
names deprecated but still honored (they win when set): rtcEngine on the
Google Cloud single node, whose documented name was not applied, and
masterNodeInstanceType on Google Cloud High Availability.
- Azure no longer opens port 9000 (MinIO) on the single node and Elastic:
MinIO does not run there, and the other clouds closed it in 3.9.0.
- The Media Nodes install with the same arguments on every cloud: Azure
passes --master-node-private-ip and no longer --enabled-modules, and the
user-data names the variable MASTER_NODE_PRIVATE_IP everywhere.
The CHANGELOG also lists the DigitalOcean and Oracle Cloud changes made in
their repositories (v2compatibility by default, masterNodeInstanceType,
the Oracle single node size and disk, rtcEngine).
2026-10-27 19:11:15 +01:00
|
|
|
- Single node and Elastic: the network security group still allowed port 9000 (MinIO) from the Internet.
|
|
|
|
|
MinIO does not run in Azure deployments, which store recordings and application data in Azure Blob Storage,
|
|
|
|
|
and the other clouds have kept this port closed since 3.9.0. The rule is removed.
|
|
|
|
|
|
|
|
|
|
#### Google Cloud
|
|
|
|
|
|
|
|
|
|
- Single node: the documentation names the media engine variable `rtcEngine`, but the template declared
|
|
|
|
|
`RTCEngine`, so a value set as documented was not applied. Both names work now.
|
|
|
|
|
|
|
|
|
|
#### DigitalOcean
|
|
|
|
|
|
|
|
|
|
- Elastic and High Availability: the OpenVidu v2 compatibility module (`v2compatibility`) was not enabled by
|
|
|
|
|
default, unlike on every other cloud and on DigitalOcean's Professional single node. It is now enabled by
|
|
|
|
|
default.
|
2026-10-28 15:23:57 +01:00
|
|
|
- Elastic and High Availability: changing `fixedNumberOfMediaNodes` replaced every fixed Media Node, the ones
|
|
|
|
|
that stay included, and cut their Rooms, because the Media Nodes' user data carried the number. It now
|
|
|
|
|
carries only whether the number is fixed, so raising or lowering it creates or removes only the extra
|
|
|
|
|
Media Nodes. A deployment with more than one fixed Media Node has them replaced once, the first time this
|
|
|
|
|
version of the template is applied.
|