public Segments<T> getSegments(SegmentStatusEnum status) { Segments<T> result = new Segments<>(); for (T segment : this) { if (segment.getStatus() == status) { result.add(segment); } } return result; }
private Segments<T> getSubList(int from, int to) { Segments<T> result = new Segments<>(); for (T seg : this.subList(from, to)) { result.add(seg); } return result; }
public Segments<T> getBuildingSegments() { Segments<T> buildingSegments = new Segments(); if (null != this) { for (T segment : this) { if (SegmentStatusEnum.NEW == segment.getStatus() || SegmentStatusEnum.READY_PENDING == segment.getStatus()) { buildingSegments.add(segment); } } } return buildingSegments; }
public void removeLatestSegmentByVolatileRange(Segments<T> segs, long volatileRange) { if(volatileRange <= 0) { return; } long latestSegEndTs = Long.MIN_VALUE; for(T seg: segs) { latestSegEndTs = Math.max(latestSegEndTs, seg.getTSRange().end.v); } Segments volatileSegs = new Segments(); for(T seg: segs) { if(seg.getTSRange().end.v + volatileRange > latestSegEndTs) { logger.warn("segment in volatile range: seg:" + seg.toString() + "rangeStart:" + seg.getTSRange().start.v + ", rangeEnd" + seg.getTSRange().end.v); volatileSegs.add(seg); } } segs.removeAll(volatileSegs); }
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 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()); }
@Test public void copyCubeSegmentTest() { int origSegCount = cubeInstance.getSegments().size(); CubeInstance newCubeInstance = CubeInstance.getCopyOf(cubeInstance); CubeSegment mockSeg = new CubeSegment(); mockSeg.setUuid(RandomUtil.randomUUID().toString()); mockSeg.setStorageLocationIdentifier(RandomUtil.randomUUID().toString()); mockSeg.setStatus(SegmentStatusEnum.READY); newCubeInstance.getSegments().add(mockSeg); Assert.assertEquals(origSegCount, cubeInstance.getSegments().size()); Assert.assertEquals(origSegCount + 1, newCubeInstance.getSegments().size()); }
tobe.add(newSegment);
mergingSegs.add(ready);
private Segments<T> getSubList(int from, int to) { Segments<T> result = new Segments<>(); for (T seg : this.subList(from, to)) { result.add(seg); } return result; }
public Segments<T> getSegments(SegmentStatusEnum status) { Segments<T> result = new Segments<>(); for (T segment : this) { if (segment.getStatus() == status) { result.add(segment); } } return result; }
public Segments<T> getBuildingSegments() { Segments<T> buildingSegments = new Segments(); if (null != this) { for (T segment : this) { if (SegmentStatusEnum.NEW == segment.getStatus() || SegmentStatusEnum.READY_PENDING == segment.getStatus()) { buildingSegments.add(segment); } } } return buildingSegments; }
public void removeLatestSegmentByVolatileRange(Segments<T> segs, long volatileRange) { if(volatileRange <= 0) { return; } long latestSegEndTs = Long.MIN_VALUE; for(T seg: segs) { latestSegEndTs = Math.max(latestSegEndTs, seg.getTSRange().end.v); } Segments volatileSegs = new Segments(); for(T seg: segs) { if(seg.getTSRange().end.v + volatileRange > latestSegEndTs) { logger.warn("segment in volatile range: seg:" + seg.toString() + "rangeStart:" + seg.getTSRange().start.v + ", rangeEnd" + seg.getTSRange().end.v); volatileSegs.add(seg); } } segs.removeAll(volatileSegs); }
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 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()); }
tobe.add(newSegment);
mergingSegs.add(ready);