Skip to content

Commit 439d8d3

Browse files
Merge pull request #5 from caplin/optimisations
Performance improvements and extended test coverage
2 parents 78bcf6b + 55d5d8e commit 439d8d3

File tree

74 files changed

+2793
-509
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+2793
-509
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*.sh text eol=lf
44
*.conf text eol=lf
55
gradlew text eol=lf
6+
*.api text eol=lf
67

78
# These files are text and should be normalized (Convert crlf <=> lf)
89
*.kt text

.idea/compiler.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradle/libs.versions.toml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ springBoot = "3.5.10"
33
kotlin = "1.9.25" # Keep in sync with Spring - https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html
44
kotlinCollectionsImmutable = "0.3.8"
55
jsonPatch = "1.13"
6+
jmh = "1.37"
7+
jmh-plugin = "0.7.3"
68
kotlinpoet = "2.2.0"
79
ktfmt = "0.61"
10+
fory = "0.15.0"
811

912
# Caplin Dependencies
1013
datasource = "8.0.10-1695-5ddb3798"
@@ -28,6 +31,10 @@ vanniktech-maven-publish-plugin = "0.31.0"
2831
kotlin-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "kotlinCollectionsImmutable" }
2932
json-patch = { module = "com.github.java-json-tools:json-patch", version.ref = "jsonPatch" }
3033
kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" }
34+
fory-core = { module = "org.apache.fory:fory-core", version.ref = "fory" }
35+
fory-kotlin = { module = "org.apache.fory:fory-kotlin", version.ref = "fory" }
36+
jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" }
37+
jmh-generator = { module = "org.openjdk.jmh:jmh-generator-annprocess", version.ref = "jmh" }
3138

3239
# Caplin Dependencies
3340
datasource = { module = "com.caplin.platform.integration.java:datasource", version.ref = "datasource" }
@@ -54,4 +61,5 @@ spring-boot-dependencies = { module = "org.springframework.boot:spring-boot-depe
5461
spring-boot-configuration-processor = { module = "org.springframework.boot:spring-boot-configuration-processor", version.ref = "springBoot" }
5562

5663
[plugins]
57-
spring-boot = { id = "org.springframework.boot", version.ref = "springBoot" }
64+
spring-boot = { id = "org.springframework.boot", version.ref = "springBoot" }
65+
jmh = { id = "me.champeau.jmh", version.ref = "jmh-plugin" }

reactive/kotlin/src/test/kotlin/com/caplin/integration/datasourcex/reactive/kotlin/BindTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ class BindTest :
469469
delay(1)
470470

471471
verify { cachedMessageFactory.createContainerMessage("/SUBJECT/1") }
472+
verify { cachedMessageFactory.createGenericMessage("/SUBJECT/1-items/1") }
472473

473474
sharedFlow.subscriptionCount.value shouldBeEqual 0
474475

util/api/datasourcex-util.api

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,6 @@ public final class com/caplin/integration/datasourcex/util/ReadWriteLock {
7777
public final fun writeUnlock ()V
7878
}
7979

80-
public final class com/caplin/integration/datasourcex/util/SerializablePersistentMapKt {
81-
public static final fun serializable (Lkotlinx/collections/immutable/PersistentMap;)Lkotlinx/collections/immutable/PersistentMap;
82-
}
83-
84-
public final class com/caplin/integration/datasourcex/util/SerializablePersistentSetKt {
85-
public static final fun serializable (Lkotlinx/collections/immutable/PersistentSet;)Lkotlinx/collections/immutable/PersistentSet;
86-
}
87-
8880
public abstract interface class com/caplin/integration/datasourcex/util/SimpleDataSourceConfig {
8981
public abstract fun getExtraConfig ()Ljava/lang/String;
9082
public abstract fun getLocalLabel ()Ljava/lang/String;
@@ -135,9 +127,11 @@ public final class com/caplin/integration/datasourcex/util/SimpleDataSourceConfi
135127

136128
public final class com/caplin/integration/datasourcex/util/SimpleDataSourceFactory {
137129
public static final field INSTANCE Lcom/caplin/integration/datasourcex/util/SimpleDataSourceFactory;
138-
public static final fun createDataSource (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/fasterxml/jackson/databind/ObjectMapper;)Lcom/caplin/datasource/DataSource;
139-
public static synthetic fun createDataSource$default (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/fasterxml/jackson/databind/ObjectMapper;ILjava/lang/Object;)Lcom/caplin/datasource/DataSource;
140-
public final fun getDefaultObjectMapper ()Lcom/fasterxml/jackson/databind/ObjectMapper;
130+
public static final fun createDataSource (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/caplin/datasource/messaging/json/JsonHandler;)Lcom/caplin/datasource/DataSource;
131+
public static synthetic fun createDataSource$default (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/caplin/datasource/messaging/json/JsonHandler;ILjava/lang/Object;)Lcom/caplin/datasource/DataSource;
132+
public static final fun createJackson2JsonHandler (Lcom/fasterxml/jackson/databind/ObjectMapper;)Lcom/caplin/datasource/messaging/json/JacksonJsonHandler;
133+
public final fun getDefaultJackson2JsonHandler ()Lcom/caplin/datasource/messaging/json/JacksonJsonHandler;
134+
public final fun getDefaultJackson2ObjectMapper ()Lcom/fasterxml/jackson/databind/ObjectMapper;
141135
}
142136

143137
public final class com/caplin/integration/datasourcex/util/TimeoutKt {
@@ -190,16 +184,53 @@ public abstract interface class com/caplin/integration/datasourcex/util/flow/Flo
190184
public final class com/caplin/integration/datasourcex/util/flow/FlowMapKt {
191185
public static final fun mutableFlowMapOf ()Lcom/caplin/integration/datasourcex/util/flow/MutableFlowMap;
192186
public static final fun mutableFlowMapOf ([Lkotlin/Pair;)Lcom/caplin/integration/datasourcex/util/flow/MutableFlowMap;
187+
public static final fun runningFoldToMapFlowMapStreamEvent (Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
193188
public static final fun simpleToFlowMapIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
194189
public static final fun toFlowMapIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
195190
public static final fun toMutableFlowMap (Ljava/util/Map;)Lcom/caplin/integration/datasourcex/util/flow/MutableFlowMap;
196191
}
197192

193+
public abstract interface class com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent {
194+
}
195+
196+
public final class com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$Cleared : com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent {
197+
public static final field INSTANCE Lcom/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$Cleared;
198+
public fun toString ()Ljava/lang/String;
199+
}
200+
201+
public final class com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$EventUpdate : com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent {
202+
public static final synthetic fun box-impl (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;)Lcom/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$EventUpdate;
203+
public static fun constructor-impl (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;)Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;
204+
public fun equals (Ljava/lang/Object;)Z
205+
public static fun equals-impl (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;Ljava/lang/Object;)Z
206+
public static final fun equals-impl0 (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;)Z
207+
public final fun getEvent ()Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;
208+
public fun hashCode ()I
209+
public static fun hashCode-impl (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;)I
210+
public fun toString ()Ljava/lang/String;
211+
public static fun toString-impl (Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;)Ljava/lang/String;
212+
public final synthetic fun unbox-impl ()Lcom/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent;
213+
}
214+
215+
public final class com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$InitialState : com/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent {
216+
public static final synthetic fun box-impl (Ljava/util/Map;)Lcom/caplin/integration/datasourcex/util/flow/FlowMapStreamEvent$InitialState;
217+
public static fun constructor-impl (Ljava/util/Map;)Ljava/util/Map;
218+
public fun equals (Ljava/lang/Object;)Z
219+
public static fun equals-impl (Ljava/util/Map;Ljava/lang/Object;)Z
220+
public static final fun equals-impl0 (Ljava/util/Map;Ljava/util/Map;)Z
221+
public final fun getMap ()Ljava/util/Map;
222+
public fun hashCode ()I
223+
public static fun hashCode-impl (Ljava/util/Map;)I
224+
public fun toString ()Ljava/lang/String;
225+
public static fun toString-impl (Ljava/util/Map;)Ljava/lang/String;
226+
public final synthetic fun unbox-impl ()Ljava/util/Map;
227+
}
228+
198229
public abstract interface class com/caplin/integration/datasourcex/util/flow/LoadingCompletingSharedFlowCache {
199230
public abstract fun get (Ljava/lang/Object;)Lcom/caplin/integration/datasourcex/util/flow/CompletingSharedFlow;
200231
}
201232

202-
public abstract interface class com/caplin/integration/datasourcex/util/flow/MapEvent : java/io/Serializable {
233+
public abstract interface class com/caplin/integration/datasourcex/util/flow/MapEvent {
203234
}
204235

205236
public abstract interface class com/caplin/integration/datasourcex/util/flow/MapEvent$EntryEvent : com/caplin/integration/datasourcex/util/flow/MapEvent {
@@ -257,6 +288,7 @@ public final class com/caplin/integration/datasourcex/util/flow/MapEventKt {
257288

258289
public abstract interface class com/caplin/integration/datasourcex/util/flow/MapFlow {
259290
public abstract fun asFlow (Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
291+
public abstract fun asFlowWithState ()Lkotlinx/coroutines/flow/Flow;
260292
public abstract fun valueFlow (Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
261293
}
262294

@@ -294,7 +326,7 @@ public final class com/caplin/integration/datasourcex/util/flow/RetryKt {
294326
public static synthetic fun retryWithExponentialBackoff$default (Lkotlinx/coroutines/flow/Flow;JJLkotlin/jvm/functions/Function3;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
295327
}
296328

297-
public abstract interface class com/caplin/integration/datasourcex/util/flow/SetEvent : java/io/Serializable {
329+
public abstract interface class com/caplin/integration/datasourcex/util/flow/SetEvent {
298330
}
299331

300332
public abstract interface class com/caplin/integration/datasourcex/util/flow/SetEvent$EntryEvent : com/caplin/integration/datasourcex/util/flow/SetEvent {
@@ -337,7 +369,7 @@ public final class com/caplin/integration/datasourcex/util/flow/SetEventKt {
337369
public static final fun toEvents (Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
338370
}
339371

340-
public abstract interface class com/caplin/integration/datasourcex/util/flow/SimpleMapEvent : java/io/Serializable {
372+
public abstract interface class com/caplin/integration/datasourcex/util/flow/SimpleMapEvent {
341373
}
342374

343375
public abstract interface class com/caplin/integration/datasourcex/util/flow/SimpleMapEvent$EntryEvent : com/caplin/integration/datasourcex/util/flow/SimpleMapEvent {
@@ -393,7 +425,7 @@ public final class com/caplin/integration/datasourcex/util/flow/TimeoutKt {
393425
public static final fun timeoutFirstOrNull (Lkotlinx/coroutines/flow/Flow;Ljava/time/Duration;)Lkotlinx/coroutines/flow/Flow;
394426
}
395427

396-
public abstract interface class com/caplin/integration/datasourcex/util/flow/ValueOrCompletion : java/io/Serializable {
428+
public abstract interface class com/caplin/integration/datasourcex/util/flow/ValueOrCompletion {
397429
public abstract fun map (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
398430
}
399431

@@ -430,3 +462,16 @@ public final class com/caplin/integration/datasourcex/util/flow/ValueOrCompletio
430462
public static final fun materializeUnboxed (Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
431463
}
432464

465+
public final class com/caplin/integration/datasourcex/util/serialization/fory/DataSourceModuleKt {
466+
public static final fun registerDataSourceSerializers (Lorg/apache/fory/Fory;)Lorg/apache/fory/Fory;
467+
public static final fun registerPersistentCollectionSerializers (Lorg/apache/fory/Fory;)Lorg/apache/fory/Fory;
468+
}
469+
470+
public final class com/caplin/integration/datasourcex/util/serialization/jackson2/DataSourceModule : com/fasterxml/jackson/databind/module/SimpleModule {
471+
public static final field INSTANCE Lcom/caplin/integration/datasourcex/util/serialization/jackson2/DataSourceModule;
472+
}
473+
474+
public final class com/caplin/integration/datasourcex/util/serialization/jackson2/DataSourceModuleKt {
475+
public static final fun registerDataSourceModule (Lcom/fasterxml/jackson/databind/ObjectMapper;)Lcom/fasterxml/jackson/databind/ObjectMapper;
476+
}
477+

util/build.gradle.kts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
plugins { `common-library` }
1+
plugins {
2+
`common-library`
3+
alias(libs.plugins.jmh)
4+
}
25

36
description = "Utility classes for DataSource extensions"
47

@@ -15,12 +18,22 @@ dependencies {
1518
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
1619
implementation(libs.kotlin.collections.immutable)
1720

21+
compileOnly(libs.fory.core)
22+
compileOnly(libs.fory.kotlin)
23+
1824
testRuntimeOnly("org.slf4j:slf4j-simple")
1925

2026
testImplementation("org.springframework:spring-core") // For testing the RegexPathMatcher
2127
testImplementation(libs.turbine)
2228
testImplementation(libs.kotest.assertions)
2329
testImplementation(libs.kotest.runner)
30+
testImplementation(libs.fory.core)
31+
testImplementation(libs.fory.kotlin)
32+
33+
jmh(libs.jmh.core)
34+
jmh(libs.jmh.generator)
2435
}
2536

37+
jmh { duplicateClassesStrategy.set(DuplicatesStrategy.EXCLUDE) }
38+
2639
dokka { dokkaSourceSets.configureEach { includes.from("README.md") } }

0 commit comments

Comments
 (0)