// Open runs the invalidation loop. func (rci *RowcacheInvalidator) Open(dbname string, mysqld mysqlctl.MysqlDaemon) { // Perform an early check to see if we're already running. if rci.svm.State() == sync2.SERVICE_RUNNING { return } rp, err := mysqld.MasterPosition() if err != nil { panic(NewTabletError(ErrFatal, vtrpc.ErrorCode_INTERNAL_ERROR, "Rowcache invalidator aborting: cannot determine replication position: %v", err)) } if mysqld.Cnf().BinLogPath == "" { panic(NewTabletError(ErrFatal, vtrpc.ErrorCode_INTERNAL_ERROR, "Rowcache invalidator aborting: binlog path not specified")) } err = rci.qe.ClearRowcache(context.Background()) if err != nil { panic(NewTabletError(ErrFatal, vtrpc.ErrorCode_INTERNAL_ERROR, "Rowcahe is not reachable")) } 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") } }
// Open runs the invalidation loop. func (rci *RowcacheInvalidator) Open(dbname string, mysqld mysqlctl.MysqlDaemon) { rp, err := mysqld.MasterPosition() if err != nil { panic(NewTabletError(ErrFatal, "Rowcache invalidator aborting: cannot determine replication position: %v", err)) } if mysqld.Cnf().BinLogPath == "" { panic(NewTabletError(ErrFatal, "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") } }