def find_write_predecessors(self, address):
        predecessors = set()
        enclosing_writer = None
        node_stream = self._tree.walk(address)
        address_len = len(address)
        try:
            for node_address, node in node_stream:
                if node is not None:
                    predecessors.update(node.readers)
                    if node.writer is not None:
                        enclosing_writer = node.writer
                    if len(node_address) >= address_len:
                        break
        except AddressNotInTree as err:
            if err.match is not None:
                return self.find_write_predecessors(err.match)
            return predecessors
        finally:
            if enclosing_writer is not None:
                predecessors.add(enclosing_writer)
        for _, node in node_stream:
            if node is not None:
                if node.writer is not None:
                    predecessors.add(node.writer)
                predecessors.update(node.readers)
        return predecessors