// NewComboActionAgent creates an agent tailored specifically to run // within the vtcombo binary. It cannot be called concurrently, // as it changes the flags. func NewComboActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, vtPort, grpcPort int32, queryServiceControl tabletserver.Controller, dbcfgs dbconfigs.DBConfigs, mysqlDaemon mysqlctl.MysqlDaemon, keyspace, shard, dbname, tabletType string) *ActionAgent { agent := &ActionAgent{ QueryServiceControl: queryServiceControl, UpdateStream: binlog.NewUpdateStreamControlMock(), HealthReporter: health.DefaultAggregator, batchCtx: batchCtx, TopoServer: ts, TabletAlias: tabletAlias, MysqlDaemon: mysqlDaemon, DBConfigs: dbcfgs, SchemaOverrides: nil, BinlogPlayerMap: nil, History: history.New(historyLength), lastHealthMapCount: new(stats.Int), _healthy: fmt.Errorf("healthcheck not run yet"), } agent.registerQueryRuleSources() // initialize the tablet *initDbNameOverride = dbname *initKeyspace = keyspace *initShard = shard *initTabletType = tabletType if err := agent.InitTablet(vtPort, grpcPort); err != nil { panic(fmt.Errorf("agent.InitTablet failed: %v", err)) } // and start the agent if err := agent.Start(batchCtx, 0, vtPort, grpcPort, false); err != nil { panic(fmt.Errorf("agent.Start(%v) failed: %v", tabletAlias, err)) } return agent }
// NewTestActionAgent creates an agent for test purposes. Only a // subset of features are supported now, but we'll add more over time. func NewTestActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *topodatapb.TabletAlias, vtPort, grpcPort int32, mysqlDaemon mysqlctl.MysqlDaemon, preStart func(*ActionAgent)) *ActionAgent { agent := &ActionAgent{ QueryServiceControl: tabletservermock.NewController(), UpdateStream: binlog.NewUpdateStreamControlMock(), HealthReporter: health.DefaultAggregator, batchCtx: batchCtx, TopoServer: ts, TabletAlias: tabletAlias, MysqlDaemon: mysqlDaemon, DBConfigs: dbconfigs.DBConfigs{}, BinlogPlayerMap: nil, History: history.New(historyLength), _healthy: fmt.Errorf("healthcheck not run yet"), } if preStart != nil { preStart(agent) } // Start will update the topology and setup services. if err := agent.Start(batchCtx, 0, vtPort, grpcPort, false); err != nil { panic(fmt.Errorf("agent.Start(%v) failed: %v", tabletAlias, err)) } // Update our running state. if err := agent.refreshTablet(batchCtx, "Start"); err != nil { panic(fmt.Errorf("agent.refreshTablet(%v) failed: %v", tabletAlias, err)) } return agent }
// NewTestActionAgent creates an agent for test purposes. Only a // subset of features are supported now, but we'll add more over time. func NewTestActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, vtPort, grpcPort int32, mysqlDaemon mysqlctl.MysqlDaemon) *ActionAgent { agent := &ActionAgent{ QueryServiceControl: tabletservermock.NewController(), UpdateStream: binlog.NewUpdateStreamControlMock(), HealthReporter: health.DefaultAggregator, batchCtx: batchCtx, TopoServer: ts, TabletAlias: tabletAlias, MysqlDaemon: mysqlDaemon, DBConfigs: dbconfigs.DBConfigs{}, SchemaOverrides: nil, BinlogPlayerMap: nil, History: history.New(historyLength), lastHealthMapCount: new(stats.Int), _healthy: fmt.Errorf("healthcheck not run yet"), } if err := agent.Start(batchCtx, 0, vtPort, grpcPort, false); err != nil { panic(fmt.Errorf("agent.Start(%v) failed: %v", tabletAlias, err)) } return agent }