{"push_id":1231286315,"size":20,"distinct_size":1,"ref":"refs/heads/production","head":"5d2fee72c874050cf7ddc56f5d989e018d1982ac","before":"c200d50a19580e94099b90b94670ebdbf348dc55","commits":[{"sha":"97d5ee5ccf43718ca4ded19197e7692e13d1a0ff","author":{"name":"mikey","email":"d0cb86121b84c757e7e7532455bdbca445647cea@gmail.com"},"message":"create .lgtm settings file","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/97d5ee5ccf43718ca4ded19197e7692e13d1a0ff"},{"sha":"f293fb1f0ee2b6ca04595d4990db93844836223a","author":{"name":"mikey","email":"d0cb86121b84c757e7e7532455bdbca445647cea@gmail.com"},"message":"create pull request template","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/f293fb1f0ee2b6ca04595d4990db93844836223a"},{"sha":"9948e9e29869c60ecde4c3cdac723d171fa1423f","author":{"name":"Ben Gotow","email":"7205b35eb97f5e9cf839110f46f402bc3bb6882a@gmail.com"},"message":"Draft Syncback Fixes (#322)\n\n* Be explicit about draft replaced in update, allow for non-Nylas MessageIDs\r\n\r\n* Set is_created when updating Gmail drafts so reconcilation succeeds\r\n\r\n* Don’t assume that the old_message_id_header is always set","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/9948e9e29869c60ecde4c3cdac723d171fa1423f"},{"sha":"dd6be6ef1266af2e3f80fd357f0d654ac72300d1","author":{"name":"mikey","email":"d0cb86121b84c757e7e7532455bdbca445647cea@gmail.com"},"message":"Update PR template","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/dd6be6ef1266af2e3f80fd357f0d654ac72300d1"},{"sha":"ad194871ea4e9d648993a621a12911a4a5a4f52a","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Switch to producer/consumer model for processing syncback actions\n\nSummary:\nPreviously the syncback service was structured in such a way where we would\nspawn a \"worker\" greenlet for processing an individual action. This was fine,\nbut it made it difficult to know whether we should be actively trying to find\nmore syncback actions to run or if all the workers are saturated and to just\nwait until they're done.\n\nThis diff restructures things so that what was formerly a \"worker\" is now a\n\"task\". We spawn a fixed number of consumers (now more accurately called\n\"workers\"). The SyncbackService is now the \"producer\" which constantly polls\nfor new actions until all the workers are saturated. This allows us to eagerly\nstart looking for new actions as soon as a worker has finished processing its\ncurrent action.\n\nFixes T6973\n\nTest Plan: Unit tests\n\nReviewers: spang, drew, bengotow\n\nReviewed By: bengotow\n\nSubscribers: khamidou, jenkins\n\nManiphest Tasks: T6973\n\nDifferential Revision: https://phab.nylas.com/D3124","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/ad194871ea4e9d648993a621a12911a4a5a4f52a"},{"sha":"46b67e57067e2df32ed00a5b2421bc74cc3bbd28","author":{"name":"Karim Hamidou","email":"3c2cca8f710d6eab4c553c265f3bae65a1261683@gmail.com"},"message":"Fix cancellation sending for Exchange\n\nSummary:\nThis diff fixes a long-standing bug --- Exchange wouldn't process our invite cancellation messages correctly. Sending a cancellation message to an Exchange server would result in Exchange stripping out the cancellation part of the invite, causing the event to stay on the recipient's calendar. I suppose it's because Exchange throws away what it doesn't understand.\n\nAfter spending a looong time time trying various iCalendar and MIME incantations to have Exchange accept the invite, I figured out the solution: you don't negotiate with terrorists.\n\nWe're now sending the invite through Mailgun instead of Exchange. This works reliably across providers.\n\nTest Plan: Tested manually by sending cancellation messages to Gmail and Exchange users.\n\nReviewers: spang\n\nReviewed By: spang\n\nSubscribers: jenkins, gleb\n\nDifferential Revision: https://phab.nylas.com/D3125","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/46b67e57067e2df32ed00a5b2421bc74cc3bbd28"},{"sha":"8ce3fa661e933e8a380c553fe63808f50bca8df1","author":{"name":"Karim Hamidou","email":"3c2cca8f710d6eab4c553c265f3bae65a1261683@gmail.com"},"message":"Display an error if REDIS_SHARDS isn't defined correctly.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/8ce3fa661e933e8a380c553fe63808f50bca8df1"},{"sha":"89ae05c6663132b4679b1d56076acf8bce361068","author":{"name":"Christine Spang","email":"9c3cc731854ab29e15093fa37b8f8c3fe765c7ba@nylas.com"},"message":"Revert \"Force usage of the `ix_message_ns_id_is_draft_received_date` index\"\n\nThis reverts commit 17761ecaf50c629b3f7e6d602ec5fb14395c4afb.\n\nReason for revert: erroneously adds FORCE INDEX to more queries than it\nshould, resulting in a performance regression across the MySQL clusters.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/89ae05c6663132b4679b1d56076acf8bce361068"},{"sha":"fc26ee9ad6409702bb8ee272140c8af3cde0da02","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Add batch tasks for syncback\n\nSummary:\nWe want to amortize the cost of some IMAP operations (e.g. selecting a\nfolder) across a number of syncback actions. This diff adds a new\nSyncbackBatchTask which is responsible for running a list of SyncbackTasks. The\nnext step will be to pull the CrispinClient up to the SyncbackBatchTask so we\ncan share it across SyncbackTasks.\n\nFixes T6979\n\nTest Plan: Unit tests, run locally\n\nReviewers: drew, bengotow, khamidou, spang\n\nReviewed By: spang\n\nSubscribers: jenkins\n\nManiphest Tasks: T6979\n\nDifferential Revision: https://phab.nylas.com/D3128","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/fc26ee9ad6409702bb8ee272140c8af3cde0da02"},{"sha":"485555aa673ce4d86515fdbee0f4402d5181b6c9","author":{"name":"Michael Pfister","email":"d0cb86121b84c757e7e7532455bdbca445647cea@gmail.com"},"message":"fix lint errors","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/485555aa673ce4d86515fdbee0f4402d5181b6c9"},{"sha":"c1f91c23cf8d6303fbe05e57b99c8d737d7ca7d1","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Refactor to share CrispinClient across SyncbackTasks\n\nSummary:\nThis changes things such that we can use the same CrispinClient for multiple\nremote actions in the same SyncbackBatchTask. This will enable us to more\naccurately scope the lifetime of our IMAP connections.\n\nTest Plan: Run locally, unit tests\n\nReviewers: drew, bengotow, khamidou, spang\n\nReviewed By: spang\n\nSubscribers: drew, khamidou, jenkins\n\nDifferential Revision: https://phab.nylas.com/D3115","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/c1f91c23cf8d6303fbe05e57b99c8d737d7ca7d1"},{"sha":"c194f6dbeee30e7669072105bd3f2a5ca2cf55fa","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Add function to only SELECT if necessary\n\nSummary:\nSELECT-ing a folder on each IMAP action is pretty expensive. If the caller\ndoesn't need the guarantees of a new session (e.g. HIGHESTMODSEQ freshness)\nand we've already selected the folder they want on this connection then they\nshouldn't have to pay the cost.\n\nTest Plan: Unit tests, run locally\n\nReviewers: khamidou, drew, bengotow, spang\n\nReviewed By: spang\n\nSubscribers: jenkins\n\nDifferential Revision: https://phab.nylas.com/D3137","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/c194f6dbeee30e7669072105bd3f2a5ca2cf55fa"},{"sha":"5dd89078a718af9c52e12e25dde8c90b297d9b5d","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Don't send empty label updates\n\nSummary:\nWhenever we changed the labels on a message we would unconditionally issue two\ncommands, +X-GM-LABELS and -X-GM-LABELS even if we had no labels to pass to\none of them. Now we only issue each command if we actually have labels to pass.\n\nTest Plan: Run tests, run locally\n\nReviewers: khamidou, drew, bengotow, spang\n\nReviewed By: spang\n\nSubscribers: jenkins\n\nDifferential Revision: https://phab.nylas.com/D3140","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/5dd89078a718af9c52e12e25dde8c90b297d9b5d"},{"sha":"dae53cc35e055b8d9b82a56f84920218b6ecb793","author":{"name":"Mark Hahnenberg","email":"fd1ed290c28236090ee5c195ebfc58186b22ec62@nylas.com"},"message":"Don't timeout writable IMAP connections\n\nSummary:\nWe now properly scope the IMAP connection for a batch of actions so we don't\nneed to arbitrarily timeout writable IMAP connections after two minutes.\n\nTest Plan: Run locally, unit tests\n\nReviewers: drew, khamidou, bengotow, spang\n\nReviewed By: spang\n\nSubscribers: jenkins\n\nDifferential Revision: https://phab.nylas.com/D3143","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/dae53cc35e055b8d9b82a56f84920218b6ecb793"},{"sha":"472ed6d2d0119063dfed340b7ea04c45abe6f7f6","author":{"name":"Christine Spang","email":"9c3cc731854ab29e15093fa37b8f8c3fe765c7ba@nylas.com"},"message":"Merge back dependencies from other internal repos\n\nThis is a python _application_, and always expects its dependencies to be\ninstalled from requirements.txt. Having a subset of dependencies duplicated\nin setup.py was extremely confusing and resulted in dependency installation\nbugs.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/472ed6d2d0119063dfed340b7ea04c45abe6f7f6"},{"sha":"f6a2075acabb62e0f683d92c8540c4c1af46786e","author":{"name":"Karim Hamidou","email":"3c2cca8f710d6eab4c553c265f3bae65a1261683@gmail.com"},"message":"`FORCE INDEX` more conservatively\n\nSummary: This is a rework of D3118. The previous fix got reverted because using the same index in all cases isn't right (for example if you're filtering over the messages in a given thread). This diff limits forcing the index to the cases where we're simply querying `/messages` or asking for messages before/after a given date.\n\nTest Plan: Tested manually with a couple example queries. Checked that the generated SQL made sense and ran a couple queries in the MySQL optimizer to see which index would get picked up.\n\nReviewers: spang, rene\n\nReviewed By: rene\n\nSubscribers: jenkins\n\nManiphest Tasks: T6967\n\nDifferential Revision: https://phab.nylas.com/D3132","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/f6a2075acabb62e0f683d92c8540c4c1af46786e"},{"sha":"91744eb3fbe8f1deb70066af481cc12b2f3b8b6e","author":{"name":"Karim Hamidou","email":"3c2cca8f710d6eab4c553c265f3bae65a1261683@gmail.com"},"message":"Fix an elusive MySQL integrity issue\n\nSummary:\nThis diff fixes a bug which has been on my radar for a while --- according to Sentry (https://sentry.nylas.com/sentry/sync-prod/?query=Incorrect+string+value) it's been affecting around 600 accounts, breaking the sync for some of them.\n\nThe fix is pretty simple but it took some sleuthing and a long time reading about Unicode, MySQL and Python 2.\n\nIn https://github.com/nylas/sync-engine/blob/master/inbox/models/event.py#L145 we're truncating the length of some strings we're inserting in the db. Unfortunately, this function doesn't handle Unicode strings, causing us to sometimes truncate strings in the middle of a codepoint. Sadly, Python 2.x gladly accepts this, which causes the error to trickle down to MySQL, which ends up throwing an integrity error.\n\nTest Plan: Wrote a regression test.\n\nReviewers: spang, mark\n\nReviewed By: mark\n\nSubscribers: jenkins\n\nDifferential Revision: https://phab.nylas.com/D3145","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/91744eb3fbe8f1deb70066af481cc12b2f3b8b6e"},{"sha":"cd17e675c555f8746ef235aefc27c5ed205420e3","author":{"name":"Christine Spang","email":"9c3cc731854ab29e15093fa37b8f8c3fe765c7ba@nylas.com"},"message":"Fix JSON indentation","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/cd17e675c555f8746ef235aefc27c5ed205420e3"},{"sha":"b96095022f147f8ab3578350a3db49dde5239f1a","author":{"name":"Christine Spang","email":"9c3cc731854ab29e15093fa37b8f8c3fe765c7ba@nylas.com"},"message":"Unify Travis lint configuration with Jenkins","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/b96095022f147f8ab3578350a3db49dde5239f1a"},{"sha":"5d2fee72c874050cf7ddc56f5d989e018d1982ac","author":{"name":"Christine Spang","email":"9c3cc731854ab29e15093fa37b8f8c3fe765c7ba@nylas.com"},"message":"Merge branch 'master' into production","distinct":true,"url":"https://api.github.com/repos/nylas/sync-engine/commits/5d2fee72c874050cf7ddc56f5d989e018d1982ac"}]}
{"actor":{"display_login":"spang"}}