Skip to content

Commit 6f640c1

Browse files
authored
Add s3 upload config to standalone datastore config (#8986)
This was unfortunately not asserted because the children reference was missing. ### Steps to test: - CI ------ - [x] Needs datastore update after deployment
1 parent d87113f commit 6f640c1

File tree

5 files changed

+13
-6
lines changed

5 files changed

+13
-6
lines changed

conf/messages

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ dataset.upload.invalidLinkedLayers=Could not link all requested layers
117117
dataset.upload.couldNotLoadUnfinishedUploads=Could not load unfinished uploads of user.
118118
dataset.upload.noFiles=Tried to finish upload with no files. May be a retry of a failed finish request, see previous errors.
119119
dataset.upload.storageExceeded=Cannot upload dataset because the storage quota of the organization is exceeded.
120-
dataset.upload.finishFailed=Failed to finalize dataset upload.
120+
dataset.upload.finishFailed=Failed to finalize upload for dataset {0}.
121121
dataset.upload.moveToTarget.failed=Failed to move uploaded dataset to target directory.
122122
dataset.upload.moreBytesThanReserved=The uploaded dataset contains more bytes than originally reserved. Please make sure to reserve the correct amount of bytes.
123123
dataset.upload.creation.failed=Failed to create dataset.

webknossos-datastore/app/com/scalableminds/webknossos/datastore/DataStoreConfig.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class DataStoreConfig @Inject()(configuration: Configuration) extends ConfigRead
6666
val objectKeyPrefix: String = get[String]("datastore.s3Upload.objectKeyPrefix")
6767
val credentialName: String = get[String]("datastore.s3Upload.credentialName")
6868
}
69-
val children = List(WebKnossos, WatchFileSystem, Cache, AdHocMesh, Redis, AgglomerateSkeleton)
69+
val children = List(WebKnossos, WatchFileSystem, Cache, AdHocMesh, Redis, AgglomerateSkeleton, S3Upload)
7070
}
7171

7272
object SlackNotifications {

webknossos-datastore/app/com/scalableminds/webknossos/datastore/controllers/DataSourceController.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import com.scalableminds.webknossos.datastore.services.mapping.AgglomerateServic
3636
import com.scalableminds.webknossos.datastore.slacknotification.DSSlackNotificationService
3737
import play.api.data.Form
3838
import play.api.data.Forms.{longNumber, nonEmptyText, number, tuple}
39+
import play.api.i18n.Messages
3940
import play.api.libs.Files
4041
import play.api.libs.json.{Json, OFormat}
4142
import play.api.mvc.{Action, AnyContent, MultipartFormData, PlayBodyParsers}
@@ -192,7 +193,8 @@ class DataSourceController @Inject()(
192193
.getDatasetIdByUploadId(request.body.uploadId) ?~> "dataset.upload.validation.failed"
193194
response <- accessTokenService.validateAccessFromTokenContext(UserAccessRequest.writeDataset(datasetId)) {
194195
for {
195-
datasetId <- uploadService.finishUpload(request.body) ?~> "dataset.upload.finishFailed"
196+
_ <- uploadService.finishUpload(request.body, datasetId) ?~> Messages("dataset.upload.finishFailed",
197+
datasetId)
196198
} yield Ok(Json.obj("newDatasetId" -> datasetId))
197199
}
198200
} yield response

webknossos-datastore/app/com/scalableminds/webknossos/datastore/services/uploading/UploadService.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,12 +349,11 @@ class UploadService @Inject()(dataSourceService: DataSourceService,
349349
}
350350
} yield ()
351351

352-
def finishUpload(uploadInformation: UploadInformation)(implicit tc: TokenContext): Fox[ObjectId] = {
352+
def finishUpload(uploadInformation: UploadInformation, datasetId: ObjectId)(implicit tc: TokenContext): Fox[Unit] = {
353353
val uploadId = uploadInformation.uploadId
354354

355355
for {
356356
dataSourceId <- getDataSourceIdByUploadId(uploadId)
357-
datasetId <- getDatasetIdByUploadId(uploadId)
358357
_ = logger.info(s"Finishing ${uploadFullName(uploadId, datasetId, dataSourceId)}...")
359358
linkedLayerIdentifiers <- getObjectFromRedis[LinkedLayerIdentifiers](redisKeyForLinkedLayerIdentifier(uploadId))
360359
needsConversion = uploadInformation.needsConversion.getOrElse(false)
@@ -389,7 +388,7 @@ class UploadService @Inject()(dataSourceService: DataSourceService,
389388
linkedLayerIdentifiers.layersToLink.getOrElse(List.empty)
390389
)
391390
) ?~> "reportUpload.failed"
392-
} yield datasetId
391+
} yield ()
393392
}
394393

395394
private def deleteFilesNotReferencedInDataSource(unpackedDir: Path, dataSource: UsableDataSource): Fox[Unit] =

webknossos-datastore/conf/standalone-datastore.conf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ datastore {
8989
# The credentials are selected by uri prefix, so different s3 uri styles may need duplicated credential entries.
9090
credentials = []
9191
}
92+
s3Upload {
93+
enabled = false
94+
# Use the name of a credential in the dataVaults section here to use it for uploads.
95+
credentialName = "s3://example/uri/prefix"
96+
objectKeyPrefix = "webknossos-uploads"
97+
}
9298
}
9399

94100
slackNotifications {

0 commit comments

Comments
 (0)