poi.workFQN => LOM
()
| 233 | |
| 234 | // poi.workFQN => LOM |
| 235 | func (poi *putObjInfo) fini() (errCode int, err error) { |
| 236 | var ( |
| 237 | lom = poi.lom |
| 238 | bck = lom.Bck() |
| 239 | bmd = poi.t.owner.bmd.Get() |
| 240 | ) |
| 241 | // remote versioning |
| 242 | if bck.IsRemote() && (poi.owt == cmn.OwtPut || poi.owt == cmn.OwtFinalize || poi.owt == cmn.OwtPromote) { |
| 243 | errCode, err = poi.putRemote() |
| 244 | if err != nil { |
| 245 | loghdr := poi.loghdr() |
| 246 | glog.Errorf("PUT (%s): %v(%d)", loghdr, err, errCode) |
| 247 | if errCode != http.StatusServiceUnavailable { |
| 248 | return |
| 249 | } |
| 250 | // e.g.: "googleapi: Error 503: We encountered an internal error. Please try again." |
| 251 | time.Sleep(time.Second) |
| 252 | errCode, err = poi.putRemote() |
| 253 | if err != nil { |
| 254 | return |
| 255 | } |
| 256 | glog.Infof("PUT (%s): retried OK", loghdr) |
| 257 | } |
| 258 | } |
| 259 | if _, present := bmd.Get(bck); !present { |
| 260 | err = fmt.Errorf("PUT (%s): %q does not exist", poi.loghdr(), bck) |
| 261 | errCode = http.StatusBadRequest |
| 262 | return |
| 263 | } |
| 264 | |
| 265 | // NOTE: see GetCold() implementation and cmn.OWT |
| 266 | switch poi.owt { |
| 267 | case cmn.OwtGetTryLock, cmn.OwtGetLock, cmn.OwtGet: |
| 268 | debug.AssertFunc(func() bool { _, exclusive := lom.IsLocked(); return exclusive }) |
| 269 | case cmn.OwtGetPrefetchLock: |
| 270 | if !lom.TryLock(true) { |
| 271 | if glog.FastV(4, glog.SmoduleAIS) { |
| 272 | glog.Warningf("(%s) is busy", poi.loghdr()) |
| 273 | } |
| 274 | return 0, cmn.ErrSkip // e.g. prefetch can skip it and keep on going |
| 275 | } |
| 276 | defer lom.Unlock(true) |
| 277 | default: |
| 278 | lom.Lock(true) |
| 279 | defer lom.Unlock(true) |
| 280 | } |
| 281 | |
| 282 | // ais versioning |
| 283 | if bck.IsAIS() && lom.VersionConf().Enabled { |
| 284 | if poi.owt == cmn.OwtPut || poi.owt == cmn.OwtFinalize || poi.owt == cmn.OwtPromote { |
| 285 | if poi.skipVC { |
| 286 | err = lom.IncVersion() |
| 287 | debug.Assert(err == nil) |
| 288 | } else if remSrc, ok := lom.GetCustomKey(cmn.SourceObjMD); !ok || remSrc == "" { |
| 289 | if err = lom.IncVersion(); err != nil { |
| 290 | glog.Error(err) |
| 291 | } |
| 292 | } |
no test coverage detected