Browse Source

upon RenameData() quorum error delete any partial success (#18586)

there is potential for danglingWrites when quorum failed, where
only some drives took a successful write, generally this is left
to the healing routine to pick it up. However it is better that
we delete it right away to avoid potential for quorum issues on
version signature when there are many versions of an object.
pull/18591/head
Harshavardhana 2 years ago
committed by GitHub
parent
commit
8fdfcfb562
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      cmd/erasure-object.go
  2. 2
      cmd/mrf.go

11
cmd/erasure-object.go

@ -1036,6 +1036,17 @@ func renameData(ctx context.Context, disks []StorageAPI, srcBucket, srcEntry str
var versionsDisparity bool
err := reduceWriteQuorumErrs(ctx, errs, objectOpIgnoredErrs, writeQuorum)
if err != nil {
for index, nerr := range errs {
// When we are going to return error, attempt to delete success
// on some of the drives, if we cannot we do not have to notify
// caller this dangling object will be now scheduled to be removed
// via active healing.
if nerr == nil {
disks[index].DeleteVersion(ctx, dstBucket, dstEntry, metadata[index], false)
}
}
}
if err == nil {
versions := reduceCommonVersions(diskVersions, writeQuorum)
for index, dversions := range diskVersions {

2
cmd/mrf.go

@ -97,7 +97,7 @@ func (m *mrfState) healRoutine() {
// let recently failed networks to reconnect
// making MRF wait for 1s before retrying,
// i.e 4 reconnect attempts.
time.Sleep(1 * time.Second)
time.Sleep(time.Second)
}
// wait on timer per heal

Loading…
Cancel
Save