Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1101#discussion_r164614812 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/common/HashTableTemplate.java --- @@ -805,7 +803,12 @@ private IntVector allocMetadataVector(int size, int initialValue) { } @Override - public void setMaxVarcharSize(int size) { maxVarcharSize = size; } + public void setKeySizes(Map<String, Integer> keySizes) { + Preconditions.checkNotNull(keySizes); + + this.keySizes = CaseInsensitiveMap.newHashMap(); --- End diff -- It helps to avoid bugs. It is assumed that the keySizes map will never change once it is set, copying the map helps enforce that constraint. If we don't copy the map and a user calls this method and passes a keySizes map and then later updates the keySizes map or reuses it, errors would occur. Some languages like Scala have immutable flavors of data structures for this reason.
---