Coder Social home page Coder Social logo

Feature request: replica set support about em-mongo HOT 18 OPEN

bcg avatar bcg commented on May 24, 2024
Feature request: replica set support

from em-mongo.

Comments (18)

krobertson avatar krobertson commented on May 24, 2024

Any plans for this?

from em-mongo.

tobsch avatar tobsch commented on May 24, 2024

interested too!

from em-mongo.

rcreasey avatar rcreasey commented on May 24, 2024

+1

from em-mongo.

alebsack avatar alebsack commented on May 24, 2024

+1

from em-mongo.

cypriss avatar cypriss commented on May 24, 2024

I'd love tihs

from em-mongo.

fl00r avatar fl00r commented on May 24, 2024

Just implemented this feature in my fork, going to check it out in production

from em-mongo.

ivobenedito avatar ivobenedito commented on May 24, 2024

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.

fl00r avatar fl00r commented on May 24, 2024

@ivobenedito, a week in prod. While mongodb master get down, client successfully reconnected

from em-mongo.

ivobenedito avatar ivobenedito commented on May 24, 2024

@fl00r Cool ;)!! I'm mounting a ReplicaSet on my localhost to also make some failover tests.

from em-mongo.

fl00r avatar fl00r commented on May 24, 2024

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.

ivobenedito avatar ivobenedito commented on May 24, 2024

@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.

ivobenedito avatar ivobenedito commented on May 24, 2024

@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.

fl00r avatar fl00r commented on May 24, 2024

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.

fl00r avatar fl00r commented on May 24, 2024

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.

bcg avatar bcg commented on May 24, 2024

@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.

fl00r avatar fl00r commented on May 24, 2024

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.

fl00r avatar fl00r commented on May 24, 2024

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.

dCSeven avatar dCSeven commented on May 24, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.