-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo.txt
43 lines (40 loc) · 2.21 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Dreams:
- implement file update/creation/deletion checking using inotify
(see sun.nio.fs.LinuxWatchService for an example)
- implement file update/creation/deletion checking using java.nio.file in java 7
- implement concurrency through Actors
- refactor the entire project into a more functional context (as far as that's possible)
For Deployment:
- finish implementing consistency checks upon writes
- write logic to verify BOTH old and new hashes upon transfer
- write logic/messages to reject invalid updates
- write logic for hash verification on client updates
- figure out how to handle conflicted copies
- handle Client disconnection and reconnection smoothly
- require both timeout and broken socket handling
- Client should be able to operate offline the same as online, minus syncing to Server
- upon reconnection perform usual handshake.
- from Server's perspective, Client reconnection and connection should look identical
TODO:
- write thread-safe wrappers around ObjectOutputStream and the file hasher, possibly for File operations as well
- define and implement a logic for composing messages together
- typedef things for simplicity
- flesh out test infrastructure (should explicitly verify file contents)
- create a global configuration object
- use the filesystem to cache transfers so we don't OOM on large files
- transfers get ~1.25 MB/s on my home network; look into improving this
- debug mode to log operations rather than printing a summary
- check hash on a client's files upon connection to the server
- implement version vectors for already-connected clients
- file level locking instead of hash map level lockings
- implement encryption with nonces
- (more) gracefully handle errors
- check hashes upon file transfers and writes to detect errors
- avoid subtle bugs
Design Questions:
- what to do about clients connecting with additional files in their home folders?
- move from hashmaps to tries for metadata storage? a trie would certainly
be a more intuitive representation of the filesystem tree, however for most
usage we will probably be storing many more files than directories, meaning
a switch would likely not cause an appreciable efficiency increase (other than
a potentially lower memory footprint)