| 228 | } |
| 229 | |
| 230 | func (df *DataFile) writeHeader() error { |
| 231 | header := DataFileHeader{ |
| 232 | magic: MAGIC, |
| 233 | version: VERSION, |
| 234 | chunkIdxStart: df.chunkIdxStart, |
| 235 | chunkIdxLen: df.chunkIdxLen, |
| 236 | encodeType: df.encodeType, |
| 237 | maxKvSize: df.maxKvSize, |
| 238 | chunkSize: df.chunkSize, |
| 239 | metaSize: df.metaSize, |
| 240 | miner: df.miner, |
| 241 | status: 0, |
| 242 | } |
| 243 | |
| 244 | buf := new(bytes.Buffer) |
| 245 | if err := binary.Write(buf, binary.BigEndian, header.magic); err != nil { |
| 246 | return err |
| 247 | } |
| 248 | if err := binary.Write(buf, binary.BigEndian, header.version); err != nil { |
| 249 | return err |
| 250 | } |
| 251 | if err := binary.Write(buf, binary.BigEndian, header.chunkIdxStart); err != nil { |
| 252 | return err |
| 253 | } |
| 254 | if err := binary.Write(buf, binary.BigEndian, header.chunkIdxLen); err != nil { |
| 255 | return err |
| 256 | } |
| 257 | if err := binary.Write(buf, binary.BigEndian, header.encodeType); err != nil { |
| 258 | return err |
| 259 | } |
| 260 | if err := binary.Write(buf, binary.BigEndian, header.maxKvSize); err != nil { |
| 261 | return err |
| 262 | } |
| 263 | if err := binary.Write(buf, binary.BigEndian, header.chunkSize); err != nil { |
| 264 | return err |
| 265 | } |
| 266 | if err := binary.Write(buf, binary.BigEndian, header.metaSize); err != nil { |
| 267 | return err |
| 268 | } |
| 269 | n, err := buf.Write(header.miner[:]) |
| 270 | if err != nil { |
| 271 | return err |
| 272 | } |
| 273 | if n != len(header.miner) { |
| 274 | return fmt.Errorf("short write for header.miner, n=%d", n) |
| 275 | } |
| 276 | if err := binary.Write(buf, binary.BigEndian, header.status); err != nil { |
| 277 | return err |
| 278 | } |
| 279 | if _, err := df.file.WriteAt(buf.Bytes(), 0); err != nil { |
| 280 | return err |
| 281 | } |
| 282 | return nil |
| 283 | } |
| 284 | |
| 285 | func (df *DataFile) readHeader() error { |
| 286 | header := DataFileHeader{} |