Ejemplo n.º 1
0
 def _send_path_segments(self,
                         req,
                         req_id,
                         meta,
                         logger,
                         up=None,
                         core=None,
                         down=None):
     """
     Sends path-segments to requester (depending on Path Server's location).
     """
     up = up or set()
     core = core or set()
     down = down or set()
     all_segs = up | core | down
     if not all_segs:
         logger.warning("No segments to send for request: %s from: %s" %
                        (req.short_desc(), meta))
         return
     revs_to_add = self._peer_revs_for_segs(all_segs)
     recs = PathSegmentRecords.from_values(
         {
             PST.UP: up,
             PST.CORE: core,
             PST.DOWN: down
         }, revs_to_add)
     pld = PathSegmentReply.from_values(req.copy(), recs)
     self.send_meta(CtrlPayload(PathMgmt(pld), req_id=req_id), meta)
     logger.info("Sending PATH_REPLY with %d segment(s).", len(all_segs))
Ejemplo n.º 2
0
 def _share_via_zk(self):
     if not self._segs_to_zk:
         return
     logging.info("Sharing %d segment(s) via ZK", len(self._segs_to_zk))
     for pcb_dict in self._gen_prop_recs(self._segs_to_zk,
                                         limit=self.ZK_SHARE_LIMIT):
         seg_recs = PathSegmentRecords.from_values(pcb_dict)
         self._zk_write(seg_recs.pack())
Ejemplo n.º 3
0
 def _handle_paths_from_zk(self, raw_entries):
     """
     Handles cached paths through ZK, passed as a list.
     """
     for raw in raw_entries:
         recs = PathSegmentRecords.from_raw(raw)
         for type_, pcb in recs.iter_pcbs():
             seg_meta = PathSegMeta(pcb, self.continue_seg_processing,
                                    type_=type_, params={'from_zk': True})
             self._process_path_seg(seg_meta)
     if raw_entries:
         logging.debug("Processed %s segments from ZK", len(raw_entries))
Ejemplo n.º 4
0
 def _cached_entries_handler(self, raw_entries):
     """
     Handles cached through ZK entries, passed as a list.
     """
     count = 0
     for raw in raw_entries:
         recs = PathSegmentRecords.from_raw(raw)
         for type_, pcb in recs.iter_pcbs():
             count += 1
             self._dispatch_segment_record(type_, pcb, from_zk=True)
     if count:
         logging.debug("Processed %s PCBs from ZK", count)
Ejemplo n.º 5
0
 def recs(self):
     return PathSegmentRecords(self.p.recs)