Skip to content

Commit

Permalink
Add Lowest job priority
Browse files Browse the repository at this point in the history
for the indexing job. Change job scheduler to keep indexing jobs
while jobs with Fence priority are executing.

Fixes #1362
  • Loading branch information
reznikmm committed Jun 17, 2024
1 parent 66e8416 commit 90cf413
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 12 deletions.
2 changes: 1 addition & 1 deletion source/ada/lsp-ada_indexing.ads
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private

overriding function Priority
(Self : Indexing_Job) return LSP.Server_Jobs.Job_Priority is
(LSP.Server_Jobs.Low);
(LSP.Server_Jobs.Lowest);

overriding procedure Execute
(Self : in out Indexing_Job;
Expand Down
15 changes: 10 additions & 5 deletions source/server/lsp-job_schedulers.adb
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,11 @@ package body LSP.Job_Schedulers is
end if;

if Job.Priority = Fence then
-- Process other jobs before any Fence job
while (for some List of Self.Jobs => not List.Is_Empty) loop
Self.Process_Job (Client, Waste);
-- Process other jobs (excluding indexing) before any Fence job
while
(for some List of Self.Jobs (Low .. High) => not List.Is_Empty)
loop
Self.Process_Job (Client, Waste, From => Low);

if Waste.Assigned then
return;
Expand Down Expand Up @@ -163,14 +165,17 @@ package body LSP.Job_Schedulers is
(Self : in out Job_Scheduler'Class;
Client :
in out LSP.Client_Message_Receivers.Client_Message_Receiver'Class;
Waste : out LSP.Server_Messages.Server_Message_Access)
Waste : out LSP.Server_Messages.Server_Message_Access;
From : LSP.Server_Jobs.Job_Priority := LSP.Server_Jobs.Lowest)
is
Status : LSP.Server_Jobs.Execution_Status;
begin
Self.Complete_Last_Fence_Job (null, Waste);

if not Waste.Assigned then
for List of reverse Self.Jobs when not List.Is_Empty loop
for List of reverse Self.Jobs (From .. LSP.Server_Jobs.High)
when not List.Is_Empty
loop
declare
Job : LSP.Server_Jobs.Server_Job_Access := List.First_Element;
begin
Expand Down
8 changes: 4 additions & 4 deletions source/server/lsp-job_schedulers.ads
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,9 @@ package LSP.Job_Schedulers is
(Self : in out Job_Scheduler'Class;
Client :
in out LSP.Client_Message_Receivers.Client_Message_Receiver'Class;
Waste : out LSP.Server_Messages.Server_Message_Access);
-- Execute (already created) jobs with ordinal priority (Low, High).
Waste : out LSP.Server_Messages.Server_Message_Access;
From : LSP.Server_Jobs.Job_Priority := LSP.Server_Jobs.Lowest);
-- Execute (already created) jobs with ordinal priority (From .. High).
-- When a job is done the routine returns (in Waste) the message to be
-- deallocated by the server. The Client is used to send messages during
-- the execution of the job.
Expand All @@ -88,8 +89,7 @@ private
package Job_Lists is new Ada.Containers.Doubly_Linked_Lists
(LSP.Server_Jobs.Server_Job_Access, LSP.Server_Jobs."=");

subtype Ordinal_Priority is LSP.Server_Jobs.Job_Priority
range LSP.Server_Jobs.Low .. LSP.Server_Jobs.High;
subtype Ordinal_Priority is LSP.Server_Jobs.Ordinal_Priority;

type Job_List_Array is array (Ordinal_Priority) of Job_Lists.List;

Expand Down
5 changes: 3 additions & 2 deletions source/server/lsp-server_jobs.ads
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ with LSP.Server_Messages;
package LSP.Server_Jobs is
pragma Preelaborate;

type Job_Priority is (Low, High, Immediate, Fence);
type Job_Priority is (Lowest, Low, High, Immediate, Fence);
-- Job priority to schedule jobs.
--
-- @value Lowest - indexing jobs
-- @value Low - long running jobs like find-all-references
-- @value High - fast queries like hover
-- @value Immediate - urgent queries like cancel-request
Expand All @@ -33,7 +34,7 @@ package LSP.Server_Jobs is
-- new messages until the job is done. Server execute each job in its
-- queue before executing any Fence job.

subtype Ordinal_Priority is Job_Priority range Low .. High;
subtype Ordinal_Priority is Job_Priority range Lowest .. High;

type Server_Job is limited interface;

Expand Down

0 comments on commit 90cf413

Please sign in to comment.