public void expireMessages(int messageTTLInSeconds) { if (expirationCheckInProgressUpdater.compareAndSet(this, FALSE, TRUE)) { log.info("[{}][{}] Starting message expiry check, ttl= {} seconds", topicName, subName, messageTTLInSeconds); cursor.asyncFindNewestMatching(ManagedCursor.FindPositionConstraint.SearchActiveEntries, entry -> { MessageImpl msg = null; try { msg = MessageImpl.deserialize(entry.getDataBuffer()); return msg.isExpired(messageTTLInSeconds); } catch (Exception e) { log.error("[{}][{}] Error deserializing message for expiry check", topicName, subName, e); } finally { entry.release(); if (msg != null) { msg.recycle(); } } return false; }, this, null); } else { if (log.isDebugEnabled()) { log.debug("[{}][{}] Ignore expire-message scheduled task, last check is still running", topicName, subName); } } }
public boolean isOldestMessageExpired(ManagedCursor cursor, long messageTTLInSeconds) { MessageImpl msg = null; Entry entry = null; boolean isOldestMessageExpired = false; try { entry = cursor.getNthEntry(1, IndividualDeletedEntries.Include); if (entry != null) { msg = MessageImpl.deserialize(entry.getDataBuffer()); isOldestMessageExpired = messageTTLInSeconds != 0 && System.currentTimeMillis() > (msg.getPublishTime() + TimeUnit.SECONDS.toMillis((long) (messageTTLInSeconds * MESSAGE_EXPIRY_THRESHOLD))); } } catch (Exception e) { log.warn("[{}] Error while getting the oldest message", topic, e); } finally { if (entry != null) { entry.release(); } if (msg != null) { msg.recycle(); } } return isOldestMessageExpired; }
MessageImpl msg = null; try { msg = MessageImpl.deserialize(entry.getDataBuffer()); return msg.getPublishTime() <= timestamp; } catch (Exception e) {
MessageImpl msg; try { msg = MessageImpl.deserialize(headersAndPayload); } catch (Throwable t) { log.error("[{}][{} -> {}] Failed to deserialize message at {} (buffer size: {}): {}", topicName,