MCPcopy
hub / github.com/wavetermdev/waveterm / writeAt

Method writeAt

pkg/filestore/blockstore_cache.go:159–203  ·  view source on GitHub ↗
(offset int64, data []byte, replace bool)

Source from the content-addressed store, hash-verified

157}
158
159func (entry *CacheEntry) writeAt(offset int64, data []byte, replace bool) {
160 if replace {
161 entry.File.Size = 0
162 }
163 if entry.File.Opts.Circular {
164 startCirFileOffset := entry.File.Size - entry.File.Opts.MaxSize
165 if offset+int64(len(data)) <= startCirFileOffset {
166 // write is before the start of the circular file
167 return
168 }
169 if offset < startCirFileOffset {
170 // truncate data (from the front), update offset
171 truncateAmt := startCirFileOffset - offset
172 data = data[truncateAmt:]
173 offset += truncateAmt
174 }
175 if int64(len(data)) > entry.File.Opts.MaxSize {
176 // truncate data (from the front), update offset
177 truncateAmt := int64(len(data)) - entry.File.Opts.MaxSize
178 data = data[truncateAmt:]
179 offset += truncateAmt
180 }
181 }
182 endWriteOffset := offset + int64(len(data))
183 if replace {
184 entry.DataEntries = make(map[int]*DataCacheEntry)
185 }
186 for len(data) > 0 {
187 partIdx := int(offset / partDataSize)
188 if entry.File.Opts.Circular {
189 maxPart := int(entry.File.Opts.MaxSize / partDataSize)
190 partIdx = partIdx % maxPart
191 }
192 partOffset := offset % partDataSize
193 partData := entry.getOrCreateDataCacheEntry(partIdx)
194 nw, newDce := partData.writeToPart(partOffset, data)
195 entry.DataEntries[partIdx] = newDce
196 data = data[nw:]
197 offset += nw
198 }
199 if endWriteOffset > entry.File.Size || replace {
200 entry.File.Size = endWriteOffset
201 }
202 entry.File.ModTs = time.Now().UnixMilli()
203}
204
205// returns (realOffset, data, error)
206func (entry *CacheEntry) readAt(ctx context.Context, offset int64, size int64, readFull bool) (int64, []byte, error) {

Callers 5

WriteFileMethod · 0.80
WriteAtMethod · 0.80
AppendDataMethod · 0.80
compactIJsonMethod · 0.80
AppendIJsonMethod · 0.80

Calls 2

writeToPartMethod · 0.80

Tested by

no test coverage detected