Hot patch a running system without rebooting

Overview

Patch - small hot update part of modules without rebooting. Zip-the archive contains one or more modules and possibly some assemblies.

This method is used for small changes when it is necessary to apply fresh fixes without waiting for the technological hour. The patch is built for a specific version of the system to avoid loss of integrity.

When reinstalling a version from the distribution and when upgrading, all previously applied patches are eliminated.

Patch archives are downloaded to the system and stored in its file partitions. It is not allowed to apply past patches after system update.

Patch application procedure

Step 1. log in to the master domain under the role account "admin". Open the Settings application":

root

Step 2. Select "System/Patch":

patch 01

Step 3. Select the zip archive containing the patch:

patch 02

Step 4. Upload the selected archive to the server by pressing the "Upload" button". As a result, the unpacked composition of the archive will be displayed on the right:

patch 03

Step 5. Check the uploaded files by clicking the "Check" button".

The "Status" field will list the node composition and the integral result of new module checks on each server node.

patch 04

Step 6: Initiate the application by clicking the "Apply" button".

As a result, the files in the archive will replace the contents of the current directory with the system - exactly the version that is active. All nodes will then apply the changes without rebooting.

The "Result" field will list the composition of the nodes and the integral result of applying the new modules on each node. From the results of all nodes a final integral status will be collected: when several statuses are combined, the status with the smaller code becomes the final status:

  • error = 1 - an error occurred during hot loading of the module;

  • not_beam = 2 - file, is not an erlang module;

  • wrong_path = 3 - the path to the modules in the archive does not correspond to the expected one;

  • not_updated = 4 - failed boot. In this case, a manual reboot is shown for the nodes in which this condition occurred in the System/Nodes section";

  • not_changed = 5 - module version matches the one already loaded;

  • ok = 6 - module loaded successfully;

  • not_loaded = 7 - module is not loaded. This happens if the node does not execute processes served by the module. If the patch contains modules of various specific microservices, this status occurs everywhere, and it is normal.

patch 05

Step 7. Delete the downloaded archive with the patch to prevent its accidental application in the future:

patch 06

After that, all system processes will either continue to run in the new versions immediately or on the next iteration of the message processing cycle.

Limitations

  • It is not possible to patch to the new version entirely.

  • Patching system libraries is not possible.

  • When filling media libraries it is necessary to reload some nodes manually in the "System/Nodes" section".

  • The maximum size of a downloadable zip archive is 10MB.

A patch has the potential to disrupt the integrity of processes and states. In this case a rollback will be required (in some cases an anti-patch will suffice, in other cases this can be a complex manual operation that requires training). The last resort is to reinstall the system from a docker image with a connection to the same storage (databases, brokers, file system partitions and directories).