Skip to content

Multiple Instances of Node Helper running for a single module #3502

@taylornoss

Description

@taylornoss

I found a bug in MagicMirror

Platform: Electron version 31.1.0 running on Windows (reproducible on both Windows 10 and Windows 11)

Node Version: v20.15.1

MagicMirror² Version: 2.28.0

Description:
There are a couple of modules my mirror that are repeated, to be configured with different module level settings. I'm seeing instances of multiple node helpers being created for the repeated modules, which is leading to unnecessary noise in communication between the modules and the node helpers.

It's my understanding that there should only be one instance of a node helper per module type. From the Module Development Documentation:

For every module type, only one node helper instance will be created. For example: if your MagicMirror uses two calendar modules, there will be only one calendar node helper instantiated.

Here's the output from the command line with two instances of the MMM-GoogleCalendar module in the config file

[2024-07-12 17:59:28.017] [LOG]   Starting MagicMirror: v2.28.0
[2024-07-12 17:59:28.072] [LOG]   Loading config ...
[2024-07-12 17:59:28.073] [LOG]   config template file not exists, no envsubst
[2024-07-12 17:59:28.074] [LOG]   Loading module helpers ...
[2024-07-12 17:59:28.075] [LOG]   No helper found for module: alert.
[2024-07-12 17:59:28.077] [LOG]   Initializing new module helper ...
[2024-07-12 17:59:28.078] [LOG]   Module helper loaded: updatenotification
[2024-07-12 17:59:28.078] [LOG]   No helper found for module: clock.
[2024-07-12 17:59:28.683] [LOG]   Initializing new module helper ...
[2024-07-12 17:59:28.683] [LOG]   Module helper loaded: MMM-GoogleCalendar
[2024-07-12 17:59:28.684] [LOG]   Initializing new module helper ...
[2024-07-12 17:59:28.684] [LOG]   Module helper loaded: MMM-GoogleCalendar

Each instance of the module seems to be loading it's own version of the node helper.

Reading through the initialization code, I'm not seeing anything preventing duplicate node helpers from being started. I think the answer might be as simple as removing duplicates from the module list before loading them? We could just use a Set to remove any duplicates from the modules array:

// MagicMirror -> js -> app.js
// this.start function, line #272

// change 
await loadModules(modules);
// to 
let unique = [...new Set(modules)];
await loadModules(unique);

Or prevent duplicates from being added to the array further upstream, but this would just be a one-liner fix.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions