1
1
defmodule Livebook.FileSystem.Mounter do
2
2
# This server is responsible to handle file systems that are mountable
3
3
use GenServer
4
+ require Logger
4
5
5
6
alias Livebook . { FileSystem , Hubs }
6
7
@@ -26,7 +27,7 @@ defmodule Livebook.FileSystem.Mounter do
26
27
27
28
@ impl GenServer
28
29
def handle_continue ( :boot , state ) do
29
- Hubs.Broadcasts . subscribe ( [ :connection , : crud, :file_systems ] )
30
+ Hubs.Broadcasts . subscribe ( [ :crud , :file_systems ] )
30
31
Process . send_after ( self ( ) , :remount , state . loop_delay )
31
32
32
33
{ :noreply , mount_file_systems ( state , Hubs.Personal . id ( ) ) }
@@ -49,10 +50,6 @@ defmodule Livebook.FileSystem.Mounter do
49
50
{ :noreply , unmount_file_system ( state , file_system ) }
50
51
end
51
52
52
- def handle_info ( { :hub_changed , hub_id } , state ) do
53
- { :noreply , mount_file_systems ( state , hub_id ) }
54
- end
55
-
56
53
def handle_info ( { :hub_deleted , hub_id } , state ) do
57
54
{ :noreply , unmount_file_systems ( state , hub_id ) }
58
55
end
@@ -98,7 +95,10 @@ defmodule Livebook.FileSystem.Mounter do
98
95
broadcast ( { :file_system_mounted , file_system } )
99
96
put_hub_file_system ( state , file_system )
100
97
101
- { :error , _reason } ->
98
+ { :error , reason } ->
99
+ Logger . error ( "[file_system=#{ name ( file_system ) } ] failed to mount: #{ reason } " )
100
+ Process . send_after ( self ( ) , { :file_system_created , file_system } , to_timeout ( second: 10 ) )
101
+
102
102
state
103
103
end
104
104
end
@@ -109,7 +109,10 @@ defmodule Livebook.FileSystem.Mounter do
109
109
broadcast ( { :file_system_unmounted , file_system } )
110
110
remove_hub_file_system ( state , file_system )
111
111
112
- { :error , _reason } ->
112
+ { :error , reason } ->
113
+ Logger . error ( "[file_system=#{ name ( file_system ) } ] failed to unmount: #{ reason } " )
114
+ Process . send_after ( self ( ) , { :file_system_deleted , file_system } , to_timeout ( second: 10 ) )
115
+
113
116
state
114
117
end
115
118
end
@@ -148,6 +151,10 @@ defmodule Livebook.FileSystem.Mounter do
148
151
put_in ( hub_data . file_systems , file_systems )
149
152
end
150
153
154
+ defp name ( file_system ) do
155
+ FileSystem . external_metadata ( file_system ) . name
156
+ end
157
+
151
158
if Mix . env ( ) == :test do
152
159
defp broadcast ( { _ , % { external_id: _ , hub_id: id } } = message ) do
153
160
Phoenix.PubSub . broadcast ( Livebook.PubSub , "file_systems:#{ id } " , message )
0 commit comments