mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04:00 
			
		
		
		
	plugin/forward: Use new msg.Id for upstream queries (#4841)
* restore 1.8.3 question revert logic; add tests (#4840)
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Signed-off-by: Vector <815926354@qq.com>
* change origin message id
Signed-off-by: Vector <815926354@qq.com>
Signed-off-by: IIvyPy <815926354@qq.com>
* Revert "restore 1.8.3 question revert logic; add tests (#4840)"
This reverts commit 95e44d91d0.
Signed-off-by: IIvyPy <815926354@qq.com>
Co-authored-by: Chris O'Haver <cohaver@infoblox.com>
			
			
This commit is contained in:
		| @@ -97,6 +97,13 @@ func (p *Proxy) Connect(ctx context.Context, state request.Request, opts options | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	pc.c.SetWriteDeadline(time.Now().Add(maxTimeout)) | 	pc.c.SetWriteDeadline(time.Now().Add(maxTimeout)) | ||||||
|  | 	// records the origin Id before upstream. | ||||||
|  | 	originId := state.Req.Id | ||||||
|  | 	state.Req.Id = dns.Id() | ||||||
|  | 	defer func(){ | ||||||
|  | 		state.Req.Id = originId | ||||||
|  | 	}() | ||||||
|  |  | ||||||
| 	if err := pc.c.WriteMsg(state.Req); err != nil { | 	if err := pc.c.WriteMsg(state.Req); err != nil { | ||||||
| 		pc.c.Close() // not giving it back | 		pc.c.Close() // not giving it back | ||||||
| 		if err == io.EOF && cached { | 		if err == io.EOF && cached { | ||||||
| @@ -114,6 +121,10 @@ func (p *Proxy) Connect(ctx context.Context, state request.Request, opts options | |||||||
| 			if err == io.EOF && cached { | 			if err == io.EOF && cached { | ||||||
| 				return nil, ErrCachedClosed | 				return nil, ErrCachedClosed | ||||||
| 			} | 			} | ||||||
|  | 			// recovery the origin Id after upstream. | ||||||
|  | 			if ret != nil{ | ||||||
|  | 				ret.Id = originId | ||||||
|  | 			} | ||||||
| 			return ret, err | 			return ret, err | ||||||
| 		} | 		} | ||||||
| 		// drop out-of-order responses | 		// drop out-of-order responses | ||||||
| @@ -121,6 +132,8 @@ func (p *Proxy) Connect(ctx context.Context, state request.Request, opts options | |||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	// recovery the origin Id after upstream. | ||||||
|  | 	ret.Id = originId | ||||||
|  |  | ||||||
| 	p.transport.Yield(pc) | 	p.transport.Yield(pc) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user