Github user ivakegg commented on a diff in the pull request:

    https://github.com/apache/accumulo/pull/275#discussion_r127798040
  
    --- Diff: 
core/src/main/java/org/apache/accumulo/core/iterators/system/LocalityGroupIterator.java
 ---
    @@ -65,23 +70,55 @@ public InterruptibleIterator getIterator() {
         private InterruptibleIterator iterator;
       }
     
    -  private LocalityGroup groups[];
    -  private Set<ByteSequence> nonDefaultColumnFamilies;
    +  public static class LocalityGroupContext {
    +    final List<LocalityGroup> groups;
    +    final LocalityGroup defaultGroup;
    +    final Map<ByteSequence,LocalityGroup> groupByCf;
    +
    +    public LocalityGroupContext(LocalityGroup[] groups) {
    +      this.groups = Collections.unmodifiableList(Arrays.asList(groups));
    +      this.groupByCf = new HashMap<ByteSequence,LocalityGroup>();
    +      LocalityGroup foundDefault = null;
    +
    +      for (LocalityGroup group : groups) {
    +        if (group.isDefaultLocalityGroup && group.columnFamilies == null) {
    +          if (foundDefault != null) {
    +            throw new IllegalStateException("Found multiple default 
locality groups");
    +          }
    +          foundDefault = group;
    +        } else {
    +          for (Entry<ByteSequence,MutableLong> entry : 
group.columnFamilies.entrySet()) {
    +            if (entry.getValue().longValue() > 0) {
    +              if (groupByCf.containsKey(entry.getKey())) {
    +                throw new IllegalStateException("Found the same cf in 
multiple locality groups");
    +              }
    +              groupByCf.put(entry.getKey(), group);
    +            }
    +          }
    +        }
    +      }
    +      defaultGroup = foundDefault;
    +    }
    +  }
    +
    +  private final LocalityGroupContext lgContext;
       private AtomicBoolean interruptFlag;
    +  private ImmutableSet<ByteSequence> lastColumnFamilies;
    +  private volatile boolean lastInclusive;
    +  private List<LocalityGroup> lastUsed;
     
    -  public LocalityGroupIterator(LocalityGroup groups[], Set<ByteSequence> 
nonDefaultColumnFamilies) {
    +  public LocalityGroupIterator(LocalityGroup groups[]) {
         super(groups.length);
    -    this.groups = groups;
    -    this.nonDefaultColumnFamilies = nonDefaultColumnFamilies;
    +    this.lgContext = new LocalityGroupContext(groups);
       }
     
       @Override
       public void init(SortedKeyValueIterator<Key,Value> source, 
Map<String,String> options, IteratorEnvironment env) throws IOException {
         throw new UnsupportedOperationException();
       }
     
    -  public static final int seek(HeapIterator hiter, LocalityGroup[] groups, 
Set<ByteSequence> nonDefaultColumnFamilies, Range range,
    -      Collection<ByteSequence> columnFamilies, boolean inclusive) throws 
IOException {
    +  public static final int seek(HeapIterator hiter, LocalityGroupContext 
groups, Range range, Collection<ByteSequence> columnFamilies, boolean inclusive,
    +      List<LocalityGroup> used) throws IOException {
    --- End diff --
    
    ok


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to