// Open runs the invalidation loop. func (rci *RowcacheInvalidator) Open(dbname string, mysqld *mysqlctl.Mysqld) { rp, err := mysqld.MasterStatus() if err != nil { panic(NewTabletError(FATAL, "Rowcache invalidator aborting: cannot determine replication position: %v", err)) } if mysqld.Cnf().BinLogPath == "" { panic(NewTabletError(FATAL, "Rowcache invalidator aborting: binlog path not specified")) } ok := rci.svm.Go(func(_ *sync2.ServiceManager) { rci.mu.Lock() rci.dbname = dbname rci.mysqld = mysqld rci.evs = binlog.NewEventStreamer(dbname, mysqld.Cnf().BinLogPath) rci.GroupId.Set(rp.MasterLogGroupId) rci.mu.Unlock() rci.run() rci.mu.Lock() rci.evs = nil rci.mu.Unlock() }) if ok { log.Infof("Rowcache invalidator starting, dbname: %s, path: %s, logfile: %s, position: %d", dbname, mysqld.Cnf().BinLogPath, rp.MasterLogFile, rp.MasterLogPosition) } else { log.Infof("Rowcache invalidator already running") } }
// newBinlogFileStreamer creates a BinlogStreamer. dbname specifes // the db to stream events for, and binlogPrefix is as defined // by the mycnf variable. func newBinlogFileStreamer(dbname string, mysqld *mysqlctl.Mysqld) BinlogStreamer { return &binlogFileStreamer{ dbname: dbname, dir: path.Dir(mysqld.Cnf().BinLogPath), mysqld: mysqld, } }
// newBinlogFileStreamer creates a BinlogStreamer. // // dbname specifes the db to stream events for. func newBinlogFileStreamer(dbname string, mysqld *mysqlctl.Mysqld, startPos myproto.ReplicationPosition, sendTransaction sendTransactionFunc) BinlogStreamer { return &binlogFileStreamer{ dbname: dbname, dir: path.Dir(mysqld.Cnf().BinLogPath), mysqld: mysqld, startPos: startPos, sendTransaction: sendTransaction, } }
// Open runs the invalidation loop. func (rci *RowcacheInvalidator) Open(dbname string, mysqld *mysqlctl.Mysqld) { rp, err := mysqld.MasterPosition() if err != nil { panic(NewTabletError(FATAL, "Rowcache invalidator aborting: cannot determine replication position: %v", err)) } if mysqld.Cnf().BinLogPath == "" { panic(NewTabletError(FATAL, "Rowcache invalidator aborting: binlog path not specified")) } rci.dbname = dbname rci.mysqld = mysqld rci.SetPosition(rp) ok := rci.svm.Go(rci.run) if ok { log.Infof("Rowcache invalidator starting, dbname: %s, path: %s, position: %v", dbname, mysqld.Cnf().BinLogPath, rp) } else { log.Infof("Rowcache invalidator already running") } }