MCPcopy Create free account
hub / github.com/akalin/gopar / Write

Method Write

par1/encoder.go:108–175  ·  view source on GitHub ↗
(indexPath string)

Source from the content-addressed store, hash-verified

106}
107
108func (e *Encoder) Write(indexPath string) error {
109 var entries []fileEntry
110 var setHashInput []byte
111 for i, k := range e.filePaths {
112 data := e.fileData[i]
113 var status fileEntryStatus
114 status.setSavedInVolumeSet(true)
115 hash := md5.Sum(data)
116 entry := fileEntry{
117 header: fileEntryHeader{
118 Status: status,
119 FileBytes: uint64(len(data)),
120 Hash: hash,
121 SixteenKHash: sixteenKHash(data),
122 },
123 filename: filepath.Base(k),
124 }
125 entries = append(entries, entry)
126 setHashInput = append(setHashInput, hash[:]...)
127 }
128
129 vTemplate := volume{
130 header: header{
131 ID: expectedID,
132 VersionNumber: makeVersionNumber(expectedVersion),
133 SetHash: md5.Sum(setHashInput),
134 },
135 entries: entries,
136 }
137
138 indexVolume := vTemplate
139 indexVolume.header.VolumeNumber = 0
140 indexVolumeBytes, err := writeVolume(indexVolume)
141 if err != nil {
142 return err
143 }
144
145 // TODO: Sanity-check indexPath.
146 ext := path.Ext(indexPath)
147 base := indexPath[:len(indexPath)-len(ext)]
148
149 realIndexPath := base + ".par"
150 err = e.fileIO.WriteFile(realIndexPath, indexVolumeBytes)
151 e.delegate.OnVolumeFileWrite(0, len(e.parityData), realIndexPath, len(indexVolume.data), len(indexVolumeBytes), err)
152 if err != nil {
153 return err
154 }
155
156 for i, parityShard := range e.parityData {
157 vol := vTemplate
158 vol.header.VolumeNumber = uint64(i + 1)
159 vol.data = parityShard
160 volBytes, err := writeVolume(vol)
161 if err != nil {
162 return err
163 }
164
165 // TODO: Handle more than 99 parity files.

Callers 5

writeHeaderFunction · 0.45
createFunction · 0.45
testWriteParityFunction · 0.45
decodeUTF16LEStringFunction · 0.45
writeFileEntryFunction · 0.45

Calls 6

setSavedInVolumeSetMethod · 0.95
makeVersionNumberFunction · 0.85
writeVolumeFunction · 0.85
sixteenKHashFunction · 0.70
WriteFileMethod · 0.65
OnVolumeFileWriteMethod · 0.65

Tested by 1

testWriteParityFunction · 0.36