/** * Formats this deadline. * * @param overdueTimeUnit the time unit to show how much over the deadline we are. * @return a formatted string. */ public String format(final TimeUnit overdueTimeUnit) { return String.format("Deadline: %s, %s overdue", formatTarget(), remainingTimeValue()); }
/** * Creates a deadline from a string in the format {@value #DATE_FORMAT}. * * @param source a string in the format {@value #DATE_FORMAT}. * @return a deadline from a string in the format {@value #DATE_FORMAT}. * @throws ParseException if the specified source string cannot be parsed. */ public static Deadline parse(final String source) throws ParseException { return fromUnixMillis(simpleDateFormat.parse(source).getTime()); }
/** * @since 5.0 */ public void updateExpiry(final TimeValue expiryTime) { Args.notNull(expiryTime, "Expiry time"); final long currentTime = getCurrentTime(); final Deadline newExpiry = Deadline.calculate(currentTime, expiryTime); this.expiryDeadline = newExpiry.min(this.validityDeadline); this.updated = currentTime; }
@Test public void testMessage() { final Deadline deadline = Deadline.fromUnixMillis(1000).freeze(); Assert.assertTrue(deadline.toString(), deadline.isExpired()); final String format = deadline.formatTarget(); final TimeValue diff = TimeValue.ofMilliseconds(deadline.remaining()); Assert.assertEquals("Deadline: " + format + ", " + diff + " overdue", DeadlineTimeoutException.from(deadline).getMessage()); }
@Test public void testFormat() throws ParseException { final Deadline deadline = Deadline.fromUnixMillis(1000); final Deadline deadline2 = Deadline.parse(deadline.toString()); Assert.assertEquals(1000, deadline2.getValue()); }
public void validatePendingRequests() { final Iterator<LeaseRequest<T, C>> it = pending.iterator(); while (it.hasNext()) { final LeaseRequest<T, C> request = it.next(); final BasicFuture<PoolEntry<T, C>> future = request.getFuture(); if (future.isCancelled() && !request.isDone()) { it.remove(); } else { final Deadline deadline = request.getDeadline(); if (deadline.isExpired()) { request.failed(DeadlineTimeoutException.from(deadline)); } if (request.isDone()) { it.remove(); } } } }
@Test public void testIsExpired() { Assert.assertTrue(Deadline.fromUnixMillis(0).isExpired()); Assert.assertTrue(Deadline.fromUnixMillis(1).isExpired()); Assert.assertFalse(Deadline.MAX_VALUE.isExpired()); Assert.assertTrue(Deadline.MIN_VALUE.isExpired()); }
@Test public void testMin() { Assert.assertEquals(Deadline.MIN_VALUE, Deadline.MIN_VALUE.min(Deadline.MAX_VALUE)); Assert.assertEquals(Deadline.MIN_VALUE, Deadline.MAX_VALUE.min(Deadline.MIN_VALUE)); // final Deadline deadline0 = Deadline.fromUnixMillis(0); Assert.assertEquals(Deadline.MIN_VALUE, deadline0.min(Deadline.MIN_VALUE)); Assert.assertEquals(deadline0, deadline0.min(Deadline.MAX_VALUE)); // final Deadline deadline1 = Deadline.fromUnixMillis(0); Assert.assertEquals(Deadline.MIN_VALUE, deadline1.min(Deadline.MIN_VALUE)); Assert.assertEquals(deadline0, deadline1.min(Deadline.MAX_VALUE)); }
@Test public void testIsBefore() { final long nowPlusOneMin = System.currentTimeMillis() + 60000; final Deadline deadline = Deadline.fromUnixMillis(nowPlusOneMin); Assert.assertTrue(deadline.isBefore(nowPlusOneMin + 1)); }
@Override public void execute(final PoolEntry<T, C> entry) { if (entry.getExpiryDeadline().isBefore(now)) { entry.discardConnection(CloseMode.GRACEFUL); } }
@Test public void testIsMax() { Assert.assertFalse(Deadline.fromUnixMillis(0).isMax()); Assert.assertFalse(Deadline.fromUnixMillis(1000).isMax()); Assert.assertFalse(Deadline.MIN_VALUE.isMax()); Assert.assertTrue(Deadline.MAX_VALUE.isMax()); }
@Test public void testIsNotExpired() { Assert.assertFalse(Deadline.fromUnixMillis(0).isNotExpired()); Assert.assertFalse(Deadline.fromUnixMillis(1).isNotExpired()); Assert.assertTrue(Deadline.MAX_VALUE.isNotExpired()); Assert.assertFalse(Deadline.MIN_VALUE.isNotExpired()); }
@Test public void testIsMin() { Assert.assertTrue(Deadline.fromUnixMillis(0).isMin()); Assert.assertFalse(Deadline.fromUnixMillis(1000).isMin()); Assert.assertFalse(Deadline.MAX_VALUE.isMin()); Assert.assertTrue(Deadline.MIN_VALUE.isMin()); }
/** * Returns the difference in milliseconds between the deadline and now. * * @return the different in milliseconds between the deadline and now. * @deprecated Use {@link #remaining()} */ @Deprecated public long difference() { return remaining(); }
@Test public void testValue() { final long nowPlusOneMin = System.currentTimeMillis() + 60000; final Deadline deadline = Deadline.fromUnixMillis(nowPlusOneMin); Assert.assertEquals(nowPlusOneMin, deadline.getValue()); } }
LeaseRequest( final Object state, final Timeout requestTimeout, final BasicFuture<PoolEntry<T, C>> future) { super(); this.state = state; this.deadline = Deadline.calculate(requestTimeout); this.future = future; }
@Override public String toString() { return formatTarget(); }
/** * Creates a new exception for the given timeout deadline and actual timeout. * * @param deadline When was the deadline in UNIX time. */ private DeadlineTimeoutException(final Deadline deadline) { // Deadline in a format like ISO8601: YYYY-MM-DDThh:mm:ss.sTZD // We use the TimeZone zone ID because we cannot get from String.format() in // Java 7 and the short names have been deprecated. super(deadline.format(TimeUnit.MILLISECONDS)); this.deadline = deadline; }
/** * Creates a deadline from a UNIX time in milliseconds. * * @param value a UNIX time in milliseconds. * @return a new deadline. */ public static Deadline fromUnixMillis(final long value) { if (value == INTERNAL_MAX_VALUE) { return MAX_VALUE; } if (value == INTERNAL_MIN_VALUE) { return MIN_VALUE; } return new Deadline(value); }
public void validatePendingRequests() { final Iterator<LeaseRequest<T, C>> it = pending.iterator(); while (it.hasNext()) { final LeaseRequest<T, C> request = it.next(); final BasicFuture<PoolEntry<T, C>> future = request.getFuture(); if (future.isCancelled() && !request.isDone()) { it.remove(); } else { final Deadline deadline = request.getDeadline(); if (deadline.isExpired()) { request.failed(DeadlineTimeoutException.from(deadline)); } if (request.isDone()) { it.remove(); } } } }