Unhandled mpdsession exceptions after homebrew upgrade to 1.0.0

After an upgrade to 1.0.0, via homebrew, mpc caused mopidy to throw various errors. mpc waits a bit, then times out.

This is the result of “mpc list artist”

ERROR    Unhandled exception in MpdSession (urn:uuid:d7b97927-569c-4c44-bc70-0363a3dd23dc):
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 303, in _handle_receive
    return self.on_receive(message)
  File "/usr/local/lib/python2.7/site-packages/mopidy/utils/network.py", line 367, in on_receive
    self.on_line_received(line)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/session.py", line 33, in on_line_received
    response = self.dispatcher.handle_request(line)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 46, in handle_request
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 75, in _catch_mpd_ack_errors_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 88, in _authenticate_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 104, in _command_list_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 133, in _idle_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 146, in _add_ok_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 158, in _call_handler_filter
    response = self._format_response(self._call_handler(request))
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 172, in _call_handler
    return protocol.commands.call(tokens, context=self.context)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/__init__.py", line 178, in call
    return self.handlers[tokens[0]](context, *tokens[1:])
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/__init__.py", line 140, in validate
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/music_db.py", line 281, in list_
    return [(name, value) for value in result.get()]
  File "/usr/local/lib/python2.7/site-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 294, in _handle_receive
    return callee(*message['args'], **message['kwargs'])
  File "/usr/local/lib/python2.7/site-packages/mopidy/core/library.py", line 97, in get_distinct
    for b in self.backends.with_library.values()]
  File "/usr/local/lib/python2.7/site-packages/pykka/proxy.py", line 161, in __getattr__
    raise AttributeError('%s has no attribute "%s"' % (self, name))
AttributeError: <ActorProxy for StreamBackend (urn:uuid:9aaa4cbc-b23e-440b-8546-948cdb7cadb0), attr_path=('library',)> has no attribute "get_distinct"

and this is the result of “mpc play” (with a playlist cued up):

ERROR    Unhandled exception in MpdSession (urn:uuid:5d0f17cc-e65e-42d1-b54a-1945d0b1cd11):
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 303, in _handle_receive
    return self.on_receive(message)
  File "/usr/local/lib/python2.7/site-packages/mopidy/utils/network.py", line 367, in on_receive
    self.on_line_received(line)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/session.py", line 33, in on_line_received
    response = self.dispatcher.handle_request(line)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 46, in handle_request
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 75, in _catch_mpd_ack_errors_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 88, in _authenticate_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 104, in _command_list_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 133, in _idle_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 146, in _add_ok_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 158, in _call_handler_filter
    response = self._format_response(self._call_handler(request))
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/dispatcher.py", line 172, in _call_handler
    return protocol.commands.call(tokens, context=self.context)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/__init__.py", line 178, in call
    return self.handlers[tokens[0]](context, *tokens[1:])
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/__init__.py", line 156, in validate
    return func(**callargs)
  File "/usr/local/lib/python2.7/site-packages/mopidy/mpd/protocol/playback.py", line 177, in play
    return context.core.playback.play().get()
  File "/usr/local/lib/python2.7/site-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 294, in _handle_receive
    return callee(*message['args'], **message['kwargs'])
  File "/usr/local/lib/python2.7/site-packages/mopidy/core/playback.py", line 277, in play
    self._play(tl_track, on_error_step=1)
  File "/usr/local/lib/python2.7/site-packages/mopidy/core/playback.py", line 310, in _play
    backend.playback.prepare_change()
  File "/usr/local/lib/python2.7/site-packages/pykka/proxy.py", line 161, in __getattr__
    raise AttributeError('%s has no attribute "%s"' % (self, name))
AttributeError: <ActorProxy for LocalBackend (urn:uuid:b2667950-300d-42a4-9e21-41e5003b545e), attr_path=('playback',)> has no attribute "prepare_change"

I’m sure it’s something obvious, but I’m stumped. Thoughts?

Edited: Formatted stack traces. -jodal

I believe this is the same issue as https://github.com/mopidy/homebrew-mopidy/issues/3. See that issue for a workaround.

Thanks! yes, this seems to have been the issue.