This is an automated email from the ASF dual-hosted git repository. jmark99 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/master by this push: new 9d77257 Use single map method where possible. (#1564) 9d77257 is described below commit 9d772570ca1985076a420c71ea27f3bd2b351eb7 Author: Mark Owens <jmar...@apache.org> AuthorDate: Tue Mar 17 17:50:57 2020 -0400 Use single map method where possible. (#1564) * Use single map method where possible. Replace common usage patterns of java.util.Map with Java 8 methods such as computeIfAbsent(), putIfAbsent(), etc. Added additional refactoring to the various Map methods as well. Namely chaining commands where appropriate. --- .../core/client/mapred/AccumuloOutputFormat.java | 18 +++----- .../client/mapreduce/AccumuloOutputFormat.java | 18 +++----- .../accumulo/core/clientImpl/ScannerOptions.java | 19 ++------ .../core/clientImpl/TableOperationsImpl.java | 14 ++---- .../core/clientImpl/TabletLocatorImpl.java | 15 +------ .../core/clientImpl/TabletServerBatchWriter.java | 20 ++------- .../mapreduce/lib/InputConfigurator.java | 15 +------ .../apache/accumulo/core/conf/IterConfigUtil.java | 8 +--- .../core/iterators/user/ColumnSliceFilter.java | 26 +++-------- .../system/ColumnQualifierFilter.java | 15 +++---- .../format/ShardedTableDistributionFormatter.java | 3 +- .../java/org/apache/accumulo/fate/AdminUtil.java | 9 +--- .../core/clientImpl/TabletLocatorImplTest.java | 35 +++------------ .../hadoopImpl/mapred/AccumuloRecordWriter.java | 17 +++---- .../hadoopImpl/mapreduce/AccumuloRecordWriter.java | 11 +---- .../mapreduce/lib/InputConfigurator.java | 15 +------ .../accumulo/server/client/BulkImporter.java | 52 ++++++---------------- .../accumulo/server/log/WalStateManager.java | 5 +-- .../master/balancer/DefaultLoadBalancer.java | 5 +-- .../balancer/HostRegexTableLoadBalancer.java | 13 ++---- .../server/master/balancer/TableLoadBalancer.java | 14 +++--- .../accumulo/server/util/MetadataTableUtil.java | 8 +--- .../server/util/VerifyTabletAssignments.java | 7 +-- .../master/balancer/DefaultLoadBalancerTest.java | 7 ++- .../master/replication/SequentialWorkAssigner.java | 15 ++----- .../create/SetupNamespacePermissions.java | 2 +- .../org/apache/accumulo/tserver/FileManager.java | 22 ++------- .../accumulo/tserver/log/SortedLogRecovery.java | 8 +--- .../shell/commands/SetScanIterCommand.java | 7 +-- .../shell/commands/SetShellIterCommand.java | 7 +-- 30 files changed, 101 insertions(+), 329 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java index 5260748..738e624 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java +++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java @@ -21,7 +21,6 @@ package org.apache.accumulo.core.client.mapred; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; -import java.util.Map.Entry; import java.util.Set; import org.apache.accumulo.core.client.AccumuloClient; @@ -47,7 +46,6 @@ import org.apache.accumulo.core.clientImpl.DelegationTokenImpl; import org.apache.accumulo.core.clientImpl.mapreduce.lib.OutputConfigurator; import org.apache.accumulo.core.data.ColumnUpdate; import org.apache.accumulo.core.data.Mutation; -import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.security.ColumnVisibility; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.io.Text; @@ -551,17 +549,11 @@ public class AccumuloOutputFormat implements OutputFormat<Text,Mutation> { mtbw.close(); } catch (MutationsRejectedException e) { if (!e.getSecurityErrorCodes().isEmpty()) { - HashMap<String,Set<SecurityErrorCode>> tables = new HashMap<>(); - for (Entry<TabletId,Set<SecurityErrorCode>> ke : e.getSecurityErrorCodes().entrySet()) { - String tableId = ke.getKey().getTableId().toString(); - Set<SecurityErrorCode> secCodes = tables.get(tableId); - if (secCodes == null) { - secCodes = new HashSet<>(); - tables.put(tableId, secCodes); - } - secCodes.addAll(ke.getValue()); - } - + var tables = new HashMap<String,Set<SecurityErrorCode>>(); + e.getSecurityErrorCodes().forEach((tabletId, secSet) -> { + var tableId = tabletId.getTableId().toString(); + tables.computeIfAbsent(tableId, p -> new HashSet<>()).addAll(secSet); + }); log.error("Not authorized to write to tables : " + tables); } diff --git a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java index b9fa8ea..39d3e9a 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java +++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java @@ -21,7 +21,6 @@ package org.apache.accumulo.core.client.mapreduce; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; -import java.util.Map.Entry; import java.util.Set; import org.apache.accumulo.core.client.AccumuloClient; @@ -47,7 +46,6 @@ import org.apache.accumulo.core.clientImpl.DelegationTokenImpl; import org.apache.accumulo.core.clientImpl.mapreduce.lib.OutputConfigurator; import org.apache.accumulo.core.data.ColumnUpdate; import org.apache.accumulo.core.data.Mutation; -import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.security.ColumnVisibility; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; @@ -552,17 +550,11 @@ public class AccumuloOutputFormat extends OutputFormat<Text,Mutation> { mtbw.close(); } catch (MutationsRejectedException e) { if (!e.getSecurityErrorCodes().isEmpty()) { - HashMap<String,Set<SecurityErrorCode>> tables = new HashMap<>(); - for (Entry<TabletId,Set<SecurityErrorCode>> ke : e.getSecurityErrorCodes().entrySet()) { - String tableId = ke.getKey().getTableId().toString(); - Set<SecurityErrorCode> secCodes = tables.get(tableId); - if (secCodes == null) { - secCodes = new HashSet<>(); - tables.put(tableId, secCodes); - } - secCodes.addAll(ke.getValue()); - } - + var tables = new HashMap<String,Set<SecurityErrorCode>>(); + e.getSecurityErrorCodes().forEach((tabletId, secSet) -> { + var tableId = tabletId.getTableId().toString(); + tables.computeIfAbsent(tableId, p -> new HashSet<>()).addAll(secSet); + }); log.error("Not authorized to write to tables : " + tables); } diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/ScannerOptions.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/ScannerOptions.java index 3e19ddd..2a54d7e 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ScannerOptions.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ScannerOptions.java @@ -92,14 +92,8 @@ public class ScannerOptions implements ScannerBase { if (serverSideIteratorOptions.size() == 0) { serverSideIteratorOptions = new HashMap<>(); } - - Map<String,String> opts = serverSideIteratorOptions.get(si.getName()); - - if (opts == null) { - opts = new HashMap<>(); - serverSideIteratorOptions.put(si.getName(), opts); - } - opts.putAll(si.getOptions()); + serverSideIteratorOptions.computeIfAbsent(si.getName(), k -> new HashMap<>()) + .putAll(si.getOptions()); } @Override @@ -128,14 +122,7 @@ public class ScannerOptions implements ScannerBase { if (serverSideIteratorOptions.size() == 0) { serverSideIteratorOptions = new HashMap<>(); } - - Map<String,String> opts = serverSideIteratorOptions.get(iteratorName); - - if (opts == null) { - opts = new HashMap<>(); - serverSideIteratorOptions.put(iteratorName, opts); - } - opts.put(key, value); + serverSideIteratorOptions.computeIfAbsent(iteratorName, k -> new HashMap<>()).put(key, value); } @Override diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java index 1e89e04..29880bc 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java @@ -1724,17 +1724,11 @@ public class TableOperationsImpl extends TableOperationsHelper { if (groupedByRanges == null) { Map<Range,List<TabletId>> tmp = new HashMap<>(); - for (Entry<TabletId,List<Range>> entry : groupedByTablets.entrySet()) { - for (Range range : entry.getValue()) { - List<TabletId> tablets = tmp.get(range); - if (tablets == null) { - tablets = new ArrayList<>(); - tmp.put(range, tablets); - } - - tablets.add(entry.getKey()); + groupedByTablets.forEach((table, rangeList) -> { + for (Range range : rangeList) { + tmp.computeIfAbsent(range, k -> new ArrayList<>()).add(table); } - } + }); Map<Range,List<TabletId>> tmp2 = new HashMap<>(); for (Entry<Range,List<TabletId>> entry : tmp.entrySet()) { diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletLocatorImpl.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletLocatorImpl.java index 9fdc9e2..06d8518 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletLocatorImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletLocatorImpl.java @@ -730,19 +730,8 @@ public class TabletLocatorImpl extends TabletLocator { protected static void addRange(Map<String,Map<KeyExtent,List<Range>>> binnedRanges, String location, KeyExtent ke, Range range) { - Map<KeyExtent,List<Range>> tablets = binnedRanges.get(location); - if (tablets == null) { - tablets = new HashMap<>(); - binnedRanges.put(location, tablets); - } - - List<Range> tabletsRanges = tablets.get(ke); - if (tabletsRanges == null) { - tabletsRanges = new ArrayList<>(); - tablets.put(ke, tabletsRanges); - } - - tabletsRanges.add(range); + binnedRanges.computeIfAbsent(location, k -> new HashMap<>()) + .computeIfAbsent(ke, k -> new ArrayList<>()).add(range); } } diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchWriter.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchWriter.java index 015d7fa..3ca7da1 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchWriter.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchWriter.java @@ -517,14 +517,9 @@ public class TabletServerBatchWriter implements AutoCloseable { private void mergeAuthorizationFailures(Map<KeyExtent,Set<SecurityErrorCode>> source, Map<KeyExtent,SecurityErrorCode> addition) { - for (Entry<KeyExtent,SecurityErrorCode> entry : addition.entrySet()) { - Set<SecurityErrorCode> secs = source.get(entry.getKey()); - if (secs == null) { - secs = new HashSet<>(); - source.put(entry.getKey(), secs); - } - secs.add(entry.getValue()); - } + addition.forEach((ke, sec) -> { + source.computeIfAbsent(ke, p -> new HashSet<>()).add(sec); + }); } private synchronized void updateServerErrors(String server, Exception e) { @@ -1010,14 +1005,7 @@ public class TabletServerBatchWriter implements AutoCloseable { } void addMutation(TableId table, Mutation mutation) { - List<Mutation> tabMutList = mutations.get(table); - if (tabMutList == null) { - tabMutList = new ArrayList<>(); - mutations.put(table, tabMutList); - } - - tabMutList.add(mutation); - + mutations.computeIfAbsent(table, k -> new ArrayList<>()).add(mutation); memoryUsed += mutation.estimatedMemoryUsed(); } diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/mapreduce/lib/InputConfigurator.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/mapreduce/lib/InputConfigurator.java index e555b40..1254b35 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/mapreduce/lib/InputConfigurator.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/mapreduce/lib/InputConfigurator.java @@ -892,19 +892,8 @@ public class InputConfigurator extends ConfiguratorBase { throw new AccumuloException(" " + lastExtent + " is not previous extent " + extent); } - Map<KeyExtent,List<Range>> tabletRanges = binnedRanges.get(last); - if (tabletRanges == null) { - tabletRanges = new HashMap<>(); - binnedRanges.put(last, tabletRanges); - } - - List<Range> rangeList = tabletRanges.get(extent); - if (rangeList == null) { - rangeList = new ArrayList<>(); - tabletRanges.put(extent, rangeList); - } - - rangeList.add(range); + binnedRanges.computeIfAbsent(last, k -> new HashMap<>()) + .computeIfAbsent(extent, k -> new ArrayList<>()).add(range); if (extent.getEndRow() == null || range.afterEndKey(new Key(extent.getEndRow()).followingKey(PartialKey.ROW))) { diff --git a/core/src/main/java/org/apache/accumulo/core/conf/IterConfigUtil.java b/core/src/main/java/org/apache/accumulo/core/conf/IterConfigUtil.java index f3e2ca1..1a204da 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/IterConfigUtil.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/IterConfigUtil.java @@ -116,13 +116,7 @@ public class IterConfigUtil { String iterName = suffixSplit[0]; String optName = suffixSplit[2]; - Map<String,String> options = allOptions.get(iterName); - if (options == null) { - options = new HashMap<>(); - allOptions.put(iterName, options); - } - - options.put(optName, entry.getValue()); + allOptions.computeIfAbsent(iterName, k -> new HashMap<>()).put(optName, entry.getValue()); } else { throw new IllegalArgumentException("Invalid iterator format: " + entry.getKey()); diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilter.java b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilter.java index 020ab91..455b033 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilter.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilter.java @@ -52,29 +52,15 @@ public class ColumnSliceFilter extends Filter { public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException { super.init(source, options, env); - if (options.containsKey(START_BOUND)) { - startBound = options.get(START_BOUND); - } else { - startBound = null; - } + startBound = options.getOrDefault(START_BOUND, null); - if (options.containsKey(START_INCLUSIVE)) { - startInclusive = Boolean.parseBoolean(options.get(START_INCLUSIVE)); - } else { - startInclusive = true; - } + startInclusive = options.containsKey(START_INCLUSIVE) + ? Boolean.parseBoolean(options.get(START_INCLUSIVE)) : true; - if (options.containsKey(END_BOUND)) { - endBound = options.get(END_BOUND); - } else { - endBound = null; - } + endBound = options.getOrDefault(END_BOUND, null); - if (options.containsKey(END_INCLUSIVE)) { - endInclusive = Boolean.parseBoolean(options.get(END_INCLUSIVE)); - } else { - endInclusive = false; - } + endInclusive = options.containsKey(END_INCLUSIVE) + ? Boolean.parseBoolean(options.get(END_INCLUSIVE)) : false; } @Override diff --git a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/ColumnQualifierFilter.java b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/ColumnQualifierFilter.java index 29bafb0..8687d15 100644 --- a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/ColumnQualifierFilter.java +++ b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/ColumnQualifierFilter.java @@ -40,21 +40,16 @@ public class ColumnQualifierFilter extends ServerFilter { this.columnFamilies = new HashSet<>(); this.columnsQualifiers = new HashMap<>(); - for (Column col : columns) { + columns.forEach(col -> { if (col.columnQualifier != null) { - ArrayByteSequence cq = new ArrayByteSequence(col.columnQualifier); - HashSet<ByteSequence> cfset = this.columnsQualifiers.get(cq); - if (cfset == null) { - cfset = new HashSet<>(); - this.columnsQualifiers.put(cq, cfset); - } - - cfset.add(new ArrayByteSequence(col.columnFamily)); + this.columnsQualifiers + .computeIfAbsent(new ArrayByteSequence(col.columnQualifier), k -> new HashSet<>()) + .add(new ArrayByteSequence(col.columnFamily)); } else { // this whole column family should pass columnFamilies.add(new ArrayByteSequence(col.columnFamily)); } - } + }); } private ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, diff --git a/core/src/main/java/org/apache/accumulo/core/util/format/ShardedTableDistributionFormatter.java b/core/src/main/java/org/apache/accumulo/core/util/format/ShardedTableDistributionFormatter.java index 640f46d..a7a9a30 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/format/ShardedTableDistributionFormatter.java +++ b/core/src/main/java/org/apache/accumulo/core/util/format/ShardedTableDistributionFormatter.java @@ -53,8 +53,7 @@ public class ShardedTableDistributionFormatter extends AggregatingFormatter { } else day = "NULL "; String server = entry.getValue().toString(); - if (countsByDay.get(day) == null) - countsByDay.put(day, new HashSet<>()); + countsByDay.computeIfAbsent(day, k -> new HashSet<>()); countsByDay.get(day).add(server); } } diff --git a/core/src/main/java/org/apache/accumulo/fate/AdminUtil.java b/core/src/main/java/org/apache/accumulo/fate/AdminUtil.java index 38a02a6..f062bb2 100644 --- a/core/src/main/java/org/apache/accumulo/fate/AdminUtil.java +++ b/core/src/main/java/org/apache/accumulo/fate/AdminUtil.java @@ -301,13 +301,8 @@ public class AdminUtil<T> { } } - List<String> tables = locks.get(Long.parseLong(lda[1], 16)); - if (tables == null) { - tables = new ArrayList<>(); - locks.put(Long.parseLong(lda[1], 16), tables); - } - - tables.add(lda[0].charAt(0) + ":" + id); + locks.computeIfAbsent(Long.parseLong(lda[1], 16), k -> new ArrayList<>()) + .add(lda[0].charAt(0) + ":" + id); } catch (Exception e) { log.error("{}", e.getMessage(), e); diff --git a/core/src/test/java/org/apache/accumulo/core/clientImpl/TabletLocatorImplTest.java b/core/src/test/java/org/apache/accumulo/core/clientImpl/TabletLocatorImplTest.java index 1dfbaae..84ceff1 100644 --- a/core/src/test/java/org/apache/accumulo/core/clientImpl/TabletLocatorImplTest.java +++ b/core/src/test/java/org/apache/accumulo/core/clientImpl/TabletLocatorImplTest.java @@ -296,19 +296,8 @@ public class TabletLocatorImplTest { String server = (String) ol[1]; KeyExtent ke = (KeyExtent) ol[2]; - Map<KeyExtent,List<String>> tb = emb.get(server); - if (tb == null) { - tb = new HashMap<>(); - emb.put(server, tb); - } - - List<String> rl = tb.get(ke); - if (rl == null) { - rl = new ArrayList<>(); - tb.put(ke, rl); - } - - rl.add(row); + emb.computeIfAbsent(server, k -> new HashMap<>()).computeIfAbsent(ke, k -> new ArrayList<>()) + .add(row); } return emb; @@ -527,11 +516,8 @@ public class TabletLocatorImplTest { } static void createEmptyTablet(TServers tservers, String server, KeyExtent tablet) { - Map<KeyExtent,SortedMap<Key,Value>> tablets = tservers.tservers.get(server); - if (tablets == null) { - tablets = new HashMap<>(); - tservers.tservers.put(server, tablets); - } + Map<KeyExtent,SortedMap<Key,Value>> tablets = + tservers.tservers.computeIfAbsent(server, k -> new HashMap<>()); SortedMap<Key,Value> tabletData = tablets.get(tablet); if (tabletData == null) { @@ -562,17 +548,10 @@ public class TabletLocatorImplTest { static void setLocation(TServers tservers, String server, KeyExtent tablet, KeyExtent ke, String location, String instance) { - Map<KeyExtent,SortedMap<Key,Value>> tablets = tservers.tservers.get(server); - if (tablets == null) { - tablets = new HashMap<>(); - tservers.tservers.put(server, tablets); - } + Map<KeyExtent,SortedMap<Key,Value>> tablets = + tservers.tservers.computeIfAbsent(server, k -> new HashMap<>()); - SortedMap<Key,Value> tabletData = tablets.get(tablet); - if (tabletData == null) { - tabletData = new TreeMap<>(); - tablets.put(tablet, tabletData); - } + SortedMap<Key,Value> tabletData = tablets.computeIfAbsent(tablet, k -> new TreeMap<>()); Text mr = ke.getMetadataEntry(); Value per = KeyExtent.encodePrevEndRow(ke.getPrevEndRow()); diff --git a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java index cdea20d..702f482 100644 --- a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java +++ b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java @@ -21,7 +21,6 @@ package org.apache.accumulo.hadoopImpl.mapred; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.apache.accumulo.core.client.AccumuloClient; @@ -35,7 +34,6 @@ import org.apache.accumulo.core.client.TableNotFoundException; import org.apache.accumulo.core.client.security.SecurityErrorCode; import org.apache.accumulo.core.data.ColumnUpdate; import org.apache.accumulo.core.data.Mutation; -import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.security.ColumnVisibility; import org.apache.accumulo.hadoop.mapred.AccumuloOutputFormat; import org.apache.accumulo.hadoopImpl.mapreduce.lib.OutputConfigurator; @@ -187,16 +185,11 @@ public class AccumuloRecordWriter implements RecordWriter<Text,Mutation> { mtbw.close(); } catch (MutationsRejectedException e) { if (!e.getSecurityErrorCodes().isEmpty()) { - HashMap<String,Set<SecurityErrorCode>> tables = new HashMap<>(); - for (Map.Entry<TabletId,Set<SecurityErrorCode>> ke : e.getSecurityErrorCodes().entrySet()) { - String tableId = ke.getKey().getTableId().toString(); - Set<SecurityErrorCode> secCodes = tables.get(tableId); - if (secCodes == null) { - secCodes = new HashSet<>(); - tables.put(tableId, secCodes); - } - secCodes.addAll(ke.getValue()); - } + var tables = new HashMap<String,Set<SecurityErrorCode>>(); + e.getSecurityErrorCodes().forEach((tabletId, secSet) -> { + String tableId = tabletId.getTableId().toString(); + tables.computeIfAbsent(tableId, p -> new HashSet<>()).addAll(secSet); + }); log.error("Not authorized to write to tables : " + tables); } diff --git a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java index d89a845..48e2e34 100644 --- a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java +++ b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java @@ -21,7 +21,6 @@ package org.apache.accumulo.hadoopImpl.mapreduce; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.apache.accumulo.core.client.AccumuloClient; @@ -35,7 +34,6 @@ import org.apache.accumulo.core.client.TableNotFoundException; import org.apache.accumulo.core.client.security.SecurityErrorCode; import org.apache.accumulo.core.data.ColumnUpdate; import org.apache.accumulo.core.data.Mutation; -import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.security.ColumnVisibility; import org.apache.accumulo.hadoop.mapreduce.AccumuloOutputFormat; import org.apache.accumulo.hadoopImpl.mapreduce.lib.OutputConfigurator; @@ -189,14 +187,9 @@ public class AccumuloRecordWriter extends RecordWriter<Text,Mutation> { } catch (MutationsRejectedException e) { if (!e.getSecurityErrorCodes().isEmpty()) { HashMap<String,Set<SecurityErrorCode>> tables = new HashMap<>(); - for (Map.Entry<TabletId,Set<SecurityErrorCode>> ke : e.getSecurityErrorCodes().entrySet()) { + for (var ke : e.getSecurityErrorCodes().entrySet()) { String tableId = ke.getKey().getTableId().toString(); - Set<SecurityErrorCode> secCodes = tables.get(tableId); - if (secCodes == null) { - secCodes = new HashSet<>(); - tables.put(tableId, secCodes); - } - secCodes.addAll(ke.getValue()); + tables.computeIfAbsent(tableId, k -> new HashSet<>()).addAll(ke.getValue()); } log.error("Not authorized to write to tables : " + tables); diff --git a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java index f710aea..d15d855 100644 --- a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java +++ b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java @@ -880,19 +880,8 @@ public class InputConfigurator extends ConfiguratorBase { throw new AccumuloException(" " + lastExtent + " is not previous extent " + extent); } - Map<KeyExtent,List<Range>> tabletRanges = binnedRanges.get(last); - if (tabletRanges == null) { - tabletRanges = new HashMap<>(); - binnedRanges.put(last, tabletRanges); - } - - List<Range> rangeList = tabletRanges.get(extent); - if (rangeList == null) { - rangeList = new ArrayList<>(); - tabletRanges.put(extent, rangeList); - } - - rangeList.add(range); + binnedRanges.computeIfAbsent(last, k -> new HashMap<>()) + .computeIfAbsent(extent, k -> new ArrayList<>()).add(range); if (extent.getEndRow() == null || range.afterEndKey(new Key(extent.getEndRow()).followingKey(PartialKey.ROW))) { diff --git a/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java b/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java index 10b0433..2db5a4b 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java +++ b/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java @@ -461,23 +461,17 @@ public class BulkImporter { } private void handleFailures(Collection<KeyExtent> failures, String message) { - for (KeyExtent ke : failures) { + failures.forEach(ke -> { List<PathSize> mapFiles = assignmentsPerTablet.get(ke); synchronized (assignmentFailures) { - for (PathSize pathSize : mapFiles) { - List<KeyExtent> existingFailures = assignmentFailures.get(pathSize.path); - if (existingFailures == null) { - existingFailures = new ArrayList<>(); - assignmentFailures.put(pathSize.path, existingFailures); - } - - existingFailures.add(ke); - } + mapFiles.forEach(pathSize -> { + assignmentFailures.computeIfAbsent(pathSize.path, k -> new ArrayList<>()).add(ke); + }); } log.info("Could not assign {} map files to tablet {} because : {}. Will retry ...", mapFiles.size(), ke, message); - } + }); } @Override @@ -520,20 +514,13 @@ public class BulkImporter { // group assignments by tablet Map<KeyExtent,List<PathSize>> assignmentsPerTablet = new TreeMap<>(); - for (Entry<Path,List<AssignmentInfo>> entry : assignments.entrySet()) { - Path mapFile = entry.getKey(); - List<AssignmentInfo> tabletsToAssignMapFileTo = entry.getValue(); - - for (AssignmentInfo ai : tabletsToAssignMapFileTo) { - List<PathSize> mapFiles = assignmentsPerTablet.get(ai.ke); - if (mapFiles == null) { - mapFiles = new ArrayList<>(); - assignmentsPerTablet.put(ai.ke, mapFiles); - } - mapFiles.add(new PathSize(mapFile, ai.estSize)); - } - } + assignments.forEach((mapFile, tabletsToAssignMapFileTo) -> { + tabletsToAssignMapFileTo.forEach(ai -> { + assignmentsPerTablet.computeIfAbsent(ai.ke, k -> new ArrayList<>()) + .add(new PathSize(mapFile, ai.estSize)); + }); + }); // group assignments by tabletserver @@ -548,13 +535,7 @@ public class BulkImporter { if (location == null) { for (PathSize pathSize : entry.getValue()) { synchronized (assignmentFailures) { - List<KeyExtent> failures = assignmentFailures.get(pathSize.path); - if (failures == null) { - failures = new ArrayList<>(); - assignmentFailures.put(pathSize.path, failures); - } - - failures.add(ke); + assignmentFailures.computeIfAbsent(pathSize.path, k -> new ArrayList<>()).add(ke); } } @@ -565,13 +546,8 @@ public class BulkImporter { continue; } - Map<KeyExtent,List<PathSize>> apt = assignmentsPerTabletServer.get(location); - if (apt == null) { - apt = new TreeMap<>(); - assignmentsPerTabletServer.put(location, apt); - } - - apt.put(entry.getKey(), entry.getValue()); + assignmentsPerTabletServer.computeIfAbsent(location, k -> new TreeMap<>()).put(entry.getKey(), + entry.getValue()); } ExecutorService threadPool = diff --git a/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java b/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java index a8bce74..855c582 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java +++ b/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java @@ -197,10 +197,7 @@ public class WalStateManager { String path = root(); for (String child : zoo.getChildren(path)) { TServerInstance inst = new TServerInstance(child); - List<UUID> logs = result.get(inst); - if (logs == null) { - result.put(inst, logs = new ArrayList<>()); - } + List<UUID> logs = result.computeIfAbsent(inst, k -> new ArrayList<>()); // This function is called by the Accumulo GC which deletes WAL markers. Therefore we do not // expect the following call to fail because the WAL info in ZK was deleted. diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java index 2653f99..96e0cad 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java @@ -223,10 +223,9 @@ public class DefaultLoadBalancer extends TabletBalancer { // look for an uneven table count int biggestDifference = 0; TableId biggestDifferenceTable = null; - for (Entry<TableId,Integer> tableEntry : tooMuchMap.entrySet()) { + for (var tableEntry : tooMuchMap.entrySet()) { TableId tableID = tableEntry.getKey(); - if (tooLittleMap.get(tableID) == null) - tooLittleMap.put(tableID, 0); + tooLittleMap.putIfAbsent(tableID, 0); int diff = tableEntry.getValue() - tooLittleMap.get(tableID); if (diff > biggestDifference) { biggestDifference = diff; diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java index 880bab5..3560a47 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java @@ -351,15 +351,10 @@ public class HostRegexTableLoadBalancer extends TableLoadBalancer { Map<String,SortedMap<TServerInstance,TabletServerStatus>> pools = splitCurrentByRegex(current); // group the unassigned into tables Map<TableId,Map<KeyExtent,TServerInstance>> groupedUnassigned = new HashMap<>(); - for (Entry<KeyExtent,TServerInstance> e : unassigned.entrySet()) { - Map<KeyExtent,TServerInstance> tableUnassigned = - groupedUnassigned.get(e.getKey().getTableId()); - if (tableUnassigned == null) { - tableUnassigned = new HashMap<>(); - groupedUnassigned.put(e.getKey().getTableId(), tableUnassigned); - } - tableUnassigned.put(e.getKey(), e.getValue()); - } + unassigned.forEach((keyExtent, tServerInstance) -> { + groupedUnassigned.computeIfAbsent(keyExtent.getTableId(), p -> new HashMap<>()).put(keyExtent, + tServerInstance); + }); Map<TableId,String> tableIdToTableName = createdTableNameMap(getTableOperations().tableIdMap()); diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/TableLoadBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/TableLoadBalancer.java index 855ce18..5ecc41d 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/TableLoadBalancer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/TableLoadBalancer.java @@ -118,15 +118,11 @@ public class TableLoadBalancer extends TabletBalancer { Map<KeyExtent,TServerInstance> unassigned, Map<KeyExtent,TServerInstance> assignments) { // separate the unassigned into tables Map<TableId,Map<KeyExtent,TServerInstance>> groupedUnassigned = new HashMap<>(); - for (Entry<KeyExtent,TServerInstance> e : unassigned.entrySet()) { - Map<KeyExtent,TServerInstance> tableUnassigned = - groupedUnassigned.get(e.getKey().getTableId()); - if (tableUnassigned == null) { - tableUnassigned = new HashMap<>(); - groupedUnassigned.put(e.getKey().getTableId(), tableUnassigned); - } - tableUnassigned.put(e.getKey(), e.getValue()); - } + unassigned.forEach((keyExtent, tServerInstance) -> { + groupedUnassigned.computeIfAbsent(keyExtent.getTableId(), p -> new HashMap<>()).put(keyExtent, + tServerInstance); + }); + for (Entry<TableId,Map<KeyExtent,TServerInstance>> e : groupedUnassigned.entrySet()) { Map<KeyExtent,TServerInstance> newAssignments = new HashMap<>(); getBalancerForTable(e.getKey()).getAssignments(current, e.getValue(), newAssignments); diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java index e855821..c0984fe 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java @@ -717,13 +717,7 @@ public class MetadataTableUtil { Text row = entry.getKey().getRow(); - SortedMap<ColumnFQ,Value> colVals = tabletEntries.get(row); - if (colVals == null) { - colVals = new TreeMap<>(); - tabletEntries.put(row, colVals); - } - - colVals.put(currentKey, entry.getValue()); + tabletEntries.computeIfAbsent(row, k -> new TreeMap<>()).put(currentKey, entry.getValue()); } return tabletEntries; diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java b/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java index bb76cb4..abdda09 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java @@ -112,11 +112,8 @@ public class VerifyTabletAssignments { if (loc != null) { final HostAndPort parsedLoc = HostAndPort.fromString(loc); - List<KeyExtent> extentList = extentsPerServer.get(parsedLoc); - if (extentList == null) { - extentList = new ArrayList<>(); - extentsPerServer.put(parsedLoc, extentList); - } + List<KeyExtent> extentList = + extentsPerServer.computeIfAbsent(parsedLoc, k -> new ArrayList<>()); if (check == null || check.contains(keyExtent)) extentList.add(keyExtent); diff --git a/server/base/src/test/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancerTest.java b/server/base/src/test/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancerTest.java index 0c7e4b9..71f3775 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancerTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancerTest.java @@ -271,13 +271,12 @@ public class DefaultLoadBalancerTest { if (expectedCounts != null) { for (FakeTServer server : servers.values()) { Map<String,Integer> counts = new HashMap<>(); - for (KeyExtent extent : server.extents) { + for (var extent : server.extents) { String t = extent.getTableId().canonical(); - if (counts.get(t) == null) - counts.put(t, 0); + counts.putIfAbsent(t, 0); counts.put(t, counts.get(t) + 1); } - for (Entry<String,Integer> entry : counts.entrySet()) { + for (var entry : counts.entrySet()) { assertEquals(expectedCounts.get(entry.getKey()), counts.get(entry.getKey())); } } diff --git a/server/master/src/main/java/org/apache/accumulo/master/replication/SequentialWorkAssigner.java b/server/master/src/main/java/org/apache/accumulo/master/replication/SequentialWorkAssigner.java index 7457109..7837332 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/replication/SequentialWorkAssigner.java +++ b/server/master/src/main/java/org/apache/accumulo/master/replication/SequentialWorkAssigner.java @@ -104,13 +104,7 @@ public class SequentialWorkAssigner extends DistributedWorkQueueWorkAssigner { log.debug("In progress replication of {} from table with ID {} to peer {}", filename, sourceTableId, peerName); - Map<TableId,String> replicationForPeer = queuedWorkByPeerName.get(peerName); - if (replicationForPeer == null) { - replicationForPeer = new HashMap<>(); - queuedWorkByPeerName.put(peerName, replicationForPeer); - } - - replicationForPeer.put(sourceTableId, work); + queuedWorkByPeerName.computeIfAbsent(peerName, k -> new HashMap<>()).put(sourceTableId, work); } } @@ -173,11 +167,8 @@ public class SequentialWorkAssigner extends DistributedWorkQueueWorkAssigner { @Override protected boolean queueWork(Path path, ReplicationTarget target) { String queueKey = DistributedWorkQueueWorkAssignerHelper.getQueueKey(path.getName(), target); - Map<TableId,String> workForPeer = this.queuedWorkByPeerName.get(target.getPeerName()); - if (workForPeer == null) { - workForPeer = new HashMap<>(); - this.queuedWorkByPeerName.put(target.getPeerName(), workForPeer); - } + Map<TableId,String> workForPeer = + this.queuedWorkByPeerName.computeIfAbsent(target.getPeerName(), k -> new HashMap<>()); String queuedWork = workForPeer.get(target.getSourceTableId()); if (queuedWork == null) { diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/namespace/create/SetupNamespacePermissions.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/namespace/create/SetupNamespacePermissions.java index 65c1e56..57b0717 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/namespace/create/SetupNamespacePermissions.java +++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/namespace/create/SetupNamespacePermissions.java @@ -41,7 +41,7 @@ class SetupNamespacePermissions extends MasterRepo { public Repo<Master> call(long tid, Master env) throws Exception { // give all namespace permissions to the creator SecurityOperation security = AuditedSecurityOperation.getInstance(env.getContext()); - for (NamespacePermission permission : NamespacePermission.values()) { + for (var permission : NamespacePermission.values()) { try { security.grantNamespacePermission(env.getContext().rpcCreds(), namespaceInfo.user, namespaceInfo.namespaceId, permission); diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java index 66ee7ec..eaff0ba 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java @@ -221,13 +221,7 @@ public class FileManager { } private static <T> List<T> getFileList(String file, Map<String,List<T>> files) { - List<T> ofl = files.get(file); - if (ofl == null) { - ofl = new ArrayList<>(); - files.put(file, ofl); - } - - return ofl; + return files.computeIfAbsent(file, k -> new ArrayList<>()); } private void closeReaders(Collection<FileSKVIterator> filesToClose) { @@ -594,17 +588,9 @@ public class FileManager { Map<FileSKVIterator,String> newlyReservedReaders = openFiles(files); Map<String,List<FileSKVIterator>> map = new HashMap<>(); - for (Entry<FileSKVIterator,String> entry : newlyReservedReaders.entrySet()) { - FileSKVIterator reader = entry.getKey(); - String fileName = entry.getValue(); - List<FileSKVIterator> list = map.get(fileName); - if (list == null) { - list = new LinkedList<>(); - map.put(fileName, list); - } - - list.add(reader); - } + newlyReservedReaders.forEach((reader, fileName) -> { + map.computeIfAbsent(fileName, k -> new LinkedList<>()).add(reader); + }); for (FileDataSource fds : dataSources) { FileSKVIterator source = map.get(fds.file).remove(0); diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/SortedLogRecovery.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/SortedLogRecovery.java index 9371eef..5d1faef 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/SortedLogRecovery.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/SortedLogRecovery.java @@ -144,13 +144,7 @@ public class SortedLogRecovery { for (Path wal : recoveryLogs) { int tabletId = findMaxTabletId(extent, Collections.singletonList(wal)); if (tabletId != -1) { - List<Path> perIdList = logsThatDefineTablet.get(tabletId); - if (perIdList == null) { - perIdList = new ArrayList<>(); - logsThatDefineTablet.put(tabletId, perIdList); - - } - perIdList.add(wal); + logsThatDefineTablet.computeIfAbsent(tabletId, k -> new ArrayList<>()).add(wal); log.debug("Found tablet {} with id {} in recovery log {}", extent, tabletId, wal.getName()); } else { log.debug("Did not find tablet {} in recovery log {}", extent, wal.getName()); diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/SetScanIterCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/SetScanIterCommand.java index 66fd1f2..a92a0c1 100644 --- a/shell/src/main/java/org/apache/accumulo/shell/commands/SetScanIterCommand.java +++ b/shell/src/main/java/org/apache/accumulo/shell/commands/SetScanIterCommand.java @@ -59,11 +59,8 @@ public class SetScanIterCommand extends SetIterCommand { options.values().removeIf(v -> v == null || v.isEmpty()); - List<IteratorSetting> tableScanIterators = shellState.scanIteratorOptions.get(tableName); - if (tableScanIterators == null) { - tableScanIterators = new ArrayList<>(); - shellState.scanIteratorOptions.put(tableName, tableScanIterators); - } + List<IteratorSetting> tableScanIterators = + shellState.scanIteratorOptions.computeIfAbsent(tableName, k -> new ArrayList<>()); final IteratorSetting setting = new IteratorSetting(priority, name, classname); setting.addOptions(options); diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java index 7bf92da..21b4d2a 100644 --- a/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java +++ b/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java @@ -53,11 +53,8 @@ public class SetShellIterCommand extends SetIterCommand { options.values().removeIf(v -> v == null || v.isEmpty()); - List<IteratorSetting> tableScanIterators = shellState.iteratorProfiles.get(profile); - if (tableScanIterators == null) { - tableScanIterators = new ArrayList<>(); - shellState.iteratorProfiles.put(profile, tableScanIterators); - } + List<IteratorSetting> tableScanIterators = + shellState.iteratorProfiles.computeIfAbsent(profile, k -> new ArrayList<>()); final IteratorSetting setting = new IteratorSetting(priority, name, classname); setting.addOptions(options);