(req *request)
| 129 | } |
| 130 | |
| 131 | func (l *loader) infinitelyRetry(req *request) { |
| 132 | defer l.retryRequestsWg.Done() |
| 133 | defer l.deregister(req) |
| 134 | nretries := 1 |
| 135 | for i := time.Millisecond; ; i *= 2 { |
| 136 | err := l.mutate(req) |
| 137 | if err == nil { |
| 138 | if opt.verbose { |
| 139 | fmt.Printf("Transaction succeeded after %s.\n", |
| 140 | english.Plural(nretries, "retry", "retries")) |
| 141 | } |
| 142 | atomic.AddUint64(&l.nquads, uint64(len(req.Set))) |
| 143 | atomic.AddUint64(&l.txns, 1) |
| 144 | return |
| 145 | } |
| 146 | nretries++ |
| 147 | handleError(err, true) |
| 148 | atomic.AddUint64(&l.aborts, 1) |
| 149 | if i >= 10*time.Second { |
| 150 | i = 10 * time.Second |
| 151 | } |
| 152 | l.deregister(req) |
| 153 | time.Sleep(i) |
| 154 | l.addConflictKeys(req) |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | func (l *loader) mutate(req *request) error { |
| 159 | atomic.AddInt32(&l.inflight, 1) |
no test coverage detected