public void readFields(final DataInput in) throws IOException { final int indexLength = in.readInt(); final byte[] indexBytes = new byte[indexLength]; in.readFully(indexBytes); final Index index = (Index) PersistenceUtils.fromBinary(indexBytes); final int numRanges = in.readInt(); final List<RangeLocationPair> rangeList = new ArrayList<>(numRanges); for (int j = 0; j < numRanges; j++) { try { final RangeLocationPair range = new RangeLocationPair(); range.readFields(in); rangeList.add(range); } catch (InstantiationException | IllegalAccessException e) { throw new IOException("Unable to instantiate range", e); } } this.index = index; rangeLocationPairs = rangeList; mixedVisibility = in.readBoolean(); authorizationsLimiting = in.readBoolean(); clientsideRowMerging = in.readBoolean(); }
@Override public int compare(final IndexRangeLocation o1, final IndexRangeLocation o2) { return (o1.rangeLocationPair.getCardinality() - o2.rangeLocationPair.getCardinality()) < 0 ? -1 : 1; } });
@Override public float getProgress() throws IOException { if ((numKeysRead > 0) && (currentGeoWaveKey == null)) { return 1.0f; } if (currentGeoWaveRangeIndexPair == null) { return 0.0f; } final ProgressPerRange progress = progressPerRange.get(currentGeoWaveRangeIndexPair); if (progress == null) { return Math.min( 1, Math.max( 0, getProgressForRange(currentGeoWaveRangeIndexPair.getRange(), currentGeoWaveKey))); } return Math.min( 1, Math.max( 0, getOverallProgress( currentGeoWaveRangeIndexPair.getRange(), currentGeoWaveKey, progress))); }
final double thisCardinalty = rangeLocationPair.getCardinality(); final double fraction = (targetCardinality - currentCardinality) / thisCardinalty; final byte[] start = rangeLocationPair.getRange().getStartSortKey(); final byte[] end = rangeLocationPair.getRange().getEndSortKey(); final double cdfStart = start == null ? 0.0 : stats.cdf(start); final String location = rangeLocationPair.getLocation(); final boolean startKeyInclusive = true; final boolean endKeyInclusive = false; if (((start != null) && (new ByteArray(start).compareTo(new ByteArray(splitKey)) >= 0)) || ((end != null) && (new ByteArray(end).compareTo(new ByteArray(splitKey)) <= 0))) { splitKey = SplitsProvider.getMidpoint(rangeLocationPair.getRange()); if (splitKey == null) { return null; if (Arrays.equals(end, splitKey) && !rangeLocationPair.getRange().isEndSortKeyInclusive()) { rangeLocationPair = new RangeLocationPair( new GeoWaveRowRange( rangeLocationPair.getRange().getPartitionKey(), rangeLocationPair.getRange().getStartSortKey(), splitKey, rangeLocationPair.getRange().isStartSortKeyInclusive(), endKeyInclusive), location, stats.cardinality(rangeLocationPair.getRange().getStartSortKey(), splitKey)); return null;
double nextCardinality = currentCardinality + next.rangeLocationPair.getCardinality(); if (nextCardinality > targetCardinality) { final IndexRangeLocation newSplit = Pair.of( next.index, new ByteArray(next.rangeLocationPair.getRange().getPartitionKey()))), currentCardinality, targetCardinality); double splitCardinality = next.rangeLocationPair.getCardinality(); splitCardinality += newSplit.rangeLocationPair.getCardinality(); addPairForIndex(otherSplitInfo, newSplit.rangeLocationPair, newSplit.index); addPairForIndex(splitInfo, next.rangeLocationPair, next.index);
new RangeLocationPair(gwRange, hostname, cardinality < 1 ? 1.0 : cardinality));
public void write(final DataOutput out) throws IOException { final byte[] indexBytes = PersistenceUtils.toBinary(index); out.writeInt(indexBytes.length); out.write(indexBytes); out.writeInt(rangeLocationPairs.size()); for (final RangeLocationPair r : rangeLocationPairs) { r.write(out); } out.writeBoolean(mixedVisibility); out.writeBoolean(authorizationsLimiting); out.writeBoolean(clientsideRowMerging); } }
for (final Entry<String, SplitInfo> entry : splitInfo.entrySet()) { for (final RangeLocationPair pair : entry.getValue().getRangeLocationPairs()) { if ((pair.getLocation() != null) && !pair.getLocation().isEmpty()) { locations.add(pair.getLocation());
splitInfo.isAuthorizationsLimiting(), splitInfo.isClientsideRowMerging(), r.getRange(), sanitizedQueryOptions.getLimit(), sanitizedQueryOptions.getMaxRangeDecomposition(), sanitizedQueryOptions.getAuthorizations())))); incrementalRangeSums.put(r, sum); sum = sum.add(BigDecimal.valueOf(r.getCardinality()));
gwRange); rangeList.add( new RangeLocationPair( gwRange, cardinality <= 0 ? 0 : cardinality < 1 ? 1.0 : cardinality)); new RangeLocationPair(new GeoWaveRowRange(null, null, null, true, false), 0.0)); new RangeLocationPair( gwRange, cardinality <= 0 ? 0 : cardinality < 1 ? 1.0 : cardinality));
private synchronized double getTotalCardinality() { double sum = 0.0; for (final SplitInfo si : splitInfo.values()) { for (final RangeLocationPair pair : si.getRangeLocationPairs()) { sum += pair.getCardinality(); } } return sum; } }
/** * This implementation of length is only an estimate, it does not provide exact values. Do not * have your code rely on this return value. */ @Override public long getLength() throws IOException { long diff = 0; for (final Entry<String, SplitInfo> indexEntry : splitInfo.entrySet()) { for (final RangeLocationPair range : indexEntry.getValue().getRangeLocationPairs()) { diff += (long) range.getCardinality(); } } return diff; }