diff --git a/doc/release-notes/11776- index fix.md b/doc/release-notes/11776- index fix.md new file mode 100644 index 00000000000..959b1ca3e95 --- /dev/null +++ b/doc/release-notes/11776- index fix.md @@ -0,0 +1 @@ +A bug, introduced in v6.7, that caused files in draft versions that were added after the initial dataset version was published, has been fixed. \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java index ca3e2d67263..932bbd60be6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java +++ b/src/main/java/edu/harvard/iq/dataverse/FileMetadata.java @@ -94,9 +94,10 @@ " )", resultSetMapping = "IdToLongMapping" ) +/* When this mapping was to Long.class, Postgres was still returning an Integer, causing indexing failures - see #11776 */ @SqlResultSetMapping( name = "IdToLongMapping", - columns = @ColumnResult(name = "id", type = Long.class) + columns = @ColumnResult(name = "id", type = Integer.class) ) @Entity public class FileMetadata implements Serializable { 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 4aa1b5abb20..1f7f869a35f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -69,6 +69,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Future; @@ -1428,7 +1429,31 @@ public SolrInputDocuments toSolrDocs(IndexableDataset indexableDataset, Set queryResults = query.getResultList(); + for (Object result : queryResults) { + if (result != null) { + // Ensure we're adding Long objects to the list + if (result instanceof Integer intResult) { + logger.finest("Converted Integer result to Long: " + result); + changedFileMetadataIds.add(Long.valueOf(intResult)); + } else if (result instanceof Long longResult) { + // Already a Long, add directly + logger.finest("Added existing Long to list: " + result); + changedFileMetadataIds.add(longResult); + } else { + // If it's not a Long, convert it to one via String + try { + changedFileMetadataIds.add(Long.valueOf(result.toString())); + logger.finest("Converted non-Long result to Long: " + result + " of type " + result.getClass().getName()); + } catch (NumberFormatException e) { + logger.warning("Could not convert query result to Long: " + result); + } + } + } + } logger.fine( "We are indexing a draft version of a dataset that has a released version. We'll be checking file metadatas if they are exact clones of the released versions."); } else if (datasetVersion.isDraft()) { @@ -1502,6 +1527,8 @@ public SolrInputDocuments toSolrDocs(IndexableDataset indexableDataset, Set