Skip to content

Commit 372f98b

Browse files
gguptpnichgu
andauthored
Every other change for DynamoDBStreamsKinesis Adapter Compatibility (#995)
Co-authored-by: Nicholas Gutierrez <[email protected]>
1 parent 251b331 commit 372f98b

30 files changed

+404
-269
lines changed

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/AsynchronousGetRecordsRetrievalStrategy.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,24 @@ public class AsynchronousGetRecordsRetrievalStrategy implements GetRecordsRetrie
4545
private static final int TIME_TO_KEEP_ALIVE = 5;
4646
private static final int CORE_THREAD_POOL_COUNT = 1;
4747

48-
private final KinesisDataFetcher dataFetcher;
48+
private final IDataFetcher dataFetcher;
4949
private final ExecutorService executorService;
5050
private final int retryGetRecordsInSeconds;
5151
private final String shardId;
5252
final Supplier<CompletionService<DataFetcherResult>> completionServiceSupplier;
5353

54-
public AsynchronousGetRecordsRetrievalStrategy(@NonNull final KinesisDataFetcher dataFetcher,
54+
public AsynchronousGetRecordsRetrievalStrategy(@NonNull final IDataFetcher dataFetcher,
5555
final int retryGetRecordsInSeconds, final int maxGetRecordsThreadPool, String shardId) {
5656
this(dataFetcher, buildExector(maxGetRecordsThreadPool, shardId), retryGetRecordsInSeconds, shardId);
5757
}
5858

59-
public AsynchronousGetRecordsRetrievalStrategy(final KinesisDataFetcher dataFetcher,
59+
public AsynchronousGetRecordsRetrievalStrategy(final IDataFetcher dataFetcher,
6060
final ExecutorService executorService, final int retryGetRecordsInSeconds, String shardId) {
6161
this(dataFetcher, executorService, retryGetRecordsInSeconds, () -> new ExecutorCompletionService<>(executorService),
6262
shardId);
6363
}
6464

65-
AsynchronousGetRecordsRetrievalStrategy(KinesisDataFetcher dataFetcher, ExecutorService executorService,
65+
AsynchronousGetRecordsRetrievalStrategy(IDataFetcher dataFetcher, ExecutorService executorService,
6666
int retryGetRecordsInSeconds, Supplier<CompletionService<DataFetcherResult>> completionServiceSupplier,
6767
String shardId) {
6868
this.dataFetcher = dataFetcher;
@@ -148,7 +148,7 @@ private static ExecutorService buildExector(int maxGetRecordsThreadPool, String
148148
}
149149

150150
@Override
151-
public KinesisDataFetcher getDataFetcher() {
151+
public IDataFetcher getDataFetcher() {
152152
return dataFetcher;
153153
}
154154
}

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/BlockOnParentShardTask.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
* If we don't find a checkpoint for the parent shard(s), we assume they have been trimmed and directly
3131
* proceed with processing data from the shard.
3232
*/
33-
class BlockOnParentShardTask implements ITask {
33+
public class BlockOnParentShardTask implements ITask {
3434

3535
private static final Log LOG = LogFactory.getLog(BlockOnParentShardTask.class);
3636
private final ShardInfo shardInfo;
@@ -45,7 +45,7 @@ class BlockOnParentShardTask implements ITask {
4545
* @param leaseManager Used to fetch the lease and checkpoint info for parent shards
4646
* @param parentShardPollIntervalMillis Sleep time if the parent shard has not completed processing
4747
*/
48-
BlockOnParentShardTask(ShardInfo shardInfo,
48+
public BlockOnParentShardTask(ShardInfo shardInfo,
4949
ILeaseManager<KinesisClientLease> leaseManager,
5050
long parentShardPollIntervalMillis) {
5151
this.shardInfo = shardInfo;

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/GetRecordsRetrievalStrategy.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ public interface GetRecordsRetrievalStrategy {
4646
boolean isShutdown();
4747

4848
/**
49-
* Returns the KinesisDataFetcher used to getRecords from Kinesis.
49+
* Returns the IDataFetcher used to getRecords
5050
*
51-
* @return KinesisDataFetcher
51+
* @return IDataFetcher
5252
*/
53-
KinesisDataFetcher getDataFetcher();
53+
IDataFetcher getDataFetcher();
5454
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.amazonaws.services.kinesis.clientlibrary.lib.worker;
2+
3+
import com.amazonaws.services.kinesis.clientlibrary.types.ExtendedSequenceNumber;
4+
import com.amazonaws.services.kinesis.model.ChildShard;
5+
6+
import java.util.List;
7+
8+
public interface IDataFetcher {
9+
10+
DataFetcherResult getRecords(int maxRecords);
11+
12+
void initialize(String initialCheckpoint, InitialPositionInStreamExtended initialPositionInStream);
13+
14+
void initialize(ExtendedSequenceNumber initialCheckpoint, InitialPositionInStreamExtended initialPositionInStream);
15+
16+
void advanceIteratorTo(String sequenceNumber, InitialPositionInStreamExtended initialPositionInStream);
17+
18+
void restartIterator();
19+
20+
boolean isShardEndReached();
21+
22+
List<ChildShard> getChildShards();
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.amazonaws.services.kinesis.clientlibrary.lib.worker;
2+
3+
public interface IShardConsumer {
4+
5+
boolean isSkipShardSyncAtWorkerInitializationIfLeasesExist();
6+
7+
enum TaskOutcome {
8+
SUCCESSFUL, END_OF_SHARD, NOT_COMPLETE, FAILURE, LEASE_NOT_FOUND
9+
}
10+
11+
boolean consumeShard();
12+
13+
boolean isShutdown();
14+
15+
ShutdownReason getShutdownReason();
16+
17+
boolean beginShutdown();
18+
19+
void notifyShutdownRequested(ShutdownNotification shutdownNotification);
20+
21+
KinesisConsumerStates.ShardConsumerState getCurrentState();
22+
23+
boolean isShutdownRequested();
24+
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.amazonaws.services.kinesis.clientlibrary.lib.worker;
2+
3+
import com.amazonaws.services.kinesis.clientlibrary.interfaces.ICheckpoint;
4+
import com.amazonaws.services.kinesis.clientlibrary.interfaces.v2.IRecordProcessor;
5+
import com.amazonaws.services.kinesis.leases.impl.LeaseCleanupManager;
6+
import com.amazonaws.services.kinesis.metrics.interfaces.IMetricsFactory;
7+
8+
import java.util.Optional;
9+
import java.util.concurrent.ExecutorService;
10+
11+
public interface IShardConsumerFactory {
12+
13+
/**
14+
* Returns a shard consumer to be used for consuming a (assigned) shard.
15+
*
16+
* @return Returns a shard consumer object.
17+
*/
18+
IShardConsumer createShardConsumer(ShardInfo shardInfo,
19+
StreamConfig streamConfig,
20+
ICheckpoint checkpointTracker,
21+
IRecordProcessor recordProcessor,
22+
RecordProcessorCheckpointer recordProcessorCheckpointer,
23+
KinesisClientLibLeaseCoordinator leaseCoordinator,
24+
long parentShardPollIntervalMillis,
25+
boolean cleanupLeasesUponShardCompletion,
26+
ExecutorService executorService,
27+
IMetricsFactory metricsFactory,
28+
long taskBackoffTimeMillis,
29+
boolean skipShardSyncAtWorkerInitializationIfLeasesExist,
30+
Optional<Integer> retryGetRecordsInSeconds,
31+
Optional<Integer> maxGetRecordsThreadPool,
32+
KinesisClientLibConfiguration config, ShardSyncer shardSyncer, ShardSyncStrategy shardSyncStrategy,
33+
LeaseCleanupManager leaseCleanupManager);
34+
}

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/InitializeTask.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929
/**
3030
* Task for initializing shard position and invoking the RecordProcessor initialize() API.
3131
*/
32-
class InitializeTask implements ITask {
32+
public class InitializeTask implements ITask {
3333

3434
private static final Log LOG = LogFactory.getLog(InitializeTask.class);
3535

3636
private static final String RECORD_PROCESSOR_INITIALIZE_METRIC = "RecordProcessor.initialize";
3737

3838
private final ShardInfo shardInfo;
3939
private final IRecordProcessor recordProcessor;
40-
private final KinesisDataFetcher dataFetcher;
40+
private final IDataFetcher dataFetcher;
4141
private final TaskType taskType = TaskType.INITIALIZE;
4242
private final ICheckpoint checkpoint;
4343
private final RecordProcessorCheckpointer recordProcessorCheckpointer;
@@ -49,11 +49,11 @@ class InitializeTask implements ITask {
4949
/**
5050
* Constructor.
5151
*/
52-
InitializeTask(ShardInfo shardInfo,
52+
public InitializeTask(ShardInfo shardInfo,
5353
IRecordProcessor recordProcessor,
5454
ICheckpoint checkpoint,
5555
RecordProcessorCheckpointer recordProcessorCheckpointer,
56-
KinesisDataFetcher dataFetcher,
56+
IDataFetcher dataFetcher,
5757
long backoffTimeMillis,
5858
StreamConfig streamConfig,
5959
GetRecordsCache getRecordsCache) {

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/KinesisClientLibConfiguration.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class KinesisClientLibConfiguration {
6161
public static final int DEFAULT_MAX_RECORDS = 10000;
6262

6363
/**
64-
* The default value for how long the {@link ShardConsumer} should sleep if no records are returned from the call to
64+
* The default value for how long the {@link KinesisShardConsumer} should sleep if no records are returned from the call to
6565
* {@link com.amazonaws.services.kinesis.AmazonKinesis#getRecords(com.amazonaws.services.kinesis.model.GetRecordsRequest)}.
6666
*/
6767
public static final long DEFAULT_IDLETIME_BETWEEN_READS_MILLIS = 1000L;
@@ -91,7 +91,7 @@ public class KinesisClientLibConfiguration {
9191
public static final boolean DEFAULT_CLEANUP_LEASES_UPON_SHARDS_COMPLETION = true;
9292

9393
/**
94-
* Interval to run lease cleanup thread in {@link LeaseCleanupManager}.
94+
* Interval to run lease cleanup thread in {@link com.amazonaws.services.kinesis.leases.impl.LeaseCleanupManager}.
9595
*/
9696
private static final long DEFAULT_LEASE_CLEANUP_INTERVAL_MILLIS = Duration.ofMinutes(1).toMillis();
9797

@@ -1030,7 +1030,7 @@ public int getInitialLeaseTableWriteCapacity() {
10301030
* Keeping it protected to forbid outside callers from depending on this internal object.
10311031
* @return The initialPositionInStreamExtended object.
10321032
*/
1033-
protected InitialPositionInStreamExtended getInitialPositionInStreamExtended() {
1033+
public InitialPositionInStreamExtended getInitialPositionInStreamExtended() {
10341034
return initialPositionInStreamExtended;
10351035
}
10361036

src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/KinesisClientLibLeaseCoordinator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
/**
5252
* This class is used to coordinate/manage leases owned by this worker process and to get/set checkpoints.
5353
*/
54-
class KinesisClientLibLeaseCoordinator extends LeaseCoordinator<KinesisClientLease> implements ICheckpoint {
54+
public class KinesisClientLibLeaseCoordinator extends LeaseCoordinator<KinesisClientLease> implements ICheckpoint {
5555

5656
private static final Log LOG = LogFactory.getLog(KinesisClientLibLeaseCoordinator.class);
5757

@@ -368,7 +368,7 @@ void runLeaseRenewer() throws DependencyException, InvalidStateException {
368368
*
369369
* @return LeaseManager
370370
*/
371-
ILeaseManager<KinesisClientLease> getLeaseManager() {
371+
public ILeaseManager<KinesisClientLease> getLeaseManager() {
372372
return leaseManager;
373373
}
374374

0 commit comments

Comments
 (0)