sync gproc table with a slave server

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

sync gproc table with a slave server

pablo platt-3
Hi,

I'm using gproc to register user sessions.
How can I sync the gproc ets table with a slave server?
Is gen_leader an overkill when the same server will always be the master and I don't need master election?

Can the slave be notified for any change in gproc so it will know when a user session added, removed or changed?

Thanks

_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: sync gproc table with a slave server

Paul Peregud-2

Pablo, since you have not provided that much information, I'll suggest to try to get away with calls to master node's gproc app instance via Erlang distribution (erlang:rpc/3). You will avoid a can of worms.

Or you can try gproc global registration. I would suspect dragons in that particular area.

On Dec 18, 2014 7:48 PM, "pablo platt" <[hidden email]> wrote:
Hi,

I'm using gproc to register user sessions.
How can I sync the gproc ets table with a slave server?
Is gen_leader an overkill when the same server will always be the master and I don't need master election?

Can the slave be notified for any change in gproc so it will know when a user session added, removed or changed?

Thanks

_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions


_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: sync gproc table with a slave server

Loïc Hoguin-3
Guessing by erlang:rpc/3 you meant to look at the rpc module. This
module allows both synchronous and asynchronous calls (the latter is
often missed).

Also look at gen_server:multi_call/2,3,4 and gen_server:abcast/2,3, and
at equivalents for gen_fsm and others.

I have had issues with gproc+gen_leader (if a node crashes, the tables
lose sync). Ulf created the locks application that can be used with
gproc, not sure if this gproc+locks combination works well though. Been
eager to know and tried to get people to test it, as I haven't had the
opportunity to try myself. :-)

A gproc local + multi_call/abcast solution has worked pretty well in my
experience, with a small number of servers located right next to each
other. This wouldn't work with a large number of servers though.

On 12/20/2014 12:47 AM, Paul Peregud wrote:

> Pablo, since you have not provided that much information, I'll suggest
> to try to get away with calls to master node's gproc app instance via
> Erlang distribution (erlang:rpc/3). You will avoid a can of worms.
>
> Or you can try gproc global registration. I would suspect dragons in
> that particular area.
>
> On Dec 18, 2014 7:48 PM, "pablo platt" <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi,
>
>     I'm using gproc to register user sessions.
>     How can I sync the gproc ets table with a slave server?
>     Is gen_leader an overkill when the same server will always be the
>     master and I don't need master election?
>
>     Can the slave be notified for any change in gproc so it will know
>     when a user session added, removed or changed?
>
>     Thanks
>
>     _______________________________________________
>     erlang-questions mailing list
>     [hidden email] <mailto:[hidden email]>
>     http://erlang.org/mailman/listinfo/erlang-questions
>
>
>
> _______________________________________________
> erlang-questions mailing list
> [hidden email]
> http://erlang.org/mailman/listinfo/erlang-questions
>

--
Loïc Hoguin
http://ninenines.eu
_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: sync gproc table with a slave server

pablo platt-3
Paul, my use case is simple. I have a master server that handles user sessions and a slave server that handles a specific app separated from the main session.
The slave need to know if a user has permission to view or edit app instance.
gproc local is very nice because it clean names and properties when a process dies.

With mnesia I could use ram only table and have a read-only copy on the slave.
I can also listen to table events and handle user permissions changes.

Another option is that the slave will make a call to the master when a new user try to access an app instance.
When a user permission is changed on the master, it will send a message to the slave.
This is a bit more complicated and in case of a network error, I'll might be in a non consistent state.

If gproc had a simple read only replication (based on mnesia?) and more granular notifications it could solve my use case.

On Sat, Dec 20, 2014 at 1:03 AM, Loïc Hoguin <[hidden email]> wrote:
Guessing by erlang:rpc/3 you meant to look at the rpc module. This module allows both synchronous and asynchronous calls (the latter is often missed).

Also look at gen_server:multi_call/2,3,4 and gen_server:abcast/2,3, and at equivalents for gen_fsm and others.

I have had issues with gproc+gen_leader (if a node crashes, the tables lose sync). Ulf created the locks application that can be used with gproc, not sure if this gproc+locks combination works well though. Been eager to know and tried to get people to test it, as I haven't had the opportunity to try myself. :-)

A gproc local + multi_call/abcast solution has worked pretty well in my experience, with a small number of servers located right next to each other. This wouldn't work with a large number of servers though.

On 12/20/2014 12:47 AM, Paul Peregud wrote:
Pablo, since you have not provided that much information, I'll suggest
to try to get away with calls to master node's gproc app instance via
Erlang distribution (erlang:rpc/3). You will avoid a can of worms.

Or you can try gproc global registration. I would suspect dragons in
that particular area.

On Dec 18, 2014 7:48 PM, "pablo platt" <[hidden email]
<mailto:[hidden email]>> wrote:

    Hi,

    I'm using gproc to register user sessions.
    How can I sync the gproc ets table with a slave server?
    Is gen_leader an overkill when the same server will always be the
    master and I don't need master election?

    Can the slave be notified for any change in gproc so it will know
    when a user session added, removed or changed?

    Thanks

    _______________________________________________
    erlang-questions mailing list
    [hidden email] <mailto:[hidden email]>
    http://erlang.org/mailman/listinfo/erlang-questions



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions


--
Loïc Hoguin
http://ninenines.eu


_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions