[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/crdt cb7b701 58/80: add client side recovery, better er
From: |
ELPA Syncer |
Subject: |
[elpa] externals/crdt cb7b701 58/80: add client side recovery, better error message |
Date: |
Sat, 28 Aug 2021 10:57:42 -0400 (EDT) |
branch: externals/crdt
commit cb7b701fc068c288ef59b35892ed297da1ed6760
Author: Qiantan Hong <qhong@mit.edu>
Commit: Qiantan Hong <qhong@mit.edu>
add client side recovery, better error message
---
crdt.el | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/crdt.el b/crdt.el
index 22529e5..934f328 100644
--- a/crdt.el
+++ b/crdt.el
@@ -394,13 +394,18 @@ If SESSION is nil, use current CRDT--SESSION."
(defmacro crdt--with-buffer-name (name &rest body)
"Find CRDT shared buffer associated with NAME and evaluate BODY in it.
+Also, try to recover from synchronization error if any error happens in BODY.
Must be called when CURRENT-BUFFER is a CRDT status buffer.
If such buffer doesn't exist yet, do nothing."
`(let (crdt-buffer)
(setq crdt-buffer (gethash ,name (crdt--session-buffer-table
crdt--session)))
(when (and crdt-buffer (buffer-live-p crdt-buffer))
(with-current-buffer crdt-buffer
- ,@body))))
+ (condition-case err
+ ,(cons 'progn body)
+ (error (if (crdt--server-p)
+ (signal (car err) (cdr err)) ; didn't implement server
side recovery yet
+ (crdt--client-recover))))))))
(defmacro crdt--with-buffer-name-pull (name &rest body)
"Find CRDT shared buffer associated with NAME and evaluate BODY in it.
@@ -423,7 +428,8 @@ after synchronization is completed."
(crdt-mode)
(crdt--broadcast-maybe (crdt--format-message `(get ,,name)))
(let ((crdt--inhibit-update t))
- (insert "Synchronizing with server..."))
+ (insert "Synchronizing with server...")
+ (read-only-mode))
(setq crdt--buffer-sync-callback
(lambda ()
,@body))))))))
@@ -1057,6 +1063,17 @@ Verify that CRDT IDs in a document follows ascending
order."
(setq pos next-pos)
(setq id next-id))))))
+;;; Recovery
+
+(defun crdt--client-recover ()
+ "Try to recover from a synchronization failure from a client.
+Current buffer is assmuned to be the one with synchronization error."
+ (ding)
+ (read-only-mode)
+ (message "Synchronization error detected, try recovering...")
+ (crdt--broadcast-maybe
+ (crdt--format-message `(get ,crdt--buffer-network-name))))
+
;;; Network protocol
(defun crdt--format-message (args)
@@ -1251,6 +1268,7 @@ The network process for the client connection is PROCESS."
(cl-destructuring-bind (buffer-name . ids) (cdr message)
(crdt--with-buffer-name
buffer-name
+ (read-only-mode -1)
(let ((crdt--inhibit-update t))
(unless crdt--buffer-sync-callback
;; try to get to the same position after sync,
@@ -1393,7 +1411,8 @@ Handle received STRING from PROCESS."
(error (message "%s error when processing message from %s:%s,
disconnecting." err
(process-contact process :host)
(process-contact process :service))
(if (crdt--server-p)
- (delete-process process)
+ (progn
+ (delete-process process))
(crdt--stop-session crdt--session))))))
(delete-region (point-min) (point))
(goto-char (point-min)))))))
@@ -1422,6 +1441,7 @@ Handle received STRING from PROCESS."
(unless (eq (process-status process) 'open)
(when (process-get process 'tuntox-process)
(process-send-string process (crdt--format-message '(leave))))
+ (ding)
(crdt--stop-session (process-get process 'crdt-session))))
;;; UI commands
- [elpa] externals/crdt 8b7786a 76/80: Use xdg-data-home for crdt-tuntox-key-path, (continued)
- [elpa] externals/crdt 8b7786a 76/80: Use xdg-data-home for crdt-tuntox-key-path, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 4f069d5 77/80: Do not use executable-find to find tuntox, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 8be5ff7 78/80: Replace define-minor-mode positional arguments with keywords, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 8cbd0fd 80/80: bump version number, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt eee7611 27/80: imaginary bug fix, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 47ca3a7 25/80: fix makefile, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt b31d05a 42/80: remove status buffer hack section in HACKING.org, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 0608e11 48/80: add tuntox support, fix yank not clearing pseudo-region, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 5a9ab2d 54/80: support for comint (tested scheme-mode), ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 9d39b42 55/80: quick hack for xscheme.el, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt cb7b701 58/80: add client side recovery, better error message,
ELPA Syncer <=
- [elpa] externals/crdt 973e761 21/80: Work on Jean's todo list, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 810af7e 32/80: fix bug when beg/end are markers in crdt--*-change, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt fbcb870 31/80: more consistent name, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 58ca0a6 34/80: documents, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 06a2f1a 46/80: added some docstrings, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 2dfff42 50/80: add license, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 1a08765 51/80: slightly cleanup protocol and doc, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt efdafb9 52/80: fix bug on emacs 25, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 8457254 47/80: fix cursor movement when remote insert/delete, add URL parsing, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 817c265 49/80: fix document, ELPA Syncer, 2021/08/28