Skip to content

Commit 4d46680

Browse files
kegsayjkralik
authored andcommitted
Fix an issue which prevents blockwise xfer working with observe
If you observe a resource and the state change is too big for a single packet, it will be sent blockwise. However, only the first block is sent with the observe token, it is expected that clients will request subsequent blocks by issuing a new request. Returning a response to this new request would fail on the client due to ETags not matching, despite no ETags being used. The failure error was: received message doesn't contains ETAG but cached received message contains it([]) This patch ensures that the received message actually contains an ETag, which fixes this issue.
1 parent fe45892 commit 4d46680

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

net/blockwise/blockwise.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -736,9 +736,13 @@ func (b *BlockWise) processReceivedMessage(w ResponseWriter, r Message, maxSzx S
736736
cachedReceivedMessageETAG, errCachedReceivedMessageETAG := cachedReceivedMessage.GetOptionBytes(message.ETag)
737737
switch {
738738
case errETAG == nil && errCachedReceivedMessageETAG != nil:
739-
return fmt.Errorf("received message doesn't contains ETAG but cached received message contains it(%v)", cachedReceivedMessageETAG)
739+
if len(cachedReceivedMessageETAG) > 0 { // make sure there is an etag there
740+
return fmt.Errorf("received message doesn't contains ETAG but cached received message contains it(%v)", cachedReceivedMessageETAG)
741+
}
740742
case errETAG != nil && errCachedReceivedMessageETAG == nil:
741-
return fmt.Errorf("received message contains ETAG(%v) but cached received message doesn't", rETAG)
743+
if len(rETAG) > 0 { // make sure there is an etag there
744+
return fmt.Errorf("received message contains ETAG(%v) but cached received message doesn't", rETAG)
745+
}
742746
case !bytes.Equal(rETAG, cachedReceivedMessageETAG):
743747
return fmt.Errorf("received message ETAG(%v) is not equal to cached received message ETAG(%v)", rETAG, cachedReceivedMessageETAG)
744748
}

0 commit comments

Comments
 (0)