mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
pkg/ioutil: configure pageOffset in NewPageWriter
This commit is contained in:
parent
e8473850a2
commit
bf0da78b63
@ -38,9 +38,12 @@ type PageWriter struct {
|
|||||||
bufWatermarkBytes int
|
bufWatermarkBytes int
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPageWriter(w io.Writer, pageBytes int) *PageWriter {
|
// NewPageWriter creates a new PageWriter. pageBytes is the number of bytes
|
||||||
|
// to write per page. pageOffset is the starting offset of io.Writer.
|
||||||
|
func NewPageWriter(w io.Writer, pageBytes, pageOffset int) *PageWriter {
|
||||||
return &PageWriter{
|
return &PageWriter{
|
||||||
w: w,
|
w: w,
|
||||||
|
pageOffset: pageOffset,
|
||||||
pageBytes: pageBytes,
|
pageBytes: pageBytes,
|
||||||
buf: make([]byte, defaultBufferBytes+pageBytes),
|
buf: make([]byte, defaultBufferBytes+pageBytes),
|
||||||
bufWatermarkBytes: defaultBufferBytes,
|
bufWatermarkBytes: defaultBufferBytes,
|
||||||
|
@ -25,7 +25,7 @@ func TestPageWriterRandom(t *testing.T) {
|
|||||||
pageBytes := 128
|
pageBytes := 128
|
||||||
buf := make([]byte, 4*defaultBufferBytes)
|
buf := make([]byte, 4*defaultBufferBytes)
|
||||||
cw := &checkPageWriter{pageBytes: pageBytes, t: t}
|
cw := &checkPageWriter{pageBytes: pageBytes, t: t}
|
||||||
w := NewPageWriter(cw, pageBytes)
|
w := NewPageWriter(cw, pageBytes, 0)
|
||||||
n := 0
|
n := 0
|
||||||
for i := 0; i < 4096; i++ {
|
for i := 0; i < 4096; i++ {
|
||||||
c, err := w.Write(buf[:rand.Intn(len(buf))])
|
c, err := w.Write(buf[:rand.Intn(len(buf))])
|
||||||
@ -51,7 +51,7 @@ func TestPageWriterPartialSlack(t *testing.T) {
|
|||||||
pageBytes := 128
|
pageBytes := 128
|
||||||
buf := make([]byte, defaultBufferBytes)
|
buf := make([]byte, defaultBufferBytes)
|
||||||
cw := &checkPageWriter{pageBytes: 64, t: t}
|
cw := &checkPageWriter{pageBytes: 64, t: t}
|
||||||
w := NewPageWriter(cw, pageBytes)
|
w := NewPageWriter(cw, pageBytes, 0)
|
||||||
// put writer in non-zero page offset
|
// put writer in non-zero page offset
|
||||||
if _, err := w.Write(buf[:64]); err != nil {
|
if _, err := w.Write(buf[:64]); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -82,6 +82,35 @@ func TestPageWriterPartialSlack(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPageWriterOffset tests if page writer correctly repositions when offset is given.
|
||||||
|
func TestPageWriterOffset(t *testing.T) {
|
||||||
|
defaultBufferBytes = 1024
|
||||||
|
pageBytes := 128
|
||||||
|
buf := make([]byte, defaultBufferBytes)
|
||||||
|
cw := &checkPageWriter{pageBytes: 64, t: t}
|
||||||
|
w := NewPageWriter(cw, pageBytes, 0)
|
||||||
|
if _, err := w.Write(buf[:64]); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := w.Flush(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if w.pageOffset != 64 {
|
||||||
|
t.Fatalf("w.pageOffset expected 64, got %d", w.pageOffset)
|
||||||
|
}
|
||||||
|
|
||||||
|
w = NewPageWriter(cw, w.pageOffset, pageBytes)
|
||||||
|
if _, err := w.Write(buf[:64]); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := w.Flush(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if w.pageOffset != 0 {
|
||||||
|
t.Fatalf("w.pageOffset expected 0, got %d", w.pageOffset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// checkPageWriter implements an io.Writer that fails a test on unaligned writes.
|
// checkPageWriter implements an io.Writer that fails a test on unaligned writes.
|
||||||
type checkPageWriter struct {
|
type checkPageWriter struct {
|
||||||
pageBytes int
|
pageBytes int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user