diff --git a/experiment/resources/schemas/dbscripts/postgresql/exp-26.001-26.002.sql b/experiment/resources/schemas/dbscripts/postgresql/exp-26.001-26.002.sql new file mode 100644 index 00000000000..5a237777c00 --- /dev/null +++ b/experiment/resources/schemas/dbscripts/postgresql/exp-26.001-26.002.sql @@ -0,0 +1 @@ +SELECT core.executeJavaUpgradeCode('fixContainerForMovedSampleFiles'); diff --git a/experiment/resources/schemas/dbscripts/sqlserver/exp-26.001-26.002.sql b/experiment/resources/schemas/dbscripts/sqlserver/exp-26.001-26.002.sql new file mode 100644 index 00000000000..2ab498f0052 --- /dev/null +++ b/experiment/resources/schemas/dbscripts/sqlserver/exp-26.001-26.002.sql @@ -0,0 +1 @@ +EXEC core.executeJavaUpgradeCode 'fixContainerForMovedSampleFiles'; diff --git a/experiment/src/org/labkey/experiment/ExperimentModule.java b/experiment/src/org/labkey/experiment/ExperimentModule.java index 700defd9ba4..4b588980747 100644 --- a/experiment/src/org/labkey/experiment/ExperimentModule.java +++ b/experiment/src/org/labkey/experiment/ExperimentModule.java @@ -205,7 +205,7 @@ public String getName() @Override public Double getSchemaVersion() { - return 26.001; + return 26.002; } @Nullable diff --git a/experiment/src/org/labkey/experiment/ExperimentUpgradeCode.java b/experiment/src/org/labkey/experiment/ExperimentUpgradeCode.java index d67dc76503c..28756ed29e8 100644 --- a/experiment/src/org/labkey/experiment/ExperimentUpgradeCode.java +++ b/experiment/src/org/labkey/experiment/ExperimentUpgradeCode.java @@ -52,6 +52,7 @@ import org.labkey.api.exp.property.Domain; import org.labkey.api.exp.property.DomainUtil; import org.labkey.api.exp.property.PropertyService; +import org.labkey.api.files.FileContentService; import org.labkey.api.module.ModuleContext; import org.labkey.api.module.ModuleLoader; import org.labkey.api.ontology.Unit; @@ -484,4 +485,28 @@ else if (kind.getStorageSchemaName() == null) return new ProvisionedSampleTypeContext(domain, provisionedTable); } + + /** + * Called from exp-26.001-26.002.sql + */ + @SuppressWarnings("unused") + public static void fixContainerForMovedSampleFiles(ModuleContext context) + { + if (context.isNewInstall()) + return; + + try (DbScope.Transaction tx = ExperimentService.get().ensureTransaction()) + { + FileContentService service = FileContentService.get(); + if (service == null) + { + LOG.error("No FileContentService found. Aborting."); + return; + } + LimitedUser admin = new LimitedUser(context.getUpgradeUser(), SiteAdminRole.class); + int numDuplicates = service.fixContainerForExpDataFiles(admin); + LOG.info("Fixed {} duplicate data files.", numDuplicates); + } + } + } diff --git a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java index abe172b1b42..47e9a3a844f 100644 --- a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java +++ b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java @@ -7460,25 +7460,6 @@ public Object execute(Object o, BindException errors) throws Exception } } - @Marshal(Marshaller.Jackson) - @RequiresPermission(AdminPermission.class) - public static class RepairExpDataFilesAction extends MutatingApiAction - { - @Override - public Object execute(Object form, BindException errors) - { - FileContentService service = FileContentService.get(); - if (service == null) - { - errors.reject(ERROR_GENERIC, "No FileContentService found"); - return new SimpleResponse<>(false, "No FileContentService found"); - } - - int numDuplicates = service.fixContainerForExpDataFiles(getUser()); - return success(Map.of("hadRepairs", numDuplicates > 0)); - } - } - @RequiresPermission(UpdatePermission.class) public static class UpdateMaterialQueryRowAction extends UserSchemaAction { diff --git a/filecontent/src/org/labkey/filecontent/FileContentServiceImpl.java b/filecontent/src/org/labkey/filecontent/FileContentServiceImpl.java index 53dbeac8d99..fc286a966e2 100644 --- a/filecontent/src/org/labkey/filecontent/FileContentServiceImpl.java +++ b/filecontent/src/org/labkey/filecontent/FileContentServiceImpl.java @@ -154,7 +154,8 @@ WHERE datafileurl IN (SELECT DataFileURL FROM exp.data WHERE DataFileURL IS NOT NULL GROUP BY DataFileUrl) c - WHERE c.count > 1))"""); + WHERE c.count > 1)) + AND datafileurl LIKE '%/sampletype/%'"""); int count = new SqlExecutor(ExperimentService.get().getSchema().getScope()).execute(sql); _log.info("Deleted {} duplicate entries from exp.data", count); _log.info("Repopulating file data in exp.data."); @@ -169,10 +170,7 @@ private void ensureFileDataInAllContainers(User user) ExpDataTable expDataTable = ExperimentService.get().createDataTable("data", new ExpSchema(user, c), null); if (expDataTable != null) - { - _log.info("Ensuring file data in container {}", c.getPath()); ensureFileDataUnsynchronized(expDataTable); - } } ); }