Skip to content

Commit

Permalink
Remove hppc type leak from ImmutableOpenIntMap.Builder
Browse files Browse the repository at this point in the history
The builder for ImmutableOpenMap was changed to not inherit from hppc
types, but the builder from ImmutableOpenIntMap was missed. This commit
removes the base hppc interface from the builder and removes unused
methods, and converts one place that was using the leaked types.

relates elastic#84735
  • Loading branch information
rjernst committed Apr 20, 2022
1 parent b2c9028 commit 75ba83e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@

package org.elasticsearch.cluster.routing;

import com.carrotsearch.hppc.cursors.IntCursor;

import org.elasticsearch.cluster.Diff;
import org.elasticsearch.cluster.SimpleDiffable;
import org.elasticsearch.cluster.metadata.IndexMetadata;
Expand Down Expand Up @@ -489,8 +487,7 @@ private Builder initializeEmpty(IndexMetadata indexMetadata, UnassignedInfo unas
}

public Builder addReplica() {
for (IntCursor cursor : shards.keys()) {
int shardNumber = cursor.value;
for (var shardNumber : shards.keys()) {
ShardId shardId = new ShardId(index, shardNumber);
// version 0, will get updated when reroute will happen
ShardRouting shard = ShardRouting.newUnassigned(
Expand All @@ -505,8 +502,7 @@ public Builder addReplica() {
}

public Builder removeReplica() {
for (IntCursor cursor : shards.keys()) {
int shardId = cursor.value;
for (var shardId : shards.keys()) {
IndexShardRoutingTable indexShard = shards.get(shardId);
if (indexShard.replicaShards().isEmpty()) {
// nothing to do here!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,10 @@

package org.elasticsearch.common.collect;

import com.carrotsearch.hppc.IntCollection;
import com.carrotsearch.hppc.IntContainer;
import com.carrotsearch.hppc.IntObjectAssociativeContainer;
import com.carrotsearch.hppc.IntObjectHashMap;
import com.carrotsearch.hppc.IntObjectMap;
import com.carrotsearch.hppc.ObjectContainer;
import com.carrotsearch.hppc.cursors.IntCursor;
import com.carrotsearch.hppc.cursors.IntObjectCursor;
import com.carrotsearch.hppc.cursors.ObjectCursor;
import com.carrotsearch.hppc.predicates.IntObjectPredicate;
import com.carrotsearch.hppc.predicates.IntPredicate;
import com.carrotsearch.hppc.procedures.IntObjectProcedure;

import java.util.AbstractCollection;
import java.util.AbstractSet;
Expand Down Expand Up @@ -107,7 +100,7 @@ public void clear() {
@Override
public Set<Integer> keySet() {
if (keySet == null) {
keySet = new KeySet();
keySet = new KeySet<>(map.keys());
}
return keySet;
}
Expand Down Expand Up @@ -186,25 +179,6 @@ public void remove() {
}
}

private final class KeyIterator implements Iterator<Integer> {
private final Iterator<IntObjectCursor<VType>> cursor = map.iterator();

@Override
public boolean hasNext() {
return cursor.hasNext();
}

@Override
public Integer next() {
return cursor.next().key;
}

@Override
public void remove() {
throw new UnsupportedOperationException("removal is not supported");
}
}

private abstract class UnmodifiableSetView<T> extends AbstractSet<T> {

@Override
Expand Down Expand Up @@ -256,15 +230,42 @@ public void forEach(Consumer<? super Map.Entry<Integer, VType>> action) {
}
}

private final class KeySet extends UnmodifiableSetView<Integer> {
private static final class KeySet<VType> extends AbstractSet<Integer> {
private final IntObjectHashMap<VType>.KeysContainer keys;

KeySet(IntObjectHashMap<VType>.KeysContainer keys) {
this.keys = keys;
}

@Override
public Iterator<Integer> iterator() {
return new KeyIterator();
final Iterator<IntCursor> cursor = keys.iterator();
return new Iterator<>() {
@Override
public boolean hasNext() {
return cursor.hasNext();
}

@Override
public Integer next() {
return cursor.next().value;
}

@Override
public void remove() {
throw new UnsupportedOperationException("removal is not supported");
}
};
}

@Override
public int size() {
return keys.size();
}

@Override
public boolean contains(Object o) {
return o instanceof Integer i && map.containsKey(i);
return o instanceof Integer i && keys.contains(i);
}
}

Expand Down Expand Up @@ -311,7 +312,7 @@ public static <VType> Builder<VType> builder(ImmutableOpenIntMap<VType> map) {
return new Builder<>(map);
}

public static class Builder<VType> implements IntObjectMap<VType> {
public static class Builder<VType> {

private IntObjectHashMap<VType> map;

Expand Down Expand Up @@ -355,17 +356,14 @@ public Builder<VType> fPut(int key, VType value) {
return this;
}

@Override
public VType put(int key, VType value) {
return map.put(key, value);
}

@Override
public VType get(int key) {
return map.get(key);
}

@Override
public VType getOrDefault(int kType, VType vType) {
return map.getOrDefault(kType, vType);
}
Expand All @@ -378,114 +376,20 @@ public Builder<VType> fRemove(int key) {
return this;
}

@Override
public VType remove(int key) {
return map.remove(key);
}

@Override
public Iterator<IntObjectCursor<VType>> iterator() {
return map.iterator();
}

@Override
public boolean containsKey(int key) {
return map.containsKey(key);
}

@Override
public int size() {
return map.size();
}

@Override
public boolean isEmpty() {
return map.isEmpty();
}

@Override
public void clear() {
map.clear();
}

@Override
public int putAll(IntObjectAssociativeContainer<? extends VType> container) {
return map.putAll(container);
}

@Override
public int putAll(Iterable<? extends IntObjectCursor<? extends VType>> iterable) {
return map.putAll(iterable);
}

@Override
public int removeAll(IntContainer container) {
return map.removeAll(container);
}

@Override
public int removeAll(IntPredicate predicate) {
return map.removeAll(predicate);
}

@Override
public <T extends IntObjectProcedure<? super VType>> T forEach(T procedure) {
return map.forEach(procedure);
}

@Override
public IntCollection keys() {
return map.keys();
}

@Override
public ObjectContainer<VType> values() {
return map.values();
}

@Override
public int removeAll(IntObjectPredicate<? super VType> predicate) {
return map.removeAll(predicate);
}

@Override
public <T extends IntObjectPredicate<? super VType>> T forEach(T predicate) {
return map.forEach(predicate);
}

@Override
public int indexOf(int key) {
return map.indexOf(key);
}

@Override
public boolean indexExists(int index) {
return map.indexExists(index);
}

@Override
public VType indexGet(int index) {
return map.indexGet(index);
}

@Override
public VType indexReplace(int index, VType newValue) {
return map.indexReplace(index, newValue);
}

@Override
public void indexInsert(int index, int key, VType value) {
map.indexInsert(index, key, value);
}

@Override
public void release() {
map.release();
}

@Override
public String visualizeKeyDistribution(int characters) {
return map.visualizeKeyDistribution(characters);
public Set<Integer> keys() {
return new KeySet<>(map.keys());
}
}
}

0 comments on commit 75ba83e

Please sign in to comment.