You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by GitBox <gi...@apache.org> on 2021/02/04 23:46:40 UTC
[GitHub] [kafka] szpak opened a new pull request #10062: MINOR: Add performAndClose default method in KeyValueIterator
szpak opened a new pull request #10062:
URL: https://github.com/apache/kafka/pull/10062
That method intends to increase a chance to have KeyValueIterator closed
after usage, by providing a convenient performAndClose() default method which
executes a given operation and guarantee to automatically close the iterator
right after.
### Rationality
I decided to create that PR observing in different projects how often an iterator is left open after performing operations such as
`.forEachRemaining(...)` (who reads JavaDoc after all? ;-) ). For people aware of the problem, instead of verbose try-with-resources constructions repeated in every place in code:
```
try (KeyValueIterator<String, Order> ordersKeyValueIterator =
streamsBuilderFactoryBean
.getKafkaStreams()
.store(StoreQueryParameters.fromNameAndType(ORDERS_STORE,
QueryableStoreTypes.<String, Order>keyValueStore()))
.all()) {
ordersKeyValueIterator
.forEachRemaining(kv -> {
...
});
}
```
(or hidden in in-house built utility classes)
a developer using Kafka Streams has a built-in clear way to perform operations on elements contained in an iterator (and have that stream closed after that automatically):
```
streamsBuilderFactoryBean
.getKafkaStreams()
.store(StoreQueryParameters.fromNameAndType(ORDERS_STORE,
QueryableStoreTypes.<String, OrderRequest>keyValueStore()))
.all()
.performAndClose(iterator -> iterator
.forEachRemaining(kv -> {
...
})
);
```
I believe it can increase a rate of closed iterator in user projects.
### Testing approach
Being a default method in KeyValueIterator, I decided to test it using KeyValueIteratorFacade which already provides a nice unit testing infrastructure with mocked iterator. I don't know the implementation details, but I expect to have it behaved similarly in other implementations.
I might miss some extra cases, so feel free to point them and I will happily cover them with tests.
### Rejected extensions
For some time past, I was thinking also about covering operations that returns some value. However, at least in projects I've been observing the usage of Kafka Streams, performing side effects is more popular and implementation for that use cases might be more tricky and I decided to start with pure Consumer.
### Other information
Naming is not my area of expertise. Feel free to propose any better name or any other possible enhancements to my MR :-).
### Committer Checklist (excluded from commit message)
- [ ] Verify design and implementation
- [ ] Verify test coverage and CI build status
- [ ] Verify documentation (including upgrade notes)
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [kafka] chia7712 commented on pull request #10062: MINOR: Add performAndClose default method in KeyValueIterator
Posted by GitBox <gi...@apache.org>.
chia7712 commented on pull request #10062:
URL: https://github.com/apache/kafka/pull/10062#issuecomment-795146375
@szpak thanks for this contribution.
I'm not familiar with `KeyValueIterator` but it appears to be a public APIs changes. If so, a KIP is required. see https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [kafka] szpak commented on pull request #10062: MINOR: Add performAndClose default method in KeyValueIterator
Posted by GitBox <gi...@apache.org>.
szpak commented on pull request #10062:
URL: https://github.com/apache/kafka/pull/10062#issuecomment-795123807
Anyone willing to review my PR?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org