kenn / standby

Read from standby databases for ActiveRecord
MIT License
86 stars 28 forks source link

Consider changes to master/slave terminology and project name #22

Closed ericallam closed 5 years ago

ericallam commented 6 years ago

I understand the terms master and slave have been used in database design for decades, but I believe there are replacement terms that aren't politically charged and historically problematic, such as "leader/follower", or "primary/replica". Other communities have run into these issues and made common sense changes, such as Django, Drupal, CouchDB, etc.

I love the Ruby community and would like to see it lead on issues such as this, to be pro-active about problematic uses of language as a barrier for people of color or other marginalised communities from joining the community and feeling like they are included.

If you agree with me I'll be happy to help the migration to the new terminology and will submit a PR. There is also some good advice over on StackOverflow about the steps to take when renaming a gem.

kenn commented 6 years ago

I understand your concern, but at the same time, I have mixed feeling about it. I'm a person of color myself, but I believe it is precisely this attitude that exacerbated the divide and enabled a lunatic to become POTUS.

I would rather tolerate being called a yellow monkey than letting an opportunistic sociopath obtain the ultimate power. Social justice is a luxury for upper middle class compared to the real danger that the current political climate created. Liberals should take note that political correctness has become the privilege of elites. That sounds as if you have nothing to worry in life than such a trivial offense. Those who truly struggle financially, have much more important things to care about than charged words.

I'm not saying I'm opposed to the idea to change the name to a modest one, I actually thought about it myself, but I don't want to help to promote the political correctness policing, because that has been and will continue to be a symbol of the polarization. I don't want to encourage that.

OK enough for politics.

As to the details, I don't like the Heroku's "leader/follower" terminology as they're often just confusing to me. I like MongoDB's "primary/secondary" for the symmetry, but "primary/replica" sounds ok too.

In the long run though, database industry should reach agreement on the terminology and third-party libraries should just follow them. Right now, MySQL, PostgreSQL, Redis all use "master/slave", and MongoDB use "primary/secondary".

I'll keep this ticket open - it's not an urgent issue per se, and I would like to continue the discussion.

ericallam commented 6 years ago

I appreciate your points, and agree that there are definitely cases where people who are struggling with the first two levels in Maslow's hierarchy of needs (Living/Breathing/Eating, and Safety) may not have the energy to care as much about their other needs. But I think issues such as this fall pretty squarely right in the middle of the hierarchy (love and belonging), so people who have satisfied the two base layers would possibly run into a problem if they want to feel like they belong in this community.

Imagine for a moment that a Ruby developer has heard about the gem and does a Google search for the name, but perhaps distracted by whatever problem is at hand, does not include any qualifiers such as "gem" or "GitHub" in the Google search. They'd be greeted with results like this:

screen shot 2017-08-25 at 15 00 47

No matter what your feelings are on the current state of U.S. politics, this sends a message, however subtle (or, depending on how you look at it, not so subtle) message to users of this software of which discourse is acceptable to members of the community.

Also, thanks for keeping the issue and dialogue open, I appreciate it.

christophwarner commented 6 years ago

I think language is important, and insofar as it relates to projects or software I use I certainly would not entertain using a project called "slavery" or even committing a byte of code. There are obviously a host of valid reason as to why but the more important piece of it is respect for the users of the software. That said, if the users are telling me they are offended or feel a way about it I'd go ahead and make a concerted effort to allay those concerns. That's me though; on the other side of the coin someone else interested or invested, would lack the patience or even need to have discussion and if forced would just fork and rename the project for themselves. Obviously, slavery as an actual physical action inspired rebellion and still does to this day. I'll add that as a thing to consider but I think it pertinent to realize that words mean things to people and the consideration of those people are important.

slavery |ˈslāv(ə)rē| noun the state of being a slave: thousands had been sold into slavery. • the practice or system of owning slaves. • a condition compared to that of a slave in respect of exhausting labor or restricted freedom: female domestic slavery. • excessive dependence on or devotion to something: slavery to tradition.

winder487 commented 6 years ago

I get that your gem is more-or-less just trying to describe the functionality of your code, but naming it slavery gives it all the symbolic baggage that comes with the name and pretty much repulses developers immediately.

