-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Duplicate singleton instances after upgrading from 0.12.14 to 1.5.8 #7303
Comments
@tihrr Thanks for posting! We'll take a look as soon as possible. In the mean time, there are a few ways you can help speed things along:
Please remember: never post in a public forum if you believe you've found a genuine security vulnerability. Instead, disclose it responsibly. For help with questions about Sails, click here. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Node version: 18.14.2
Sails version (sails): 1.5.8
ORM hook version (sails-hook-orm): 4.0.2
Sockets hook version (sails-hook-sockets): 2.0.4
Organics hook version (sails-hook-organics): -
Grunt hook version (sails-hook-grunt): -
Uploads hook version (sails-hook-uploads): -
DB adapter & version (e.g. [email protected]): 3.0.1
Skipper adapter & version (e.g. [email protected]): -
We have several singletons that are written in TS (like most of the app). After the singleton instance is being created, initialization method need to be invoked, during witch singleton's private Map object is being populated from the DB. This step is being done in bootstrap.js (we tried it in app.js as well, on
sails.lift
).The problem is that when starting Sails (using
node app.js
, ornodemon
), it first instantiate the singletons (seems like it's being done byts-node
which compiles TS modules). However, when Sails lifts and reaches our code inbootstrap.js
, it doesn't finds the already instantiated singleton object, and instead it creates a completely new singleton instance. At this step, theinitialize
method is being called and it is being initialized (populates the Map object) inbootstrap.js
. But, when this singleton is being called from, lets say, one of the controllers, it calls the FIRST instance of the singleton, that has been created byts-node
, where Map object is not populated. In order to verify that, I added a private property to the singleton class that gets random numeric value on constructor run, and, indeed - there are 2 separate instances of the same singleton, and the first one, non-initialized one, is being called from the controller.We also noticed that not only singletons are duplicated, and it affects on how our DB cache works.
Older
0.12.14
Sails version doesn't have this issue.The text was updated successfully, but these errors were encountered: