MCPcopy Index your code
hub / github.com/perkeep/perkeep / openForWrite

Method openForWrite

pkg/blobserver/diskpacked/diskpacked.go:247–271  ·  view source on GitHub ↗

openForWrite will create or open pack file n for writes, create a lock visible external to the process and seek to the end of the file ready for appending new data. This function is not thread safe, s.mu should be locked by the caller.

(n int)

Source from the content-addressed store, hash-verified

245// appending new data.
246// This function is not thread safe, s.mu should be locked by the caller.
247func (s *storage) openForWrite(n int) error {
248 fn := s.filename(n)
249 l, err := lock.Lock(fn + ".lock")
250 if err != nil {
251 return err
252 }
253 f, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE, 0666)
254 if err != nil {
255 l.Close()
256 return err
257 }
258 openFdsVar.Add(s.root, 1)
259 debug.Printf("diskpacked: opened for write %q", fn)
260
261 s.size, err = f.Seek(0, io.SeekEnd)
262 if err != nil {
263 f.Close()
264 l.Close()
265 return err
266 }
267
268 s.writer = f
269 s.writeLock = l
270 return nil
271}
272
273// closePack opens any pack file currently open for writing.
274func (s *storage) closePack() error {

Callers 2

nextPackMethod · 0.95
openAllPacksMethod · 0.95

Calls 5

filenameMethod · 0.95
LockMethod · 0.80
PrintfMethod · 0.80
CloseMethod · 0.65
AddMethod · 0.45

Tested by

no test coverage detected