Skip to content

Instantly share code, notes, and snippets.

@mateuszmandera
Last active August 6, 2020 08:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mateuszmandera/e5c7b285ada7a5a2254e4e899d1fc0fd to your computer and use it in GitHub Desktop.
Save mateuszmandera/e5c7b285ada7a5a2254e4e899d1fc0fd to your computer and use it in GitHub Desktop.
Google Summer of Code 2019: Final Report

Google Summer Of Code 2019 - Zulip

My main areas in Zulip are the email mirror, retention and rate limiting subsystems. My work during this GSoC was spread out across various small and medium sized projects and the best way to view it is through my commit history. Of course for the purposes of this final GSoC report, the commits with relevant dates should be considered.

Below I will briefly describe the major pieces of my work:

Message retention policy

This is a system allowing automatic (or manual) archivization (with possibility of restoring) and ultimately deletion of messages older than a specified amount of days. My work here was essentially rewriting the system, based on the ideas of the original implementation in an old PR. This involved some challenging design to optimize the performance, while ensuring relationships between objects that are being archived are maintained - to keep data integrity.

Most commits relevant to this can be found by searching my commits with the retention keyword: https://github.com/zulip/zulip/search?o=asc&q=author%3Amateuszmandera+retention&s=committer-date&type=Commits

Email mirror

This is a system allowing users to send emails to a specific email address, which will then be posted as a message in the appropriate place in zulip. Work on the email mirror was mostly just a variety of small adjustments and writing the current documentation of it.

Populate_db changes

populate_db is a script which initializes and populates the database in the development environment with some initial example data. The main part of my work here was changing how this works to make things more analogical to how it is in production environments. This involved a lot of fiddling with the automated tests to make them work after these changes to the structure of the development environment. This was the relevant issue: zulip/zulip#11015

display_recipient cache handling

This was a fairly involved bugfix for how some objects were being handled with regard to caching. Details of what was happening here can be found in zulip/zulip#12818 In order to fix this, I had to make significant changes to the handling of display_recipient, requiring some tricky optimization to avoid performance regression.

Most commits for this can be found by searching my commits with the display_recipient keyword: https://github.com/zulip/zulip/search?o=asc&q=author%3Amateuszmandera+display_recipient&s=committer-date&type=Commits

Rate limiting of authentication (not merged)

This was a rework of my old PR implementing this feature. It can be found at zulip/zulip#12044 and is awaiting review until some follow-up adjustments can be made and finally merged.

Migrating the id column of UserMessage table to bigint (not merged)

I've been working on this in this last week of GSoC. Most difficulty with this is due to the need to avoid database locking and server downtime - this work is in progress and can be found in the PR zulip/zulip#13062

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment