From 11bb415e04b4efc54a2bfc3a6ab484618a3b2d63 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Thu, 8 May 2025 15:56:52 -0700 Subject: [PATCH 1/3] Add EHRComplianceDBTemplateType (#6644) --- api/schemas/domainTemplate.xsd | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api/schemas/domainTemplate.xsd b/api/schemas/domainTemplate.xsd index 39faa67f455..12614675f79 100644 --- a/api/schemas/domainTemplate.xsd +++ b/api/schemas/domainTemplate.xsd @@ -192,4 +192,11 @@ + + + + + + + From 4e9a63296187a28b9c93e8225dbb8372813a671f Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Mon, 25 Aug 2025 14:36:23 -0700 Subject: [PATCH 2/3] Add trace logging to client abort exception (#6958) - Add trace logging if client abort exception --- api/src/org/labkey/api/util/ExceptionUtil.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/util/ExceptionUtil.java b/api/src/org/labkey/api/util/ExceptionUtil.java index 281727fdefd..dd22243ba3b 100644 --- a/api/src/org/labkey/api/util/ExceptionUtil.java +++ b/api/src/org/labkey/api/util/ExceptionUtil.java @@ -632,7 +632,6 @@ protected void renderView(Object model, HttpServletRequest request, HttpServletR } } - public static boolean isClientAbortException(Throwable ex) { if (ex != null) @@ -643,6 +642,7 @@ public static boolean isClientAbortException(Throwable ex) className.endsWith("ClientAbortException") || className.endsWith("FileUploadException")) { + LOG.trace("Client abort exception", ex); return true; } if (ex.getClass().equals(IllegalStateException.class) && ex.getMessage() != null && @@ -651,20 +651,24 @@ public static boolean isClientAbortException(Throwable ex) ex.getMessage().contains("Session already invalidated"))) { + LOG.trace("Client abort exception", ex); return true; } if (ex.getClass().equals(SocketException.class) && "Connection reset".equalsIgnoreCase(ex.getMessage())) { + LOG.trace("Client abort exception", ex); return true; } // Bug 15371 and 34605 if (ex.getClass().equals(IOException.class) && ex.getMessage() != null && (ex.getMessage().contains("disconnected client") || ex.getMessage().contains("Socket read failed"))) { + LOG.trace("Client abort exception", ex); return true; } // Bug 32056 if (ex.getClass().equals(EOFException.class)) { + LOG.trace("Client abort exception", ex); return true; } From 764819f04c0c30a884257ba4c1625db9ec898900 Mon Sep 17 00:00:00 2001 From: Nick Kerr Date: Thu, 15 Jan 2026 15:29:57 -0800 Subject: [PATCH 3/3] Fix filter for data/material input (#7322) --- .../org/labkey/experiment/api/ExpProtocolApplicationImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiment/src/org/labkey/experiment/api/ExpProtocolApplicationImpl.java b/experiment/src/org/labkey/experiment/api/ExpProtocolApplicationImpl.java index 56c1203b45f..9b2a3693d88 100644 --- a/experiment/src/org/labkey/experiment/api/ExpProtocolApplicationImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExpProtocolApplicationImpl.java @@ -397,7 +397,7 @@ private long deleteDataInputs() OntologyManager.deleteOntologyObjects(svc.getSchema(), new SQLFragment("SELECT " + dialect.concatenate("'" + DataInput.lsidPrefix() + "'", "CAST(dataId AS VARCHAR)", "'.'", "CAST(targetApplicationId AS VARCHAR)") + - " FROM " + svc.getTinfoDataInput() + " WHERE TargetApplicationId IN (SELECT RowId FROM exp.ProtocolApplication WHERE RunId = " + getRowId() + ")"), getContainer()); + " FROM " + svc.getTinfoDataInput() + " WHERE TargetApplicationId = ?", getRowId()), getContainer()); return Table.delete(ExperimentServiceImpl.get().getTinfoDataInput(), new SimpleFilter(FieldKey.fromParts("TargetApplicationId"), getRowId())); } @@ -413,7 +413,7 @@ private long deleteMaterialInputs() OntologyManager.deleteOntologyObjects(svc.getSchema(), new SQLFragment("SELECT " + dialect.concatenate("'" + MaterialInput.lsidPrefix() + "'", "CAST(materialId AS VARCHAR)", "'.'", "CAST(targetApplicationId AS VARCHAR)") + - " FROM " + svc.getTinfoMaterialInput() + " WHERE TargetApplicationId IN (SELECT RowId FROM exp.ProtocolApplication WHERE RunId = " + getRowId() + ")"), getContainer()); + " FROM " + svc.getTinfoMaterialInput() + " WHERE TargetApplicationId = ?", getRowId()), getContainer()); return Table.delete(ExperimentServiceImpl.get().getTinfoMaterialInput(), new SimpleFilter(FieldKey.fromParts("TargetApplicationId"), getRowId())); }