mirror of https://github.com/apache/lucene.git
LUCENE-5443: DocValuesProducer.ramBytesUsed throws ConcurrentModificationException
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1567954 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6d9228fc83
commit
b1658e5d7c
|
@ -263,6 +263,9 @@ Bug fixes
|
|||
loop. ReferenceManager now throws IllegalStateException if currently managed
|
||||
resources ref count is 0. (Simon Willnauer)
|
||||
|
||||
* LUCENE-5443: Lucene45DocValuesProducer.ramBytesUsed() may throw
|
||||
ConcurrentModificationException. (Shai Erera, Simon Willnauer)
|
||||
|
||||
API Changes
|
||||
|
||||
* LUCENE-5339: The facet module was simplified/reworked to make the
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.io.Closeable; // javadocs
|
|||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import org.apache.lucene.codecs.CodecUtil;
|
||||
import org.apache.lucene.codecs.DocValuesProducer;
|
||||
|
@ -53,6 +54,7 @@ import org.apache.lucene.util.Bits;
|
|||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.IOUtils;
|
||||
import org.apache.lucene.util.LongValues;
|
||||
import org.apache.lucene.util.RamUsageEstimator;
|
||||
import org.apache.lucene.util.packed.BlockPackedReader;
|
||||
import org.apache.lucene.util.packed.MonotonicBlockPackedReader;
|
||||
import org.apache.lucene.util.packed.PackedInts;
|
||||
|
@ -64,6 +66,7 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
private final Map<Integer,SortedSetEntry> sortedSets;
|
||||
private final Map<Integer,NumericEntry> ords;
|
||||
private final Map<Integer,NumericEntry> ordIndexes;
|
||||
private final AtomicLong ramBytesUsed;
|
||||
private final IndexInput data;
|
||||
private final int maxDoc;
|
||||
private final int version;
|
||||
|
@ -116,6 +119,8 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
IOUtils.closeWhileHandlingException(this.data);
|
||||
}
|
||||
}
|
||||
|
||||
ramBytesUsed = new AtomicLong(RamUsageEstimator.shallowSizeOfInstance(getClass()));
|
||||
}
|
||||
|
||||
private void readSortedField(int fieldNumber, IndexInput meta, FieldInfos infos) throws IOException {
|
||||
|
@ -286,14 +291,7 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
|
||||
@Override
|
||||
public long ramBytesUsed() {
|
||||
long sizeInBytes = 0;
|
||||
for(MonotonicBlockPackedReader monotonicBlockPackedReader: addressInstances.values()) {
|
||||
sizeInBytes += Integer.SIZE + monotonicBlockPackedReader.ramBytesUsed();
|
||||
}
|
||||
for(MonotonicBlockPackedReader monotonicBlockPackedReader: ordIndexInstances.values()) {
|
||||
sizeInBytes += Integer.SIZE + monotonicBlockPackedReader.ramBytesUsed();
|
||||
}
|
||||
return sizeInBytes;
|
||||
return ramBytesUsed.get();
|
||||
}
|
||||
|
||||
LongValues getNumeric(NumericEntry entry) throws IOException {
|
||||
|
@ -377,6 +375,7 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
data.seek(bytes.addressesOffset);
|
||||
addrInstance = new MonotonicBlockPackedReader(data, bytes.packedIntsVersion, bytes.blockSize, bytes.count, false);
|
||||
addressInstances.put(field.number, addrInstance);
|
||||
ramBytesUsed.addAndGet(addrInstance.ramBytesUsed() + RamUsageEstimator.NUM_BYTES_INT);
|
||||
}
|
||||
addresses = addrInstance;
|
||||
}
|
||||
|
@ -427,6 +426,7 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
}
|
||||
addrInstance = new MonotonicBlockPackedReader(data, bytes.packedIntsVersion, bytes.blockSize, size, false);
|
||||
addressInstances.put(field.number, addrInstance);
|
||||
ramBytesUsed.addAndGet(addrInstance.ramBytesUsed() + RamUsageEstimator.NUM_BYTES_INT);
|
||||
}
|
||||
addresses = addrInstance;
|
||||
}
|
||||
|
@ -498,6 +498,7 @@ public class Lucene45DocValuesProducer extends DocValuesProducer implements Clos
|
|||
data.seek(entry.offset);
|
||||
ordIndexInstance = new MonotonicBlockPackedReader(data, entry.packedIntsVersion, entry.blockSize, entry.count, false);
|
||||
ordIndexInstances.put(field.number, ordIndexInstance);
|
||||
ramBytesUsed.addAndGet(ordIndexInstance.ramBytesUsed() + RamUsageEstimator.NUM_BYTES_INT);
|
||||
}
|
||||
ordIndex = ordIndexInstance;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue