From 0a765383502cfbf1fc84133083b5644051cbbcbb Mon Sep 17 00:00:00 2001 From: XingY Date: Fri, 15 May 2026 16:36:48 -0700 Subject: [PATCH 1/2] Only log aliquot data warning once per transaction --- .../api/dataiterator/AbstractDataIterator.java | 10 ++++++++++ .../api/dataiterator/DataIteratorContext.java | 12 ++++++++++++ .../api/dataiterator/SimpleTranslator.java | 16 ++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java index c3995b9e220..e32ddc40a2b 100644 --- a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java +++ b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java @@ -16,6 +16,7 @@ package org.labkey.api.dataiterator; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.labkey.api.query.BatchValidationException; import org.labkey.api.query.QueryUpdateService; @@ -143,6 +144,15 @@ protected String getDataSource() return _context.getDataSource(); } + protected boolean hasLoggedWarning(@NotNull String warning) + { + return _context.hasLoggedWarning(warning); + } + + protected void addLoggedWarning(@NotNull String warning) + { + _context.addLoggedWarning(warning); + } protected Integer indexOfExistingRecord; diff --git a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java index 12713d9605b..231e6b91206 100644 --- a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java +++ b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -60,6 +61,7 @@ public class DataIteratorContext private final Set _passThroughBuiltInColumnNames = new CaseInsensitiveHashSet(); private final Set _dontUpdateColumnNames = new CaseInsensitiveHashSet(); private final Set _alternateKeys = new CaseInsensitiveHashSet(); + private final Set _loggedWarnings = new HashSet<>(); private String _dataSource; private boolean _withLookupRemapping = true; @@ -337,4 +339,14 @@ public QueryImportPipelineJob getBackgroundJob() return _backgroundJob; } + public boolean hasLoggedWarning(@NotNull String warning) + { + return _loggedWarnings.contains(warning); + } + + public void addLoggedWarning(@NotNull String warning) + { + _loggedWarnings.add(warning); + } + } diff --git a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java index 8480f6f93bd..3777a92fb50 100644 --- a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java +++ b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java @@ -557,9 +557,21 @@ private Object getDerivationData(Object thisValue, int derivationDataColInd, boo if (thisValue != null) { if (isDerivationField && presentDerivationWarning != null) - LOG.warn(presentDerivationWarning); + { + if (!hasLoggedWarning(presentDerivationWarning)) + { + LOG.warn(presentDerivationWarning); + addLoggedWarning(presentDerivationWarning); + } + } else if (!isDerivationField && presentNonDerivationWarning != null) - LOG.warn(presentNonDerivationWarning); + { + if (!hasLoggedWarning(presentNonDerivationWarning)) + { + LOG.warn(presentNonDerivationWarning); + addLoggedWarning(presentNonDerivationWarning); + } + } } return null; From 0e7071e7f6a61ecbe70aa7ec1d5a7a93a98b9861 Mon Sep 17 00:00:00 2001 From: XingY Date: Mon, 18 May 2026 13:09:20 -0700 Subject: [PATCH 2/2] Drop aliquot field warning logging --- .../dataiterator/AbstractDataIterator.java | 10 ----- .../api/dataiterator/DataIteratorContext.java | 12 ------ .../api/dataiterator/SimpleTranslator.java | 42 +++---------------- .../api/SampleTypeUpdateServiceDI.java | 11 ++--- 4 files changed, 8 insertions(+), 67 deletions(-) diff --git a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java index e32ddc40a2b..c3995b9e220 100644 --- a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java +++ b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java @@ -16,7 +16,6 @@ package org.labkey.api.dataiterator; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.labkey.api.query.BatchValidationException; import org.labkey.api.query.QueryUpdateService; @@ -144,15 +143,6 @@ protected String getDataSource() return _context.getDataSource(); } - protected boolean hasLoggedWarning(@NotNull String warning) - { - return _context.hasLoggedWarning(warning); - } - - protected void addLoggedWarning(@NotNull String warning) - { - _context.addLoggedWarning(warning); - } protected Integer indexOfExistingRecord; diff --git a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java index 231e6b91206..12713d9605b 100644 --- a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java +++ b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java @@ -26,7 +26,6 @@ import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -61,7 +60,6 @@ public class DataIteratorContext private final Set _passThroughBuiltInColumnNames = new CaseInsensitiveHashSet(); private final Set _dontUpdateColumnNames = new CaseInsensitiveHashSet(); private final Set _alternateKeys = new CaseInsensitiveHashSet(); - private final Set _loggedWarnings = new HashSet<>(); private String _dataSource; private boolean _withLookupRemapping = true; @@ -339,14 +337,4 @@ public QueryImportPipelineJob getBackgroundJob() return _backgroundJob; } - public boolean hasLoggedWarning(@NotNull String warning) - { - return _loggedWarnings.contains(warning); - } - - public void addLoggedWarning(@NotNull String warning) - { - _loggedWarnings.add(warning); - } - } diff --git a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java index 3777a92fb50..3016883bdb1 100644 --- a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java +++ b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java @@ -57,7 +57,6 @@ import org.labkey.api.data.TableSelector; import org.labkey.api.data.TestSchema; import org.labkey.api.exp.MvFieldWrapper; -import org.labkey.api.exp.PropertyDescriptor; import org.labkey.api.exp.PropertyType; import org.labkey.api.files.FileContentService; import org.labkey.api.ontology.Unit; @@ -486,20 +485,16 @@ protected class DerivationScopedConvertColumn extends SimpleConvertColumn final int derivationDataColInd; final int index; final boolean isDerivation; - final String presentDerivationWarning; - final String presentNonDerivationWarning; final SimpleConvertColumn _convertCol; - public DerivationScopedConvertColumn(int index, SimpleConvertColumn convertCol, int derivationDataColInd, boolean isDerivation, @Nullable String presentDerivationWarning, @Nullable String presentNonDerivationWarning) + public DerivationScopedConvertColumn(int index, SimpleConvertColumn convertCol, int derivationDataColInd, boolean isDerivation) { super(convertCol.fieldName, convertCol.index, convertCol.type, convertCol.defaultUnit); _convertCol = convertCol; this.index = index; this.derivationDataColInd = derivationDataColInd; this.isDerivation = isDerivation; - this.presentDerivationWarning = presentDerivationWarning; - this.presentNonDerivationWarning = presentNonDerivationWarning; } @Override @@ -507,7 +502,7 @@ protected Object convert(Object o) { Object thisValue = _convertCol.convert(o); - return getDerivationData(thisValue, derivationDataColInd, isDerivation, presentDerivationWarning, presentNonDerivationWarning); + return getDerivationData(thisValue, derivationDataColInd, isDerivation); } } @@ -520,23 +515,18 @@ protected class DerivationScopedColumn implements Supplier final int index; final boolean isDerivation; - final String presentDerivationWarning; - final String presentNonDerivationWarning; - - public DerivationScopedColumn(int index, int derivationDataColInd, boolean isDerivation, @Nullable String presentDerivationWarning, @Nullable String presentNonDerivationWarning) + public DerivationScopedColumn(int index, int derivationDataColInd, boolean isDerivation) { this.index = index; this.derivationDataColInd = derivationDataColInd; this.isDerivation = isDerivation; - this.presentDerivationWarning = presentDerivationWarning; - this.presentNonDerivationWarning = presentNonDerivationWarning; } @Override public Object get() { Object thisValue = _data.get(index); - return getDerivationData(thisValue, derivationDataColInd, isDerivation, presentDerivationWarning, presentNonDerivationWarning); + return getDerivationData(thisValue, derivationDataColInd, isDerivation); } } @@ -544,36 +534,14 @@ public Object get() * @param thisValue the original field value * @param derivationDataColInd the col index for the field used to determine if a record is child or parent * @param isDerivationField if this field is a child only field - * @param presentDerivationWarning the warning msg to log if a child field is present for a parent record - * @param presentNonDerivationWarning the warning msg to log if a parent field is present for a child record */ - private Object getDerivationData(Object thisValue, int derivationDataColInd, boolean isDerivationField, @Nullable String presentDerivationWarning, @Nullable String presentNonDerivationWarning) + private Object getDerivationData(Object thisValue, int derivationDataColInd, boolean isDerivationField) { Object derivationData = derivationDataColInd < 0 ? null : _data.get(derivationDataColInd); if ((isDerivationField && derivationData != null) || (!isDerivationField && derivationData == null)) return thisValue; - if (thisValue != null) - { - if (isDerivationField && presentDerivationWarning != null) - { - if (!hasLoggedWarning(presentDerivationWarning)) - { - LOG.warn(presentDerivationWarning); - addLoggedWarning(presentDerivationWarning); - } - } - else if (!isDerivationField && presentNonDerivationWarning != null) - { - if (!hasLoggedWarning(presentNonDerivationWarning)) - { - LOG.warn(presentNonDerivationWarning); - addLoggedWarning(presentNonDerivationWarning); - } - } - } - return null; } diff --git a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java index bd8273f8d99..571c47a609a 100644 --- a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java +++ b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java @@ -1753,9 +1753,6 @@ private boolean rowExists(String name) static class _SamplesCoerceDataIterator extends SimpleTranslator { - private static final String INVALID_ALIQUOT_PROPERTY = "An aliquot-specific property [%1$s] value has been ignored for a non-aliquot sample."; - private static final String INVALID_NON_ALIQUOT_PROPERTY = "A sample property [%1$s] value has been ignored for an aliquot."; - private final ExpSampleTypeImpl _sampleType; private final Unit _sampleTypeBaseUnit; @@ -1810,14 +1807,12 @@ else if (amountImportAliasSet.contains(from.getName())) String name = to.getName(); boolean isScopedField = scopedFields.containsKey(name); - String ignoredAliquotPropValue = String.format(INVALID_ALIQUOT_PROPERTY, name); - String ignoredMetaPropValue = String.format(INVALID_NON_ALIQUOT_PROPERTY, name); if (to.getPropertyType() == PropertyType.ATTACHMENT || to.getPropertyType() == PropertyType.FILE_LINK) { if (isScopedField) { ColumnInfo clone = new BaseColumnInfo(to); - addColumn(clone, new DerivationScopedColumn(i, aliquotedFromDataColInd, scopedFields.get(name), ignoredAliquotPropValue, ignoredMetaPropValue)); + addColumn(clone, new DerivationScopedColumn(i, aliquotedFromDataColInd, scopedFields.get(name))); } else addColumn(to, i); @@ -1829,7 +1824,7 @@ else if (to.isMultiValued() || to.getFk() instanceof MultiValuedForeignKey) { var col = new BaseColumnInfo(getInput().getColumnInfo(i)); col.setName(name); - addColumn(col, new DerivationScopedColumn(i, aliquotedFromDataColInd, scopedFields.get(name), ignoredAliquotPropValue, ignoredMetaPropValue)); + addColumn(col, new DerivationScopedColumn(i, aliquotedFromDataColInd, scopedFields.get(name))); } else addColumn(to.getName(), i); @@ -1900,7 +1895,7 @@ private void _addConvertColumn(String name, int fromIndex, JdbcType toType, @Nul private void _addConvertColumn(ColumnInfo col, int fromIndex, int derivationDataColInd, boolean isAliquotField) { SimpleConvertColumn c = createConvertColumn(col, fromIndex, RemapMissingBehavior.Error); - c = new DerivationScopedConvertColumn(fromIndex, c, derivationDataColInd, isAliquotField, String.format(INVALID_ALIQUOT_PROPERTY, col.getName()), String.format(INVALID_NON_ALIQUOT_PROPERTY, col.getName())); + c = new DerivationScopedConvertColumn(fromIndex, c, derivationDataColInd, isAliquotField); addColumn(col, c); }