Skip to content
This repository has been archived by the owner on May 30, 2024. It is now read-only.

prepare 5.1.1 release #215

Merged
merged 921 commits into from
Oct 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
921 commits
Select commit Hold shift + click to select a range
8e823cc
further fix to packaging test for beta versions
eli-darkly May 6, 2020
836e9b7
Merge branch 'eb/ch75792/packaging-test-beta-2' into 5.x-osgi-fix
eli-darkly May 6, 2020
bcca8b7
rename DataStoreUpdates to DataSourceUpdates
eli-darkly May 6, 2020
560dd58
Merge pull request #224 from launchdarkly/eb/ch75792/packaging-test-b…
eli-darkly May 6, 2020
50ea5b0
Merge branch 'master' into 5.x-osgi-fix
eli-darkly May 6, 2020
ac75225
Merge branch '5.x' into eb/ch75777/shared-executor
eli-darkly May 6, 2020
b952c10
Merge branch 'eb/ch75777/shared-executor' into eb/ch75800/store-status
eli-darkly May 6, 2020
dd3fa31
Merge branch 'eb/ch75800/store-status' into eb/ch75800/store-status-u…
eli-darkly May 6, 2020
691354d
add a new DataStoreUpdates that's for the data store to use
eli-darkly May 6, 2020
f8f76da
implement data source status monitoring
eli-darkly May 6, 2020
d5a3284
typo
eli-darkly May 6, 2020
85db8f0
rm duplicate type
eli-darkly May 6, 2020
02cc39b
javadoc fixes
eli-darkly May 6, 2020
f8d5b20
better cleanup of scheduled tasks from shared executor
eli-darkly May 7, 2020
4b747cb
Merge branch 'eb/ch75777/shared-executor' into eb/ch75800/store-status
eli-darkly May 7, 2020
31594f0
Merge branch 'eb/ch75800/store-status' into eb/ch75800/store-status-u…
eli-darkly May 7, 2020
ae2bdc7
Merge branch 'eb/ch75800/store-status-updates-intf-1' into eb/ch75800…
eli-darkly May 7, 2020
bd29aca
Merge branch 'eb/ch75800/store-status-updates-intf-2' into eb/ch67913…
eli-darkly May 7, 2020
f9ed725
Merge pull request #221 from launchdarkly/eb/ch75777/shared-executor
eli-darkly May 8, 2020
88e7040
Merge pull request #223 from launchdarkly/eb/ch75800/store-status
eli-darkly May 8, 2020
d2c7dc0
Merge pull request #225 from launchdarkly/eb/ch75800/store-status-upd…
eli-darkly May 8, 2020
b3ad5d7
Merge pull request #226 from launchdarkly/eb/ch75800/store-status-upd…
eli-darkly May 8, 2020
27b50b5
typos
eli-darkly May 8, 2020
adf8cce
rename STARTING to INITIALIZING
eli-darkly May 8, 2020
ae5da18
(5.0, but not dependent on other PRs) allow configuration of worker t…
eli-darkly May 8, 2020
5d56e8d
set up initial JMH benchmarks
eli-darkly May 8, 2020
eb8f1df
Merge branch '5.x' into eb/ch67913/data-source-status
eli-darkly May 8, 2020
a45df89
CI fix
eli-darkly May 8, 2020
a13193f
save report file
eli-darkly May 8, 2020
0c50b7b
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 8, 2020
58bf660
adapt benchmarks to 5.0 API
eli-darkly May 8, 2020
94202d3
benchmarks need Gson in order to use shared test code
eli-darkly May 8, 2020
fecff19
decouple event HTTP logic from event processing
eli-darkly May 9, 2020
a3409c2
Merge branch 'eb/ch76308/event-sender' into eb/ch76308/event-sender-5.x
eli-darkly May 9, 2020
8822060
add end-to-end test for events
eli-darkly May 9, 2020
d9aab4b
Merge branch 'eb/ch76308/event-sender' into eb/ch76308/event-sender-5.x
eli-darkly May 10, 2020
2349290
javadoc fixes
eli-darkly May 11, 2020
c9ece43
minor PR feedback
eli-darkly May 11, 2020
9690842
make DataSourceUpdatesImpl responsible for detecting store failures; …
eli-darkly May 12, 2020
1398c7c
Merge pull request #227 from launchdarkly/eb/ch67913/data-source-status
eli-darkly May 12, 2020
d6c90d1
(#7) implement time-dependent escalation of data source error logging…
eli-darkly May 12, 2020
d207958
Merge branch '5.x' into eb/ch76308/event-sender-5.x
eli-darkly May 12, 2020
40d45fa
fix swapped log levels
eli-darkly May 12, 2020
6bd5afe
better synchronization usage
eli-darkly May 12, 2020
fcd9631
don't need to wait 1 second during tests
eli-darkly May 12, 2020
de0831d
Merge pull request #230 from launchdarkly/eb/ch76308/event-sender
eli-darkly May 12, 2020
0231669
Merge branch 'master' into eb/ch76308/event-sender-5.x
eli-darkly May 12, 2020
8a9d9dd
make events URI construction reliable regardless of whether base URI …
eli-darkly May 13, 2020
f516bf0
Merge pull request #231 from launchdarkly/eb/ch76308/event-sender-bas…
eli-darkly May 13, 2020
8b06363
Merge branch 'master' into eb/ch76308/event-sender-5.x
eli-darkly May 13, 2020
d1456e9
merge from public after release
LaunchDarklyCI May 13, 2020
142846d
Merge branch 'master' into 5.x
eli-darkly May 13, 2020
6718e4c
prepare 5.0.0-rc2 release (#194)
eli-darkly May 14, 2020
a3c25f4
Merge branch '5.x' of github.com:launchdarkly/java-server-sdk into 5.x
eli-darkly May 14, 2020
e8621a2
typo
eli-darkly May 14, 2020
c5340c8
typo
eli-darkly May 15, 2020
6035ee1
add DataSourceStatusProvider.waitFor()
eli-darkly May 15, 2020
60e1825
comment fix
eli-darkly May 15, 2020
88fa2e0
typo
eli-darkly May 15, 2020
c32bebd
rm debugging
eli-darkly May 15, 2020
74c0828
improve comments
eli-darkly May 16, 2020
bc09057
fix race condition in LDClientEndToEndTest
eli-darkly May 19, 2020
34ecff9
Merge pull request #233 from launchdarkly/eb/ch76308/diagnostic-event…
eli-darkly May 19, 2020
fd1178d
Merge branch 'master' into 5.x
eli-darkly May 19, 2020
a61e287
Merge branch '5.x' into eb/ch76894/wait-for-status
eli-darkly May 19, 2020
2106219
move flag change stuff into FlagTracker facade, simplify value listener
eli-darkly May 19, 2020
bad0ea8
Merge pull request #232 from launchdarkly/eb/ch76894/wait-for-status
eli-darkly May 19, 2020
cbd309a
move LDClientInterface into interfaces package and rename initialized…
eli-darkly May 19, 2020
6247e76
Merge branch 'master' into eb/ch76240/benchmarks-4.x
eli-darkly May 19, 2020
ab99c82
more benchmark implementation
eli-darkly May 19, 2020
70da524
Merge branch '5.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 19, 2020
eb74a92
port some more benchmarks from 4.x
eli-darkly May 19, 2020
d353873
Merge pull request #235 from launchdarkly/eb/ch59586/client-interface
eli-darkly May 20, 2020
ffda80a
Merge branch '5.x' into eb/ch25268/flag-tracker
eli-darkly May 20, 2020
223e038
fix merge conflict
eli-darkly May 20, 2020
4cdb376
preprocess various things to speed up evaluations
eli-darkly May 22, 2020
d97a5bc
(5.0) don't bother creating event objects if they won't be sent
eli-darkly May 22, 2020
b56d541
cleaner EventFactory design
eli-darkly May 22, 2020
7515cf8
add test coverage step to CI
eli-darkly May 22, 2020
6132374
add test coverage reporting + improve DefaultEventProcessor tests
eli-darkly May 22, 2020
436ec07
clarify meaning of "events" in javadoc comment
eli-darkly May 22, 2020
d50f669
Merge pull request #234 from launchdarkly/eb/ch25268/flag-tracker
eli-darkly May 22, 2020
631d872
note about benchmarks in CONTRIBUTING
eli-darkly May 22, 2020
a1de46c
rm unused
eli-darkly May 23, 2020
5a1e237
Merge branch '5.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
5e19ff6
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
6565ccc
formatting
eli-darkly May 23, 2020
2a8a284
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
87163c7
use JMH average time mode, not throughput
eli-darkly May 23, 2020
0358ae9
measure in nanoseconds
eli-darkly May 23, 2020
035ff29
fix import
eli-darkly May 23, 2020
0946574
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
4f8273f
move benchmark code to 5.0-like packages for easier cross-comparison
eli-darkly May 23, 2020
6f08081
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
c84cda9
move test data generation out of benchmarks
eli-darkly May 23, 2020
846976c
more configuration tweaks
eli-darkly May 23, 2020
338947c
show more benchmark output
eli-darkly May 23, 2020
db5dc8c
show more benchmark output
eli-darkly May 23, 2020
37e88c6
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
a45bcd9
fix event benchmark synchronization
eli-darkly May 23, 2020
080c599
add jmhReport HTML output
eli-darkly May 23, 2020
d80d245
fix report step
eli-darkly May 23, 2020
4832b76
fix synchronization again
eli-darkly May 23, 2020
2bd5a37
fix event benchmarks so they don't test the construction of the input…
eli-darkly May 23, 2020
0815938
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-4…
eli-darkly May 23, 2020
0cefb4e
fix data file name
eli-darkly May 23, 2020
e2be6e9
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
c52418f
Merge branch 'eb/ch76240/benchmarks-4.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 23, 2020
d184426
Merge branch '5.x' into eb/ch77594/coverage
eli-darkly May 23, 2020
58d1e12
Merge branch '5.x' into eb/ch77442/preprocessing
eli-darkly May 23, 2020
f6961fa
Merge branch 'eb/ch77442/preprocessing' into eb/ch77571/no-events
eli-darkly May 23, 2020
4c47222
Merge branch 'eb/ch77571/no-events' into eb/ch77594/coverage
eli-darkly May 23, 2020
26575df
CI fix (always store test results)
eli-darkly May 23, 2020
1986569
improve test coverage of low-level eval logic to >99%
eli-darkly May 23, 2020
e6e37a5
revert change to flush payload queue behavior
eli-darkly May 23, 2020
ab43703
avoid test race condition
eli-darkly May 23, 2020
d264569
Merge branch 'eb/ch77594/coverage' into eb/ch77594/coverage-2-eval
eli-darkly May 23, 2020
a9b6c81
add test coverage reporting
eli-darkly May 23, 2020
38a4922
CI fix
eli-darkly May 23, 2020
4e3eee3
CI fix
eli-darkly May 23, 2020
051a9d5
Merge branch 'eb/ch77594/coverage-0' into eb/ch77594/coverage-1-events
eli-darkly May 23, 2020
4b85a3f
more event test improvements
eli-darkly May 23, 2020
b898d81
misc cleanup + test improvements
eli-darkly May 23, 2020
ca2e196
Merge branch 'eb/ch77594/coverage-1-events' into eb/ch77594/coverage-…
eli-darkly May 23, 2020
60046ef
misc cleanup + test improvements
eli-darkly May 23, 2020
0f898fa
make intVariation and doubleVariation non-nullable
eli-darkly May 23, 2020
3b0e95b
(5.0) don't use jar magic to find out our own version string
eli-darkly May 23, 2020
f6b7ff2
fix test
eli-darkly May 23, 2020
3fb019f
Merge branch 'eb/ch77594-ch77639/coverage-3-client' into eb/ch77640/v…
eli-darkly May 23, 2020
b3f313c
make intVariation and doubleVariation non-nullable
eli-darkly May 23, 2020
38dacc8
Merge branch 'eb/ch77639/int-double-non-null' into eb/ch77640/version…
eli-darkly May 23, 2020
472dfc7
better unit test coverage of LDClient and FeatureFlagsState
eli-darkly May 23, 2020
3ccd7cb
test coverage improvements + minor fixes
eli-darkly May 24, 2020
7c75b3a
better temp file handling in file data source tests
eli-darkly May 24, 2020
8da3e27
revert file data source implementation change for now
eli-darkly May 24, 2020
306797e
revert unnecessary change
eli-darkly May 24, 2020
e07643f
comment about file watching on Mac
eli-darkly May 24, 2020
1d57156
add slight delay to avoid timing-dependent test flakiness
eli-darkly May 26, 2020
3fad450
test fixes/comments
eli-darkly May 26, 2020
07bb8f5
(5.0) use simpler and more stable logger names
eli-darkly May 26, 2020
2d0628d
better instructions
eli-darkly May 27, 2020
427a87e
more convenient way to set EventSource logger name
eli-darkly May 27, 2020
a89504e
(5.0) add HTTP default headers method + some component refactoring
eli-darkly May 28, 2020
6ce1d8a
don't need to pass the whole config object to describeConfiguration()
eli-darkly May 28, 2020
5d54f0a
simplify test logic for HTTP headers
eli-darkly May 28, 2020
29cf2d7
Merge pull request #236 from launchdarkly/eb/ch77442/preprocessing
eli-darkly May 28, 2020
e336c92
Merge pull request #237 from launchdarkly/eb/ch77571/no-events
eli-darkly May 28, 2020
86050fb
Merge pull request #240 from launchdarkly/eb/ch77594/coverage-0
eli-darkly May 28, 2020
ec01e5b
Merge branch '5.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 28, 2020
c36c6f3
Merge pull request #241 from launchdarkly/eb/ch77594/coverage-1-events
eli-darkly May 29, 2020
bd2162e
Merge pull request #242 from launchdarkly/eb/ch77594/coverage-2-eval
eli-darkly May 29, 2020
daf04c4
Merge pull request #243 from launchdarkly/eb/ch77639/int-double-non-null
eli-darkly May 29, 2020
2719973
Merge pull request #244 from launchdarkly/eb/ch77640/version-string
eli-darkly May 29, 2020
8b24c81
(5.0) final test coverage improvements, for now, with enforcement
eli-darkly May 29, 2020
55f14d1
re-simplify DataBuilder
eli-darkly May 29, 2020
3df7da4
increase timeouts
eli-darkly May 29, 2020
6fc2a7a
misc fixes
eli-darkly May 29, 2020
8b27de5
rm unnecessary override
eli-darkly May 29, 2020
262eb19
Merge branch '5.x' into eb/ch76240/benchmarks-5.x
eli-darkly May 29, 2020
43778a3
indents
eli-darkly May 29, 2020
128b8cc
Merge pull request #245 from launchdarkly/eb/ch77594/coverage-3-client
eli-darkly May 29, 2020
b959c6c
Merge pull request #238 from launchdarkly/eb/ch76240/benchmarks-4.x
eli-darkly May 29, 2020
279ccd5
Merge pull request #239 from launchdarkly/eb/ch76240/benchmarks-5.x
eli-darkly May 29, 2020
6ddb11b
Merge branch 'master' into 5.x
eli-darkly May 29, 2020
37fbfe5
Merge branch '5.x' into eb/ch76203/logger-names
eli-darkly May 29, 2020
fc3d40e
Merge branch '5.x' into eb/ch77594/coverage-4-misc
eli-darkly May 29, 2020
4df1c40
Merge branch 'eb/ch77594/coverage-4-misc' into eb/ch78049/http-headers
eli-darkly May 29, 2020
dbe962f
update benchmark code for API change
eli-darkly May 29, 2020
8b74838
Merge branch 'eb/ch78049/http-headers' into eb/ch77594/coverage-5-misc
eli-darkly May 29, 2020
4b00cde
Merge pull request #246 from launchdarkly/eb/ch77594/coverage-4-misc
eli-darkly May 29, 2020
73062ca
support loading file data from a classpath resource
eli-darkly May 30, 2020
f02f835
update metadata so Releaser knows about 4.x branch
eli-darkly May 30, 2020
9dfc1be
Merge branch '4.x' into 5.x
eli-darkly May 30, 2020
4a3a7fb
minor test fixes
eli-darkly May 30, 2020
0fbd4b0
make class final
eli-darkly May 30, 2020
91941fa
rm beta changelog items
eli-darkly May 30, 2020
851c53b
Merge branch 'eb/debugging'
eli-darkly May 30, 2020
4dd0822
test data source
eli-darkly Jun 1, 2020
907882d
more info about coverage in CONTRIBUTING.md
eli-darkly Jun 1, 2020
7165ca4
Merge pull request #248 from launchdarkly/eb/ch78049/http-headers
eli-darkly Jun 1, 2020
79d11bf
Merge branch 'master' into eb/ch76203/logger-names
eli-darkly Jun 2, 2020
234e905
Merge pull request #247 from launchdarkly/eb/ch76203/logger-names
eli-darkly Jun 2, 2020
75630d0
Merge branch 'master' into eb/ch77594/coverage-5-misc
eli-darkly Jun 2, 2020
1eabb73
Merge branch 'eb/ch77594/coverage-5-misc' into eb/ch76824/classpath-file
eli-darkly Jun 2, 2020
01df1f3
Merge pull request #249 from launchdarkly/eb/ch77594/coverage-5-misc
eli-darkly Jun 2, 2020
ff3d3d1
Merge pull request #250 from launchdarkly/eb/ch76824/classpath-file
eli-darkly Jun 2, 2020
d219b44
Merge branch 'master' into eb/ch78216/test-data
eli-darkly Jun 2, 2020
fa2b39c
misc fixes/tests
eli-darkly Jun 2, 2020
705d25b
use java-sdk-common 1.0.0
eli-darkly Jun 2, 2020
2a44530
use okhttp-eventsource 2.3.0
eli-darkly Jun 2, 2020
9d23a88
Merge branch 'master' of github.com:launchdarkly/java-server-sdk
eli-darkly Jun 2, 2020
ddd886a
use okhttp-eventsource 2.3.1 for thread fix
eli-darkly Jun 18, 2020
6374424
Merge pull request #252 from launchdarkly/eb/ch80009/eventsource-thread
eli-darkly Jun 19, 2020
6fb600d
fix flaky tests due to change in EventSource error reporting
eli-darkly Jun 19, 2020
e22d43f
Merge pull request #253 from launchdarkly/eb/ch80009/flaky-test
eli-darkly Jun 19, 2020
8642c8b
merge from public after release
LaunchDarklyCI Jun 19, 2020
8873f44
remove support for indirect put and indirect patch
eli-darkly Jun 23, 2020
9a034e2
Merge pull request #254 from launchdarkly/eb/ch80666/no-indirect-patch
eli-darkly Jun 23, 2020
0293f58
fix typo in javadoc example code
eli-darkly Jun 24, 2020
8a08fc7
Merge pull request #255 from launchdarkly/eb/ch80837/javadoc-typo
eli-darkly Jun 24, 2020
4ad9351
clean up polling logic, fix status updating after an outage, don't re…
eli-darkly Jun 25, 2020
f14119a
merge from public after release
LaunchDarklyCI Jun 25, 2020
d41ae6c
slightly change semantics of boolean setters, improve tests, misc cle…
eli-darkly Aug 4, 2020
378b8e8
avoid NPEs if LDUser was deserialized by Gson (#257)
eli-darkly Aug 4, 2020
4836ea3
fix release metadata
eli-darkly Aug 5, 2020
96e58e7
prepare 4.14.1 release (#200)
LaunchDarklyCI Aug 5, 2020
22149a9
Releasing version 4.14.1
LaunchDarklyCI Aug 5, 2020
2d0d5cd
merge from public after release
LaunchDarklyCI Aug 5, 2020
ef8a801
Merge branch '4.x'
eli-darkly Aug 5, 2020
8825a48
exclude Kotlin metadata from jar + fix misc Gradle problems
eli-darkly Aug 18, 2020
ae46e03
Merge pull request #258 from launchdarkly/eb/ch87032/kotlin-symbols
eli-darkly Aug 18, 2020
b7ce928
merge from public after release
LaunchDarklyCI Aug 19, 2020
b32abc3
update CI and Gradle to test with newer JDKs (#259)
eli-darkly Aug 24, 2020
eefc460
update okhttp to 3.14.9 (fixes incompatibility with OpenJDK 8.0.252)
eli-darkly Aug 31, 2020
87120a4
Merge pull request #260 from launchdarkly/eb/ch88298/okhttp-update-4.x
eli-darkly Sep 1, 2020
0403392
prepare 4.14.2 release (#205)
LaunchDarklyCI Sep 1, 2020
2daeb92
Releasing version 4.14.2
LaunchDarklyCI Sep 1, 2020
7c09c6a
merge from public after release
LaunchDarklyCI Sep 1, 2020
7a9772c
Merge branch '4.x'
eli-darkly Sep 1, 2020
f3f01ec
update okhttp to 4.8.1 (fixes incompatibility with OpenJDK 8.0.252)
eli-darkly Sep 1, 2020
7025ae7
Merge pull request #261 from launchdarkly/eb/ch88298/okhttp-update-5.x
eli-darkly Sep 1, 2020
d1e311e
merge from public after release
LaunchDarklyCI Sep 1, 2020
f5a8555
gitignore
eli-darkly Sep 1, 2020
52c36be
Merge branch 'master' of github.com:launchdarkly/java-server-sdk
gwhelanLD Sep 3, 2020
9fe8f5b
merge from public after release
LaunchDarklyCI Sep 3, 2020
ac9bdb1
Bump SnakeYAML from 1.19 to 1.26 to address CVE-2017-18640
ssrm Sep 3, 2020
d1e0637
Merge pull request #262 from launchdarkly/eb/ch88108/snakeyaml-update
eli-darkly Sep 3, 2020
4f8f980
prepare 4.14.3 release (#209)
LaunchDarklyCI Sep 3, 2020
a6777a8
Releasing version 4.14.3
LaunchDarklyCI Sep 3, 2020
89954b5
merge from public after release
LaunchDarklyCI Sep 3, 2020
a83942e
Merge branch '4.x'
eli-darkly Sep 3, 2020
326e8e1
Merge branch 'master' into eb/ch78216/test-data
eli-darkly Sep 4, 2020
b800f23
comments
eli-darkly Sep 4, 2020
7cb20cd
Merge pull request #251 from launchdarkly/eb/ch78216/test-data
eli-darkly Sep 4, 2020
06fdd3e
only log initialization message once in polling mode
eli-darkly Sep 4, 2020
03e2ad8
Merge pull request #263 from launchdarkly/eb/ch88859/polling-logging
eli-darkly Sep 4, 2020
a448abc
merge from public after release
LaunchDarklyCI Sep 4, 2020
078fe16
[ch89935] Correct some logging call format strings (#264)
gwhelanLD Sep 17, 2020
136eb1b
[ch90109] Remove outdated trackMetric comment from before service sup…
gwhelanLD Sep 18, 2020
889a1c6
Fix compatibility with Java 7.
gwhelanLD Sep 25, 2020
67dea95
Remove import that is no longer used.
gwhelanLD Sep 25, 2020
402b8fe
Merge pull request #266 from launchdarkly/gw/ch90182/fix-java-7-compat
eli-darkly Sep 28, 2020
ee5e212
add Java 7 build (#267)
eli-darkly Sep 28, 2020
cd60e6d
prepare 4.14.4 release (#214)
LaunchDarklyCI Sep 28, 2020
424c7d5
Releasing version 4.14.4
LaunchDarklyCI Sep 28, 2020
72ac981
merge from public after release
LaunchDarklyCI Sep 28, 2020
7f1d8c8
Merge branch '4.x'
eli-darkly Sep 28, 2020
8b51b95
preserve dummy CI config file when pushing to gh-pages (#271)
eli-darkly Sep 30, 2020
f6ae98e
fix concatenation when base URI has a context path (#270)
eli-darkly Oct 1, 2020
b33e5bf
fix shaded jar builds to exclude Jackson classes and not modify Jacks…
eli-darkly Oct 1, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ This is a major rewrite that introduces a cleaner API design, adds new features,
- The Redis integration is no longer built into the main SDK library. See: https://github.com/launchdarkly/java-server-sdk-redis
- The deprecated New Relic integration has been removed.

## [4.14.4] - 2020-09-28
### Fixed:
- Restored compatibility with Java 7. A transitive dependency that required Java 8 had accidentally been included, and the CI build did not detect this because the tests were being run in Java 8 even though the compiler target was 7. CI builds now verify that the SDK really can run in Java 7. This fix is only for 4.x; the 5.x SDK still does not support Java 7.
- Bumped OkHttp version to 3.12.12 to avoid a crash on Java 8u252.
- Removed an obsolete comment that said the `trackMetric` method was not yet supported by the LaunchDarkly service; it is.

## [4.14.3] - 2020-09-03
### Fixed:
- Bump SnakeYAML from 1.19 to 1.26 to address CVE-2017-18640. The SDK only parses YAML if the application has configured the SDK with a flag data file, so it's unlikely this CVE would affect SDK usage as it would require configuration and access to a local file.
Expand Down
23 changes: 19 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ ext.versions = [
"commonsCodec": "1.10",
"gson": "2.7",
"guava": "28.2-jre",
"jackson": "2.10.0",
"jackson": "2.11.2",
"launchdarklyJavaSdkCommon": "1.0.0",
"okhttp": "4.8.1", // specify this for the SDK build instead of relying on the transitive dependency from okhttp-eventsource
"okhttpEventsource": "2.3.1",
Expand All @@ -96,7 +96,9 @@ libraries.internal = [
// Add dependencies to "libraries.external" that are exposed in our public API, or that have
// global state that must be shared between the SDK and the caller.
libraries.external = [
"org.slf4j:slf4j-api:${versions.slf4j}"
"org.slf4j:slf4j-api:${versions.slf4j}",
"com.fasterxml.jackson.core:jackson-core:${versions.jackson}",
"com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
]

// Add dependencies to "libraries.test" that are used only in unit tests.
Expand Down Expand Up @@ -169,6 +171,7 @@ shadowJar {

dependencies {
exclude(dependency('org.slf4j:.*:.*'))
exclude(dependency('com.fasterxml.jackson.core:.*:.*'))
}

// Kotlin metadata for shaded classes should not be included - it confuses IDEs
Expand Down Expand Up @@ -198,12 +201,16 @@ task shadowJarAll(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJ
description = "Builds a Shaded fat jar including SLF4J"
from(project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output)
configurations = [project.configurations.runtimeClasspath]
exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')

exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
exclude '**/*.kotlin_metadata'
exclude '**/*.kotlin_module'
exclude '**/*.kotlin_builtins'

dependencies {
exclude(dependency('com.fasterxml.jackson.core:.*:.*'))
}

// doFirst causes the following steps to be run during Gradle's execution phase rather than the
// configuration phase; this is necessary because they access the build products
doFirst {
Expand Down Expand Up @@ -384,7 +391,9 @@ def addOsgiManifest(jarTask, List<Configuration> importConfigs, List<Configurati
}

def bundleImport(packageName, importVersion, versionLimit) {
packageName + ";version=\"[" + importVersion + "," + versionLimit + ")\""
def optional = packageName.startsWith("com.fasterxml.jackson")
packageName + ";version=\"[" + importVersion + "," + versionLimit + ")\"" +
(optional ? ";resolution:=optional" : "")
}

def bundleExport(packageName, exportVersion) {
Expand Down Expand Up @@ -613,5 +622,11 @@ gitPublish {
contents {
from javadoc
}
preserve {
// There's a dummy .circleci/config.yml file on the gh-pages branch so CircleCI won't
// complain when it sees a commit there. The git-publish plugin would delete that file if
// we didn't protect it here.
include '.circleci/config.yml'
}
commitMessage = 'publishing javadocs'
}
12 changes: 9 additions & 3 deletions packaging-test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,17 @@ export TEMP_BUNDLE_DIR=$(FELIX_DIR)/app-bundles
# for OSGi, which is currently true; if that weren't true, we would have to do something different
# to put them on the system classpath in the OSGi test.
RUN_JARS_test-all-jar=$(TEST_APP_JAR) $(SDK_ALL_JAR) \
$(shell ls $(TEMP_DIR)/dependencies-external/gson*.jar 2>/dev/null)
$(shell ls $(TEMP_DIR)/dependencies-external/gson*.jar 2>/dev/null) \
$(shell ls $(TEMP_DIR)/dependencies-external/jackson*.jar 2>/dev/null)
RUN_JARS_test-default-jar=$(TEST_APP_JAR) $(SDK_DEFAULT_JAR) \
$(shell ls $(TEMP_DIR)/dependencies-external/*.jar 2>/dev/null)
RUN_JARS_test-thin-jar=$(TEST_APP_JAR) $(SDK_THIN_JAR) \
$(shell ls $(TEMP_DIR)/dependencies-internal/*.jar 2>/dev/null) \
$(shell ls $(TEMP_DIR)/dependencies-external/*.jar 2>/dev/null)

classes_prepare=echo " checking $(1)..." && jar tf $(1) | grep '\.class$$' >$(TEMP_OUTPUT)
classes_should_contain=echo " should contain $(2)" && grep "^$(1)/[^/]*$$" $(TEMP_OUTPUT) >/dev/null
classes_should_not_contain=echo " should not contain $(2)" && ! grep "^$(1)/[^/]*$$" $(TEMP_OUTPUT)
classes_should_contain=echo " should contain $(2)" && grep "^$(1)/.*\.class$$" $(TEMP_OUTPUT) >/dev/null
classes_should_not_contain=echo " should not contain $(2)" && ! grep "^$(1)/.*\.class$$" $(TEMP_OUTPUT)

verify_sdk_classes= \
$(call classes_should_contain,com/launchdarkly/sdk,com.launchdarkly.sdk) && \
Expand Down Expand Up @@ -79,6 +80,8 @@ test-all-jar-classes: $(SDK_ALL_JAR) $(TEMP_DIR)
@$(call classes_should_not_contain,com/launchdarkly/shaded/com/launchdarkly/sdk,shaded SDK classes)
@$(call classes_should_contain,com/launchdarkly/shaded/com/google/gson,shaded Gson)
@$(call classes_should_not_contain,com/google/gson,unshaded Gson)
@$(call classes_should_not_contain,com/fasterxml/jackson,unshaded Jackson)
@$(call classes_should_not_contain,com/launchdarkly/shaded/com/fasterxml/jackson,shaded Jackson)
@$(call classes_should_not_contain,com/launchdarkly/shaded/org/slf4j,shaded SLF4j)

test-default-jar-classes: $(SDK_DEFAULT_JAR) $(TEMP_DIR)
Expand All @@ -89,6 +92,8 @@ test-default-jar-classes: $(SDK_DEFAULT_JAR) $(TEMP_DIR)
@$(call classes_should_contain,com/launchdarkly/shaded/com/google/gson,shaded Gson)
@$(call classes_should_not_contain,com/launchdarkly/shaded/org/slf4j,shaded SLF4j)
@$(call classes_should_not_contain,com/google/gson,unshaded Gson)
@$(call classes_should_not_contain,com/fasterxml/jackson,unshaded Jackson)
@$(call classes_should_not_contain,com/launchdarkly/shaded/com/fasterxml/jackson,shaded Jackson)
@$(call classes_should_not_contain,org/slf4j,unshaded SLF4j)

test-thin-jar-classes: $(SDK_THIN_JAR) $(TEMP_DIR)
Expand Down Expand Up @@ -121,6 +126,7 @@ $(TEMP_DIR)/dependencies-external: $(TEMP_DIR)/dependencies-all
[ -d $@ ] || mkdir -p $@
cp $(TEMP_DIR)/dependencies-all/slf4j*.jar $@
cp $(TEMP_DIR)/dependencies-all/gson*.jar $@
cp $(TEMP_DIR)/dependencies-all/jackson*.jar $@

$(TEMP_DIR)/dependencies-internal: $(TEMP_DIR)/dependencies-all
[ -d $@ ] || mkdir -p $@
Expand Down
50 changes: 32 additions & 18 deletions packaging-test/run-non-osgi-test.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

set -e

function run_test() {
rm -f ${TEMP_OUTPUT}
touch ${TEMP_OUTPUT}
Expand All @@ -8,29 +10,41 @@ function run_test() {
grep "TestApp: PASS" ${TEMP_OUTPUT} >/dev/null
}

echo ""
echo " non-OSGi runtime test - with Gson"
run_test $@
grep "LDGson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDGson tests but did not" && exit 1)

# It does not make sense to test the "thin" jar without Gson. The SDK uses Gson internally
# and can't work without it; in the default jar and the "all" jar, it has its own embedded
# copy of Gson, but the "thin" jar does not include any third-party dependencies so you must
# provide all of them including Gson.
thin_sdk_regex=".*launchdarkly-java-server-sdk-[^ ]*-thin\\.jar"
echo ""
if [[ "$@" =~ $thin_sdk_regex ]]; then
exit 0
echo " non-OSGi runtime test - without Jackson"
filtered_deps=""
json_jar_regex=".*jackson.*"
for dep in $@; do
if [[ ! "$dep" =~ $json_jar_regex ]]; then
filtered_deps="$filtered_deps $dep"
fi
done
run_test $filtered_deps
grep "skipping LDJackson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDJackson tests but did not; test setup was incorrect" && exit 1)
else
echo " non-OSGi runtime test - without Gson or Jackson"
filtered_deps=""
json_jar_regex=".*gson.*|.*jackson.*"
for dep in $@; do
if [[ ! "$dep" =~ $json_jar_regex ]]; then
filtered_deps="$filtered_deps $dep"
fi
done
run_test $filtered_deps
grep "skipping LDGson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDGson tests but did not; test setup was incorrect" && exit 1)
grep "skipping LDJackson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDJackson tests but did not; test setup was incorrect" && exit 1)
fi

echo ""
echo " non-OSGi runtime test - without Gson"
deps_except_json=""
json_jar_regex=".*gson.*"
for dep in $@; do
if [[ ! "$dep" =~ $json_jar_regex ]]; then
deps_except_json="$deps_except_json $dep"
fi
done
run_test $deps_except_json
grep "skipping LDGson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDGson tests but did not; test setup was incorrect" && exit 1)
echo " non-OSGi runtime test - with Gson and Jackson"
run_test $@
grep "LDGson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDGson tests but did not" && exit 1)
grep "LDJackson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDJackson tests but did not" && exit 1)
43 changes: 34 additions & 9 deletions packaging-test/run-osgi-test.sh
Original file line number Diff line number Diff line change
@@ -1,32 +1,57 @@
#!/bin/bash

set -e

# This script uses Felix to run the test application as an OSGi bundle, with or without
# additional bundles to support the optional Gson and Jackson integrations. We are
# verifying that the SDK itself works correctly as an OSGi bundle, and also that its
# imports of other bundles work correctly.
#
# This test is being run in CI using the lowest compatible JDK version. It may not work
# in higher JDK versions due to incompatibilities with the version of Felix we are using.

JAR_DEPS="$@"

# We can't test the "thin" jar in OSGi, because some of our third-party dependencies
# aren't available as OSGi bundles. That isn't a plausible use case anyway.
thin_sdk_regex=".*launchdarkly-java-server-sdk-[^ ]*-thin\\.jar"
if [[ "$@" =~ $thin_sdk_regex ]]; then
if [[ "${JAR_DEPS}" =~ $thin_sdk_regex ]]; then
exit 0
fi

rm -rf ${TEMP_BUNDLE_DIR}
mkdir -p ${TEMP_BUNDLE_DIR}

function copy_deps() {
if [ -n "${JAR_DEPS}" ]; then
cp ${JAR_DEPS} ${TEMP_BUNDLE_DIR}
fi
cp ${FELIX_BASE_BUNDLE_DIR}/* ${TEMP_BUNDLE_DIR}
}

function run_test() {
rm -rf ${FELIX_DIR}/felix-cache
rm -f ${TEMP_OUTPUT}
touch ${TEMP_OUTPUT}
cd ${FELIX_DIR} && java -jar ${FELIX_JAR} -b ${TEMP_BUNDLE_DIR} | tee ${TEMP_OUTPUT}
cd ${FELIX_DIR}
java -jar ${FELIX_JAR} -b ${TEMP_BUNDLE_DIR} | tee ${TEMP_OUTPUT}
grep "TestApp: PASS" ${TEMP_OUTPUT} >/dev/null
}

echo ""
echo " OSGi runtime test - with Gson"
cp $@ ${FELIX_BASE_BUNDLE_DIR}/* ${TEMP_BUNDLE_DIR}
echo " OSGi runtime test - without Gson or Jackson"
copy_deps
rm ${TEMP_BUNDLE_DIR}/*gson*.jar ${TEMP_BUNDLE_DIR}/*jackson*.jar
ls ${TEMP_BUNDLE_DIR}
run_test
grep "LDGson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDGson tests but did not" && exit 1)
grep "skipping LDGson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDGson tests but did not; test setup was incorrect" && exit 1)
grep "skipping LDJackson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDJackson tests but did not; test setup was incorrect" && exit 1)

echo ""
echo " OSGi runtime test - without Gson"
rm ${TEMP_BUNDLE_DIR}/*gson*.jar
echo " OSGi runtime test - with Gson and Jackson"
copy_deps
run_test
grep "skipping LDGson tests" ${TEMP_OUTPUT} >/dev/null || \
(echo "FAIL: should have skipped LDGson tests but did not; test setup was incorrect" && exit 1)
grep "LDGson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDGson tests but did not" && exit 1)
grep "LDJackson tests OK" ${TEMP_OUTPUT} >/dev/null || (echo "FAIL: should have run LDJackson tests but did not" && exit 1)
16 changes: 12 additions & 4 deletions packaging-test/test-app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,21 @@ allprojects {
group = "com.launchdarkly"
version = "1.0.0"
archivesBaseName = 'test-app-bundle'
sourceCompatibility = 1.7
targetCompatibility = 1.7
sourceCompatibility = 1.8
targetCompatibility = 1.8
}

ext.versions = [
"gson": "2.7",
"jackson": "2.10.0"
]

dependencies {
// Note, the SDK build must have already been run before this, since we're using its product as a dependency
implementation fileTree(dir: "../../build/libs", include: "launchdarkly-java-server-sdk-*-thin.jar")
implementation "com.google.code.gson:gson:2.7"
implementation "com.fasterxml.jackson.core:jackson-core:${versions.jackson}"
implementation "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
implementation "com.google.code.gson:gson:${versions.gson}"
implementation "org.slf4j:slf4j-api:1.7.22"
implementation "org.osgi:osgi_R4_core:1.0"
osgiRuntime "org.slf4j:slf4j-simple:1.7.22"
Expand All @@ -47,7 +54,8 @@ jar {
'Import-Package': 'com.launchdarkly.sdk,com.launchdarkly.sdk.json' +
',com.launchdarkly.sdk.server,org.slf4j' +
',org.osgi.framework' +
',com.google.gson;resolution:=optional'
',com.google.gson;resolution:=optional' +
',com.fasterxml.jackson.*;resolution:=optional'
)
}

Expand Down
8 changes: 8 additions & 0 deletions packaging-test/test-app/src/main/java/testapp/TestApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ public static void main(String[] args) throws Exception {
addError("unexpected error in LDGson tests", e);
}

try {
Class.forName("testapp.TestAppJacksonTests"); // see TestAppJacksonTests for why we're loading it in this way
} catch (NoClassDefFoundError e) {
log("skipping LDJackson tests because Jackson is not in the classpath");
} catch (RuntimeException e) {
addError("unexpected error in LDJackson tests", e);
}

if (errors.isEmpty()) {
log("PASS");
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package testapp;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.launchdarkly.sdk.*;
import com.launchdarkly.sdk.json.*;

// This code is in its own class that is loaded dynamically because some of our test scenarios
// involve running TestApp without having Jackson in the classpath, to make sure the SDK does not
// *require* the presence of an external Jackson even though it can interoperate with one.

public class TestAppJacksonTests {
// Use static block so simply loading this class causes the tests to execute
static {
// First try referencing Jackson, so we fail right away if it's not on the classpath
Class<?> c = ObjectMapper.class;
try {
runJacksonTests();
} catch (Exception e) {
// If we've even gotten to this static block, then Jackson itself *is* on the application's
// classpath, so this must be some other kind of classloading error that we do want to
// report. For instance, a NoClassDefFound error for Jackson at this point, if we're in
// OSGi, would mean that the SDK bundle is unable to see the external Jackson classes.
TestApp.addError("unexpected error in LDJackson tests", e);
}
}

public static void runJacksonTests() throws Exception {
ObjectMapper jacksonMapper = new ObjectMapper();
jacksonMapper.registerModule(LDJackson.module());

boolean ok = true;
for (JsonSerializationTestData.TestItem item: JsonSerializationTestData.TEST_ITEMS) {
String actualJson = jacksonMapper.writeValueAsString(item.objectToSerialize);
if (!JsonSerializationTestData.assertJsonEquals(item.expectedJson, actualJson, item.objectToSerialize)) {
ok = false;
}
}

if (ok) {
TestApp.log("LDJackson tests OK");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.UUID;

import static com.launchdarkly.sdk.server.Util.checkIfErrorIsRecoverableAndLog;
import static com.launchdarkly.sdk.server.Util.concatenateUriPath;
import static com.launchdarkly.sdk.server.Util.configureHttpClientBuilder;
import static com.launchdarkly.sdk.server.Util.describeDuration;
import static com.launchdarkly.sdk.server.Util.getHeadersBuilderFor;
Expand Down Expand Up @@ -91,7 +92,7 @@ public Result sendEventData(EventDataKind kind, String data, int eventCount, URI
throw new IllegalArgumentException("kind"); // COVERAGE: unreachable code, those are the only enum values
}

URI uri = eventsBaseUri.resolve(eventsBaseUri.getPath().endsWith("/") ? path : ("/" + path));
URI uri = concatenateUriPath(eventsBaseUri, path);
Headers headers = headersBuilder.build();
RequestBody body = RequestBody.create(data, JSON_CONTENT_TYPE);
boolean mustShutDown = false;
Expand Down
Loading