Crash on loading a data file with more than 40 simultaneous larvae
Peter Hague reported the following error message:
┌ Error: error handling request
│ exception =
│ MethodError: no method matching appendinputs!(::Observables.Observable{Float64}, ::Observables.ObserverFunction)
│ Closest candidates are:
│ appendinputs!(::Any, ::Vector{Observables.ObserverFunction}) at ~/.julia/packages/Observables/jbVpe/src/Observables.jl:405
│ Stacktrace:
│ [1] #map!#14
│ @ ~/.julia/packages/Observables/jbVpe/src/Observables.jl:398 [inlined]
│ [2] #map#19
│ @ ~/.julia/packages/Observables/jbVpe/src/Observables.jl:448 [inlined]
│ [3] map
│ @ ~/.julia/packages/Observables/jbVpe/src/Observables.jl:445 [inlined]
│ [4] slave(master::LarvaTagger.TimeController, policy::ObservationPolicies.PeriodicObservation)
│ @ LarvaTagger ~/LarvaTagger/src/players.jl:198
│ [5] slave(master::LarvaTagger.LarvaController, policy::ObservationPolicies.PeriodicObservation)
│ @ LarvaTagger ~/LarvaTagger/src/controllers.jl:348
│ [6] larvaviewer(controller::LarvaTagger.ControllerHub; editabletags::Bool, multipletags::Nothing)
│ @ LarvaTagger ~/LarvaTagger/src/viewer.jl:76
│ [7] (::LarvaTagger.var"#292#293"{Nothing, String, Base.RefValue{Union{Nothing, String}}})(session::JSServe.Session)
│ @ LarvaTagger ~/LarvaTagger/src/editor.jl:45
│ [8] (::JSServe.var"#1#5"{LarvaTagger.var"#292#293"{Nothing, String, Base.RefValue{Union{Nothing, String}}}})(session::JSServe.Session, request::HTTP.Messages.Request)
│ @ JSServe ~/.julia/packages/JSServe/kIK9q/src/types.jl:15
│ [9] #invokelatest#2
│ @ ./essentials.jl:729 [inlined]
│ [10] invokelatest
│ @ ./essentials.jl:726 [inlined]
│ [11] (::JSServe.var"#123#124"{JSServe.App})(context::NamedTuple{(:routes, :application, :request, :match), Tuple{JSServe.Routes, JSServe.Server, HTTP.Messages.Request, String}})
│ @ JSServe ~/.julia/packages/JSServe/kIK9q/src/browser_display.jl:56
│ [12] apply_handler(f::Function, args::NamedTuple{(:routes, :application, :request, :match), Tuple{JSServe.Routes, JSServe.Server, HTTP.Messages.Request, String}})
│ @ JSServe ~/.julia/packages/JSServe/kIK9q/src/server.jl:38
│ [13] delegate(::JSServe.Routes, ::JSServe.Server, ::HTTP.Messages.Request)
│ @ JSServe ~/.julia/packages/JSServe/kIK9q/src/server.jl:64
│ [14] #15
│ @ ~/.julia/packages/JSServe/kIK9q/src/server.jl:184 [inlined]
│ [15] handle
│ @ ~/.julia/packages/HTTP/aTjcj/src/Handlers.jl:254 [inlined]
│ [16] handle(::HTTP.Handlers.RequestHandlerFunction{JSServe.var"#15#17"{JSServe.Server}}, ::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}})
│ @ HTTP.Handlers ~/.julia/packages/HTTP/aTjcj/src/Handlers.jl:277
│ [17] stream_handler(application::JSServe.Server, stream::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}})
│ @ JSServe ~/.julia/packages/JSServe/kIK9q/src/server.jl:189
│ [18] #invokelatest#2
│ @ ./essentials.jl:729 [inlined]
│ [19] invokelatest
│ @ ./essentials.jl:726 [inlined]
│ [20] #26
│ @ ~/.julia/packages/JSServe/kIK9q/src/server.jl:302 [inlined]
│ [21] macro expansion
│ @ ~/.julia/packages/HTTP/aTjcj/src/Servers.jl:415 [inlined]
│ [22] (::HTTP.Servers.var"#13#14"{JSServe.var"#26#28"{JSServe.Server}, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}, HTTP.Servers.Server{Nothing, Sockets.TCPServer}, HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}}})()
│ @ HTTP.Servers ./task.jl:484
└ @ HTTP.Servers ~/.julia/packages/HTTP/aTjcj/src/Servers.jl:429
This error was hit on loading a large data file from the embedded file browser.
This has been fixed in commit 9f75c381
However, for these large files such that message "Refresh rate throttled to 1Hz" is printed on server side, the time slider is found to be not responsive enough, in the multi-larva view, while playing.
In addition, the UI performance has been improved a lot since this throttling strategy was implemented. Let us increase the refresh rate (2Hz?) and threshold of larvae to be simultaneously plotted (50?).