public static ISegmentAdvisor newSegmentAdvisor(ISegment seg) { try { Class<? extends ISegmentAdvisor> clz = ClassUtil.forName(seg.getConfig().getSegmentAdvisor(), ISegmentAdvisor.class); return clz.getConstructor(ISegment.class).newInstance(seg); } catch (Exception e) { throw new RuntimeException(e); } }
boolean isOffsetCube = all.get(0).isOffsetCube(); for (ISegment seg : all) { seg.validate(); if (seg.isOffsetCube() != isOffsetCube) throw new IllegalStateException("Inconsistent isOffsetsOn for segment " + seg); List<ISegment> news = Lists.newArrayListWithCapacity(all.size()); for (ISegment seg : all) { if (seg.getStatus() == SegmentStatusEnum.READY) ready.add(seg); else for (ISegment seg : ready) { if (pre != null) { if (pre.getSegRange().overlaps(seg.getSegRange())) throw new IllegalStateException("Segments overlap: " + pre + " and " + seg); if (pre.getSegRange().apartBefore(seg.getSegRange())) logger.warn("Hole between adjacent READY segments " + pre + " and " + seg); for (ISegment seg : news) { if (pre != null) { if (pre.getSegRange().overlaps(seg.getSegRange())) throw new IllegalStateException("Segments overlap: " + pre + " and " + seg); if (seg.getSegRange().overlaps(aReady.getSegRange()) && !seg.getSegRange().contains(aReady.getSegRange())) throw new IllegalStateException("Segments overlap: " + aReady + " and " + seg);
public Pair<T, T> findMergeOffsetsByDateRange(TSRange tsRange, long skipSegDateRangeCap) { // must be offset cube Segments result = new Segments(); for (ISegment seg : this) { // include if date range overlaps if (tsRange.overlaps(seg.getTSRange())) { // reject too big segment if (seg.getTSRange().duration() > skipSegDateRangeCap) break; // reject holes if (result.size() > 0 && !result.getLast().getSegRange().connects(seg.getSegRange())) break; result.add(seg); } } if (result.size() <= 1) return null; else return (Pair<T, T>) Pair.newPair(result.getFirst(), result.getLast()); }
public boolean isOperative(ISegment seg) { if (seg.getStatus() != SegmentStatusEnum.READY) return false; for (ISegment other : this) { if (other == seg) continue; if (other.getSegRange().overlaps(seg.getSegRange())) return false; } return true; } }
public T getLatestReadySegment() { T latest = null; for (int i = this.size() - 1; i >= 0; i--) { T seg = this.get(i); if (seg.getStatus() != SegmentStatusEnum.READY) continue; if (latest == null || latest.getTSRange().end.v < seg.getTSRange().end.v) { latest = seg; } } return latest; }
public long getTSEnd() { Segments<T> readySegs = getSegments(SegmentStatusEnum.READY); long endTime = Long.MIN_VALUE; for (ISegment seg : readySegs) { endTime = Math.max(endTime, seg.getTSRange().end.v); } return endTime; }
firstSeg.validate(); js.validate(); if (is.getSegRange().start.compareTo(js.getSegRange().start) == 0) { if (is.getSegRange().end.compareTo(js.getSegRange().end) <= 0) { tobe.remove(i); } else { if (is.getSegRange().end.compareTo(js.getSegRange().start) <= 0) { i++; j++;
@Override public int compareTo(ISegment other) { int comp = this.getSegRange().start.compareTo(other.getSegRange().start); if (comp != 0) return comp; return this.getSegRange().end.compareTo(other.getSegRange().end); }
final ISegment sa = SegmentFactory.create(SegmentFactory.Supported.for("uno")); sa.validate();
public T getLatestBuiltSegment() { T latest = null; for (int i = this.size() - 1; i >= 0; i--) { T seg = this.get(i); if (seg.getLastBuildTime() > 0) { if (latest == null || seg.getLastBuildTime() > latest.getLastBuildTime()) latest = seg; } } return latest; }
private ByteArray encodeTime(long ts, int index, int roundingFlag) { String value; DataType partitionColType = info.getColumnType(index); if (partitionColType.isDate()) { value = DateFormat.formatToDateStr(ts); } else if (partitionColType.isTimeFamily()) { value = DateFormat.formatToTimeWithoutMilliStr(ts); } else if (partitionColType.isStringFamily() || partitionColType.isIntegerFamily()) {//integer like 20160101 String partitionDateFormat = segment.getModel().getPartitionDesc().getPartitionDateFormat(); if (StringUtils.isEmpty(partitionDateFormat)) { value = "" + ts; } else { value = DateFormat.formatToDateStr(ts, partitionDateFormat); } } else { throw new RuntimeException("Type " + partitionColType + " is not valid partition column type"); } ByteBuffer buffer = ByteBuffer.allocate(info.getMaxColumnLength()); info.getCodeSystem().encodeColumnValue(index, value, roundingFlag, buffer); return ByteArray.copyOf(buffer.array(), 0, buffer.position()); } }
public Segments<T> getMergingSegments(T mergedSegment) { Segments<T> result = new Segments(); if (mergedSegment == null) return result; for (T seg : this) { if (seg.getStatus() != SegmentStatusEnum.READY && seg.getStatus() != SegmentStatusEnum.READY_PENDING) continue; if (seg == mergedSegment) continue; if (mergedSegment.getSegRange().contains(seg.getSegRange())) { result.add(seg); } } return result; }
public long getTSStart() { Segments<T> readySegs = getSegments(SegmentStatusEnum.READY); long startTime = Long.MAX_VALUE; for (ISegment seg : readySegs) { startTime = Math.min(startTime, seg.getTSRange().start.v); } return startTime; }
firstSeg.validate(); js.validate(); if (is.getSegRange().start.compareTo(js.getSegRange().start) == 0) { if (is.getSegRange().end.compareTo(js.getSegRange().end) <= 0) { tobe.remove(i); } else { if (is.getSegRange().end.compareTo(js.getSegRange().start) <= 0) { i++; j++;
public T getLatestReadySegment() { T latest = null; for (int i = this.size() - 1; i >= 0; i--) { T seg = this.get(i); if (seg.getStatus() != SegmentStatusEnum.READY) continue; if (latest == null || latest.getTSRange().end.v < seg.getTSRange().end.v) { latest = seg; } } return latest; }
public Pair<Boolean, Boolean> fitInSegments(ISegment newOne) { if (this.isEmpty()) return null; ISegment first = this.get(0); ISegment last = this.get(this.size() - 1); Endpoint start = newOne.getSegRange().start; Endpoint end = newOne.getSegRange().end; boolean startFit = false; boolean endFit = false; for (ISegment sss : this) { if (sss == newOne) continue; startFit = startFit || (start.equals(sss.getSegRange().start) || start.equals(sss.getSegRange().end)); endFit = endFit || (end.equals(sss.getSegRange().start) || end.equals(sss.getSegRange().end)); } if (!startFit && endFit && newOne == first) startFit = true; if (!endFit && startFit && newOne == last) endFit = true; return Pair.newPair(startFit, endFit); }
private boolean isReady(ISegment seg) { return seg.getStatus() == SegmentStatusEnum.READY; }