// 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") } }