Comments (18)
Any plans for this?
from em-mongo.
interested too!
from em-mongo.
+1
from em-mongo.
+1
from em-mongo.
I'd love tihs
from em-mongo.
Just implemented this feature in my fork, going to check it out in production
from em-mongo.
Hi @fl00r,
Have you tested this out in a prod environment?
When do you think it will be ready for a PR?
from em-mongo.
@ivobenedito, a week in prod. While mongodb master get down, client successfully reconnected
from em-mongo.
@fl00r Cool ;)!! I'm mounting a ReplicaSet on my localhost to also make some failover tests.
from em-mongo.
It will be good to get some feedback :)
Ehmm.. By the way, replica set connection should be established by new_replicas
method
EM::Mongo::Connection.new_replicas([host:port, host:port, ...], timeout, reconnect_in: 1000)
from em-mongo.
@fl00r Thanks for showing the syntax usage. Did some tests with it yesterday.
Meanwhile, what do you think on having a more solid API, for example:
EM::Mongo::Connection.new # simple connector
EM::Mongo::ReplicaSetConnection.new # replset connector
# currently, the original mongo driver updated to this
Mongo::MongoClient.new # simple connector
Mongo::MongoReplicaSetClient.new # replset connector
from em-mongo.
@fl00r Also, think I might have found a bug.
I'm using a ReplicaSet with 3 members, everytime I shutdown the primary and a secondary from the remaining 2 gets elected to master, the client works fine.
Meanwhile, if I shutdown another member (primary) and only leave 1 active (secondary), mongo doesn't elect the secondary to primary without an arbiter, which means the ReplSet stops working.
This is how mongo works, and the app isn't able to fetch anything from Mongo because there is no primary node. (makes sense)
Then, If I bring another member in again, a primary is elected but the app/driver can't find it anymore.
Have you covered/tested this use case?
from em-mongo.
Right now driver tries to reconnect few times with timeout
delay and then calls on_unbind
callback (which is do nothing by default).
In production you should raise an error and stop your application in case if after some retries client can't reconnect. Then you will get some alerts from production and then somehow solve your problem and start your application again (we use runitd for supervising our applications).
So you should pass on_unbind: proc{ fail "Can't reconnect blah blah blah" }
option. Or I can add support of infinite reconnects, which looks like a bad option.
About naming. In my first iteration I've created ReplicaSetConnection
class for connection :) so, now I think it is good idea to return back
from em-mongo.
Hi. As far as em-mongo isn't supported enough I've begun to write new MongoDB Client on EventMachine.
Protocol and some common stuf is already implemented. ReplicaSets support will be added till Monday.
https://github.com/fl00r/monga
If somebody interested - welcome!
from em-mongo.
@fl00r if you have any interest in taking over em-mongo, or just taking the name once you have feature parity, I would be more than happy to hand over the keys (to the gem as well). At the very least let me know when you think monga its stable for production use and I will make mention of it in the README.
I haven't used MongoDB in a long, long time and probably never will.
cc: @ivobenedito
from em-mongo.
Hello! Somehow github removed all my notifications :/
It is a good idea to not produce many clients and to maintain only one.
from em-mongo.
I've rewritten my client to support all kind of interfaces: blocking (over TCPSocket), synchronous (over Fibers on EventMachine) and asynchronous (over EventMachine). But API has changed because I've used callbacks instead of Deferrable. Going to rewrite Wiki and Readme soon
from em-mongo.
@fl00r I've seen that you've implemented replica set support on your repo (some time ago, I know).
If you like to, it would be a great thing to merge your commits into this here.
from em-mongo.
Related Issues (20)
- on_unbind callback never gets invoked HOT 1
- Conflict with mongo gem: already initialized constant ASCENDING_CONVERSION HOT 2
- Doesn't run under JRuby HOT 3
- Bogus tests HOT 2
- Can't pass options to create_collection HOT 3
- undefined method 'defer_as_a' HOT 1
- Is there any logging facility in em-mongo? HOT 3
- Connection timeout trouble HOT 3
- Performance issue with fields > 1 kilobyte HOT 3
- Fibers
- spec_helper missing from gem
- tags are missing for releases HOT 1
- undefined method `docs' for :disconnected:Symbol (NoMethodError) HOT 6
- update fails with MongoDB 2.4.6 HOT 1
- Only works with bson up to '1.9.2' HOT 1
- Connection can not be closed? HOT 2
- Update README about maintainership
- Example not working? HOT 3
- Publish 0.6.0 via rubygems.org HOT 4
- snakes
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 em-mongo.