// - return couchbase SDK error if any. func (p *Projector) doFailoverLog( request *protobuf.FailoverLogRequest, opaque uint16) ap.MessageMarshaller { response := &protobuf.FailoverLogResponse{} pooln := request.GetPool() bucketn := request.GetBucket() vbuckets := request.GetVbnos() // log this request. prefix := p.logPrefix fmsg := "%v ##%x doFailoverLog() {%q, %q, %v}\n" logging.Infof(fmsg, prefix, opaque, pooln, bucketn, vbuckets) defer logging.Infof("%v ##%x doFailoverLog() returns ...\n", prefix, opaque) bucket, err := c.ConnectBucket(p.clusterAddr, pooln, bucketn) if err != nil { logging.Errorf("%v ##%x ConnectBucket(): %v\n", prefix, opaque, err) response.Err = protobuf.NewError(err) return response } defer bucket.Close() protoFlogs := make([]*protobuf.FailoverLog, 0, len(vbuckets)) vbnos := c.Vbno32to16(vbuckets) dcpConfig := map[string]interface{}{ "genChanSize": p.config["projector.dcp.genChanSize"].Int(), "dataChanSize": p.config["projector.dcp.dataChanSize"].Int(), } flogs, err := bucket.GetFailoverLogs(opaque, vbnos, dcpConfig) if err == nil { for vbno, flog := range flogs { vbuuids := make([]uint64, 0, len(flog)) seqnos := make([]uint64, 0, len(flog)) for _, x := range flog { vbuuids = append(vbuuids, x[0]) seqnos = append(seqnos, x[1]) } protoFlog := &protobuf.FailoverLog{ Vbno: proto.Uint32(uint32(vbno)), Vbuuids: vbuuids, Seqnos: seqnos, } protoFlogs = append(protoFlogs, protoFlog) } } else { logging.Errorf("%v ##%x GetFailoverLogs(): %v\n", prefix, opaque, err) response.Err = protobuf.NewError(err) return response } response.Logs = protoFlogs return response }
func (c *monitorTestProjectorClient) MutationTopicRequest(topic, endpointType string, reqTimestamps []*protobuf.TsVbuuid, instances []*protobuf.Instance) (*protobuf.TopicResponse, error) { logging.Infof("monitorTestProjectorClient.MutationTopicRequest(): start") if len(reqTimestamps) == 0 { util.TT.Fatal("testProjectorClient.MutationTopicRequest(): reqTimestamps is nil") } response := new(protobuf.TopicResponse) response.Topic = &topic response.InstanceIds = make([]uint64, len(instances)) for i, inst := range instances { response.InstanceIds[i] = inst.GetIndexInstance().GetInstId() } response.ActiveTimestamps = reqTimestamps if reqTimestamps[0].GetSeqnos()[10] != 406 { response.RollbackTimestamps = make([]*protobuf.TsVbuuid, 1) response.RollbackTimestamps[0] = protobuf.NewTsVbuuid(manager.DEFAULT_POOL_NAME, reqTimestamps[0].GetBucket(), manager.NUM_VB) response.RollbackTimestamps[0].Append(uint16(10), uint64(406), reqTimestamps[0].Vbuuids[10], 0, 0) response.Err = protobuf.NewError(projectorC.ErrorStreamRequest) return response, projectorC.ErrorStreamRequest } else { response.RollbackTimestamps = nil response.Err = nil return response, nil } }
// - return couchbase SDK error if any. func (p *Projector) doVbmapRequest( request *protobuf.VbmapRequest, opaque uint16) ap.MessageMarshaller { response := &protobuf.VbmapResponse{} pooln := request.GetPool() bucketn := request.GetBucket() kvaddrs := request.GetKvaddrs() // log this request. prefix := p.logPrefix fmsg := "%v ##%x doVbmapRequest() {%q, %q, %v}\n" logging.Infof(fmsg, prefix, pooln, bucketn, kvaddrs, opaque) defer logging.Infof("%v ##%x doVbmapRequest() returns ...\n", prefix, opaque) // get vbmap from bucket connection. bucket, err := c.ConnectBucket(p.clusterAddr, pooln, bucketn) if err != nil { logging.Errorf("%v ##%x ConnectBucket(): %v\n", prefix, opaque, err) response.Err = protobuf.NewError(err) return response } defer bucket.Close() bucket.Refresh() m, err := bucket.GetVBmap(kvaddrs) if err != nil { logging.Errorf("%v ##%x GetVBmap(): %v\n", prefix, opaque, err) response.Err = protobuf.NewError(err) return response } // compose response response.Kvaddrs = make([]string, 0, len(kvaddrs)) response.Kvvbnos = make([]*protobuf.Vbuckets, 0, len(kvaddrs)) for kvaddr, vbnos := range m { response.Kvaddrs = append(response.Kvaddrs, kvaddr) response.Kvvbnos = append( response.Kvvbnos, &protobuf.Vbuckets{Vbnos: c.Vbno16to32(vbnos)}) } return response }
// - return ErrorTopicMissing if feed is not started. // - otherwise, error is empty string. func (p *Projector) doDelInstances( request *protobuf.DelInstancesRequest, opaque uint16) ap.MessageMarshaller { topic := request.GetTopic() // log this request. prefix := p.logPrefix logging.Infof("%v ##%x doDelInstances() %q\n", prefix, opaque, topic) defer logging.Infof("%v ##%x doDelInstances() returns ...\n", prefix, opaque) feed, err := p.acquireFeed(topic) defer p.releaseFeed(topic) if err != nil { logging.Errorf("%v ##%x acquireFeed(): %v\n", prefix, opaque, err) return protobuf.NewError(err) } err = feed.DelInstances(request, opaque) return protobuf.NewError(err) }