@Override public boolean start() throws IOException { // Determine the ack timeout. ackTimeoutMs = pubsubClient.get().ackDeadlineSeconds(subscription) * 1000; return advance(); }
reader = new PubsubReader(options.as(PubsubOptions.class), this, subscription); } catch (GeneralSecurityException | IOException e) { throw new RuntimeException("Unable to subscribe to " + subscriptionPath + ": ", e);
long nowMsSinceEpoch = now(); List<String> assumeExpired = new ArrayList<>(); List<String> toBeExtended = new ArrayList<>(); extendBatch(nowMsSinceEpoch, toBeExtended);
PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); assertTrue(reader.start()); } else { assertTrue(reader.advance()); String data = data(reader.getCurrent()); Integer messageNum = dataToMessageNum.remove(data); assertEquals(new Instant(messageNumToTimestamp(messageNum)), reader.getCurrentTimestamp()); assertArrayEquals(recid.getBytes(StandardCharsets.UTF_8), reader.getCurrentRecordId()); long watermark = reader.getWatermark().getMillis(); long minOutstandingTimestamp = Long.MAX_VALUE; for (Integer outstandingMessageNum : dataToMessageNum.values()) { PubsubCheckpoint checkpoint = reader.getCheckpointMark(); if (i % 2000 == 1999) { checkpoint.finalizeCheckpoint(); assertFalse(reader.advance()); reader.close();
PubsubReader reader = primSource.createReader(p.getOptions(), null); assertTrue(reader.start()); assertEquals("data_0", data(reader.getCurrent())); PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); assertEquals(1, checkpoint.notYetReadIds.size()); assertTrue(reader.advance()); assertEquals("data_1", data(reader.getCurrent())); assertTrue(reader.start()); assertEquals("data_1", data(reader.getCurrent())); assertFalse(reader.advance()); checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close();
assertThat(createdSubscription, not(nullValue())); PubsubCheckpoint checkpoint = reader.getCheckpointMark(); assertThat(checkpoint.subscriptionPath, equalTo(createdSubscription.getPath()));
@Test public void timeoutAckExtensions() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); // Pull the first message but don't take a checkpoint for it. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Extend the ack. now.addAndGet(55 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Let the ack expire. for (int i = 0; i < 3; i++) { now.addAndGet(25 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); } // Wait for resend. now.addAndGet(25 * 1000); pubsubClient.advance(); // Reread the same message. assertTrue(reader.advance()); assertEquals(DATA, data(reader.getCurrent())); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
@Test public void timeoutAckAndRereadOneMessage() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Let the ACK deadline for the above expire. now.addAndGet(65 * 1000); pubsubClient.advance(); // We'll now receive the same message again. assertTrue(reader.advance()); assertEquals(DATA, data(reader.getCurrent())); assertFalse(reader.advance()); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
@Test public void extendAck() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); // Pull the first message but don't take a checkpoint for it. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Extend the ack now.addAndGet(55 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Extend the ack again now.addAndGet(25 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
@Test public void readOneMessage() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); // Read one message. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); assertFalse(reader.advance()); // ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
/** Tests that checkpoints finalized after the reader is closed succeed. */ @Test public void closeWithActiveCheckpoints() throws Exception { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); reader.start(); PubsubCheckpoint checkpoint = reader.getCheckpointMark(); reader.close(); checkpoint.finalizeCheckpoint(); } }