Skip to content

Commit d42e9bf

Browse files
authored
Merge branch 'main' into beta5
2 parents 911103d + 40f00d3 commit d42e9bf

File tree

10 files changed

+45
-29
lines changed

10 files changed

+45
-29
lines changed

.github/workflows/build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
distribution: 'zulu'
2424
java-version: 17
2525

26-
- uses: gradle/gradle-build-action@v2
26+
- uses: gradle/gradle-build-action@v3
2727
with:
2828
arguments: build --scan --full-stacktrace
2929

.github/workflows/githubpages.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
with:
1515
fetch-depth: 0
1616

17-
- uses: gradle/gradle-build-action@v2
17+
- uses: gradle/gradle-build-action@v3
1818
with:
1919
arguments: -Pversion=${{ github.event.release.tag_name }} dokkaHtml
2020

.github/workflows/pr.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
jobs:
1010
check:
1111
runs-on: ubuntu-latest
12-
timeout-minutes: 30
12+
timeout-minutes: 120
1313

1414
steps:
1515
- uses: actions/checkout@v4
@@ -21,9 +21,9 @@ jobs:
2121
distribution: 'zulu'
2222
java-version: 17
2323

24-
- uses: gradle/gradle-build-action@v2
24+
- uses: gradle/gradle-build-action@v3
2525
with:
26-
arguments: build --scan --full-stacktrace
26+
arguments: build --scan --full-stacktrace -PstressTest=100
2727

2828
- name: Bundle the build report
2929
if: failure()

.github/workflows/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
distribution: 'zulu'
3131
java-version: 11
3232

33-
- uses: gradle/gradle-build-action@v2
33+
- uses: gradle/gradle-build-action@v3
3434
with:
3535
arguments: assemble -Pversion=${{ inputs.version }}
3636

@@ -42,6 +42,6 @@ jobs:
4242
path: '**/build/reports/**'
4343

4444
- name: Publish final version
45-
uses: gradle/gradle-build-action@v2
45+
uses: gradle/gradle-build-action@v3
4646
with:
4747
arguments: -Pversion=${{ inputs.version }} publishAllPublicationsToMavenCentralRepository

