Furthermore, I have pinned down the behaviour to the use of Mongo.watch_collection. Here’s an excerpt:
defmodule CollectionProcessor do
use Flow
def start_link(opts) do
{topology, opts} = opts |> Keyword.pop!(:topology)
{collection, opts} = opts |> Keyword.pop!(:collection)
{pipeline, _opts} = opts |> Keyword.pop(:pipeline, [])
cursor =
Mongo.watch_collection(topology, collection, pipeline, nil,
full_document: "updateLookup"
)
cursor
|> Flow.from_enumerable()
|> Flow.map(fn doc -> IO.inspect(doc) end)
|> Flow.start_link()
end
end
This process is run under a supervisor. If I kill it with Process.exit(collection_importer_pid, :kill) then the supervisor also quits. NB as I’ve said above I have experimented with mad high max_restarts values as far as 10_000 so I don’t really think this can be it.
I tried replacing the Mongo.watch_collection call with a plain infinite stream like this:
cursor = Stream.iterate(0, &(&1 + 1))
Now when I kill the CollectionProcessor process it is restarted and its supervisor is correctly not restarted.
My question is what am I missing? I want the behaviour that I see with the plain Stream.iterate.


















