func NewProtoWriter(t ScanReqType, conn net.Conn) *protoResponseWriter { return &protoResponseWriter{ scanType: t, conn: conn, encBuf: p.GetBlock(), rowBuf: p.GetBlock(), } }
func (d *IndexScanDecoder) Routine() error { defer d.CloseWrite() defer d.CloseRead() var sk, docid []byte tmpBuf := p.GetBlock() defer p.PutBlock(tmpBuf) loop: for { row, err := d.ReadItem() switch err { case nil: case p.ErrNoMoreItem, p.ErrSupervisorKill: break loop default: d.CloseWithError(err) break loop } t := (*tmpBuf)[:0] if d.p.req.isPrimary { sk, docid = piSplitEntry(row, t) } else { sk, docid = siSplitEntry(row, t) } d.p.bytesRead += uint64(len(sk) + len(docid)) err = d.WriteItem(sk, docid) if err != nil { break } } return nil }
func (s *scanCoordinator) respondWithError(conn net.Conn, req *ScanRequest, err error) { var res interface{} buf := p.GetBlock() defer p.PutBlock(buf) protoErr := &protobuf.Error{Error: proto.String(err.Error())} switch req.ScanType { case StatsReq: res = &protobuf.StatisticsResponse{ Err: protoErr, } case CountReq: res = &protobuf.CountResponse{ Count: proto.Int64(0), Err: protoErr, } case ScanAllReq, ScanReq: res = &protobuf.ResponseStream{ Err: protoErr, } } err2 := protobuf.EncodeAndWrite(conn, *buf, res) if err2 != nil { err = fmt.Errorf("%s, %s", err, err2) goto finish } err2 = protobuf.EncodeAndWrite(conn, *buf, &protobuf.StreamEndResponse{}) if err2 != nil { err = fmt.Errorf("%s, %s", err, err2) } finish: logging.Errorf("%s RESPONSE Failed with error (%s)", req.LogPrefix, err) }