List of usage examples for org.joda.time Interval getStart
public DateTime getStart()
From source file:org.apache.druid.server.audit.SQLAuditManager.java
License:Apache License
@Override public List<AuditEntry> fetchAuditHistory(final String type, Interval interval) { final Interval theInterval = getIntervalOrDefault(interval); return dbi.withHandle(new HandleCallback<List<AuditEntry>>() { @Override// w ww .j a va 2 s. co m public List<AuditEntry> withHandle(Handle handle) { return handle.createQuery(StringUtils.format( "SELECT payload FROM %s WHERE type = :type and created_date between :start_date and :end_date ORDER BY created_date", getAuditTable())).bind("type", type).bind("start_date", theInterval.getStart().toString()) .bind("end_date", theInterval.getEnd().toString()).map(new ResultSetMapper<AuditEntry>() { @Override public AuditEntry map(int index, ResultSet r, StatementContext ctx) throws SQLException { try { return jsonMapper.readValue(r.getBytes("payload"), AuditEntry.class); } catch (IOException e) { throw new SQLException(e); } } }).list(); } }); }
From source file:org.apache.druid.server.coordinator.helper.NewestSegmentFirstIterator.java
License:Apache License
/** * Returns the initial searchInterval which is {@code (timeline.first().start, timeline.last().end - skipOffset)}. * * @param timeline timeline of a dataSource * @param skipIntervals intervals to skip * * @return found interval to search or null if it's not found *///from w ww. ja v a 2 s . c o m private static List<Interval> findInitialSearchInterval(VersionedIntervalTimeline<String, DataSegment> timeline, Period skipOffset, @Nullable List<Interval> skipIntervals) { Preconditions.checkArgument(timeline != null && !timeline.isEmpty(), "timeline should not be null or empty"); Preconditions.checkNotNull(skipOffset, "skipOffset"); final TimelineObjectHolder<String, DataSegment> first = Preconditions.checkNotNull(timeline.first(), "first"); final TimelineObjectHolder<String, DataSegment> last = Preconditions.checkNotNull(timeline.last(), "last"); final List<Interval> fullSkipIntervals = sortAndAddSkipIntervalFromLatest(last.getInterval().getEnd(), skipOffset, skipIntervals); final Interval totalInterval = new Interval(first.getInterval().getStart(), last.getInterval().getEnd()); final List<Interval> filteredInterval = filterSkipIntervals(totalInterval, fullSkipIntervals); final List<Interval> searchIntervals = new ArrayList<>(); for (Interval lookupInterval : filteredInterval) { final List<TimelineObjectHolder<String, DataSegment>> holders = timeline .lookup(new Interval(lookupInterval.getStart(), lookupInterval.getEnd())); final List<DataSegment> segments = holders.stream() .flatMap(holder -> StreamSupport.stream(holder.getObject().spliterator(), false)) .map(PartitionChunk::getObject) .filter(segment -> lookupInterval.contains(segment.getInterval())) .sorted((s1, s2) -> Comparators.intervalsByStartThenEnd().compare(s1.getInterval(), s2.getInterval())) .collect(Collectors.toList()); if (!segments.isEmpty()) { searchIntervals.add(new Interval(segments.get(0).getInterval().getStart(), segments.get(segments.size() - 1).getInterval().getEnd())); } } return searchIntervals; }
From source file:org.apache.druid.server.coordinator.helper.NewestSegmentFirstIterator.java
License:Apache License
/** * Returns a list of intervals which are contained by totalInterval but don't ovarlap with skipIntervals. * * @param totalInterval total interval//from w w w . j a v a 2 s. c o m * @param skipIntervals intervals to skip. This should be sorted by {@link Comparators#intervalsByStartThenEnd()}. */ @VisibleForTesting static List<Interval> filterSkipIntervals(Interval totalInterval, List<Interval> skipIntervals) { final List<Interval> filteredIntervals = new ArrayList<>(skipIntervals.size() + 1); DateTime remainingStart = totalInterval.getStart(); DateTime remainingEnd = totalInterval.getEnd(); for (Interval skipInterval : skipIntervals) { if (skipInterval.getStart().isBefore(remainingStart) && skipInterval.getEnd().isAfter(remainingStart)) { remainingStart = skipInterval.getEnd(); } else if (skipInterval.getStart().isBefore(remainingEnd) && skipInterval.getEnd().isAfter(remainingEnd)) { remainingEnd = skipInterval.getStart(); } else if (!remainingStart.isAfter(skipInterval.getStart()) && !remainingEnd.isBefore(skipInterval.getEnd())) { filteredIntervals.add(new Interval(remainingStart, skipInterval.getStart())); remainingStart = skipInterval.getEnd(); } else { // Ignore this skipInterval log.warn("skipInterval[%s] is not contained in remainingInterval[%s]", skipInterval, new Interval(remainingStart, remainingEnd)); } } if (!remainingStart.equals(remainingEnd)) { filteredIntervals.add(new Interval(remainingStart, remainingEnd)); } return filteredIntervals; }
From source file:org.apache.druid.timeline.VersionedIntervalTimeline.java
License:Apache License
public boolean isOvershadowed(Interval interval, VersionType version, ObjectType object) { lock.readLock().lock();// w w w . j a v a 2s . c o m try { TimelineEntry entry = completePartitionsTimeline.get(interval); if (entry != null) { final int majorVersionCompare = versionComparator.compare(version, entry.getVersion()); if (majorVersionCompare == 0) { for (PartitionChunk<ObjectType> chunk : entry.partitionHolder) { if (chunk.getObject().overshadows(object)) { return true; } } return false; } else { return majorVersionCompare < 0; } } Interval lower = completePartitionsTimeline.floorKey(new Interval(interval.getStart(), DateTimes.MAX)); if (lower == null || !lower.overlaps(interval)) { return false; } Interval prev = null; Interval curr = lower; do { if (curr == null || //no further keys (prev != null && curr.getStartMillis() > prev.getEndMillis()) //a discontinuity ) { return false; } final TimelineEntry timelineEntry = completePartitionsTimeline.get(curr); final int versionCompare = versionComparator.compare(version, timelineEntry.getVersion()); //lower or same version if (versionCompare > 0) { return false; } else if (versionCompare == 0) { if (timelineEntry.partitionHolder.stream() .noneMatch(chunk -> chunk.getObject().overshadows(object))) { return false; } } prev = curr; curr = completePartitionsTimeline.higherKey(curr); } while (interval.getEndMillis() > prev.getEndMillis()); return true; } finally { lock.readLock().unlock(); } }
From source file:org.apache.druid.timeline.VersionedIntervalTimeline.java
License:Apache License
/** * @param timeline/*w w w .j a va2 s .c o m*/ * @param key * @param entry * * @return boolean flag indicating whether or not we inserted or discarded something */ private boolean addAtKey(NavigableMap<Interval, TimelineEntry> timeline, Interval key, TimelineEntry entry) { boolean retVal = false; Interval currKey = key; Interval entryInterval = entry.getTrueInterval(); if (!currKey.overlaps(entryInterval)) { return false; } while (entryInterval != null && currKey != null && currKey.overlaps(entryInterval)) { final Interval nextKey = timeline.higherKey(currKey); final int versionCompare = versionComparator.compare(entry.getVersion(), timeline.get(currKey).getVersion()); if (versionCompare < 0) { // since the entry version is lower than the existing one, the existing one overwrites the given entry // if overlapped. if (currKey.contains(entryInterval)) { // the version of the entry of currKey is larger than that of the given entry. Discard it return true; } else if (currKey.getStart().isBefore(entryInterval.getStart())) { // | entry | // | cur | // => |new| entryInterval = new Interval(currKey.getEnd(), entryInterval.getEnd()); } else { // | entry | // | cur | // => |new| addIntervalToTimeline(new Interval(entryInterval.getStart(), currKey.getStart()), entry, timeline); // | entry | // | cur | // => |new| if (entryInterval.getEnd().isAfter(currKey.getEnd())) { entryInterval = new Interval(currKey.getEnd(), entryInterval.getEnd()); } else { // Discard this entry since there is no portion of the entry interval that goes past the end of the curr // key interval. entryInterval = null; } } } else if (versionCompare > 0) { // since the entry version is greater than the existing one, the given entry overwrites the existing one // if overlapped. final TimelineEntry oldEntry = timeline.remove(currKey); if (currKey.contains(entryInterval)) { // | cur | // | entry | // => |old| new |old| addIntervalToTimeline(new Interval(currKey.getStart(), entryInterval.getStart()), oldEntry, timeline); addIntervalToTimeline(new Interval(entryInterval.getEnd(), currKey.getEnd()), oldEntry, timeline); addIntervalToTimeline(entryInterval, entry, timeline); return true; } else if (currKey.getStart().isBefore(entryInterval.getStart())) { // | cur | // | entry | // => |old| addIntervalToTimeline(new Interval(currKey.getStart(), entryInterval.getStart()), oldEntry, timeline); } else if (entryInterval.getEnd().isBefore(currKey.getEnd())) { // | cur | // | entry | // => |old| addIntervalToTimeline(new Interval(entryInterval.getEnd(), currKey.getEnd()), oldEntry, timeline); } } else { if (timeline.get(currKey).equals(entry)) { // This occurs when restoring segments timeline.remove(currKey); } else { throw new UOE("Cannot add overlapping segments [%s and %s] with the same version [%s]", currKey, entryInterval, entry.getVersion()); } } currKey = nextKey; retVal = true; } addIntervalToTimeline(entryInterval, entry, timeline); return retVal; }
From source file:org.apache.druid.timeline.VersionedIntervalTimeline.java
License:Apache License
private List<TimelineObjectHolder<VersionType, ObjectType>> lookup(Interval interval, boolean incompleteOk) { List<TimelineObjectHolder<VersionType, ObjectType>> retVal = new ArrayList<>(); NavigableMap<Interval, TimelineEntry> timeline = (incompleteOk) ? incompletePartitionsTimeline : completePartitionsTimeline; for (Entry<Interval, TimelineEntry> entry : timeline.entrySet()) { Interval timelineInterval = entry.getKey(); TimelineEntry val = entry.getValue(); if (timelineInterval.overlaps(interval)) { retVal.add(new TimelineObjectHolder<>(timelineInterval, val.getTrueInterval(), val.getVersion(), new PartitionHolder<>(val.getPartitionHolder()))); }// w w w. j a v a 2s . c o m } if (retVal.isEmpty()) { return retVal; } TimelineObjectHolder<VersionType, ObjectType> firstEntry = retVal.get(0); if (interval.overlaps(firstEntry.getInterval()) && interval.getStart().isAfter(firstEntry.getInterval().getStart())) { retVal.set(0, new TimelineObjectHolder<>(new Interval(interval.getStart(), firstEntry.getInterval().getEnd()), firstEntry.getTrueInterval(), firstEntry.getVersion(), firstEntry.getObject())); } TimelineObjectHolder<VersionType, ObjectType> lastEntry = retVal.get(retVal.size() - 1); if (interval.overlaps(lastEntry.getInterval()) && interval.getEnd().isBefore(lastEntry.getInterval().getEnd())) { retVal.set(retVal.size() - 1, new TimelineObjectHolder<>(new Interval(lastEntry.getInterval().getStart(), interval.getEnd()), lastEntry.getTrueInterval(), lastEntry.getVersion(), lastEntry.getObject())); } return retVal; }
From source file:org.apache.hadoop.hive.druid.DruidStorageHandlerUtils.java
License:Apache License
private static VersionedIntervalTimeline<String, DataSegment> getTimelineForIntervalWithHandle( final Handle handle, final String dataSource, final Interval interval, final MetadataStorageTablesConfig dbTables) throws IOException { Query<Map<String, Object>> sql = handle.createQuery(String.format( "SELECT payload FROM %s WHERE used = true AND dataSource = ? AND start <= ? AND \"end\" >= ?", dbTables.getSegmentsTable())).bind(0, dataSource).bind(1, interval.getEnd().toString()) .bind(2, interval.getStart().toString()); final VersionedIntervalTimeline<String, DataSegment> timeline = new VersionedIntervalTimeline<>( Ordering.natural());// w w w . jav a 2s . co m final ResultIterator<byte[]> dbSegments = sql.map(ByteArrayMapper.FIRST).iterator(); try { while (dbSegments.hasNext()) { final byte[] payload = dbSegments.next(); DataSegment segment = JSON_MAPPER.readValue(payload, DataSegment.class); timeline.add(segment.getInterval(), segment.getVersion(), segment.getShardSpec().createChunk(segment)); } } finally { dbSegments.close(); } return timeline; }
From source file:org.archfirst.common.datetime.DateTimeUtil.java
License:Apache License
public static final String toString(Interval interval) { StringBuilder builder = new StringBuilder(); DateTimeFormatter fmt = DateTimeFormat.forPattern(DateTimeUtil.DATE_TIME_SEC_PATTERN); builder.append("["); builder.append(interval.getStart().toString(fmt)); builder.append(", "); builder.append(interval.getEnd().toString(fmt)); builder.append("]"); return builder.toString(); }
From source file:org.archfirst.common.datetime.DateTimeUtil.java
License:Apache License
public static Interval intervalEndingOn(Interval interval, DateTime end) { return new Interval(interval.getStart(), end); }
From source file:org.archfirst.common.datetime.IntervalComparator.java
License:Apache License
@Override public int compare(Interval interval1, Interval interval2) { int result = 0; // assume equal if (interval1 == null) { return -1; } else if (interval2 == null) { return 1; } else {/*from w ww .j av a 2 s . c om*/ result = interval1.getStart().compareTo(interval2.getStart()); if (result == 0) { result = interval1.getEnd().compareTo(interval2.getEnd()); } } return result; }