The Mysteries of Dropbox
summary
Uses QuickCheck shrinking to generate minimal failing sequences against multiple Dropbox clients running in VirtualBox VMs on one laptop and models behavior with a server-buffered model tracking global value, per-node fresh/dirty flags and a conflict set. Tests include read write stabilize and background upload/download actions; surprising, reproducible behaviors include transient deletion, resurrected files and a rare case of complete data loss. The model is iteratively refined to match Dropbox semantics and some bugs are confirmed and being fixed.
AI-written summary · about
chapters (26)
- 0:00Intro
- 0:30File Synchronizer Usage
- 2:16Why Generate Tests?
- 3:11Example: Testing a Queue with QuickCheck
- 3:43A Generated Failing Test
- 4:48A Shrunk Failing Test
- 8:07How can we tell if a test passed?
- 9:28Modelling a queue
- 10:34But what about Dropbox?
- 11:46Goals
- 12:52What's the model?
- 15:59A new approach
- 18:01What background operations?
- 20:12Conflicts
- 22:23Observing conflict files
- 25:52stabilize() → (V,C)
- 26:36download()
- 26:59upload()
- 28:19Does the model match reality?
- 29:57Another inconsistency
- 33:08Dropbox can delete a newly created file
- 34:25Dropbox can recreate deleted files
- 35:56Dropbox can lose data completely
- 36:32What did we do?
- 37:34What do Dropbox say?
- 38:00Synchronization is subtle!
related talks
47mA Deep Specification for Dropbox
17mData Checking at Dropbox
01h 00mThe Evolution of Databases at Dropbox
06mLightning Talk – Test Result Caching at Dropbox
33mThinking of your tests as a software product
42mDon't Let Your Tests Flake Out
06mLightning talk: Testing Distributed Databases
27mBreak It Yourself
