Allow messages to be resent before they expire
When sending data via removable drives, the strategy of waiting for one maximum round-trip time (twice the maximum latency of the transport) before allowing messages to be resent is likely to cause problems. For example:
-
Alice exports messages to a removable drive. Before sending the drive to Bob, Alice realises that she accidentally used a drive belonging to her elderly mother, Carol, who uses the drive to store episodes of Desperate Housewives that she watches on the long bus ride to San Pedro de Atacama (Carol doesn't enjoy the austere beauty of the Atacama Desert, for reasons that are beyond the scope of this user story). Alice deletes the file and exports her messages again, using the right drive this time. Alice may expect that the new file contains all messages not seen by Bob, but in fact it doesn't contain any messages. The messages in the deleted file won't be sendable again for one max round-trip time
-
Alice exports messages to a removable drive. Before sending the drive to Bob, Alice writes another message and wants to send this too. So she exports messages to the drive again. Alice may expect that if she overwrites the file she created the first time, the new file will contain all messages not seen by Bob. But in fact it will only contain the most recent message. The messages in the overwritten file won't be sendable again for one max round-trip time
-
Alice exports messages to a removable drive and attaches it to a carrier pigeon. Knowing that the Atacama Desert is a harsh environment for pigeons, Alice also exports messages to a second drive, which she attaches to a carrier tortoise as a backup in case the pigeon succumbs to the arid climate. Alice may expect that the second drive contains the same messages as the first one, but in fact it doesn't contain any messages. The messages attached to the unfortunate pigeon won't be sendable again for one max round-trip time
To address these user stories we should send all unacked messages when syncing via removable drives. When syncing via mailboxes we should continue to use the current strategy of sending only messages that have not been sent before, or that were last sent more than one max round-trip time ago.