def reset(self): """Forget config info.""" if Bublin.bubbles_max_slot: Bublin.bubbles_max_slot = None if Bublin.bubbles_local_slots: Bublin.bubbles_local_slots = None BaseHandler.reset(self)
def add(self, trigger_arg_list): """Let trigger put hash into extra3""" arg = "ev_extra3='hash='||hashtext(%s)" % skytools.quote_ident(self.key) trigger_arg_list.append(arg) BaseHandler.add(self, trigger_arg_list)
def __init__(self, table_name, args, log): """Init per-batch table data cache.""" BaseHandler.__init__(self, table_name, args, log) try: self.dst_queue_name = args['queue'] except KeyError: raise Exception('specify queue with handler-arg') self.rows = []
def process_event(self, ev, sql_queue_func, arg): """Filter event by hash in extra3, apply only local slots.""" if ev.extra3: meta = skytools.db_urldecode(ev.extra3) slot = int(meta['hash']) & self.bubbles_max_slot if slot not in self.bubbles_local_slots: return BaseHandler.process_event(self, ev, sql_queue_func, arg)
def prepare_copy(self, expr_list, dst_curs): """Copy only slots needed locally.""" self.load_bubbles(dst_curs) slist = self.bubbles_local_slots.keys() fn = 'hashtext(%s)' % skytools.quote_ident(self.key) w = "(((%s) & %d) in (%s))" % (fn, self.bubbles_max_slot, slist) expr_list.append(w) BaseHandler.prepare_copy(self, expr_list, dst_curs)
def __init__(self, table_name, args, log): BaseHandler.__init__(self, table_name, args, log) # show args self.log.debug("dispatch.init: table_name=%r, args=%r" % \ (table_name, args)) # get table name self.table_name = args.get('table', self.table_name) self.quoted_name = quote_fqident(self.table_name) self.batch_info = None self.dst_curs = None self.pkeys = None # config self.conf = self.get_config() hdlr_cls = ROW_HANDLERS[self.conf.row_mode] self.row_handler = hdlr_cls(self.log)
def __init__(self, table_name, args, dest_table): """Init per-batch table data cache.""" BaseHandler.__init__(self, table_name, args, dest_table) self.pkey_list = None self.dist_fields = None self.col_list = None self.pkey_ev_map = {} self.method = int(args.get("method", DEFAULT_METHOD)) if not self.method in (0, 1, 2): raise Exception("unknown method: %s" % self.method) self.log.debug("bulk_init(%r), method=%d", args, self.method)
def __init__(self, table_name, args, dest_table): """Init per-batch table data cache.""" BaseHandler.__init__(self, table_name, args, dest_table) self.pkey_list = None self.dist_fields = None self.col_list = None self.pkey_ev_map = {} self.method = int(args.get('method', DEFAULT_METHOD)) if not self.method in (0, 1, 2): raise Exception('unknown method: %s' % self.method) self.log.debug('bulk_init(%r), method=%d', args, self.method)
def __init__(self, table_name, args, log): """Init per-batch table data cache.""" BaseHandler.__init__(self, table_name, args, log) self.pkey_list = None self.dist_fields = None self.col_list = None self.pkey_ev_map = {} self.method = int(args.get('method', DEFAULT_METHOD)) if not self.method in (0,1,2): raise Exception('unknown method: %s' % self.method) self.log.debug('bulk_init(%s), method=%d' % (repr(args), self.method))
def __init__(self, table_name, args, log): BaseHandler.__init__(self, table_name, args, log) # show args self.log.debug("dispatch.init: table_name=%r, args=%r" % (table_name, args)) # get table name self.table_name = args.get("table", self.table_name) self.quoted_name = quote_fqident(self.table_name) self.batch_info = None self.dst_curs = None self.pkeys = None # config self.conf = self.get_config() hdlr_cls = ROW_HANDLERS[self.conf.row_mode] self.row_handler = hdlr_cls(self.log) if self.conf.encoding: self.encoding_validator = EncodingValidator(self.log, self.conf.encoding) else: self.encoding_validator = None
def real_copy(self, tablename, src_curs, dst_curs, column_list, cond_list): """Copy only slots needed locally.""" self.load_bubbles(dst_curs) slist = self.bubbles_local_slots.keys() fn = 'hashtext(%s)' % skytools.quote_ident(self.key) w = "(((%s) & %d) in (%s))" % (fn, self.bubbles_max_slot, slist) cond_list.append(w) return BaseHandler.real_copy(self, tablename, src_curs, dst_curs, column_list, cond_list)
def __init__(self, table_name, args, dest_table): # compat for dest-table dest_table = args.get('table', dest_table) BaseHandler.__init__(self, table_name, args, dest_table) # show args self.log.debug("dispatch.init: table_name=%r, args=%r", table_name, args) self.batch_info = None self.dst_curs = None self.pkeys = None # config self.conf = self.get_config() hdlr_cls = ROW_HANDLERS[self.conf.row_mode] self.row_handler = hdlr_cls(self.log) if self.conf.encoding: self.encoding_validator = EncodingValidator(self.log, self.conf.encoding) else: self.encoding_validator = None
def __init__(self, table_name, args, dest_table): # compat for dest-table dest_table = args.get('table', dest_table) BaseHandler.__init__(self, table_name, args, dest_table) # show args self.log.debug("dispatch.init: table_name=%r, args=%r" % \ (table_name, args)) self.batch_info = None self.dst_curs = None self.pkeys = None # config self.conf = self.get_config() hdlr_cls = ROW_HANDLERS[self.conf.row_mode] self.row_handler = hdlr_cls(self.log) if self.conf.encoding: self.encoding_validator = EncodingValidator( self.log, self.conf.encoding) else: self.encoding_validator = None
def __init__(self, table_name, next, args, log): """Init per-batch table data cache.""" BaseHandler.__init__(self, table_name, next, args, log) self.method = DEFAULT_METHOD self.pkey_list = None self.dist_fields = None self.col_list = None self.pkey_ev_map = {} for a in args: k, v = a.split('=') if k == 'method': m = int(v) if m not in (0,1,2): raise Exception('unknown method: %s' % v) self.method = int(v) else: raise Exception('unknown argument: %s' % a) self.log.debug('bulk_init(%s), method=%d' % (repr(args), self.method))
def reset(self): """Called before starting to process a batch. Should clean any pending data.""" BaseHandler.reset(self)
def reset(self): self.pkey_ev_map = {} BaseHandler.reset(self)
def prepare_batch(self, batch_info, dst_curs): """Called on first event for this table in current batch.""" if not self.bubbles_max_slot: self.load_bubbles(dst_curs) BaseHandler.prepare_batch(self, batch_info, dst_curs)
def __init__(self, name, next, args): BaseHandler.__init__(self, name, next, args) self.key = args[0]