LENS-522 : Fix ConcurrentModificationException in FieldValidator (amareshwari)
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/81302fad Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/81302fad Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/81302fad Branch: refs/heads/master Commit: 81302fad5cc904a747214a4ccb6addeb930f7897 Parents: 52d6df6 Author: Amareshwari Sriramadasu <[email protected]> Authored: Thu Apr 23 15:39:00 2015 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Thu Apr 23 15:39:29 2015 +0530 ---------------------------------------------------------------------- .../apache/lens/cube/metadata/DerivedCube.java | 22 +++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/81302fad/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java index ab5dbec..e7012f7 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java @@ -62,24 +62,26 @@ public class DerivedCube extends AbstractCubeTable implements CubeInterface { this.parent = parent; } - private Set<CubeMeasure> cachedMeasures; - private Set<CubeDimAttribute> cachedDims; + private Set<CubeMeasure> cachedMeasures = new HashSet<CubeMeasure>(); + private Set<CubeDimAttribute> cachedDims = new HashSet<CubeDimAttribute>(); public Set<CubeMeasure> getMeasures() { - if (cachedMeasures == null) { - cachedMeasures = new HashSet<CubeMeasure>(); - for (String msr : measures) { - cachedMeasures.add(parent.getMeasureByName(msr)); + synchronized (measures) { + if (cachedMeasures.isEmpty()) { + for (String msr : measures) { + cachedMeasures.add(parent.getMeasureByName(msr)); + } } } return cachedMeasures; } public Set<CubeDimAttribute> getDimAttributes() { - if (cachedDims == null) { - cachedDims = new HashSet<CubeDimAttribute>(); - for (String dim : dimensions) { - cachedDims.add(parent.getDimAttributeByName(dim)); + synchronized (dimensions) { + if (cachedDims.isEmpty()) { + for (String dim : dimensions) { + cachedDims.add(parent.getDimAttributeByName(dim)); + } } } return cachedDims;
