Debugging supervision tree

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.