-
Notifications
You must be signed in to change notification settings - Fork 1.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
Auto-invalidate or auto-update cached relations #256
Comments
Modify Project.toConfig() to always fetch the related models like model and datasource definitions from the datastore, bypassing any possibly stale cached values. Related: strongloop/loopback#256
Modify Project.toConfig() to always fetch the related models like model and datasource definitions from the datastore, bypassing any possibly stale cached values. Related: strongloop/loopback#256
The relations cache seems to be pretty useless or entirely broken. It looks like it is never invalidated. You have to grab a new instance to get up to date data. I'd like to get rid of it in favor of all DAO methods hitting the connector API every time. I'd like to move the optimization to the connector level instead of the model instance level. A connector wide cache would improve all hits to a dataSource not just model relations. |
I am closing this issue, since no user was asking for this enhancement and it clearly was not a priority for us so far. We can reopen it again later when there is more demand. |
Hey, I just encountered the same problem, and turn to delay the models listing query for 1 second as a workaround. |
@bajtos I think you forgot to close the issue. Closing. |
Modify Project.toConfig() to always fetch the related models like model and datasource definitions from the datastore, bypassing any possibly stale cached values. Related: strongloop/loopback#256
Consider the following code snippet from loopback-workspace:
The line (1) fills "project.models" cache with the list of all related models. The line (2) queries the related models and returns a new copy of the model, which is saved back to the datasource in (3). Finally line (4) lists all models again, but receives stale data.
Since the modification was made through
project.models
, it should be possible to improve the caching mechanism, so that either:save
function of models returned by the query updates the cached record.save
function of models returned by the query invalidates the whole relation cache and forces the next "find-all" query to fetch fresh data from the datasource.Workaround
Always pass 'true' as the first parameter of "find-all" queries. In other words, changing the line (4) to
project.models(true, function(err, list) {
fixes the problem.Although the workaround is trivial, tracking the problem down to the related-models-cache is not straightforward.
The text was updated successfully, but these errors were encountered: