Theo cách liệt kê thì tất cả các trường hợp có thể conflict:
Đối với file
Local
|
Remote
|
Notes
|
Created
|
Created
|
Type 1
|
Created
|
Modified
|
Hạn chế *
|
Created
|
Renamed
|
Hạn chế *
|
Created
|
Deleted
|
Hạn chế *
|
Created
|
Deleted container folder
|
Có thể không coi là conflict
**
|
|
|
|
Modified
|
Modified
|
Type 2
|
Modified
|
Renamed
|
Type 2
|
Modified
|
Deleted
|
Type 3
|
Modified
|
Deleted container folder
|
Type 4
|
|
|
|
Renamed
|
Modified
|
Type 2
|
Renamed
|
Renamed
|
Type 2
|
Renamed
|
Deleted
|
Type 3
|
Renamed
|
Deleted container folder
|
Type 4
|
|
|
|
Deleted
|
Modified
|
Type 3
|
Deleted
|
Renamed
|
Type 3
|
Deleted
|
Deleted
|
Type 5
|
Deleted
|
Deleted container folder
|
Type 6
|
* hạn chế là trường hợp ít khả năng xảy ra, ví dụ Created – Modified là ít khả năng xảy
ra, khi local tạo file mà không biết rằng remote đã tạo file, và không biết cả
việc thay đổi nội dung file sau đó.
** trường hợp Created
file vs Deleted parent folder và Created
folder vs Deleted parent folder có thể không coi là conflict vì chúng ta sẽ
phải luôn giữ các file mới tạo tại remote dù đã bị xóa tại local vì vấn đề an
toàn (do local không biết nội dung file/folder mới tạo).
Notes: trường hợp
loại bỏ là liệt kê theo logic và không tính là conflict à dạng Deleted vs Created và Modified
(Renamed) vs Created à
sẽ phải rơi vào trường hợp Created vs
Created và phải giải quyết trước khi có thể xảy ra, implementation sẽ không
để xảy ra những trường hợp này.
Đối với folder tương tự nhưng không có modified, chỉ còn trường
hợp renamed
Local
|
Remote
|
Notes
|
Created
|
Created
|
Type 7
|
Created
|
Renamed
|
Hạn chế *
|
Created
|
Deleted
|
Hạn chế *
|
Created
|
Deleted container folder
|
Có thể không coi là conflict
|
|
|
|
Renamed
|
Renamed
|
Type 8
|
Renamed
|
Deleted
|
Type 9
|
Renamed
|
Deleted container folder
|
Type 10
|
|
|
|
Deleted
|
Renamed
|
Type 9
|
Deleted
|
Deleted
|
Type 11
|
Deleted
|
Deleted container folder
|
Type 12
|
Gom lại có tất cả 7 trường hợp conflict (cả case conflict)
1.
Created file – Created file conflict
Tạo file khi không biết thông tin về file đã được tạo
2.
Modified file – Modified file conflict
Thay đổi nội dung file (kể cả đổi tên) khi không biết file
đã bị thay đổi
3.
Modified file – Deleted file conflict
Thay đổi nội dung file (kể cả đổi tên) khi không biết chính
file đó bị xóa
4.
Modified file – Deleted parent folder conflict
Thay đổi nội dung file (kể cả đổi tên) khi không biết folder
chứa file (parent hoặc ancestor đã bị xóa)
5.
Deleted file – Deleted file conflict
Xóa file khi không biết chính file đã bị xóa
6.
Deleted file – Deleted parent folder conflict
Xóa file khi không biết folder chứa file (parent hoặc ancestor đã
bị xóa)
7.
Case conflict
Trên Mac và Windows không phân biệt hoa thường trong khi
trên Linux có phân biệt à
case conflict giải quyết à
force rename?
Dựa trên các trường hợp có thể detect conflict phân thành
theo file và theo folder
DetectFileConflict(…) kiểm tra conflict từ 1 đến 6
và
DetectFolderConflict(…) kiểm tra conflict đối với folder
Phát hiện conflict
ü
Khi download notice changes từ server, pause
sync, kiểm tra giữa 2 file list để xác định conflict về file với Type từ 1 đến
6.
ü
Khi thực hiện sync up lên server à phát hiện conflict do
thực hiện thất bại và theo error code trả về.
Xét với từng loại
ü
Type 1: xác định cùng file name nhưng khác file
size, modified date à
conflict
ü
Type 2 & Type 3: Modified file vs Modified
file và Modified file vs Deleted file
ü
Type 4: là conflict
ü
Type 5 & 6: có thể không coi là conflict
Startup syncing
Download server snapshot
Thực hiện download snapshot file và folder list
trên server insert vào table snapshot
tại client. Table snapshot giữ thông
tin mới nhất về file và folder, chỉ download 1 lần khi start app. Table snapshot cấu trúc giống table signstore.
Table signstore
dung để keep track thay đổi khi app running, mọi thay đổi nếu đã sync với
server sẽ được update vào signstore.
Có thể dùng thuật toán Eugene Myers?
Tìm danh sách file chỉ có tại local và danh sách file chỉ có tại server?
Coi thông tin trong stored là chuẩn à tính diff của local
files và server files để có thông tin thay đổi của local và server đối với
stored.
Tính diff giữa local và stored à local deleted files,
no changes và local added files.
Tính diff giữa server và stored à server deleted files,
no changes và server added files.
Xử lý các trường hợp xảy ra như sau:
Giải thích:
1 + 4: local added
2 + 5: local both
3 + 6: local deleted
4 + 7: server added
5 + 6: server both
2 + 3: server deleted
1. Local added (1 + 4) và server added (4 + 7)
Local
add bắt buộc sync up, server added bắt buộc sync down. Local va server cùng
added à
conflict.
1:
created sync up
7:
created sync down
4:
conflict
2. Local added (1 + 4) và server both (5 + 6) à không intersect
3.
Local added (1 + 4) và server deleted (2 + 3) à không intersect
4. Local both (2 + 5) và server added (4 + 7) à không intersect
5.
Local both (2 + 5) và server both (5 + 6) à không chọn vì cả 2 list cùng có nhiều items
Nếu có cả server và local
kiểm tra modified cho phần 5: có cả tại local, stored và server
6. Local both (2 + 5) và server deleted (2 + 3)
2:
deleted sync down
3:
delete khỏi stored (có trong stored nhưng không có tại local và server)
5:
check modified à
làm cho case 5
7. Local deleted (3 + 6) và server added (4 + 7) à không intersect
8.
Local deleted (3 + 6) và server both (5 + 6) à server both nhiều items
9. Local deleted (3 + 6) và server deleted (2 + 3)
6:
deleted sync up à
làm cho case 8
No comments:
Post a Comment