chunks.py 文件源码

python
阅读 44 收藏 0 点赞 0 评论 0

项目:eos-data-distribution 作者: endlessm 项目源码 文件源码
def _on_request_interest(self, name, skeleton, fd_list, fd_variant, first_segment):
        self.emit('interest', Name(name), Interest(name), None, None, None)
        fd = fd_list.get(fd_variant.get_handle())
        logger.debug('RequestInterest Handler: name=%s, self.name=%s, fd=%d, first_segment=%d',
                     name, self.name, fd, first_segment)
        # do we start on chunk 0 ? full file ? do we start on another chunk
        # ? we need to seek the file, subsequent calls to get the same
        # chunks have to be handled in the consumer part and folded into
        # answering to only one dbus call

        try:
            final_segment = self._get_final_segment()
        except NotImplementedError:
            # we can't handle this, let another producer come in and do it.
            self._dbus.return_error(name, 'TryAgain')
            return False

        key = name.toString()
        try:
            worker = self._workers[key]
            logger.debug('already got a worker for name %s', name)
            # self._dbus.return_error(name, 'ETOOMANY')
            return
        except KeyError:
            pass

        self._workers[key] = worker = ProducerWorker(fd, first_segment, final_segment,
                                                      self._send_chunk)
        self._dbus.return_value(name, final_segment)

        last_emited = first_segment - 1
        # XXX: is this racy ?
        GLib.timeout_add_seconds(5,
            lambda: (worker.data.n > last_emited and
                                 skeleton.emit_progress(key, worker.first_segment,
                                                        worker.data.n)) or worker.working)
        return True
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号