added back anchor and selfheal broken chunks
This commit is contained in:
parent
fd035148bb
commit
6122768619
8 changed files with 65 additions and 44 deletions
|
|
@ -381,6 +381,7 @@ func (md *Metadata) close() (err error) {
|
|||
md.cancel()
|
||||
if md.wc != nil {
|
||||
close(md.wc)
|
||||
<-md.done
|
||||
md.wc = nil
|
||||
}
|
||||
if md.f != nil {
|
||||
|
|
@ -449,30 +450,27 @@ type writeAt struct {
|
|||
|
||||
func (md *Metadata) resetChans() {
|
||||
md.wc = make(chan writeAt, 10)
|
||||
md.done = make(chan struct{})
|
||||
}
|
||||
|
||||
func (md *Metadata) writer() {
|
||||
md.resetChans()
|
||||
md.err.Store(nil)
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-md.ctx.Done():
|
||||
return
|
||||
case wa := <-md.wc:
|
||||
atomic.StoreInt64(&md.Atime, now())
|
||||
n, err := md.f.WriteAt(wa.data, wa.pos)
|
||||
if err == nil {
|
||||
md.addChunk(wa.pos, n)
|
||||
md.fs.q.Add(n)
|
||||
} else {
|
||||
md.err.Store(&mdErr{err})
|
||||
}
|
||||
if wa.ret != nil {
|
||||
streamingPool.Put(wa.ret)
|
||||
}
|
||||
for wa := range md.wc {
|
||||
atomic.StoreInt64(&md.Atime, now())
|
||||
n, err := md.f.WriteAt(wa.data, wa.pos)
|
||||
if err == nil {
|
||||
md.addChunk(wa.pos, n)
|
||||
md.fs.q.Add(n)
|
||||
} else {
|
||||
md.err.Store(&mdErr{err})
|
||||
}
|
||||
if wa.ret != nil {
|
||||
streamingPool.Put(wa.ret)
|
||||
}
|
||||
}
|
||||
close(md.done)
|
||||
}()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue