func (s *Server) parseNode(cfg config.NodeConfig) (*backend.Node, error) { n := new(backend.Node) //n.server = s n.Cfg = cfg n.DownAfterNoAlive = time.Duration(cfg.DownAfterNoAlive) * time.Second if len(cfg.Master) == 0 { return nil, fmt.Errorf("must setting master MySQL node.") } var err error if n.Master, err = n.OpenDB(cfg.Master); err != nil { return nil, err } //n.db = n.Master if len(cfg.Slave) > 0 { if n.Slave, err = n.OpenDB(cfg.Slave); err != nil { golog.Error("ClientConn", "handleShowProxy", err.Error(), 0) n.Slave = nil } } go n.Run() return n, nil }
func (c *ClientConn) getBackendConn(n *backend.Node, fromSlave bool) (co *backend.BackendConn, err error) { if !c.isInTransaction() { if fromSlave { co, err = n.GetSlaveConn() if err != nil { co, err = n.GetMasterConn() } } else { co, err = n.GetMasterConn() } if err != nil { golog.Error("server", "getBackendConn", err.Error(), 0) return } } else { var ok bool co, ok = c.txConns[n] if !ok { if co, err = n.GetMasterConn(); err != nil { return } if !c.isAutoCommit() { if err = co.SetAutoCommit(0); err != nil { return } } else { if err = co.Begin(); err != nil { return } } c.txConns[n] = co } } if err = co.UseDB(c.db); err != nil { //reset the database to null c.db = "" return } if err = co.SetCharset(c.charset, c.collation); err != nil { return } return }
func (s *Server) parseNode(cfg config.NodeConfig) (*backend.Node, error) { var err error n := new(backend.Node) n.Cfg = cfg n.DownAfterNoAlive = time.Duration(cfg.DownAfterNoAlive) * time.Second err = n.ParseMaster(cfg.Master) if err != nil { return nil, err } err = n.ParseSlave(cfg.Slave) if err != nil { return nil, err } go n.CheckNode() return n, nil }
func (c *ClientConn) getBackendConn(n *backend.Node, fromSlave bool) (co *backend.BackendConn, err error) { if !c.needBeginTx() { if fromSlave { co, err = n.GetSlaveConn() if err != nil { co, err = n.GetMasterConn() } } else { co, err = n.GetMasterConn() } if err != nil { golog.Error("server", "getBackendConn", err.Error(), 0) return } } else { var ok bool c.Lock() co, ok = c.txConns[n] c.Unlock() if !ok { if co, err = n.GetMasterConn(); err != nil { return } if err = co.Begin(); err != nil { return } c.Lock() c.txConns[n] = co c.Unlock() } } //todo, set conn charset, etc... if err = co.UseDB(c.db); err != nil { return } if err = co.SetCharset(c.charset); err != nil { return } return }