Commit graph

3690 commits

Author SHA1 Message Date
Daniel Gasienica
32ac99b439 Prefer ISO date formatting
Previously, this was formatted using locale specific settings. This will allow
easier debugging by matching key rotation timestamps against log timestamps.
2018-04-02 18:57:58 -04:00
Daniel Gasienica
2e4893f4c1 Clarify implications of introducing new migrations 2018-04-02 18:54:51 -04:00
Daniel Gasienica
7413b787b6 Make migrations private 2018-04-02 18:54:28 -04:00
Daniel Gasienica
b07c66eaa7 Generate attachments from local files
This ensures our benchmarking is closer to real-world usage, e.g. images, video,
etc. that are not compressible.
2018-04-02 17:58:37 -04:00
Daniel Gasienica
4a664bdab8 Add public domain files for generating test data 2018-04-02 17:42:05 -04:00
Daniel Gasienica
064a40544c Fix error message formatting 2018-04-02 17:42:04 -04:00
Daniel Gasienica
442f5d7295 Use done to match JavaScript iterators
See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators
2018-04-02 17:42:04 -04:00
Daniel Gasienica
a4f0c5242f Document why batch size is one 2018-04-02 17:42:04 -04:00
Daniel Gasienica
d59fdddb43 Improve storage.fetch error message 2018-04-02 17:42:04 -04:00
Daniel Gasienica
805031ade8 Conditionally run post-attachment migrations
Introduce placeholder migrations for Backbone models so they never implicitly
run migrations whenever they are `fetch`ed. We prefer to run our migrations
explicitly upon app startup and then let Backbone models be (slightly) dumb(er)
models, without inadvertently triggering migrations.
2018-04-02 17:42:04 -04:00
Daniel Gasienica
887bd83852
Migrate attachments on startup (#2193)
- [x] Run initial Backbone migrations 12–17 upon startup.
- [x] ~~Run attachment migration (without Backbone references to avoid
      migrations): `MessageDataMigrator.processAll`.~~ Disabled in favor of
      background processing without index.
- [x] ~~Run new migrations that can cover entire database (18+).~~
      Not until we have such migrations.
- [x] Add `runMigrations` module that ensures migrations are only run once.
- [x] Add `settings` (`Signal.Settings`) module to interact with our app
      settings (`items` store) using a domain API, e.g.
      `isAttachmentMigrationComplete(…)` vs
      `storage.get('attachmentMigration_isComplete')`. Required to check
      attachment migration status without using Backbone.
- [x] Add `database` (`Signal.Database`) CommonJS module to provide
      `Promise`-based interface to IndexedDB.
- [x] Add `debug` (`Signal.Debug`) module for generating synthetic data to test
      performance of migration.
- [x] Minor: Add `sleep` module for doing promise based sleeps.
- [x] Minor: Extract `wrapDeferred` as CommonJS module named `deferredToPromise`.
2018-04-02 17:33:32 -04:00
Daniel Gasienica
bfbeedab5c Temporarily disable post-attachment migration migrations 2018-04-02 15:26:24 -04:00
Daniel Gasienica
d9be6a0f94 Destructure Lodash requires 2018-04-02 15:12:04 -04:00
Daniel Gasienica
b7b6195cfc Extract IIFE into separate function 2018-04-02 12:17:36 -04:00
Daniel Gasienica
11f98474ba Capture how many messages we have to process 2018-04-02 12:17:36 -04:00
Daniel Gasienica
0fdc1140dd Add Database.getCount function 2018-04-02 12:17:36 -04:00
Daniel Gasienica
1f8556b049 Remove unused createCollection 2018-04-02 12:17:36 -04:00
Daniel Gasienica
c67c2a858a Remove Backbone references for attachment migration
It has to run without any other migrations interfering.
2018-04-02 12:17:36 -04:00
Daniel Gasienica
77f8f598de Add disk-usage.sh script for testing 2018-04-02 12:17:36 -04:00
Daniel Gasienica
0c40f35623 Document disadvantage of fetching messages without index 2018-04-02 12:17:36 -04:00
Daniel Gasienica
a4ecf1a9d6 Define constant after creating idle detector 2018-04-02 12:17:36 -04:00
Daniel Gasienica
d3c9de4712 Add debug module
Lets us generate large conversations with large attachments.
2018-04-02 12:17:36 -04:00
Daniel Gasienica
30037e5308 Reduce attachment migration batch size to 1
This prevents ‘Maximum IPC message size exceeded’ due to IDB `getAll` operation.

- https://github.com/zincbase/zincdb/issues/17
- https://cs.chromium.org/chromium/src/content/browser/indexed_db/indexed_db_database.cc?q=%22Maximum+IPC+message+size+exceeded%22&sq=package:chromium&l=1160
2018-04-02 12:17:36 -04:00
Daniel Gasienica
ce8fd3d847 Expose Signal.Settings module 2018-04-02 12:17:36 -04:00
Daniel Gasienica
02354ce655 Expose Signal.Database module 2018-04-02 12:17:36 -04:00
Daniel Gasienica
21147a20a0 Add sleep module 2018-04-02 12:17:36 -04:00
Daniel Gasienica
08f73b8420 Remove last processed index after attachment migration 2018-04-02 12:17:36 -04:00
Daniel Gasienica
696a144ab7 Add settings.deleteItem 2018-04-02 12:17:36 -04:00
Daniel Gasienica
a18e462817 Move migrations to Signal.Migrations 2018-04-02 12:17:36 -04:00
Daniel Gasienica
5910f84af4 Remove outdated documentation 2018-04-02 12:17:36 -04:00
Daniel Gasienica
efe3cd67fc Allow attachment migration run on higher database version 2018-04-02 12:17:36 -04:00
Daniel Gasienica
921c3dba7c Skip migrations that have already been applied 2018-04-02 12:17:36 -04:00
Daniel Gasienica
417511ffd2 Add database.getVersion 2018-04-02 12:17:36 -04:00
Daniel Gasienica
c5c94bc3ab Extract getMigrationVersions 2018-04-02 12:17:36 -04:00
Daniel Gasienica
6aea36240d Rename closeDatabase to closeDatabaseConnection 2018-04-02 12:17:36 -04:00
Daniel Gasienica
016432826b Extract database and settings modules 2018-04-02 12:17:36 -04:00
Daniel Gasienica
5bea894abd Close database connection via Backbone IDB adapter 2018-04-02 12:17:36 -04:00
Daniel Gasienica
f50e9ae364 Log closing connection of database 2018-04-02 12:17:36 -04:00
Daniel Gasienica
4ff8bc3357 Use camelCase for non-constructors 2018-04-02 12:17:36 -04:00
Daniel Gasienica
3720c3f3bb Improve log message 2018-04-02 12:17:36 -04:00
Daniel Gasienica
ce5b450fdb Log targetSchemaVersion 2018-04-02 12:17:36 -04:00
Daniel Gasienica
f7f24b5822 Log total number of processed messages 2018-04-02 12:17:36 -04:00
Daniel Gasienica
eca930770c Remove hard-coded database connection settings 2018-04-02 12:17:36 -04:00
Daniel Gasienica
1df6dc8378 Abort processing if there are no more messages 2018-04-02 12:17:36 -04:00
Daniel Gasienica
85490fbc98 Disable JSHint for background.js
It doesn’t recognize `async` and I couldn’t figure out how to ignore a top-level
`async` without cascading errors.
2018-04-02 12:17:36 -04:00
Daniel Gasienica
d5d0eabdfd Remove usage of storage module 2018-04-02 12:17:36 -04:00
Daniel Gasienica
8966e80284 Improve identifier names 2018-04-02 12:17:36 -04:00
Daniel Gasienica
3e2d575506 Document MessageDataMigrator module design 2018-04-02 12:17:36 -04:00
Daniel Gasienica
3c57dbfb56 Extract NUM_MESSAGES_PER_BATCH 2018-04-02 12:17:36 -04:00
Daniel Gasienica
85788d3c4a Match items storage format to Backbone adapter 2018-04-02 12:17:36 -04:00