Comments (2)
Hey 👋 !! Yeah, like you said, there is no obvious way to address this. I agree that a different exception like Nebulex.RegistryLookupError
may look a bit better, but the problem remains. Unregistering before shutdown I don't think is a suitable solution because, first of all, the cache supervisor can be explicitly stopped or it can just crash, and in that case, where are we going to unregister? Second of all, unregistering means deleting the context from the Registry which uses the :persistent_term
, and that could be expensive, that's why it is handled by the registry itself monitoring the cache supervisor process, and when it dies, it unregistered (similar to Ecto for example). I will think about it, and see if there is something we can do about it, but I think it is important to understand your use case also, maybe I can help you more. For example, why the cache is crashing, or why you are stopping it? How your main supervision tree is configured, because, if you have other processes depending on the cache, perhaps you can use another strategy like :rest_for_one
ensuring when the cache supervisor is restarted, their dependants are restarted too. anyway, it is just to throw some ideas, let me know your thoughts. Thanks!
from nebulex.
Registry can still listen to supervisor exit messages and unregister in case supervisor didn't do this!
I will think about it, see if there is something we can do about it, but I think it is important to understand your use case also, maybe I can help you more. For example, why the cache is crashing or why you are stopping it? How your main supervision tree is configured, because, if you have other processes depending on the cache, perhaps you can use another strategy like :rest_for_one ensuring when the cache supervisor is restarted, their dependants are restarted too. anyway, it is just to throw some ideas, let me know your thoughts
Our use case is nothing special: we have Cache process in our main Application supervisor tree and we see errors on the app shutdown, since there's still some residual traffic from client processes on other nodes (we use this adapter which broadcasts events to other nodes).
One possible way to go about this is to have special worker process among supervisor children which will unregister on exit. The same way Bootstrap
process is used to leave cluster in Partitioned and Replicated adapters
from nebulex.
Related Issues (20)
- Docs on Migrating to v2 from Nebulex.Adapters.Dist.Cluster HOT 5
- `Nebulex.Cache` callbacks mention "Shared Options" section that do not exist
- Support for functions that can set TTL in Decorator similar to Match HOT 9
- Where to use load/2, dump/2 HOT 4
- random :erpc, :timeout with partitioned get HOT 2
- Is there any way to get the size of the cache? HOT 4
- Seeing Nebulex.RPCError during deployments with partitioned adapter HOT 4
- Nebulex.RegistryLookupError HOT 9
- Ambiguity regarding ttl and gc_interval relation. HOT 4
- Replicated adapter syncing during rolling deployment HOT 5
- Bug on Local adapter when using `delete_all` and keys are nested tuples: not a valid match specification HOT 3
- is allocated_memory param global on per node when using Nebulex.Adapters.Partitioned with :shards HOT 2
- Dangling reference on `cache_evict` when using referenced keys HOT 4
- Regression on decorated functions and Elixir 1.16 HOT 3
- Empty arguments list passed to `generate/3` in Elixir 1.16 HOT 3
- `Multilevel` inclusive cache doesn't duplicate entries backwards on `get_all/2` HOT 3
- Fix compatibility with Elixir 1.15 and 1.16 HOT 3
- Support cache refreshing in the background HOT 1
- Having a cache per user ID... HOT 4
- 2.6.2 is missing from tags and releases on github HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nebulex.