Browse Source

Merge pull request #2739 from xiang90/fix_wal

wal: change io.EOF returned by readFull to io.ErrUnexpectedEOF
Xiang Li 10 years ago
parent
commit
01d9c9ce17
2 changed files with 6 additions and 0 deletions
  1. 5 0
      wal/decoder.go
  2. 1 0
      wal/record_test.go

+ 5 - 0
wal/decoder.go

@@ -54,6 +54,11 @@ func (d *decoder) decode(rec *walpb.Record) error {
 	}
 	}
 	data := make([]byte, l)
 	data := make([]byte, l)
 	if _, err = io.ReadFull(d.br, data); err != nil {
 	if _, err = io.ReadFull(d.br, data); err != nil {
+		// ReadFull returns io.EOF only if no bytes were read
+		// the decoder should treat this as an ErrUnexpectedEOF instead.
+		if err == io.EOF {
+			err = io.ErrUnexpectedEOF
+		}
 		return err
 		return err
 	}
 	}
 	if err := rec.Unmarshal(data); err != nil {
 	if err := rec.Unmarshal(data); err != nil {

+ 1 - 0
wal/record_test.go

@@ -42,6 +42,7 @@ func TestReadRecord(t *testing.T) {
 	}{
 	}{
 		{infoRecord, &walpb.Record{Type: 1, Crc: crc32.Checksum(infoData, crcTable), Data: infoData}, nil},
 		{infoRecord, &walpb.Record{Type: 1, Crc: crc32.Checksum(infoData, crcTable), Data: infoData}, nil},
 		{[]byte(""), &walpb.Record{}, io.EOF},
 		{[]byte(""), &walpb.Record{}, io.EOF},
+		{infoRecord[:8], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-len(infoData)-8], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-len(infoData)-8], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-len(infoData)], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-len(infoData)], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-8], &walpb.Record{}, io.ErrUnexpectedEOF},
 		{infoRecord[:len(infoRecord)-8], &walpb.Record{}, io.ErrUnexpectedEOF},