{"action":"created","issue":{"url":"https://api.github.com/repos/keybase/client/issues/3741","repository_url":"https://api.github.com/repos/keybase/client","labels_url":"https://api.github.com/repos/keybase/client/issues/3741/labels{/name}","comments_url":"https://api.github.com/repos/keybase/client/issues/3741/comments","events_url":"https://api.github.com/repos/keybase/client/issues/3741/events","html_url":"https://github.com/keybase/client/pull/3741","id":169263165,"number":3741,"title":"protocol: add file edit notification protocol for KBFS","user":{"login":"strib","id":8516691,"avatar_url":"https://avatars.githubusercontent.com/u/8516691?v=3","gravatar_id":"","url":"https://api.github.com/users/strib","html_url":"https://github.com/strib","followers_url":"https://api.github.com/users/strib/followers","following_url":"https://api.github.com/users/strib/following{/other_user}","gists_url":"https://api.github.com/users/strib/gists{/gist_id}","starred_url":"https://api.github.com/users/strib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strib/subscriptions","organizations_url":"https://api.github.com/users/strib/orgs","repos_url":"https://api.github.com/users/strib/repos","events_url":"https://api.github.com/users/strib/events{/privacy}","received_events_url":"https://api.github.com/users/strib/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"cjb","id":21217,"avatar_url":"https://avatars.githubusercontent.com/u/21217?v=3","gravatar_id":"","url":"https://api.github.com/users/cjb","html_url":"https://github.com/cjb","followers_url":"https://api.github.com/users/cjb/followers","following_url":"https://api.github.com/users/cjb/following{/other_user}","gists_url":"https://api.github.com/users/cjb/gists{/gist_id}","starred_url":"https://api.github.com/users/cjb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjb/subscriptions","organizations_url":"https://api.github.com/users/cjb/orgs","repos_url":"https://api.github.com/users/cjb/repos","events_url":"https://api.github.com/users/cjb/events{/privacy}","received_events_url":"https://api.github.com/users/cjb/received_events","type":"User","site_admin":false},"assignees":[{"login":"cjb","id":21217,"avatar_url":"https://avatars.githubusercontent.com/u/21217?v=3","gravatar_id":"","url":"https://api.github.com/users/cjb","html_url":"https://github.com/cjb","followers_url":"https://api.github.com/users/cjb/followers","following_url":"https://api.github.com/users/cjb/following{/other_user}","gists_url":"https://api.github.com/users/cjb/gists{/gist_id}","starred_url":"https://api.github.com/users/cjb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjb/subscriptions","organizations_url":"https://api.github.com/users/cjb/orgs","repos_url":"https://api.github.com/users/cjb/repos","events_url":"https://api.github.com/users/cjb/events{/privacy}","received_events_url":"https://api.github.com/users/cjb/received_events","type":"User","site_admin":false},{"login":"chrisnojima","id":516435,"avatar_url":"https://avatars.githubusercontent.com/u/516435?v=3","gravatar_id":"","url":"https://api.github.com/users/chrisnojima","html_url":"https://github.com/chrisnojima","followers_url":"https://api.github.com/users/chrisnojima/followers","following_url":"https://api.github.com/users/chrisnojima/following{/other_user}","gists_url":"https://api.github.com/users/chrisnojima/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisnojima/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisnojima/subscriptions","organizations_url":"https://api.github.com/users/chrisnojima/orgs","repos_url":"https://api.github.com/users/chrisnojima/repos","events_url":"https://api.github.com/users/chrisnojima/events{/privacy}","received_events_url":"https://api.github.com/users/chrisnojima/received_events","type":"User","site_admin":false},{"login":"akalin-keybase","id":13270622,"avatar_url":"https://avatars.githubusercontent.com/u/13270622?v=3","gravatar_id":"","url":"https://api.github.com/users/akalin-keybase","html_url":"https://github.com/akalin-keybase","followers_url":"https://api.github.com/users/akalin-keybase/followers","following_url":"https://api.github.com/users/akalin-keybase/following{/other_user}","gists_url":"https://api.github.com/users/akalin-keybase/gists{/gist_id}","starred_url":"https://api.github.com/users/akalin-keybase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akalin-keybase/subscriptions","organizations_url":"https://api.github.com/users/akalin-keybase/orgs","repos_url":"https://api.github.com/users/akalin-keybase/repos","events_url":"https://api.github.com/users/akalin-keybase/events{/privacy}","received_events_url":"https://api.github.com/users/akalin-keybase/received_events","type":"User","site_admin":false}],"milestone":null,"comments":1,"created_at":"2016-08-04T00:11:59Z","updated_at":"2016-08-05T15:54:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/keybase/client/pulls/3741","html_url":"https://github.com/keybase/client/pull/3741","diff_url":"https://github.com/keybase/client/pull/3741.diff","patch_url":"https://github.com/keybase/client/pull/3741.patch"},"body":"Here's how I envision we use this protocol:\r\n\r\n \r\n* We add a new notification channels: `kbfsrequests`.\r\n* KBFS subscribes to `kbfsrequests`.\r\n* The GUI subscribes to the `kbfs` channel, as usual, when it starts up.\r\n* After the `kbfs` subscription, (and until it sees its first complete list of notifications, periodically), the GUI sends requests via `kbfsrequests` for each favorite it cares about:\r\n  * `FSEditListRequest(FavoriteName, requestID)`\r\n  * `FSSyncListRequest(FavoriteName, requestID)`\r\n* When KBFS receives one of these requests, it responds on the `kbfs` notification channel with:\r\n  * `FSEditListRequest`: a list of up to the last N file edit notifications per writer for the TLF.\r\n  * `FSSyncListRequest`: a complete list of outstanding sync operations for the TLF.\r\n* Each of the above requests causes KBFS to subscribe for updates from the mdserver for that TLF.\r\n* For every TLF to which KBFS is currently subscribed, KBFS sends out the following notifications on the `kbfs` notification channel:\r\n  * Notifications for every file edit operation, as they happen, per-TLF.  Each notification message can actually contain a list of individual edit notifications, since each MD revision can include edits to several files (e.g., conflict resolution).\r\n  * Notifications when an async write operation is queued up.\r\n  * Notifications when an async write operation finishes (or makes progress).\r\n* It will be up to the GUI to improve performance by keeping a cached copy of the complete list of changes, and modify it correctly as new notifications roll in.  It would perform badly to request the complete list for every render.\r\n\r\nIssue: KBFS-1300"},"comment":{"url":"https://api.github.com/repos/keybase/client/issues/comments/237888792","html_url":"https://github.com/keybase/client/pull/3741#issuecomment-237888792","issue_url":"https://api.github.com/repos/keybase/client/issues/3741","id":237888792,"user":{"login":"malgorithms","id":614943,"avatar_url":"https://avatars.githubusercontent.com/u/614943?v=3","gravatar_id":"","url":"https://api.github.com/users/malgorithms","html_url":"https://github.com/malgorithms","followers_url":"https://api.github.com/users/malgorithms/followers","following_url":"https://api.github.com/users/malgorithms/following{/other_user}","gists_url":"https://api.github.com/users/malgorithms/gists{/gist_id}","starred_url":"https://api.github.com/users/malgorithms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/malgorithms/subscriptions","organizations_url":"https://api.github.com/users/malgorithms/orgs","repos_url":"https://api.github.com/users/malgorithms/repos","events_url":"https://api.github.com/users/malgorithms/events{/privacy}","received_events_url":"https://api.github.com/users/malgorithms/received_events","type":"User","site_admin":false},"created_at":"2016-08-05T15:54:59Z","updated_at":"2016-08-05T15:54:59Z","body":"some q's:\r\n\r\n1. will this perform after a fresh install? For example, if I install keybase and then click my widget, will it have activity? it seems either of these would be ok:\r\n    - it's just fast :-)\r\n    - records are incomplete for a short period as it's building a history/cache \r\nAs opposed to:\r\n    - the widget takes a long time to load the first time I click it\r\n    - the widget never gets anything from before my install\r\n\r\n2. Nojima mentioned this but I wonder too about the per-TLF subscription...if a user has 500 TLF's they've worked in are they making 500 calls to this?\r\n\r\n3. Should bookkeeping for this be done in desktop or core?\r\n"}}
{"actor":{"display_login":"malgorithms"}}