Go to file
Tim Abbott eb97e9fae0 soft_deactivation: Fix buggy handling of race condition.
If a soft deactivated user had a subscription double-toggled without
any new messages being sent in between, add_missing_messages might
incorrectly process those two subscription changes in the wrong order.

Fortunately, the failure mode was usually to throw this exception:

django.db.utils.IntegrityError: duplicate key value violates unique
constraint "zerver_usermessage_user_profile_id_message_id_4936d0df_uniq"
DETAIL:  Key (user_profile_id, message_id)=(4, 57) already exists.

Our unit tests actually had this precise setup some fraction of the
time, because a bit of the test setup code subscribed+unsubscribed the
target user without sending any messages in between, resulting in a
test failure something like 50% of the time.

The original exception was hard to reproduce reliably originally
(resulting in an extremely annoying nondetermnistic test failure), but
is easily reproducible by changing the "id" to "-id" in this change to
always mis-order the processing of those RealmAuditLog events.
2019-05-05 18:29:20 -07:00
.circleci circleci: Fix redis on Bionic. 2019-05-03 11:33:39 -07:00
.github github: Suggest GIFs too in PR template. 2018-02-16 09:59:22 -08:00
.tx tx config: Update slug for mobile. 2018-06-17 17:32:25 -07:00
analytics management: Don't use sys.exit(1). 2019-05-03 14:20:39 -07:00
confirmation analytics/zilencer/zproject: Remove unused imports. 2019-02-02 17:31:45 -08:00
corporate lint: Fix calls to _() on computed strings. 2019-04-23 15:23:03 -07:00
docs provision: Add support for Debian 10 Buster. 2019-05-05 17:57:19 -07:00
frontend_tests admin_settings: Change maxfilesize to max_file_upload_size. 2019-05-03 17:36:09 -07:00
pgroonga migrations: Remove unused imports. 2019-02-02 17:01:04 -08:00
puppet billing: Add cron job to run invoice_plans once a day. 2019-04-29 11:23:17 -07:00
requirements dependencies: Install line_profiler from our fork. 2019-05-05 17:53:00 -07:00
scripts provision: Add support for Debian 10 Buster. 2019-05-05 17:57:19 -07:00
static admin_settings: Change maxfilesize to max_file_upload_size. 2019-05-03 17:36:09 -07:00
stubs billing: Try paying invoices when user puts a new card on file. 2019-04-05 13:36:03 -07:00
templates open graph: Use the complete URL for open graph URLs. 2019-05-05 17:51:53 -07:00
tools provision: Add support for Debian 10 Buster. 2019-05-05 17:57:19 -07:00
zerver soft_deactivation: Fix buggy handling of race condition. 2019-05-05 18:29:20 -07:00
zilencer mypy: Enable strict-optional for calculate_first_visible_message_id. 2019-05-01 10:49:24 -07:00
zproject settings: Add AVATAR_CHANGES_DISABLED server setting. 2019-05-03 12:58:51 -07:00
zthumbor analytics/zilencer/zproject: Remove unused imports. 2019-02-02 17:31:45 -08:00
.codecov.yml Try to avoid codecov spam. 2017-12-29 07:23:26 -05:00
.editorconfig docs: Add ".ts" support in docs and configuration. 2019-04-12 11:26:17 -07:00
.eslintignore typescript: Use ESLint instead of TSLint. 2019-04-13 11:42:47 -07:00
.eslintrc.json subs: Add `stream_ui_updates.js` module for managing ui elements. 2019-04-30 14:36:52 -07:00
.gitattributes gitattributes: Treat .ogg files as binary. 2018-04-27 09:59:19 -07:00
.gitignore mypy: Add basic support for invoking dmypy to run-mypy. 2018-05-21 22:41:08 -07:00
.gitlint lint: Allow revert commit messages in gitlint. 2018-02-13 09:21:01 -08:00
.isort.cfg tornado: Fix logging of tornado activity level. 2018-04-17 15:59:01 -07:00
.npmignore
.stylelintrc lint: Ban color names in CSS. 2019-01-22 15:33:18 -08:00
.travis.yml .travis.yml: Use /nonexistent instead of /tmp/nowhere. 2019-01-15 16:00:48 -08:00
CODE_OF_CONDUCT.md docs: Add clarifying comma in CODE_OF_CONDUCT.md. 2019-04-05 18:01:37 -07:00
CONTRIBUTING.md docs: Add ".ts" support in docs and configuration. 2019-04-12 11:26:17 -07:00
Dockerfile-dev provision: Fix Docker development environment unicode issues. 2019-01-28 22:08:19 -08:00
Dockerfile-postgresql docker: Add PGroonga support to Postgresql Dockerfile. 2018-05-23 11:53:32 -07:00
LICENSE license: Move license application notice from LICENSE to NOTICE. 2018-10-02 12:04:44 -07:00
NOTICE license: Move license application notice from LICENSE to NOTICE. 2018-10-02 12:04:44 -07:00
README.md README: Normalize CircleCI badge styling. 2018-11-18 18:49:22 -08:00
Vagrantfile vagrant: Add option to specify system settings. 2019-04-11 12:28:12 -07:00
manage.py manage.py: Revert sabotaging pika.adapters.twisted_connection import. 2019-01-31 10:04:28 -08:00
mypy.ini mypy: Enable strict_optional for test_outgoing_webhook_interfaces. 2019-05-04 23:15:58 -07:00
package.json dependencies: Upgrade simplebar to 4.0.0-alpha.6. 2019-04-28 21:32:55 -07:00
version.py dependencies: Upgrade simplebar to 4.0.0-alpha.6. 2019-04-28 21:32:55 -07:00
yarn.lock dependencies: Upgrade simplebar to 4.0.0-alpha.6. 2019-04-28 21:32:55 -07:00

README.md

Zulip overview

Zulip is a powerful, open source group chat application that combines the immediacy of real-time chat with the productivity benefits of threaded conversations. Zulip is used by open source projects, Fortune 500 companies, large standards bodies, and others who need a real-time chat system that allows users to easily process hundreds or thousands of messages a day. With over 300 contributors merging over 500 commits a month, Zulip is also the largest and fastest growing open source group chat project.

CircleCI branch Travis Build Status Coverage Status Mypy coverage GitHub release docs Zulip chat Twitter

Getting started

Click on the appropriate link below. If nothing seems to apply, join us on the Zulip community server and tell us what's up!

You might be interested in:

You may also be interested in reading our blog or following us on twitter. Zulip is distributed under the Apache 2.0 license.