Skip to content

Commit 727e6cd

Browse files
authored
Merge pull request #295 from mibanescu/withSyncMarker
Ability to specify sync marker to an OCFWriter
2 parents fa9d152 + 0569809 commit 727e6cd

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

ocf.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,16 @@ func newOCFHeader(config OCFConfig) (*ocfHeader, error) {
100100
}
101101

102102
header.metadata = config.MetaData
103-
104-
//
105-
// The 16-byte, randomly-generated sync marker for this file.
106-
//
107-
_, err = rand.Read(header.syncMarker[:])
108-
if err != nil {
109-
return nil, err
103+
header.syncMarker = config.SyncMarker
104+
105+
if header.syncMarker == [16]byte{} {
106+
//
107+
// The 16-byte, randomly-generated sync marker for this file.
108+
//
109+
_, err = rand.Read(header.syncMarker[:])
110+
if err != nil {
111+
return nil, err
112+
}
110113
}
111114

112115
return header, nil

ocf_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,24 @@ func TestOCFWriterCompressionSnappy(t *testing.T) {
9494
func TestOCFWriterWithApplicationMetaData(t *testing.T) {
9595
testOCFRoundTripWithHeaders(t, CompressionNullLabel, map[string][]byte{"foo": []byte("BOING"), "goo": []byte("zoo")})
9696
}
97+
98+
func TestOCFWriterWithSyncBlock(t *testing.T) {
99+
buf := &bytes.Buffer{}
100+
config := OCFConfig{
101+
W: buf,
102+
Schema: `{"type":"long"}`,
103+
SyncMarker: [16]byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6},
104+
}
105+
_, err := NewOCFWriter(config)
106+
if err != nil {
107+
t.Fatal(err)
108+
}
109+
110+
r, err := NewOCFReader(buf)
111+
if err != nil {
112+
t.Fatal(err)
113+
}
114+
if r.header.syncMarker != config.SyncMarker {
115+
t.Errorf("GOT: %v; WANT: %v", r.header.syncMarker, config.SyncMarker)
116+
}
117+
}

ocf_writer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ type OCFConfig struct {
5555
// the OCF file. When appending to an existing OCF, this field
5656
// is ignored.
5757
MetaData map[string][]byte
58+
59+
// SyncMarker specifies the sync block (optional). When not set, it will be
60+
// randomly generated
61+
SyncMarker [16]byte
5862
}
5963

6064
// OCFWriter is used to create a new or append to an existing Avro Object

0 commit comments

Comments
 (0)