Putting up so much resistance to the idea of simply changing it by deflecting it with a political word salad is incredibly baffling, and may be an indicator that you enjoy the pure shock value of the gem's name.

kenn commented 6 years ago

To be honest, the gem has been out and in active use since 2012, and it's only in 2017 that the name was questioned. It used to be more laid back and relaxed back then, and risque rhetoric was accepted - I miss those days.

I have rules when I name things: short and memorable, especially when the class name appears in code often.

It's memorable because the whole database industry uses the term "master-slave", with which I have no control. Every system that uses Postgres or MySQL has this name baked in. You have a bigger impact on your cause working with them than with this little gem.

Also, don't underestimate the cost of changing the name - it's a breaking change in its costliest form that all users are required to rewrite the code everywhere. It's usually unacceptable without new features or an imperative security fix to justify $$$.

Lastly, if you come up with a good name that is short, memorable, and available in the gem's namespace, let me know. Contribute, not complain.

christophwarner commented 6 years ago

@kenn i'm not sure you realize how tone deaf your response is.

and it's only in 2017 that the name was questioned. It used to be more laid back and relaxed back then, and risque rhetoric was accepted - I miss those days.

I've been in this game a long time, maybe two decades at this point. In that time i've seen people make statements similar to this for and on lots of things, from idiots fighting to keep what was considered a joke to python diversity nonsense, to lkml battles. I could go on... There are many people who miss things, hell, people still fly confederate flags because they miss slavery but I think you're missing the point.

Someone told you they were offended or find something offensive. Your response is an excuse as to why you are offending them and why they should work with a bigger project? Then you comment on cost and finally tell people to contribute and not complain?! I don't really have a horse in this race, I don't use this gem and don't really program in ruby but it's miffing me in such a way that maybe it's time to deprecate this sort of behavior and gem.

kenn commented 6 years ago

I've been in this game for 35 years and I have my rules: I respect every comment, from any race, gender, age, level of expertise, etc. as long as it holds basic decency. Only comments I refuse to listen are derogatory and hostile ones with words like "idiots." If you think you can change other people's behavior by attacking them, you should probably read more books about psychology and management. Constructive comments are welcomed.

kenn commented 6 years ago

Also keep in mind that Rails 5.2 comes with multiple database support built-in. This gem might no longer be necessary, then it's not worth the trouble anyway. I haven't looked at it in detail yet though.

christophwarner commented 6 years ago

@kenn let’s please try to stay on topic. I’m not sure where I called you an idiot specifically or even referenced you in a manner that is hostile or derogatory. What I will say is that the first comment was rather constructive and so were the following comments. Your previous comment however was lazy at best and in poor form, these are just the facts and my criticisms of them are valid. You’re free to either let your ego take play or actually learn from the experience. That aside if this gem is indeed no longer necessary and can be deprecated then I agree this is moot. For those still offended we can simply point them to this issue.

kenn commented 6 years ago

@christophwarner sorry if I was inconsiderate in the latest comments, and if I misinterpreted the tone of your voice. I'm in agreements with your points. 👍 I'll take a deeper look at the new feature of Rails 5.2 when I have time and will get back here. Still open for new names in the meantime.

christophwarner commented 6 years ago

@kenn thanks and I genuinely appreciate you keeping this issue open and responding with accommodation. I realize it’s neither easy or fun and it shows a baseline of respect for everyone that I think we can all learn from.

bloudermilk commented 6 years ago

@kenn thank you for being open to other names. I found this gem recently and was also off-put by the name. I'd like to throw a hat in the ring for Active Replica which I believe meets your criteria:

Lastly, if you come up with a good name that is short, memorable, and available in the gem's namespace, let me know. Contribute, not complain.

I really like the way Active Replica is a play on Active Record while being both descriptive and obvious. It might not be as short as the current name, but it's just as memorable and much more welcoming.

If you agree to it, I volunteer to kick off the name change PR.

kenn commented 6 years ago

@bloudermilk I like the name, but it's actually taken :(

https://rubygems.org/gems/active_replica https://github.com/kidlab/active_replica

