Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
taylornoss opened this issue Jul 12, 2024 · 4 comments
Open

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

taylornoss opened this issue Jul 12, 2024 · 4 comments

Comments

@taylornoss
Copy link

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.

@bbf
Copy link

bbf commented Jul 17, 2024

I encountered the same bug while trying to understand why a module was not working properly and there a broadcast storm of WS messages. Is this a regression from the original behavior or was it always like this?

@bbf
Copy link

bbf commented Jul 17, 2024

I found the issue:
53fc814#r144318440

@sdetweil
Copy link
Collaborator

@sdetweil
Copy link
Collaborator

we changed to allowing an async process from mode_helper.start
but there is a race condition where we haven't completed the first and allow more.

@khassel khassel added the bug label Jul 17, 2024
rejas pushed a commit that referenced this issue Aug 4, 2024
…ces of a module are in config.js (#3517)

adds a check for already loaded/loading for node helper of a each
module, only does once

fixes #3502
rejas pushed a commit that referenced this issue Aug 18, 2024
…3523)

- [x] Base your pull requests against the `develop` branch.
- [x] Include these infos in the description:
> - Does the pull request solve a **related** issue?
Yes - solves #3521

> - If so, can you reference the issue like this `Fixes
#<issue_number>`?
Fixes #3521 (also mentioned in commit message)

> - What does the pull request accomplish? Use a list if needed.

> > - Updates duplicate module filter method (upstream vs downstream -
see #3502)
> > - Updates socket io catchall functionality to new API
[[docs](https://socket.io/docs/v4/listening-to-events/)].

- [x] Please run `npm run lint:prettier` before submitting
- [x] Don't forget to add an entry about your changes to the
CHANGELOG.md file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants