/
Chunk.go
47 lines (41 loc) · 1.05 KB
/
Chunk.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package utils
import (
pb "github.com/skyleaworlder/Toy-HDFS/proto"
)
// Chunk is a base data structure in hdfs
type Chunk struct {
Checksum uint32
Content []byte
}
// ChunkPb is a data structure defined by protobuf
type ChunkPb struct {
data *pb.ChunkProto
}
// NewChunk is a constructor of Chunk
func NewChunk(content []byte) (*Chunk, error) {
chunk := new(Chunk)
checksum, err := calcuChecksumByChunkContent(content)
if err != nil {
return &Chunk{}, err
}
chunk.Checksum = checksum
chunk.Content = make([]byte, len(content))
copy(chunk.Content, content)
return chunk, nil
}
// NewChunkPb is a constructor of Chunk defined by protobuf
func NewChunkPb(content []byte) (*ChunkPb, error) {
data, _ := NewChunk(content)
return &ChunkPb{
data: &pb.ChunkProto{
Checksum: data.Checksum,
Content: data.Content,
},
}, nil
}
// Chunk2ChunkProto is a translator
func Chunk2ChunkProto(chunk *Chunk) (chunkPb *pb.ChunkProto) {
chunkPb.Checksum = chunk.Checksum
chunkPb.Content = chunk.Content
return
}