bloudermilk commented 6 years ago

@kenn thank you for the quick response.

I found that gem as well but decided it's probably not an issue. It seems like the project never really got off the ground, with only 5k total downloads and no updates in three years. Our documentation will explicitly call for gem "activereplica" so the margin for confusion seems quite small.

Perhaps @kidlab would be willing to add a note to his README and gemspec pointing to this project as an alternative?

Regardless, I still think the "Active Replica" name works.


Edit: I see now that those are two different (equally abandoned) projects:

1) active_replica on RubyGems with a broken link to gogovan/active_replica on GitHub 2) kidlab/active_replica on GitHub with a broken link to activereplica on RubyGems

kidlab commented 6 years ago

Hi @bloudermilk, I haven't touched https://github.com/kidlab/active_replica for a long time, it was actually forked from @matthewrudy, however, I'm not sure why the original project was removed and abandoned.

So, if you guys like the name, please contact @matthewrudy. And of course, I can add a note in my forked repo to mention your project as an alternative :)

matthewrudy commented 6 years ago

Hey. That must have been a mistake deleting it.

It's probably just because I left GoGoVan, and someone deleted it.

I built activereplica for GoGoVan, because we needed a lightweight way to switch to a replica.

The code was pretty simple, and solved a bunch of performance and weirdness we had with octopus.

But then we upgraded to rails 5, And I didn't have enough time to rework it.

@kidlab did you fork it and make it work?

If so then that's awesome.

Given someone deleted the GoGoVan version, I'll try to find my local copy and put it back at matthewrudy/active_replica

kenn commented 6 years ago

Thanks @kidlab and @matthewrudy - at least we now know what's going on with that gem.

@bloudermilk I'm still open to alternatives.

bloudermilk commented 6 years ago

@kidlab @matthewrudy thank you both for providing us with the history behind Active Replica. It's impressive how similar the goals of these two gems are!

Slavery: "simple, conservative slave reads for ActiveRecord" Active Replica: "simple, performant Read-Only replicas with ActiveRecord"

@kenn given the context above, I don't see why this project shouldn't adopt the Active Replica name. The original gem was developed for a specific company several years ago, abandoned when Rails 5 hit, and never maintained. Someone else picked it up briefly but also didn't maintain it. As any of us could probably attest, this is par for the course as an OSS author. I can't count the number of libraries I started with clever names then later abandoned...

On the other hand, this library has been maintained over the years, and was an impressive plug-and-play for my Rails 5 app. The sad part is that I needed this months ago but my team felt a deep disgust for the name, choosing a different (sub-par) option instead. I only finally added it this week and it saved the day for our high-volume production app. How many other potential users and contributors have ignored this gem because of the name?

If we tried to give every library a unique name in the scope of all the thousands of abandoned OSS projects, we'd have run out by now. Let's use the name right in front of us and make the change while we have some momentum.

kenn commented 6 years ago

@bloudermilk I didn't get the impression that @matthewrudy is ok if we take over the name of the gem and replace it with ours. What do you think @matthewrudy?

kenn commented 6 years ago

Or how about Secondary as in primary / secondary?

semanticart commented 6 years ago

"Secondary" feels like a good choice.

plorry commented 6 years ago

I saw this gem in a project I was building, and basically came here to see if this issue already existed. I sincerely appreciate the discussion above. There has undoubtedly been an effort to move away from master-slave terminology in the tech industry at large, and I think we're right to choose something else when we have the opportunity. The historical baggage / emotional charging of the terminology around slavery is probably the most important consideration, but even that aside, I think there's a case to be made that it actually isn't accurate or descriptive to the operation being performed, but rather merely established industry jargon. My two cents.

I've seen primary/secondary, and leader/follower before. I wonder if there's something akin to active_follower available?

Cheers, and again, kudos for having this conversation earnestly and soliciting community feedback.

EDIT -> whoops, I see you already addressed "leader/follower" - I like the Secondary terminology too!

kenn commented 5 years ago

OK, now the gem has been renamed to standby and released as well as the final version of slavery.

Since it was no small task, I might be missing something. I would appreciate if you could give me feedback and/or PR!