Commit Graph
245 Commits
Author SHA1 Message Date
Isaac Clayton 0b85613a86 Done! Finish transition to async, very close to merging 2022-07-07 16:21:20 +02:00
Isaac Clayton 69b1324a93 Further unpropogate async 2022-07-07 16:16:58 +02:00
Antonio Scandurra a1fadb916f Add integration test to exercise formatting via external command 2022-07-07 11:53:32 +02:00
Antonio Scandurra 384ba2bd2e Fix panics in database tests 2022-07-05 17:59:40 +02:00
Antonio Scandurra a90a086c3e Transmit new line ending when buffer is reloaded 2022-07-05 08:01:14 +02:00
Max Brunsfeld bf20993000 Rename NewlineStyle -> LineEnding 2022-07-04 12:47:40 -07:00
Antonio Scandurra f356219cd2 Detect buffer newline style and honor it when saving 2022-07-04 17:40:26 +02:00
Antonio Scandurra e8850d498c Merge branch 'main' into user-timeline 2022-07-04 09:23:16 +02:00
Antonio Scandurra d9fe8f56bc Add simulate_random_delay to every implemented method in FakeDb 2022-07-01 12:05:29 +02:00
Antonio Scandurra 08b828696a Ensure worktrees have been sent before responding with definitions
Changing the frequency at which we update worktrees highlighted a
problem in the randomized tests that was causing clients to receive
a definition to a worktree *before* observing the registration of
the worktree itself. This was most likely caused by #1224 because
the scenario that pull request enabled was the following:

- Guest requests a definition pointing to a non-existant worktree
- Server forwards the request to the host
- Host sends an `UpdateProject` message
- Host sends a response to the definition request
- Server observes the `UpdateProject` message and tries to acquire
  the store
- Given that we're waiting, the server goes ahead to process the
  response for the definition request, responding *before*
  `UpdateProject` is forwarded
- Server finally forwards `UpdateProject` to the guest

This commit ensures that, after forwarding a project request and getting a
response, we acquire a lock to the store again to ensure the project still
exists. This has the effect of ordering the forwarded request *after* any
message that was received prior to the response and for which we are still
waiting to acquire a lock to the store.
2022-07-01 11:45:30 +02:00
Max Brunsfeld 2a30ec4924 Ensure that usernames, user ids, and client ids match in random collaboration test
This makes the logs easier to interpret
2022-06-30 14:51:22 -07:00
Antonio Scandurra c18607bf40 Split worktree updates when a peer joins an already-shared project 2022-06-30 16:49:56 +02:00
Antonio Scandurra f174a355bf Split worktree updates and only send 256 entries at a time 2022-06-30 14:06:41 +02:00
Antonio ScandurraandMax Brunsfeld 1f1370a11e Order by total duration in Db::get_top_users_activity_summary
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2022-06-29 18:28:43 +02:00
Antonio ScandurraandNathan Sobo 1ada2ebacb Record worktree extensions every 5 minutes
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2022-06-29 16:58:19 +02:00
Antonio Scandurra 6ea7ada031 Don't share a project unless it's online and we're allowing a request 2022-06-29 15:16:55 +02:00
Antonio Scandurra 2bff764afa Register project activity for offline projects as well 2022-06-29 14:55:04 +02:00
Antonio Scandurra b3e73bb201 Increase coalesce threshold in Db::get_user_activity_timeline 2022-06-29 14:26:02 +02:00
Max Brunsfeld 04d2c7f36a Add rest API for user activity timeline 2022-06-28 15:40:48 -07:00
Max Brunsfeld 9d3cddede7 🎨 Tweak some names dealing with user activity
* Rename `project_activity_summary` to `top_users_activity_summary`
to make clearer the distinction between it and the per-user summary.
* Rename `user_activity_summary` to `user_activity_timeline`, since
its output is structured a bit differently than the courser-grained
"summary" returned by the top-user query.
* Rename `ActivityDuration` -> `ActivityPeriod`
2022-06-28 15:37:56 -07:00
Antonio ScandurraandMax Brunsfeld 0f4d80e35a Implement Db::summarize_user_activity
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2022-06-28 15:11:34 -07:00
Antonio Scandurra 7787ac3b6c Ignore tokens that were not created via WorkDoneProgressCreate
With the new version of rust-analyzer, we were seeing stray `WorkDoneProgress::End`
messages that create an imbalance in the `pending_diagnostic_updates` that never
resolves. This was causing the diagnostic status bar item to never update because
we wouldn't emit `DiskBasedDiagnosticsStarted` nor `DiskBasedDiagnosticsFinished`.

This commit fixes the above situation by only acknowledging progress report for tokens
that have explicitly been created via the `WorkDoneProgressCreate` request, as stated
by the protocol.

