diff --git a/CHANGELOG.md b/CHANGELOG.md index d141fa569e24e44a05dd118a28df7b81d00f66d7..cb853f8548d99620dc1942a3ee46e28631007c77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), * Fixed a download inefficiency where remote downloads could use extra bandwidth. * Fixed a problem where secondary imports can never finish. * Fixed imports not handling duplicate media IDs. +* Fixed some database connection errors not being handled correctly. ## [1.2.4] - March 5th, 2021 diff --git a/controllers/download_controller/download_controller.go b/controllers/download_controller/download_controller.go index 5727b2b68ed884ffb28bfe4b0b2de926fa240305..d67623ff8f7fc8756e821047d1cd4e470541bce1 100644 --- a/controllers/download_controller/download_controller.go +++ b/controllers/download_controller/download_controller.go @@ -182,6 +182,10 @@ func FindMinimalMediaRecord(origin string, mediaId string, downloadRemote bool, ctx.Log.Warn("Media not found") return nil, common.ErrMediaNotFound } + } else { + // We don't even want to attempt a download - something very wrong happened + ctx.Log.Error("Database error trying to get media:", err.Error()) + return nil, err } if !downloadRemote { @@ -263,6 +267,10 @@ func FindMediaRecord(origin string, mediaId string, downloadRemote bool, ctx rco ctx.Log.Warn("Media not found") return nil, common.ErrMediaNotFound } + } else { + // We don't even want to attempt a download - something very wrong happened + ctx.Log.Error("Database error trying to get media:", err.Error()) + return nil, err } if !downloadRemote { diff --git a/controllers/upload_controller/upload_controller.go b/controllers/upload_controller/upload_controller.go index 8dda069944f4212525733cce0be0cae139263aae..90060917add91c7d60acc7b7d82d6c7c526ecd47 100644 --- a/controllers/upload_controller/upload_controller.go +++ b/controllers/upload_controller/upload_controller.go @@ -267,6 +267,16 @@ func StoreDirect(f *AlreadyUploadedFile, contents io.ReadCloser, expectedSize in return nil, common.ErrMediaQuarantined } + // Double check that we're not about to try and store a record we know about + for _, knownRecord := range records { + if knownRecord.Origin == origin && knownRecord.MediaId == mediaId { + ctx.Log.Info("Duplicate media record found - returning unaltered record") + ds.DeleteObject(info.Location) // delete temp object + trackUploadAsLastAccess(ctx, knownRecord) + return knownRecord, nil + } + } + media := record media.Origin = origin media.MediaId = mediaId diff --git a/storage/datastore/datastore.go b/storage/datastore/datastore.go index e3e6d81b434c979090d84709eb26fd3dbf61bbf9..fb2e709c3da9bcdd4babbbe433724c1d7c8b9224 100644 --- a/storage/datastore/datastore.go +++ b/storage/datastore/datastore.go @@ -113,6 +113,7 @@ func PickDatastore(forKind string, ctx rcontext.RequestContext) (*DatastoreRef, ds, err := mediaStore.GetDatastoreByUri(GetUriForDatastore(dsConf)) if err != nil { + ctx.Log.Error("Error getting datastore: ", err.Error()) continue } @@ -121,6 +122,7 @@ func PickDatastore(forKind string, ctx rcontext.RequestContext) (*DatastoreRef, if len(confDatastores) > 1 { size, err = estimatedDatastoreSize(ds, ctx) if err != nil { + ctx.Log.Error("Error estimating datastore size for ", ds.DatastoreId, ": ", err.Error()) continue } }