Skip to content

Commit 18e8d52

Browse files
committed
be stricter when dets operations fail
1 parent 6805f89 commit 18e8d52

File tree

1 file changed

+5
-49
lines changed
  • apps/language_server/lib/language_server

1 file changed

+5
-49
lines changed

apps/language_server/lib/language_server/tracer.ex

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -183,26 +183,19 @@ defmodule ElixirLS.LanguageServer.Tracer do
183183
{:error, {:not_a_dets_file, _} = reason} ->
184184
Logger.warning("Unable to open DETS #{path}: #{inspect(reason)}")
185185
File.rm_rf!(path)
186-
{:ok, _} = :dets.open_file(table_name, opts)
187186

188-
{:error, {:file_error, _, :enoent} = reason} ->
189-
Logger.warning("Unable to open DETS #{path}: #{inspect(reason)}")
190-
:ok = path |> Path.dirname() |> File.mkdir_p()
191187
{:ok, _} = :dets.open_file(table_name, opts)
192188
end
193189

194-
Process.sleep(200)
195-
196190
case :dets.to_ets(table_name, table_name) do
197191
^table_name ->
198192
:ok
199193

200194
{:error, reason} ->
201195
Logger.warning("Unable to read DETS #{path}: #{inspect(reason)}")
202196
File.rm_rf!(path)
203-
Process.sleep(200)
197+
204198
{:ok, _} = :dets.open_file(table_name, opts)
205-
Process.sleep(200)
206199
^table_name = :dets.to_ets(table_name, table_name)
207200
end
208201
catch
@@ -239,22 +232,7 @@ defmodule ElixirLS.LanguageServer.Tracer do
239232
table_name = table_name(table)
240233
sync(table_name)
241234

242-
case :dets.close(table_name) do
243-
:ok ->
244-
:ok
245-
246-
{:error, reason} ->
247-
Logger.error("Unable to close DETS #{path}, #{inspect(reason)}")
248-
249-
JsonRpc.telemetry(
250-
"lsp_server_error",
251-
%{
252-
"elixir_ls.lsp_process" => inspect(__MODULE__),
253-
"elixir_ls.lsp_server_error" => "Unable to close DETS #{path}, #{inspect(reason)}"
254-
},
255-
%{}
256-
)
257-
end
235+
:ok = :dets.close(table_name)
258236
end
259237

260238
defp modules_by_file_matchspec(file, return) do
@@ -398,22 +376,8 @@ defmodule ElixirLS.LanguageServer.Tracer do
398376
end
399377

400378
defp sync(table_name) do
401-
with :ok <- :dets.from_ets(table_name, table_name),
402-
:ok <- :dets.sync(table_name) do
403-
:ok
404-
else
405-
other ->
406-
Logger.error("Unable to sync DETS #{table_name}, #{inspect(other)}")
407-
408-
JsonRpc.telemetry(
409-
"lsp_server_error",
410-
%{
411-
"elixir_ls.lsp_process" => inspect(__MODULE__),
412-
"elixir_ls.lsp_server_error" => "Unable to sync DETS #{table_name}, #{inspect(other)}"
413-
},
414-
%{}
415-
)
416-
end
379+
:ok = :dets.from_ets(table_name, table_name)
380+
:ok = :dets.sync(table_name)
417381
end
418382

419383
defp in_project_sources?(path) do
@@ -458,15 +422,7 @@ defmodule ElixirLS.LanguageServer.Tracer do
458422
path = manifest_path(project_dir)
459423
File.rm_rf!(path)
460424

461-
with :ok <- path |> Path.dirname() |> File.mkdir_p(),
462-
:ok <- File.write(path, "#{@version}", [:write]) do
463-
:ok
464-
else
465-
{:error, err} ->
466-
Logger.warning(
467-
"Cannot create manifest .elixir_ls/tracer_db.manifest, cause: #{Atom.to_string(err)}"
468-
)
469-
end
425+
File.write!(path, "#{@version}", [:write])
470426
end
471427

472428
def read_manifest(project_dir) do

0 commit comments

Comments
 (0)