In addition to that, we are replacing the `pending_diagnostic_updates: isize` with
a `has_pending_diagnostic_updates: bool`. We added it at some point to prevent a similar
issue where we would observe begin/end reports in a seemingly random order, which would cause
us to permanently display a `checking...` message in the status bar. I believe this commit
fixes that as well because the `isize` was just a less general solution for the same
underlying issue. As the protocol states: "the token provided in the create request should
only be used once (e.g. only one begin, many report and one end notification should be sent
to it)."
2022-06-28 10:08:43 +02:00
Keith Simmons ffb933f79a Merge pull request #1237 from zed-industries/jump-to-definition
Mouse jump to definition
2022-06-27 15:20:07 -07:00
Keith Simmons b2c6087d10 Working underline based on symbol origin 2022-06-24 15:05:35 -07:00
Nathan Sobo 5de8f54370 Allow users with no invites to be fetched from the API 2022-06-24 09:57:52 -06:00
Antonio Scandurra e9c59b3cff WIP 2022-06-24 17:21:58 +02:00
Antonio Scandurra a4fc945cee Gather metrics only when /metrics endpoint is retrieved 2022-06-24 09:28:52 +02:00
Antonio Scandurra 4359c804ad Don't trace message payload 2022-06-24 09:27:22 +02:00
Antonio ScandurraandNathan Sobo 4f4829ba11 Use BTreeMap in Server so we release memory when maps are cleared
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2022-06-23 18:02:17 +02:00
Antonio Scandurra 3be9dd77ef Remove non-determinism from Peer caused by smol's timeout helper 2022-06-22 18:39:12 +02:00
Antonio Scandurra 167f14bf28 Ensure receive timeout is triggered before waiting on disconnection 2022-06-22 18:02:42 +02:00
Antonio Scandurra 6503c48787 Use Arc<Deterministic> to understand which await points are parking 2022-06-22 17:39:34 +02:00
Antonio Scandurra 5df2cf8bc5 💄 2022-06-22 15:06:22 +02:00
Antonio Scandurra 3f0cfb4ae6 Use a FuturesUnordered to process foreground messages
This prevents deadlocks when e.g., client A performs a request to client B and
client B performs a request to client A. If both clients stop processing further
messages until their respective request completes, they won't have a chance to
respond to the other client's request and cause a deadlock.

This arrangement ensures we will attempt to process earlier messages first, but fall
back to processing messages arrived later in the spirit of making progress.
2022-06-22 15:04:17 +02:00
Antonio Scandurra 2f9b21b943 Add test demonstrating hang when peers wait on each other's response 2022-06-22 14:41:14 +02:00
Antonio ScandurraandMax Brunsfeld e4981d98ab Report running language servers when sharing project for the first time
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2022-06-21 20:39:54 +02:00
Max BrunsfeldandAntonio Scandurra c47abf1d47 Add failing test for replication of lsp statuses
Co-authored-by: Antonio Scandurra <me@as-cii.com>
2022-06-21 11:27:08 -07:00
Max BrunsfeldandAntonio Scandurra a9fa5ec14a Fix error when worktree has no file extensions
Co-authored-by: Antonio Scandurra <me@as-cii.com>
2022-06-21 11:02:13 -07:00
Antonio Scandurra d240b4920a Expose project metadata via GET /project_metadata 2022-06-21 18:06:31 +02:00
Antonio Scandurra 0f30de23aa Exclude staff from activity recording 2022-06-21 16:07:59 +02:00
Antonio Scandurra 72f3ffe284 Accept a datetime range when querying project activity 2022-06-21 14:03:10 +02:00
Antonio Scandurra 7eb672c1e4 Unregister project from db when user disconnects or manually does so 2022-06-21 10:37:34 +02:00
Antonio Scandurra 12b3138de1 Register projects in the database and record worktree extensions 2022-06-21 10:29:26 +02:00
Max Brunsfeld 46d614d62f Add an API that returns the most active users and the projects where they've been active 2022-06-20 19:46:37 -07:00
Antonio Scandurra 5ad9e9e6c8 Determine Buffer::is_dirty based on the rope's fingerprint 2022-06-17 12:38:25 +02:00
Antonio Scandurra 21c730dd79 Fix tests 2022-06-15 11:16:26 +02:00
Antonio Scandurra 33c902540b Harvest the latest metrics when /metrics is requested
Now that we track active projects, if nothing happens to the store
during the activity timeout we would still serve some old metrics
that may not account for the staleness of a project.

This commit changes it so that we grab a mutable reference to the store
before serving the metrics, which has the side effect of updating
all the metrics.
2022-06-15 10:54:51 +02:00
Antonio Scandurra e4a45db02c 🎨 2022-06-15 10:42:37 +02:00
Antonio Scandurra e627636760 Track active projects in metrics
An active project is defined as a project where there has been at
least a buffer edit, a join request/response, or a follow update
in the last minute.
2022-06-15 10:33:20 +02:00
Antonio Scandurra 95a5094487 Exclude admins from collected metrics 2022-06-14 16:26:00 +02:00