func (cr *connectionRun) start() (bool, error) { log.Printf("Connection established to %v (%v)\n", cr.remoteHost, cr.remoteRMId) seg := capn.NewBuffer(nil) message := msgs.NewRootMessage(seg) message.SetHeartbeat() cr.beatBytes = server.SegToBytes(seg) if cr.isServer { cr.connectionManager.ServerEstablished(cr.Connection) } if cr.isClient { topology, servers := cr.connectionManager.ClientEstablished(cr.ConnectionNumber, cr.Connection) cr.connectionManager.AddSender(cr.Connection) cr.submitter = client.NewClientTxnSubmitter(cr.connectionManager.RMId, cr.connectionManager.BootCount, topology, cr.connectionManager) cr.submitter.TopologyChange(nil, servers) } cr.mustSendBeat = true cr.missingBeats = 0 cr.beater = newConnectionBeater(cr.Connection) go cr.beater.beat() cr.reader = newConnectionReader(cr.Connection) go cr.reader.read() return false, nil }
func (cr *connectionRun) start() (bool, error) { log.Printf("Connection established to %v (%v)\n", cr.remoteHost, cr.remoteRMId) cr.restart = true seg := capn.NewBuffer(nil) if cr.isClient { message := cmsgs.NewRootClientMessage(seg) message.SetHeartbeat() } else { message := msgs.NewRootMessage(seg) message.SetHeartbeat() } cr.beatBytes = server.SegToBytes(seg) if cr.isServer { cr.connectionManager.ServerEstablished(cr.Connection, cr.remoteHost, cr.remoteRMId, cr.remoteBootCount, cr.combinedTieBreak, cr.remoteRootId) } if cr.isClient { servers := cr.connectionManager.ClientEstablished(cr.ConnectionNumber, cr.Connection) cr.submitter = client.NewClientTxnSubmitter(cr.connectionManager.RMId, cr.connectionManager.BootCount, cr.connectionManager) cr.submitter.TopologyChanged(cr.topology) cr.submitter.ServerConnectionsChanged(servers) } cr.mustSendBeat = true cr.missingBeats = 0 cr.beater = newConnectionBeater(cr.Connection) go cr.beater.beat() cr.reader = newConnectionReader(cr.Connection) if cr.isClient { go cr.reader.readClient() } else { go cr.reader.readServer() } return false, nil }