Skip to content

Commit dbdf3b1

Browse files
Issue 52824: Don't mutate domains from the cache (#6690)
1 parent c3243e4 commit dbdf3b1

100 files changed

Lines changed: 552 additions & 255 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

api/src/org/labkey/api/assay/AbstractAssayProvider.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -382,31 +382,37 @@ public static String getDomainURIForPrefixIfExists(ExpProtocol protocol, String
382382
return result;
383383
}
384384

385-
public static Domain getDomainByPrefix(ExpProtocol protocol, String domainPrefix)
385+
public static Domain getDomainByPrefix(ExpProtocol protocol, String domainPrefix, boolean forUpdate)
386386
{
387387
Container container = protocol.getContainer();
388-
return PropertyService.get().getDomain(container, getDomainURIForPrefix(protocol, domainPrefix));
388+
return PropertyService.get().getDomain(container, getDomainURIForPrefix(protocol, domainPrefix), forUpdate);
389389
}
390390

391391
@Nullable
392-
public static Domain getDomainByPrefixIfExists(ExpProtocol protocol, String domainPrefix)
392+
public static Domain getDomainByPrefixIfExists(ExpProtocol protocol, String domainPrefix, boolean forUpdate)
393393
{
394394
String domainURI = getDomainURIForPrefixIfExists(protocol, domainPrefix);
395395
if (null == domainURI)
396396
return null;
397397
Container container = protocol.getContainer();
398-
return PropertyService.get().getDomain(container, domainURI);
398+
return PropertyService.get().getDomain(container, domainURI, forUpdate);
399399
}
400400

401401
@Override
402402
public Domain getResultsDomain(ExpProtocol protocol)
403403
{
404-
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_DATA);
404+
return getResultsDomain(protocol, false);
405+
}
406+
407+
@Override
408+
public Domain getResultsDomain(ExpProtocol protocol, boolean forUpdate)
409+
{
410+
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_DATA, forUpdate);
405411
}
406412

407413
protected @Nullable Domain getResultsDomainIfExists(ExpProtocol protocol)
408414
{
409-
return getDomainByPrefixIfExists(protocol, ExpProtocol.ASSAY_DOMAIN_DATA);
415+
return getDomainByPrefixIfExists(protocol, ExpProtocol.ASSAY_DOMAIN_DATA, false);
410416
}
411417

412418
@Override
@@ -422,13 +428,25 @@ public void afterDomainChange(User user, ExpProtocol protocol, GWTDomain<GWTProp
422428
@Override
423429
public Domain getBatchDomain(ExpProtocol protocol)
424430
{
425-
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_BATCH);
431+
return getBatchDomain(protocol, false);
432+
}
433+
434+
@Override
435+
public Domain getBatchDomain(ExpProtocol protocol, boolean forUpdate)
436+
{
437+
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_BATCH, forUpdate);
426438
}
427439

428440
@Override
429441
public Domain getRunDomain(ExpProtocol protocol)
430442
{
431-
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_RUN);
443+
return getRunDomain(protocol,false);
444+
}
445+
446+
@Override
447+
public Domain getRunDomain(ExpProtocol protocol, boolean forUpdate)
448+
{
449+
return getDomainByPrefix(protocol, ExpProtocol.ASSAY_DOMAIN_RUN, forUpdate);
432450
}
433451

434452
protected PropertyDescriptor addProperty(Container sourceContainer, String name, Integer value, Map<String, Object> dataMap, Collection<PropertyDescriptor> types)

