Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2458

Generated golang server code for "oneway" methods is incorrect

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 0.9.1
    • 0.9.2
    • Go - Compiler
    • Patch Available

    Description

      oneway interface call is only a notification. server shall not send any response. But currently the golang server codes generated by complier will send a response. That will make the subsequent RPC call failed due to this unexpected result in the receiving networking stream. (The client is not expecting a reply for oneway call)

      Here is an example of generated codes for a oneway call (oneway void hi()), it shall not write a result back.

      func (p *testProcessorHi) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) {
      	args := NewHiArgs()
      	if err = args.Read(iprot); err != nil {
      		iprot.ReadMessageEnd()
      		x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error())
      		oprot.WriteMessageBegin("hi", thrift.EXCEPTION, seqId)
      		x.Write(oprot)
      		oprot.WriteMessageEnd()
      		oprot.Flush()
      		return
      	}
      	iprot.ReadMessageEnd()
      	result := NewHiResult()
      	if err = p.handler.Hi(); err != nil {
      		x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing hi: "+err.Error())
      		oprot.WriteMessageBegin("hi", thrift.EXCEPTION, seqId)
      		x.Write(oprot)
      		oprot.WriteMessageEnd()
      		oprot.Flush()
      		return
      	}
      	if err2 := oprot.WriteMessageBegin("hi", thrift.REPLY, seqId); err2 != nil {
      		err = err2
      	}
      	if err2 := result.Write(oprot); err == nil && err2 != nil {
      		err = err2
      	}
      	if err2 := oprot.WriteMessageEnd(); err == nil && err2 != nil {
      		err = err2
      	}
      	if err2 := oprot.Flush(); err == nil && err2 != nil {
      		err = err2
      	}
      	if err != nil {
      		return
      	}
      	return true, err
      }
      

      Attachments

        1. thrift-2458_incorrect_oneway_codegen.patch
          10 kB
          Jens Geyer
        2. Thrift2458.thrift
          0.2 kB
          Jens Geyer

        Activity

          People

            jensg Jens Geyer
            brianjcj Brian Jiang
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: