Pin timeouts should start from the last block
Use timer for checking timeouts
This commit is contained in:
parent
9244daabfb
commit
3db5e45069
|
@ -459,14 +459,41 @@ func (ipfs *Connector) postCtxForStreamingResponse(ctx context.Context, path str
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
timer := time.NewTimer(timeout)
|
||||||
|
elapsed := time.Now()
|
||||||
|
var done bool
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-timer.C:
|
||||||
|
{
|
||||||
|
if time.Since(elapsed) >= timeout {
|
||||||
|
cancel()
|
||||||
|
done = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
timer.Reset(timeout - time.Since(elapsed))
|
||||||
|
}
|
||||||
|
case <-ctx.Done():
|
||||||
|
{
|
||||||
|
done = true
|
||||||
|
timer.Stop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if done {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
res, err := ipfs.doPostCtx(ctx, ipfs.client, ipfs.apiURL(), path, "", nil)
|
res, err := ipfs.doPostCtx(ctx, ipfs.client, ipfs.apiURL(), path, "", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
reader := bufio.NewReader(res.Body)
|
reader := bufio.NewReader(res.Body)
|
||||||
elapsed := time.Millisecond * 0
|
|
||||||
var prev string
|
var prev string
|
||||||
for {
|
for {
|
||||||
line, err := reader.ReadBytes('\n')
|
line, err := reader.ReadBytes('\n')
|
||||||
|
@ -479,18 +506,12 @@ func (ipfs *Connector) postCtxForStreamingResponse(ctx context.Context, path str
|
||||||
}
|
}
|
||||||
|
|
||||||
cur := string(line)
|
cur := string(line)
|
||||||
if cur == prev {
|
if cur != prev {
|
||||||
elapsed = elapsed + time.Millisecond
|
|
||||||
} else {
|
|
||||||
prev = cur
|
prev = cur
|
||||||
elapsed = time.Millisecond * 0
|
elapsed = time.Now()
|
||||||
}
|
|
||||||
time.Sleep(time.Millisecond)
|
|
||||||
if elapsed >= timeout {
|
|
||||||
cancel()
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user