api/src/org/labkey/api/assay/AbstractAssayTsvDataHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ public void beforeDeleteData(List<ExpData> data, User user) throws ExperimentExc
395395
// results/data domain for TSV-style assays
396396
try
397397
{
398-
domain = AbstractAssayProvider.getDomainByPrefixIfExists(protocol, ExpProtocol.ASSAY_DOMAIN_DATA) ;
398+
domain = AbstractAssayProvider.getDomainByPrefixIfExists(protocol, ExpProtocol.ASSAY_DOMAIN_DATA, false) ;
399399
}
400400
catch (IllegalStateException ignored)
401401
{

api/src/org/labkey/api/assay/AssayProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,19 @@ enum ReRunSupport
9797
/** Get a schema that includes queries like Batch, Run, Results, and any additional tables. */
9898
AssayProtocolSchema createProtocolSchema(User user, Container container, @NotNull ExpProtocol protocol, @Nullable Container targetStudy);
9999

100+
/** Get a domain that is not intended to be mutated */
100101
Domain getBatchDomain(ExpProtocol protocol);
101102

103+
Domain getBatchDomain(ExpProtocol protocol, boolean forUpdate);
104+
102105
Domain getRunDomain(ExpProtocol protocol);
103106

107+
Domain getRunDomain(ExpProtocol protocol, boolean forUpdate);
108+
104109
Domain getResultsDomain(ExpProtocol protocol);
105110

111+
Domain getResultsDomain(ExpProtocol protocol, boolean forUpdate);
112+
106113
void beforeDomainChange(User user, ExpProtocol protocol, GWTDomain<GWTPropertyDescriptor> orig, GWTDomain<GWTPropertyDescriptor> update) throws ValidationException;
107114
void afterDomainChange(User user, ExpProtocol protocol, GWTDomain<GWTPropertyDescriptor> orig, GWTDomain<GWTPropertyDescriptor> update) throws ValidationException;
108115

api/src/org/labkey/api/audit/AbstractAuditTypeProvider.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ protected AbstractAuditDomainKind getDomainKind()
124124
public void initializeProvider(User user)
125125
{
126126
AbstractAuditDomainKind domainKind = getDomainKind();
127-
Domain domain = getDomain();
127+
Domain domain = getDomain(true);
128128

129129
// if the domain doesn't exist, create it
130130
if (domain == null)
@@ -138,7 +138,7 @@ public void initializeProvider(User user)
138138
domain.addPropertyOfPropertyDescriptor(pd);
139139
}
140140
domain.save(user);
141-
domain = getDomain();
141+
domain = getDomain(true);
142142
}
143143
catch (ChangePropertyDescriptorException e)
144144
{
@@ -299,12 +299,18 @@ private void copyTo(DomainProperty dp, PropertyDescriptor pd, Container c)
299299

300300
@Override
301301
public final Domain getDomain()
302+
{
303+
return getDomain(false);
304+
}
305+
306+
@Override
307+
public final Domain getDomain(boolean forUpdate)
302308
{
303309
DomainKind domainKind = getDomainKind();
304310

305311
String domainURI = domainKind.generateDomainURI(QUERY_SCHEMA_NAME, getEventName(), getDomainContainer(), null);
306312

307-
return PropertyService.get().getDomain(getDomainContainer(), domainURI);
313+
return PropertyService.get().getDomain(getDomainContainer(), domainURI, forUpdate);
308314
}
309315

310316

api/src/org/labkey/api/audit/AuditTypeProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public interface AuditTypeProvider
4444

4545
Domain getDomain();
4646

47+
Domain getDomain(boolean forUpdate);
48+
4749
TableInfo createTableInfo(UserSchema schema, ContainerFilter cf);
4850

4951
<K extends AuditTypeEvent> Class<K> getEventClass();

api/src/org/labkey/api/audit/query/AbstractAuditDomainKind.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public JSONObject getDomainKindProperties(GWTDomain domain, Container container,
241241
}
242242

243243
@Override
244-
public Domain createDomain(GWTDomain domain, JSONObject arguments, Container container, User user, @Nullable TemplateInfo templateInfo)
244+
public Domain createDomain(GWTDomain domain, JSONObject arguments, Container container, User user, @Nullable TemplateInfo templateInfo, boolean forUpdate)
245245
{
246246
throw new UnsupportedOperationException();
247247
}

api/src/org/labkey/api/audit/query/DefaultAuditTypeTable.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,14 @@ protected void initColumn(MutableColumnInfo col)
142142
@Override
143143
public Domain getDomain()
144144
{
145-
return _provider.getDomain();
145+
return getDomain(false);
146+
}
147+
148+
@Nullable
149+
@Override
150+
public Domain getDomain(boolean forUpdate)
151+
{
152+
return _provider.getDomain(forUpdate);
146153
}
147154

148155
@Nullable

api/src/org/labkey/api/data/AbstractTableInfo.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,13 @@ public Domain getDomain()
17691769
return null;
17701770
}
17711771

