Commit graph

196 commits

Author SHA1 Message Date
Justin Pfifer
01f5db8049 Support Validating Records are From to the Expected Shard (#400)
* SequenceNumberValidator for verifying shardId's

Added a SequenceNumberValidator that will can extract, and verify
shardId's from a v2 sequence number.

* Added documentation and bit length test

Added documentation for the public methods.
Added a bit length test for the reader that will reject sequence
numbers that don't fit the expectations.

* Added more comments and further document public operations

Added comments in the only SequenceNumberReader explaining how things
are expected to work.

Further documented the class and operations with expectations and outcomes.

* Added configuration to allow failing on mismatched records

Allow configuration which will cause the FanOutRecordsPublisher to
throw an exception when it detects records that aren't for the shard
it's processing.
2018-09-18 03:03:46 +05:30
Justin Pfifer
e8735a4742
Debugging Logs for Initialization of FanOutRecordsPublisher (#398)
* Some debug logging to understand mismatched sequence numbers

Added some logging messages for sequence numbers when starting up.

* Added debug support and logging

Added @ToString to InitialPositionInStreamExtended for debugging
purposes.
Added a debug log about the initialization of the
FanOutRecordsPublisher to ensure that the publisher is being
initialized as expected.
2018-09-11 12:16:12 -07:00
Justin Pfifer
c8a3a031f4
Updated to 2.0.3-SNAPSHOT (#397) 2018-09-11 10:41:47 -07:00
Justin Pfifer
a8badc22d0
Release notes for 2.0.2 (#392)
Release notes for 2.0.2, and advance the version
2018-09-04 10:44:30 -07:00
jiaxul
ea49eef19e Introduce initialization exception handler in KCL V2 (#369)
Added a new method to the WorkerStateChangeListener that is called once all attempts to initialize the scheduler have failed.
2018-08-31 07:54:52 -07:00
Justin Pfifer
0634a3c836
Merge pull request #388 from pfifer/default-deprecated
Change the CoordinatorFactory deprecated methods to default
2018-08-30 08:17:33 -07:00
Justin Pfifer
70f937b68b
Merge pull request #387 from maghis/patch-1
Fixed typo in terminate log message
2018-08-30 08:06:47 -07:00
Pfifer, Justin
106c055744 Change the CoordinatorFactory deprecated methods to default
Changed the CoordinatorFactory methods to be default methods.  This
will not require an implementer to implement the deprecated methods.

Updated the documentation on the methods to indicate resolve order as
a list.
2018-08-30 08:03:18 -07:00
Massimo Andreasi Bassi
b6472df41a
Fixed typo in terminate log message 2018-08-30 10:57:57 -04:00
Justin Pfifer
03af17f6ee
Merge pull request #386 from sahilpalvia/commons-lang-fix
Upgrading KCL to use commons-lang 3.7
2018-08-29 14:14:58 -07:00
Sahil Palvia
0ec3004b0b Updating the import in the configuration test. 2018-08-27 13:12:28 -07:00
Sahil Palvia
878b1a4af9 Upgrading KCL to use only commons-lang3
* Removing commons-lang 2.6 dependency
* Upgrading imports to use commons-lang3
2018-08-27 13:07:39 -07:00
Justin Pfifer
7734561e18
Merge pull request #385 from sahilpalvia/coordinator-config-fix
Cleaning up configuration

Deprecating createGracefulShutdownCoordinator from CoordinatorFactory
Deprecating createWorkerStateChangeListener from CoordinatorFactory
Introduing gracefulShutdownCoordinator and workerStateChangeListener configurations to CoordinatorConfig
Switching to use CoordinatorFactory only if the new configurations in code are set to null
2018-08-27 11:51:06 -07:00
Sahil Palvia
7fa9e10991 Cleaning up configuration
* Deprecating createGracefulShutdownCoordinator from CoordinatorFactory
* Deprecating createWorkerStateChangeListener from CoordinatorFactory
* Introduing gracefulShutdownCoordinator and workerStateChangeListener configurations to CoordinatorConfig
* Switching to use CoordinatorFactory only if the new configurations in code are set to null
2018-08-27 11:26:04 -07:00
Justin Pfifer
99667e8f50 Respect logWarningForTaskAfterMillis for logging a retrieval warning (#383)
Only log a warning if it's been > logWarningForTaskAfterMillis time
since data was last received.
2018-08-23 13:16:53 -07:00
Justin Pfifer
e3eff0dc3c
Merge pull request #379 from sahilpalvia/readme_fix
Updating README and version information
2018-08-22 11:45:29 -07:00
Sahil Palvia
9459cc6a9e Updating README and version information
* Adding information on how to import the project using maven
* Updating project version to 2.0.2-SNAPSHOT
2018-08-21 17:02:42 -07:00
Justin Pfifer
2e598fe715
Merge pull request #378 from pfifer/release-notes-2.0.1-missed
Updates release notes for PR #368
2018-08-21 12:31:11 -07:00
Pfifer, Justin
a720c8670b Updates release notes for PR #368
Updated the configuration class/method, and added the PR to the
release notes.
2018-08-21 11:49:16 -07:00
Justin Pfifer
9d6eb6b1a8 Advance version and release notes for 2.0.1 (#377)
* Update release notes for release 2.0.1

* Updated version to 2.0.1

* Added notes for PR #371, and cleaned up formatting

* Reordered release notes, and added additional fixes

Ordered the release notes in ascending order of their issue #

Added release notes for #374 and #375

* Add release notes to the change log
2018-08-21 10:12:45 -07:00
Justin Pfifer
90acdc02bf Rename outstandingRquests to availableQueueSpace (#375)
outstandingRequests was actually representing the available space in
the RxJava queue.  This renames it to better match reality.

Also changed to only make the request if there is available queue
space.  We now decrement availableQueueSpace ahead of determine
whether to request another item.
2018-08-20 16:17:25 -07:00
Justin Pfifer
5533d370cd Don't allow activities if the subscriber is current, or the connection to Kinesis is broken (#374)
* Added missing lock around the call to request.

Calls to Subscription#request weren't synchronized correctly.  This
was only really an issue if there is a large number of errors
occurring.

* Reject operations where the subscriber doesn't match.

If the original subscriber doesn't match the current subscriber reject
operations completely.
If the flow is null, but the subscriber still matches error out the
subscription.  The original subscriber will restart.

For canceling only accept the cancel request if the original
subscriber matches the current subscriber.

* Remove unneeded if statement

Don't really need to check if the subscriber is still current, as this
is synchronized.
2018-08-20 13:45:48 -07:00
Justin Pfifer
c1e38f0126 Update the lastRequestTime to prevent overlapping restarts. (#373)
When a restart occurs due to no activity set the lastRequestTime to
now to prevent ti from overlapping itself.
2018-08-20 09:25:57 -07:00
Justin Pfifer
2e2c892b7e Upgrade to AWS SDK 2.0.1 (#372)
Upgraded to the new newest version of the SDK.
2018-08-17 09:42:04 -07:00
Justin Pfifer
e8d2190162 Use AFTER_SEQUENCE_NUMBER when reconnecting (#371)
Subscribe to shard ends periodically and the KCL needs to reconnect at
the last continuation sequence number.  If the continuation sequence
number happens to be the last record returned using AT_SEQUENCE_NUMBER
will cause the record to be returned again.
2018-08-16 13:37:52 -07:00
muktiranjan
e694ab7724 Moving the max number of Scheduler initialization attempts parameter … (#368)
* Moving the max number of Scheduler initialization attempts parameter to CoordinatorConfig

* Changing the max initialization attempts variable name
2018-08-15 13:25:07 -07:00
Sahil Palvia
205cf051f3
Cleaning up LeaseManagementConfig (#366)
* Cleaning up LeaseManagementConfig:

* Removing unused metrics factory variable from LeaseManagementConfig.

* Revert "Cleaning up LeaseManagementConfig:"

This reverts commit b16ba37966.

* Deprecating metrics factory in LeaseManagementConfig

* Marking metrics factory in LeaseManagementConfig for deprecation
2018-08-15 11:14:15 -07:00
Justin Pfifer
6973152f60
Merge pull request #360 from sahilpalvia/dynamodb-iops-fix
Ensure that lease tables are created with the specified IOPs values.
2018-08-13 07:50:21 -07:00
Justin Pfifer
9951062a5d
Merge pull request #359 from sahilpalvia/rnf-fix
Fixing issue with ResourceNotFound around SubscribeToShard
2018-08-13 07:02:09 -07:00
Justin Pfifer
69899cc394
Merge pull request #363 from muktiranjan/development
Making the maximum number of Scheduler initialization attempts configurable
2018-08-13 07:01:28 -07:00
Mukti Ranjan Sahoo
e8553ed5a9 Making the maximum number of Scheduler initialization attempts configurable 2018-08-10 18:11:07 -07:00
Sahil Palvia
f1cbf15075 Introducing changes to avoid breaking changes
* Introducing chained constructors in DynamoDBLeaseManagementFactory
* Introducing TableConstants to maintain Default IOPS in one place
2018-08-10 14:57:58 -07:00
Sahil Palvia
e780421036 Removing mock and introducing @Mock 2018-08-10 14:27:15 -07:00
Sahil Palvia
cd7dc1f9b1 Updating version to 2.0.1-SNAPSHOT for multilang 2018-08-10 10:40:28 -07:00
Sahil Palvia
b396626f7e Changes made according to comments:
* Creating handleFlowError method
* Using mocks instead of unnecessary spies
2018-08-10 10:18:15 -07:00
Sahil Palvia
ca88ee9bc6 Reverting some changes:
* Reverting the constructor, and adding chained constructor
* Reverting support for initial iops methods
* Adding deprecated tags and notes to javadoc
2018-08-10 10:08:59 -07:00
Sahil Palvia
51ec96bf9a Fixing IOPs issue with lease table
* Making DynamoDBLeaseCoordinator take IOPs configuration in the constructor
* InitialLeaseTableReadCapacity and InitialLeaseTableWriteCapacity for the DynamoDBLeaseCoordinator class throws UnsupportedException
2018-08-09 15:14:40 -07:00
Sahil Palvia
786831d664 Updating tests to have correct behavior
* Throwing exception from RecordFlow.exceptionOccured
2018-08-09 11:29:38 -07:00
Sahil Palvia
7de822fd9c Fixing issue with ResourceNotFound
* Calling onNext and onComplete if throwable is of the kind ResourceNotFound.
* Adding testing for ResourceNotFound
* Updating version to 2.0.1-SNAPSHOT
2018-08-09 10:25:37 -07:00
Sahil Palvia
0b267037ea Refactoring repo (#358)
* Introducing internal annotation to provided implementations
* Deleting unused Task classes
2018-08-08 11:04:29 -07:00
Justin Pfifer
b52cee9c43
Remove incorrect count of API usages (#357) 2018-08-08 10:42:53 -07:00
Justin Pfifer
6db7d3e658
Updated release notes for API usage and groupId changes (#355)
* Added note about the groupId change

The groupId of the Amazon Kinesis Client changed from com.amazonaws to
software.amazon.kinesis

Fixes #354

* Reorder items, and add message about new API's

Moved the configuration message to just above the configuration.
Added messages about the new API's that the KCL uses.

Fixes #353

* Updated CHANGELOG with the updated release notes
2018-08-06 12:22:49 -07:00
Justin Pfifer
1a7f68827c
Fix for failing testExceptionInProcessingStopsRequests (#356)
Changed to await for the next request before checking the healthCheck outcome.
Also add the test name to the thread name.
2018-08-06 08:31:02 -07:00
Justin Pfifer
dc6db0d007
Fix link to migration guide (#352) 2018-08-02 12:54:51 -07:00
Pfifer, Justin
978fe2671e Cleanup a merge artifact 2018-08-02 12:32:44 -07:00
Pfifer, Justin
258be9a504 Release 2.0.0 of the Amazon Kinesis Client for Java
* Added support for Enhanced Fan Out.
  Enhanced Fan Out provides for lower end to end latency, and increased number of consumers per stream.
  * Records are now delivered via streaming, reducing end-to-end latency.
  * The Amazon Kinesis Client will automatically register a new consumer if required.
    When registering a new consumer, the Kinesis Client will default to the application name unless configured otherwise.
  * New configuration options are available to configure Enhanced Fan Out.
  * `SubscribeToShard` maintains long lived connections with Kinesis, which in the AWS Java SDK 2.0 is limited by default.
    The `KinesisClientUtil` has been added to assist configuring the `maxConcurrency` of the `KinesisAsyncClient`.
    __WARNING: The Amazon Kinesis Client may see significantly increased latency, unless the `KinesisAsyncClient` is configured to have a `maxConcurrency` high enough to allow all leases plus additional usages of the `KinesisAsyncClient`.__

  | Name            | Default | Description                                                                                                         |
  |-----------------|---------|---------------------------------------------------------------------------------------------------------------------|
  | consumerArn     | Unset   | The ARN for an already created consumer.  If this is set, the Kinesis Client will not attempt to create a consumer. |
  | streamName      | Unset   | The name of the stream that a consumer should be create for if necessary                                            |
  | consumerName    | Unset   | The name of the consumer to create.  If this is not set the applicationName will be used instead.                   |
  | applicationName | Unset   | The name of the application.  This is used as the name of the consumer unless consumerName is set.                  |

* Modular Configuration of the Kinesis Client
  The Kinesis Client has migrated to a modular configuration system, and the `KinesisClientLibConfiguration` class has been removed.
  Configuration has been split into 7 classes.  Default versions of the configuration can be created from the `ConfigsBuilder`.
  Please see the migration guide for more information
  * `CheckpointConfig`
  * `CoordinatorConfig`
  * `LeaseManagementConfig`
  * `LifecycleConfig`
  * `MetricsConfig`
  * `ProcessorConfig`
  * `RetrievalConfig`

* Upgraded to AWS Java SDK 2.0
  The Kinesis Client now uses the AWS Java SDK 2.0.  The dependency on AWS Java SDK 1.11 has been removed.
  All configurations will only accept 2.0 clients.
  * When configuring the `KinesisAsyncClient` the `KinesisClientUtil#createKinesisAsyncClient` can be used to configure the Kinesis Client
  * __If you need support for AWS Java SDK 1.11 you will need to add a direct dependency.__
    __When adding a dependency you must ensure that the 1.11 versions of Jackson dependencies are excluded__
    Please see the migration guide for more information

* MultiLangDaemon is now a separate module
  The MultiLangDaemon has been separated to its own Maven module and is no longer available in `amazon-kinesis-client`.  To include the MultiLangDaemon, add a dependency on `amazon-kinesis-client-multilang`.
2018-08-02 12:19:46 -07:00
Justin Pfifer
f1d60ec1a6 Remove tests that no longer work (#346)
The new version of the SDK no longer returns null on an unknown
region.  There's not much we can do but run with whatever region is configured
2018-06-12 14:29:22 -07:00
Justin Pfifer
2483f8cbf8 Added cache updating behavior for GetShard (#344)
* Added cache updating behavior for GetShard

Customer are occasionally seeing messages about being unable to
retrieve shard information, which is logged as a warning.  This change
will allow the shard map to be updated even when there is no re-shard
operation.

This now triggers a shard list update if there is 1000 cache misses,
or a cache miss occurs when the cache is more than 30 seconds old.
For Kinesis the updates will use ListShards, and for DynamoDB Streams
it will continue to use DescribeStream.

* Adjust some logging, and the zeroing of cache misses a bit

Only log about cache refresh if it's the thread doing the cache
refresh.  If after synchronizing the shard is present, accept that
someone else loaded the shard map, and move on.

If the cache was reloaded, and the shard was found the current thread
will reset the cache misses.

The warnings for the cache miss was using a modulo of 1000 which is
the maximum value for cache misses, so wasn't to useful.
2018-06-07 13:25:03 -07:00
Marcin Ciszak
a84885db79 Enables property for setting AT_TIMESTAMP shard iterator initial time… (#342)
Allows setting the timestamp for InitialPositiinInStream.AT_TIMESTAMP from a properties file.
2018-05-29 09:52:08 -07:00
Sahil Palvia
be60a5507d Logging fixes for tests (#340)
* Adding log4j dependency for testing. Moving log4j.properties from test/src to test/resources.
2018-05-17 13:27:35 -07:00