From df046a54353df095171dd7522b8600cd1ed41c62 Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Wed, 4 Jun 2025 13:58:42 -0400 Subject: [PATCH 1/3] Took the findDeep() calls out. (may have messed up the dataset lookup api) edit: had to resolve a merge conflict when cherry-picking for the 6.7 patch, which was caused by the fact that Jim had already taken findDeep() out of indexDatasetInNewTransaction(). --- src/main/java/edu/harvard/iq/dataverse/DatasetPage.java | 6 ++++-- src/main/java/edu/harvard/iq/dataverse/api/Datasets.java | 5 +++-- .../edu/harvard/iq/dataverse/search/IndexServiceBean.java | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index d0c1eb239f6..fa511051be5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2077,7 +2077,8 @@ private String init(boolean initFull) { // ... And now the "real" working version lookup: if (versionId != null) { - this.workingVersion = datasetVersionService.findDeep(versionId); + //6.6patch this.workingVersion = datasetVersionService.findDeep(versionId); + this.workingVersion = datasetVersionService.find(versionId); dataset = workingVersion.getDataset(); } @@ -3069,7 +3070,8 @@ public String refresh() { // versionId must have been set by now (see null check above), in the init() // method, regardless of how the page was originally called - by the dataset // database id, by the persistent identifier, or by the db id of the version. - this.workingVersion = datasetVersionService.findDeep(versionId); + //6.6patch this.workingVersion = datasetVersionService.findDeep(versionId); + this.workingVersion = datasetVersionService.find(versionId); dataset = workingVersion.getDataset(); } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 1b3016ec2f4..4870863c03f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -213,7 +213,7 @@ public interface DsVersionHandler { @Path("{id}") public Response getDataset(@Context ContainerRequestContext crc, @PathParam("id") String id, @Context UriInfo uriInfo, @Context HttpHeaders headers, @Context HttpServletResponse response, @QueryParam("returnOwners") boolean returnOwners) { return response( req -> { - final Dataset retrieved = execCommand(new GetDatasetCommand(req, findDatasetOrDie(id, true))); + final Dataset retrieved = execCommand(new GetDatasetCommand(req, findDatasetOrDie(id, false))); final DatasetVersion latest = execCommand(new GetLatestAccessibleDatasetVersionCommand(req, retrieved)); final JsonObjectBuilder jsonbuilder = json(retrieved, returnOwners); //Report MDC if this is a released version (could be draft if user has access, or user may not have access at all and is not getting metadata beyond the minimum) @@ -455,7 +455,8 @@ public Response listVersions(@Context ContainerRequestContext crc, @PathParam("i return response( req -> { Dataset dataset = findDatasetOrDie(id); - Boolean deepLookup = excludeFiles == null ? true : !excludeFiles; + //6.6patchBoolean deepLookup = excludeFiles == null ? true : !excludeFiles; + Boolean deepLookup = false; Boolean includeMetadataBlocks = excludeMetadataBlocks == null ? true : !excludeMetadataBlocks; return ok( execCommand( new ListVersionsCommand(req, dataset, offset, limit, deepLookup) ) diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index 63ae3625a96..bfb19a4c169 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -2117,7 +2117,8 @@ private void updatePathForExistingSolrDocs(DvObject object) throws SolrServerExc Dataset dataset = null; if (object.isInstanceofDataset()) { - dataset = datasetService.findDeep(object.getId()); + //6.6patch dataset = datasetService.findDeep(object.getId()); + dataset = (Dataset)object; } List paths = object.isInstanceofDataset() ? retrieveDVOPaths(dataset) : retrieveDVOPaths(dataverseService.find(object.getId())); From f5cba60f9e4faf7a2cfdb4afe2c3a1fd78a9f2b3 Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Thu, 24 Jul 2025 15:18:32 -0400 Subject: [PATCH 2/3] Fixed the "no files in /versions" bug introduced in the 6.6 patch. --- .../harvard/iq/dataverse/api/Datasets.java | 10 +++++----- .../command/impl/ListVersionsCommand.java | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 4870863c03f..699775d0015 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -451,17 +451,17 @@ public Response useDefaultCitationDate(@Context ContainerRequestContext crc, @Pa @GET @AuthRequired @Path("{id}/versions") - public Response listVersions(@Context ContainerRequestContext crc, @PathParam("id") String id, @QueryParam("excludeFiles") Boolean excludeFiles,@QueryParam("excludeMetadataBlocks") Boolean excludeMetadataBlocks, @QueryParam("limit") Integer limit, @QueryParam("offset") Integer offset) { + public Response listVersions(@Context ContainerRequestContext crc, @PathParam("id") String id, @QueryParam("excludeFiles") Boolean excludeFiles, @QueryParam("excludeMetadataBlocks") Boolean excludeMetadataBlocks, @QueryParam("limit") Integer limit, @QueryParam("offset") Integer offset) { return response( req -> { Dataset dataset = findDatasetOrDie(id); //6.6patchBoolean deepLookup = excludeFiles == null ? true : !excludeFiles; - Boolean deepLookup = false; + Boolean includeFiles = excludeFiles == null ? true : !excludeFiles; Boolean includeMetadataBlocks = excludeMetadataBlocks == null ? true : !excludeMetadataBlocks; - - return ok( execCommand( new ListVersionsCommand(req, dataset, offset, limit, deepLookup) ) + + return ok( execCommand( new ListVersionsCommand(req, dataset, offset, limit, false) ) .stream() - .map( d -> json(d, deepLookup, includeMetadataBlocks) ) + .map( d -> json(d, includeFiles, includeMetadataBlocks) ) .collect(toJsonArray())); }, getRequestUser(crc)); } diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ListVersionsCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ListVersionsCommand.java index b93833ffdf9..04a303bf3cc 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ListVersionsCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ListVersionsCommand.java @@ -52,9 +52,18 @@ public List execute(CommandContext ctxt) throws CommandException boolean includeUnpublished = ctxt.permissions().request(getRequest()).on(ds).has(Permission.EditDataset); - if (offset == null && limit == null) { + Integer requestedOffset = offset; + Integer requestedLimit = limit; + + if (offset == null && limit == null) { + // I don't want to allow some rando to run this on a dataset w/ 1,000 + // versions without a range limit. -- 6.7patch + requestedOffset = 0; + requestedLimit = 10; + } + - List outputList = new LinkedList<>(); + /* patch6.7 List outputList = new LinkedList<>(); for (DatasetVersion dsv : ds.getVersions()) { if (dsv.isReleased() || includeUnpublished) { if (deepLookup) { @@ -72,9 +81,9 @@ public List execute(CommandContext ctxt) throws CommandException } } return outputList; - } else { + } else { */ // Only a partial list (one "page"-worth) of versions is being requested - return ctxt.datasetVersion().findVersions(ds.getId(), offset, limit, includeUnpublished); - } + return ctxt.datasetVersion().findVersions(ds.getId(), requestedOffset, requestedLimit, includeUnpublished); + /*}*/ } } From 4e29b2b1ba5dd60df5ba6b5024299af72e21c24d Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Tue, 29 Jul 2025 14:44:26 -0400 Subject: [PATCH 3/3] Disabled the findDeep() use in the /api/datasets/ as well. Resolved merge conflicts in src/main/java/edu/harvard/iq/dataverse/api/Datasets.java --- src/main/java/edu/harvard/iq/dataverse/api/Datasets.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 699775d0015..20e11c5a451 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -499,9 +499,12 @@ public Response getVersion(@Context ContainerRequestContext crc, if (requestedDatasetVersion == null || requestedDatasetVersion.getId() == null) { return notFound("Dataset version not found"); } - if (includeFiles) { + + /* patch6.7 if (excludeFiles == null ? true : !excludeFiles) { requestedDatasetVersion = datasetversionService.findDeep(requestedDatasetVersion.getId()); - } + }*/ + + Boolean includeMetadataBlocks = excludeMetadataBlocks == null ? true : !excludeMetadataBlocks; // Check to see if the caller wants to ignore the ExcludeEmailFromExport setting in the metadata block and that they have permission to do so // Let the JsonPrinter know to ignore the ExcludeEmailFromExport setting so the emails will show for this API call by permitted user