1772+
@Nullable
1773+
@Override
1774+
public Domain getDomain(boolean forUpdate)
1775+
{
1776+
return getDomain();
1777+
}
1778+
17721779
@Nullable
17731780
@Override
17741781
public DomainKind getDomainKind()

api/src/org/labkey/api/data/MutableColumnInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ default void setSortFieldKeysFromXml(String xml)
9797

9898
void setLocked(boolean b);
9999

100-
// return a ColumnInfo that does not suppport MutableColumnInfo or a MutableColumnInfo that is locked
100+
// return a ColumnInfo that does not support MutableColumnInfo or a MutableColumnInfo that is locked
101101
default ColumnInfo lock()
102102
{
103103
setLocked(true);

api/src/org/labkey/api/data/NameGenerator.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package org.labkey.api.data;
1717

18-
import org.apache.commons.beanutils.ConversionException;
19-
import org.apache.commons.beanutils.ConvertUtils;
2018
import org.apache.commons.lang3.StringUtils;
2119
import org.jetbrains.annotations.NotNull;
2220
import org.jetbrains.annotations.Nullable;
@@ -26,17 +24,12 @@
2624
import org.junit.Test;
2725
import org.labkey.api.collections.CaseInsensitiveHashMap;
2826
import org.labkey.api.collections.CaseInsensitiveHashSet;
29-
import org.labkey.api.exp.Identifiable;
30-
import org.labkey.api.exp.LsidManager;
3127
import org.labkey.api.exp.PropertyType;
3228
import org.labkey.api.exp.api.ExpData;
3329
import org.labkey.api.exp.api.ExpDataClass;
34-
import org.labkey.api.exp.api.ExpLineage;
3530
import org.labkey.api.exp.api.ExpLineageOptions;
36-
import org.labkey.api.exp.api.ExpLineageService;
3731
import org.labkey.api.exp.api.ExpMaterial;
3832
import org.labkey.api.exp.api.ExpObject;
39-
import org.labkey.api.exp.api.ExpRunItem;
4033
import org.labkey.api.exp.api.ExpSampleType;
4134
import org.labkey.api.exp.api.ExperimentService;
4235
import org.labkey.api.exp.api.SampleTypeService;
@@ -47,7 +40,6 @@
4740
import org.labkey.api.query.FieldKey;
4841
import org.labkey.api.query.QueryKey;
4942
import org.labkey.api.query.QueryService;
50-
import org.labkey.api.query.RuntimeValidationException;
5143
import org.labkey.api.query.UserSchema;
5244
import org.labkey.api.query.ValidationException;
5345
import org.labkey.api.reader.TabLoader;
@@ -59,12 +51,9 @@
5951
import org.labkey.api.util.StringExpressionFactory;
6052
import org.labkey.api.util.StringExpressionFactory.AbstractStringExpression.NullValueBehavior;
6153
import org.labkey.api.util.StringExpressionFactory.FieldKeyStringExpression;
62-
import org.labkey.api.util.StringUtilsLabKey;
6354
import org.labkey.api.util.SubstitutionFormat;
64-
import org.labkey.api.util.Tuple3;
6555

6656
import java.io.IOException;
67-
import java.sql.SQLException;
6857
import java.sql.Time;
6958
import java.text.ParseException;
7059
import java.text.SimpleDateFormat;
@@ -73,12 +62,10 @@
7362
import java.util.Calendar;
7463
import java.util.Collection;
7564
import java.util.Collections;
76-
import java.util.Comparator;
7765
import java.util.Date;
7866
import java.util.GregorianCalendar;
7967
import java.util.HashMap;
8068
import java.util.HashSet;
81-
import java.util.LinkedHashSet;
8269
import java.util.LinkedList;
8370
import java.util.List;
8471
import java.util.ListIterator;
@@ -88,7 +75,6 @@
8875
import java.util.function.Supplier;
8976
import java.util.regex.Matcher;
9077
import java.util.regex.Pattern;
91-
import java.util.stream.Collectors;
9278
import java.util.stream.Stream;
9379

9480
import static org.labkey.api.data.NameGenerator.NameGenerationExpression.findFirstOpenOrCloseTag;

0 commit comments

Comments
 (0)