💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Find a file
Juan Tejada 00aa499365 [client-sync] Prevent duplicate accounts and sync workers
Summary:
After https://github.com/nylas/nylas-mail-all/commit/008cb4c, the shape of
account.connectionSettings changed, which means that ids for accounts
will also change, given that they are based on the connection settings (see
Account.hash()).

This is fine in most cases, except for accounts that were running on a
version of Nylas Mail before 008cb4c, then upgraded to a version
after 008cb4c, and then re-authed their account.
In this scenario, re-authing the account will create a second account with
a different `id` but with the same email address, along with an extra
sequelize database, and will start a second SyncWorker for the same
account. App-side, the `AccountStore` will correctly overwrite the first account,
so users would correctly see just 1 account in the sidebar. However, given
that 2 SyncWorkers would be running for the same account,
message ids would collide in edgehill.db and this would cause
threads to disappear from the ui as if they were being deleted.

To fix this, we need to do 2 things:

- Upon app start, we remove any duplicate accounts that might have been created due to this bug before starting any sync workers
- If we detect that we are going to create a duplicate account upon auth success, we delete the old account first. This will effectively cause sync to restart for the account.

Test Plan:
Verified problem: Checked out a commit before 008cb4c, authed an account, checked out master, re-authed account, verified that duplicate accounts are created.

Then test 2 scenarios:
- With duplicate accounts present, checked out this commit, verified that duplicate account would be removed and sync would function normally.
- With an account authed on a build before 008cb4c, checked out this commit, re-authed the account, and verified that duplicate account wouldn't be created

Reviewers: mark, halla, khamidou, spang

Reviewed By: spang

Subscribers: tomasz

Differential Revision: https://phab.nylas.com/D4425
2017-04-14 12:24:27 -07:00
.ebextensions
arclib
packages [client-sync] Prevent duplicate accounts and sync workers 2017-04-14 12:24:27 -07:00
scripts [client-app] Add benchmark mode 2017-04-07 15:33:57 -07:00
.arcconfig
.arclint [dev] Make 'arc lint' shut up about long lines 2017-03-13 11:42:14 -07:00
.babelrc [*] use hardlinked .babelrc for AppVeyor 2017-03-07 14:11:16 -05:00
.coffeelint.json [dev] Make 'arc lint' shut up about long lines 2017-03-13 11:42:14 -07:00
.dockerignore
.ebignore [dev] Correctly ignore node_modules in .ebignore for faster deploys 2017-03-28 14:00:29 -07:00
.eslintrc
.gitignore [client-app] Some final benchmark fixes 2017-04-05 15:59:17 -07:00
.travis.yml [dev] Only bootstrap specific pkgs in postinstall for faster installs 2017-03-28 13:59:55 -07:00
appveyor.yml [dev] Only bootstrap specific pkgs in postinstall for faster installs 2017-03-28 13:59:55 -07:00
deploy-it [dev] One more newline in deploy-it output 2017-03-28 17:02:45 -07:00
Dockerfile [dev] Only bootstrap specific pkgs in postinstall for faster installs 2017-03-28 13:59:55 -07:00
lerna.json [client-app] use forked lerna for better npm logging 2017-03-06 15:35:56 -05:00
package.json [client-app] Add benchmark mode 2017-04-07 15:33:57 -07:00
README.md

Nylas Mail

This is a collection of all components required to run Nylas Mail.

  1. Isomorphic Core: Shared code across local client and cloud servers
  2. Client App: The main Electron app for Nylas Mail mirrored to open source repo.
  3. Client Sync: The local mailsync engine integreated in Nylas Mail
  4. Client Private Plugins: Private Nylas Mail plugins (like SFDC)
  5. Cloud API: The cloud-based auth and metadata APIs for N1
  6. Cloud Core: Shared code used in all remote cloud services
  7. Cloud Workers: Cloud workers for services like send later

See /packages for the separate pieces. Each folder in /packages is designed to be its own stand-alone repository. They are all bundled here for the ease of source control management.

Initial Setup for All Local & Cloud Services:

New Computer (Mac):

  1. Install Homebrew
  2. Install NVM & Redis brew install nvm redis
  3. Install Node 6 via NVM: nvm install 6

New Computer (Linux - Debian/Ubuntu):

  1. Install Node 6+ via NodeSource (trusted):
  2. curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
  3. sudo apt-get install -y nodejs
  4. Install Redis locally sudo apt-get install -y redis-server redis-tools benefit of letting us use subdomains.

Running Nylas Mail

  1. npm install (Only on fresh install and new packages)
  2. npm run start-client: Starts Electron app client
  3. npm run start-cloud: Starts cloud API locally