build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ tasks {
8585

8686
withType<Test>().configureEach {
8787
useJUnitPlatform()
88+
maxParallelForks = (2 * Runtime.getRuntime().availableProcessors())
89+
if (project.hasProperty("stressTest")) {
90+
systemProperty("io.github.nomisrev.kafka.TEST_ITERATIONS", project.properties["stressTest"] ?: 100)
91+
}
8892
testLogging {
8993
exceptionFormat = FULL
9094
events = setOf(SKIPPED, FAILED, STANDARD_ERROR)

gradle/libs.versions.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
[versions]
2-
kotest = "5.8.0"
3-
kafka = "3.6.1"
2+
kotest = "5.8.1"
3+
kafka = "3.7.0"
44
kotlin = "2.0.0-Beta5"
55
kotlinx-coroutines = "1.8.0"
6-
dokka = "1.9.10"
6+
dokka = "1.9.20"
77
knit = "0.5.0"
88
kover = "0.7.6"
9-
testcontainers-kafka = "1.19.6"
9+
testcontainers-kafka = "1.19.7"
1010
slf4j = "2.0.12"
1111
spotless="6.25.0"
12-
publish="0.27.0"
12+
publish="0.28.0"
1313

1414
[libraries]
1515
kotest-property = { module = "io.kotest:kotest-property", version.ref = "kotest" }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
44
networkTimeout=10000
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

src/main/kotlin/io/github/nomisRev/kafka/Consumer.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ import org.apache.kafka.clients.consumer.ConsumerRecords
6464
import org.apache.kafka.clients.consumer.KafkaConsumer
6565
import org.apache.kafka.clients.consumer.OffsetAndMetadata
6666
import org.apache.kafka.clients.consumer.RangeAssignor
67-
import org.apache.kafka.clients.consumer.internals.NoOpConsumerRebalanceListener
6867
import org.apache.kafka.common.metrics.Sensor
6968
import org.apache.kafka.common.serialization.Deserializer
7069
import org.apache.kafka.common.TopicPartition
@@ -195,7 +194,7 @@ public fun <K, V> List<ConsumerRecords<K, V>>.offsets(
195194
public fun <K, V> Flow<KafkaConsumer<K, V>>.subscribeTo(
196195
name: String,
197196
dispatcher: CoroutineDispatcher = IO,
198-
listener: ConsumerRebalanceListener = NoOpConsumerRebalanceListener(),
197+
listener: ConsumerRebalanceListener = NoOpConsumerRebalanceListener,
199198
timeout: kotlin.time.Duration = 500.milliseconds,
200199
): Flow<ConsumerRecord<K, V>> = flatMapConcat { consumer ->
201200
consumer.subscribeTo(name, dispatcher, listener, timeout)
@@ -212,7 +211,7 @@ public fun <K, V> Flow<KafkaConsumer<K, V>>.subscribeTo(
212211
public fun <K, V> KafkaConsumer<K, V>.subscribeTo(
213212
name: String,
214213
dispatcher: CoroutineDispatcher = IO,
215-
listener: ConsumerRebalanceListener = NoOpConsumerRebalanceListener(),
214+
listener: ConsumerRebalanceListener = NoOpConsumerRebalanceListener,
216215
timeout: kotlin.time.Duration = 500.milliseconds,
217216
): Flow<ConsumerRecord<K, V>> = flow {
218217
subscribe(listOf(name), listener)
@@ -365,3 +364,8 @@ public data class ConsumerSettings<K, V>(
365364
put(EXCLUDE_INTERNAL_TOPICS_CONFIG, excludeInternalTopics)
366365
}
367366
}
367+
368+
private object NoOpConsumerRebalanceListener : ConsumerRebalanceListener {
369+
override fun onPartitionsRevoked(partitions: MutableCollection<TopicPartition>?) {}
370+
override fun onPartitionsAssigned(partitions: MutableCollection<TopicPartition>?) {}
371+
}

src/main/kotlin/io/github/nomisRev/kafka/publisher/PublisherSettings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public data class PublisherSettings<Key, Value>(
3131
val bootstrapServers: String,
3232
val keySerializer: Serializer<Key>,
3333
val valueSerializer: Serializer<Value>,
34-
val acknowledgments: Acks = Acks.One,
34+
val acknowledgments: Acks = Acks.All,
3535
val closeTimeout: Duration = Duration.INFINITE,
3636
val isFatal: (t: Throwable) -> Boolean =
3737
{ it is AuthenticationException || it is ProducerFencedException },

src/test/kotlin/io/github/nomisrev/kafka/KafkaSpec.kt

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import org.apache.kafka.common.Metric
3434
import org.apache.kafka.common.MetricName
3535
import org.apache.kafka.common.PartitionInfo
3636
import org.apache.kafka.common.TopicPartition
37+
import org.apache.kafka.common.Uuid
3738
import org.apache.kafka.common.serialization.StringDeserializer
3839
import org.apache.kafka.common.serialization.StringSerializer
3940
import org.junit.jupiter.api.AfterAll
@@ -49,6 +50,8 @@ import java.util.concurrent.TimeUnit
4950
import kotlin.test.assertEquals
5051
import kotlin.time.Duration.Companion.seconds
5152

53+
private val testIterations: Int =
54+
System.getProperties().getProperty("io.github.nomisrev.kafka.TEST_ITERATIONS")?.toIntOrNull() ?: 1
5255

5356
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
5457
abstract class KafkaSpec {
@@ -62,7 +65,7 @@ abstract class KafkaSpec {
6265
fun destroy() {
6366
kafka.stop()
6467
}
65-
68+
6669
@BeforeAll
6770
@JvmStatic
6871
fun setup() {
@@ -85,10 +88,10 @@ abstract class KafkaSpec {
8588
withEnv("KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND", "true")
8689
withReuse(true)
8790
}
88-
91+
8992
fun KafkaReceiver(): KafkaReceiver<String, String> =
9093
KafkaReceiver(receiverSetting())
91-
94+
9295
fun receiverSetting(): ReceiverSettings<String, String> =
9396
ReceiverSettings(
9497
bootstrapServers = kafka.bootstrapServers,
@@ -168,15 +171,17 @@ abstract class KafkaSpec {
168171
partitions: Int = 4,
169172
replicationFactor: Short = 1,
170173
test: suspend TopicTestScope.(NewTopic) -> Unit
171-
): Unit = runTest {
172-
val topic = NewTopic(nextTopicName(), partitions, replicationFactor).configs(topicConfig)
173-
admin {
174-
createTopic(topic)
175-
try {
176-
TopicTestScope(topic, this@runTest).test(topic)
177-
} finally {
178-
topic.shouldBeEmpty()
179-
deleteTopic(topic.name())
174+
): Unit = repeat(testIterations) {
175+
runTest {
176+
val topic = NewTopic(nextTopicName(), partitions, replicationFactor).configs(topicConfig)
177+
admin {
178+
createTopic(topic)
179+
try {
180+
TopicTestScope(topic, this@runTest).test(topic)
181+
} finally {
182+
topic.shouldBeEmpty()
183+
deleteTopic(topic.name())
184+
}
180185
}
181186
}
182187
}
@@ -295,6 +300,9 @@ abstract class KafkaSpec {
295300
{
296301
val producer = KafkaProducer(it.properties(), it.keySerializer, it.valueSerializer)
297302
object : Producer<String, String> {
303+
override fun clientInstanceId(p0: Duration?): Uuid =
304+
producer.clientInstanceId(p0)
305+
298306
override fun close() {}
299307

300308
override fun close(timeout: Duration?) {}

0 commit comments

Comments
 (0)