// NewExecutor creates an Executor and registers a callback on the // system config. func NewExecutor(db client.DB, gossip *gossip.Gossip, leaseMgr *LeaseManager, metaRegistry *metric.Registry, stopper *stop.Stopper) *Executor { exec := &Executor{ db: db, reCache: parser.NewRegexpCache(512), leaseMgr: leaseMgr, latency: metaRegistry.Latency("sql.latency"), } exec.systemConfigCond = sync.NewCond(&exec.systemConfigMu) gossipUpdateC := gossip.RegisterSystemConfigChannel() stopper.RunWorker(func() { for { select { case <-gossipUpdateC: cfg := gossip.GetSystemConfig() exec.updateSystemConfig(cfg) case <-stopper.ShouldStop(): return } } }) return exec }
// NewExecutor creates an Executor and registers a callback on the // system config. func NewExecutor(ctx ExecutorContext, stopper *stop.Stopper, registry *metric.Registry) *Executor { exec := &Executor{ ctx: ctx, reCache: parser.NewRegexpCache(512), registry: registry, latency: registry.Latency("latency"), txnBeginCount: registry.Counter("txn.begin.count"), txnCommitCount: registry.Counter("txn.commit.count"), txnAbortCount: registry.Counter("txn.abort.count"), txnRollbackCount: registry.Counter("txn.rollback.count"), selectCount: registry.Counter("select.count"), updateCount: registry.Counter("update.count"), insertCount: registry.Counter("insert.count"), deleteCount: registry.Counter("delete.count"), ddlCount: registry.Counter("ddl.count"), miscCount: registry.Counter("misc.count"), } exec.systemConfigCond = sync.NewCond(exec.systemConfigMu.RLocker()) gossipUpdateC := ctx.Gossip.RegisterSystemConfigChannel() stopper.RunWorker(func() { for { select { case <-gossipUpdateC: cfg, _ := ctx.Gossip.GetSystemConfig() exec.updateSystemConfig(cfg) case <-stopper.ShouldStop(): return } } }) return exec }
func makeNodeMetrics(reg *metric.Registry) nodeMetrics { return nodeMetrics{ registry: reg, latency: reg.Latency(execLatencyName), success: reg.Rates(execSuccessName), err: reg.Rates(execErrorName), } }
// NewTxnMetrics returns a new instance of txnMetrics that contains metrics which have // been registered with the provided Registry. func NewTxnMetrics(txnRegistry *metric.Registry) *TxnMetrics { return &TxnMetrics{ Aborts: txnRegistry.Rates(abortsPrefix), Commits: txnRegistry.Rates(commitsPrefix), Abandons: txnRegistry.Rates(abandonsPrefix), Durations: txnRegistry.Latency(durationsPrefix), Restarts: txnRegistry.Histogram(restartsKey, 60*time.Second, 100, 3), } }
// NewExecutor creates an Executor and registers a callback on the // system config. func NewExecutor(ctx ExecutorContext, stopper *stop.Stopper, registry *metric.Registry) *Executor { exec := &Executor{ ctx: ctx, reCache: parser.NewRegexpCache(512), registry: registry, latency: registry.Latency(MetricLatencyName), txnBeginCount: registry.Counter(MetricTxnBeginName), txnCommitCount: registry.Counter(MetricTxnCommitName), txnAbortCount: registry.Counter(MetricTxnAbortName), txnRollbackCount: registry.Counter(MetricTxnRollbackName), selectCount: registry.Counter(MetricSelectName), updateCount: registry.Counter(MetricUpdateName), insertCount: registry.Counter(MetricInsertName), deleteCount: registry.Counter(MetricDeleteName), ddlCount: registry.Counter(MetricDdlName), miscCount: registry.Counter(MetricMiscName), queryCount: registry.Counter(MetricQueryName), } exec.systemConfigCond = sync.NewCond(exec.systemConfigMu.RLocker()) gossipUpdateC := ctx.Gossip.RegisterSystemConfigChannel() stopper.RunWorker(func() { for { select { case <-gossipUpdateC: cfg, _ := ctx.Gossip.GetSystemConfig() exec.updateSystemConfig(cfg) case <-stopper.ShouldStop(): return } } }) return exec }