| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package gs | 5 package gs |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "fmt" | 8 "fmt" |
| 9 "io" | 9 "io" |
| 10 "net/http" | 10 "net/http" |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 // First stage: CopyTo | 134 // First stage: CopyTo |
| 135 err = retry.Retry(c, retry.TransientOnly(retry.Default), func() error { | 135 err = retry.Retry(c, retry.TransientOnly(retry.Default), func() error { |
| 136 if _, err := dstObj.CopierFrom(srcObj).Run(c); err != nil { | 136 if _, err := dstObj.CopierFrom(srcObj).Run(c); err != nil { |
| 137 // The storage library doesn't return gs.ErrObjectNotExi
st when Delete | 137 // The storage library doesn't return gs.ErrObjectNotExi
st when Delete |
| 138 // returns a 404. Catch that explicitly. | 138 // returns a 404. Catch that explicitly. |
| 139 if isNotFoundError(err) { | 139 if isNotFoundError(err) { |
| 140 return err | 140 return err |
| 141 } | 141 } |
| 142 | 142 |
| 143 // Assume all unexpected errors are transient. | 143 // Assume all unexpected errors are transient. |
| 144 » » » return errors.WrapTransient(err) | 144 » » » return retry.Tag.Apply(err) |
| 145 } | 145 } |
| 146 return nil | 146 return nil |
| 147 }, func(err error, d time.Duration) { | 147 }, func(err error, d time.Duration) { |
| 148 log.Fields{ | 148 log.Fields{ |
| 149 log.ErrorKey: err, | 149 log.ErrorKey: err, |
| 150 "delay": d, | 150 "delay": d, |
| 151 "src": src, | 151 "src": src, |
| 152 "dst": dst, | 152 "dst": dst, |
| 153 }.Warningf(c, "Transient error copying GS file. Retrying...") | 153 }.Warningf(c, "Transient error copying GS file. Retrying...") |
| 154 }) | 154 }) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 179 return retry.Retry(c, retry.TransientOnly(retry.Default), func() error { | 179 return retry.Retry(c, retry.TransientOnly(retry.Default), func() error { |
| 180 if err := o.Delete(c); err != nil { | 180 if err := o.Delete(c); err != nil { |
| 181 // The storage library doesn't return gs.ErrObjectNotExi
st when Delete | 181 // The storage library doesn't return gs.ErrObjectNotExi
st when Delete |
| 182 // returns a 404. Catch that explicitly. | 182 // returns a 404. Catch that explicitly. |
| 183 if isNotFoundError(err) { | 183 if isNotFoundError(err) { |
| 184 // If the file wasn't found, then the delete "su
cceeded". | 184 // If the file wasn't found, then the delete "su
cceeded". |
| 185 return nil | 185 return nil |
| 186 } | 186 } |
| 187 | 187 |
| 188 // Assume all unexpected errors are transient. | 188 // Assume all unexpected errors are transient. |
| 189 » » » return errors.WrapTransient(err) | 189 » » » return retry.Tag.Apply(err) |
| 190 } | 190 } |
| 191 return nil | 191 return nil |
| 192 }, func(err error, d time.Duration) { | 192 }, func(err error, d time.Duration) { |
| 193 log.Fields{ | 193 log.Fields{ |
| 194 log.ErrorKey: err, | 194 log.ErrorKey: err, |
| 195 "delay": d, | 195 "delay": d, |
| 196 }.Warningf(c, "Transient error deleting file. Retrying...") | 196 }.Warningf(c, "Transient error deleting file. Retrying...") |
| 197 }) | 197 }) |
| 198 } | 198 } |
| 199 | 199 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 // The storage library doesn't return gs.ErrObjectNotExist when Delete | 231 // The storage library doesn't return gs.ErrObjectNotExist when Delete |
| 232 // returns a 404. Catch that explicitly. | 232 // returns a 404. Catch that explicitly. |
| 233 if t, ok := err.(*googleapi.Error); ok { | 233 if t, ok := err.(*googleapi.Error); ok { |
| 234 switch t.Code { | 234 switch t.Code { |
| 235 case http.StatusNotFound: | 235 case http.StatusNotFound: |
| 236 return true | 236 return true |
| 237 } | 237 } |
| 238 } | 238 } |
| 239 return false | 239 return false |
| 240 } | 240 } |
| OLD | NEW |