-
Notifications
You must be signed in to change notification settings - Fork 407
/
CHANGELOG.rst
4931 lines (3625 loc) · 177 KB
/
CHANGELOG.rst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.. Author notes: this file is formatted with restructured text
(http://docutils.sourceforge.net/docs/user/rst/quickstart.html)
as it is included in Finatra's documentation.
Note that ``RB_ID=#`` and ``PHAB_ID=#`` correspond to associated message in commits.
Unreleased
----------
24.5.0
------
No Changes
23.11.0
-------
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finatra: Bump version of Jackson to 2.14.2. ``PHAB_ID=D1049772``
* finatra: Bump version of nscala-time to 2.32.0. ``PHAB_ID=D1050087``
* finatra: Bump version of Guice to 5.1.0 and Joda-Convert to 2.2.3. ``PHAB_ID=D1050820``
* finatra: Bump version of Joda to 2.12.5 ``PHAB_ID=D1059830``
* finatra: Bump version of Jackson to 2.14.3. ``PHAB_ID=D1069160``
22.12.0
-------
Changed
~~~~~~~
* inject-app: (BREAKING CHANGE) ``EmbeddedApp`` now sets com.google.inject.Stage to ``DEVELOPMENT``
``PHAB_ID=D983261``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* util: Bump version of logback to 1.2.11. ``PHAB_ID=D1026765``
22.7.0
------
Changed
~~~~~~~
* inject-utils|inject-thrift: Move package private methods `PossiblyRetryable#isCancellation` and
`PossibleRetryable#isNonRetryable` in inject-thrift to inject-utils `ExceptionUtils` as publicly
usable methods. These methods are generally useful when processing interrupts on Futures.
``PHAB_ID=D935287``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* inject-server: Remove deprecated `c.t.inject.server.DeprecatedLogging` trait. This trait was
introduced as a placeholder shim to ensure that JUL util-logging Flags were still defined within
a Finatra server such that servers did not fail upon startup if Flag values were being set.
The default behavior during Flag parsing is to error if a Flag value is passed for a Flag not
defined within the application.
We have removed the shim and the trait (and thus the Flag definitions), as it is not expected
that users use util-logging JUL Flags for logging configuration with Finatra servers since Finatra
uses the SLF4J-API. Logging configuration should be done on the choosen SLF4J-API logging
implementation. If your server fails to start after this change, please ensure you are not passing
values for the JUL util-logging Flags. ``PHAB_ID=D850852``
Changed
~~~~~~~
* finatra: Removed ``kafka`` and ``kafka-streams`` modules from finatra core library.
Note: We published a stand-alone `finatra-kafka client <https://github.com/finagle/finatra-kafka>`_
with deprecation announcement to serve as exit pathway for current users.
Announcement: `finagle blog <https://finagle.github.io/blog/2022/06/01/announce-migrations/>`_
``PHAB_ID=D878136``
Added
~~~~~
* finatra: Introduce InMemoryTracer for inspecting Trace information via tests. ``PHAB_ID=D878616``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
finatra: Update Jackson library to version 2.13.3 ``PHAB_ID=D906005``
22.4.0
------
No Changes
22.3.0
------
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* inject-app: Remove the SLF4J-API logging bridges as dependencies. These were originally
added as the framework was expressly opionated that users should use Logback as an SLF4J-API
implementation, however specifying the bridges on the Finatra inject/inject-app library
causes many issues with code that must use a different SLF4J-API logging implementation
but still uses the Finatra framework. Users should note that if they do not include these
bridges in some other manner that they may lose logging if they have any libraries which
log with one of the formerly bridged implementations. Also note that servers using a
`TwitterServer` logging implementation to support `dynamically changing log levels <https://twitter.github.io/twitter-server/Features.html#dynamically-change-log-levels>`__ will get the proper bridges as dependencies.
``PHAB_ID=D854393``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* inject-server: Throw an `UnsupportedOperationException` when access to the `c.t.inject.server.DeprecatedLogging#log`
instance is attempted. This is a JUL Logger instance which was provided only as a backward-compatible
shim for Finatra services when the `c.t.server.TwitterServer` framework was moved to the `SLF4J-API`.
The instance was marked `@deprecated` in hopes of alerting users to not use it. We have now updated
it to throw an exception when accessed. Please refer to the Finatra documentation for more information
on using the SLF4J-API for logging with the Finatra framework: https://twitter.github.io/finatra/user-guide/logging/index.html.
``PHAB_ID=D854365``
Added
~~~~~
* inject-app: Introduce test-friendly `c.t.inject.app.console.ConsoleWriter` and
`c.t.inject.app.TestConsoleWriter`, which can be used to inspect the output of a command-line
style `c.t.inject.app.App`. ``PHAB_ID=D856159``
Changed
~~~~~~~
* inject-modules: Remove deprecated `c.t.inject.modules.LoggerModule`. ``PHAB_ID=D853325``
* finatra: Bump version of Jackson to 2.13.2 ``PHAB_ID=D848592``
* inject-thrift-client: Deprecate `c.t.inject.thrift.AndThenService`, `c.t.inject.thrift.modules.AndThenServiceModule`,
and `c.t.inject.thrift.internal.DefaultAndThenServiceImpl`. These were plumbing for unreleased
experimental record/replay functionality and currently do nothing with no plan for implementation.
``PHAB_ID=D845841``
22.2.0
------
* inject-modules: Deprecate `c.t.inject.modules.LoggerModule`. Update `c.t.inject.app.App` to
mix in the `util/util-slf4j-jul-bridge` `Slf4jBridge` trait. The `LoggerModule` does
not provide a solution inline with the best practices for bridging JUL to the SLF4J-API
and users are encouraged to instead mix in the `c.t.util.logging.Slf4jBridge` into the
main class of their application if necessary. The updates to `c.t.inject.app.App` will now
properly bridge JUL to the SLF4J-API early in the constructor of the application catching any
log messages emitted to JUL before where the bridging would have been attempted when using
the `LoggerModule`.
Note that the `Slf4jBridge` trait is already mixed into the `c.t.server.TwitterServer` trait and
thus no further action is necessary for bridging JUL to the SLF4J-API in extensions of
`c.t.server.TwitterServer`. ``PHAB_ID=D827584``
* inject-slf4j: Deprecate `c.t.inject.logging.Logging` trait and methods. Users are encouraged
to use the `c.t.util.logging.Logging` trait directly. There are no replacements for
`c.t.inject.logging.Logging#debugFutureResult` and `c.t.inject.logging.Logging#time`.
``PHAB_ID=D821722``
22.1.0
------
Added
~~~~~
* http-server: (BREAKING API CHANGE) Allow for customization of the building of the HTTP and HTTPS
`ListeningServer` constructs. This allows users to specify any additional configuration over the
Finagle `Service[-R, +R]` that is constructed by the `HttpRouter`. The
`c.t.finatra.http.HttpServerTrait#build` method has been replaced by two more specific versions:
`#buildHttpListeningServer` and `#buildHttpsListeningServer` which are used in `postWarmup` to
create the appropriate `ListeningServer` given it has a defined port value.
We also update the `EmbeddedHttpServer` and `EmbeddedHttpClient` to allow for being able to run both
the HTTP and HTTPS listening servers in tests. This is done by setting the `httpsPortFlag` to the
value of `https.port` which will enable the binding of the HTTPS listening server to the ephemeral
port in tests. ``PHAB_ID=D809633``
* mysql-client: Add base client configuration in EmbeddedMysqlServer to enable for more robust
testing setup. This would allow users to add configurations like `charset`.
Added a overridable function `createRichClient` to MysqlClientModuleTrait to allow
creating the mysql client in other ways like `newRichClient(Finagle.Name, String)`.
``PHAB_ID=D805245``
Changed
~~~~~~~
* finatra: Bump version of Jackson to 2.13.1 ``PHAB_ID=D808049``
21.12.0
-------
Changed
~~~~~~~
* inject-core: Move `runAfterAll` hook from `c.t.inject.IntegrationTestMixin` to
`c.t.inject.TestMixin`. ``PHAB_ID=D784576``
21.11.0
-------
Added
~~~~~
* inject-core: Introduce a `runAfterAll` hook in `c.t.inject.IntegrationTestMixin` to allow for
running logic to clean-up test resources in the `org.scalatest.BeforeAndAfterAll#afterAll` without
needing to 1) override `org.scalatest.BeforeAndAfterAll#afterAll`, 2) ensure `super` is called for
other resources clean-up, and 3) ensure all resources get cleaned up, regardless of non-fatal
exceptions thrown as part of the clean-up logic and otherwise fail the TestSuite run.
``PHAB_ID=D707939``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* http-server: Treat non-constant routes with or without trailing slash as 2 different routes.
For example, "/user/:id" and "/user/:id/" are treated as different routes in Finatra. You can still
use the optional trailing slash `/?` which will indicate Finatra to ignore the trailing slash while
routing. We don't recommend to mix both use cases when defining your routes. For example: passing
in both `/user/:id` and `/user/:id/?` at the same time. ``PHAB_ID=D787560``
Changed
~~~~~~~
* http-server (BREAKING API CHANGE): Will now serialize many self-referential Jackson types as "{}"
instead of returning a serialization error. See https://github.com/FasterXML/jackson-databind/commit/765e2fe1b7f6cdbc6855b32b39ba876fdff9fbcc
for more details. ``PHAB_ID=D744627``
21.10.0
-------
* http-server: Add versions of `HttpRouter#filter` which accept a Guice `TypeLiteral` to
aid Java users in being able to apply generically typed Filters obtained from the object graph.
``PHAB_ID=D768777``
21.9.0
------
Changed
~~~~~~~
* finatra-thrift (BREAKING API CHANGE): Removed c.t.finatra.thrift.ThriftClient#thriftClient, use
#methodPerEndpoint. ``PHAB_ID=D747744``
* finatra: Bump version of Logback to 1.2.6. ``PHAB_ID=D742405``
* finatra: Bump version of Jackson to 2.11.4. ``PHAB_ID=D727879``
* finatra: Bump version of Joda-Time to 2.10.10. ``PHAB_ID=D729742``
* finatra: Bump version of logback to 1.2.5. ``PHAB_ID=D729767``
* finatra: Bump version of json4s to 3.6.11. ``PHAB_ID=D729764``
21.8.0 (No 21.7.0 Release)
--------------------------
Fixed
~~~~~
* inject-core: Fixed a bug where `c.t.inject.TestMixin#assertFailedFuture` would incorrectly pass
for non-failed `c.t.util.Future` in some cases where the tested failure is a supertype of
`org.scalatest.exceptions.TestFailedException`. ``PHAB_ID=D705002``
Changed
~~~~~~~
* inject-utils: Removed deprecated `c.t.inject.conversions.string`, use
`c.t.conversions.StringOps` in the util/util-core project instead.
``PHAB_ID=D692729``
* inject-utils: Removed deprecated `c.t.inject.conversions.tuple`, use
`c.t.conversions.TupleOps` in the util/util-core project instead.
``PHAB_ID=D692429``
* inject-utils: Removed deprecated `c.t.inject.conversions.seq`, use
`c.t.conversions.SeqOps` in the util/util-core project instead.
``PHAB_ID=D692775``
* inject-utils: Removed implicit class RichMap from `c.t.inject.conversions.map`, use
`c.t.conversions.MapOps` in the util/util-core project instead. ``PHAB_ID=D699010``
* thrift: Update the test `c.t.finatra.thrift.ThriftClient` to close client and clean-up resources
during the `EmbeddedTwitterServer` close. ``PHAB_ID=D707963``
* finatra: Update ScalaCheck to version 1.15.4 ``PHAB_ID=D691691``
21.6.0
------
Changed
~~~~~~~
* inject-thrift-client (BREAKING API CHANGE): Removed the deprecated
`c.t.inject.thrift.modules.FilteredThriftClientModule`. Please use its successor
`c.t.inject.thrift.modules.ThriftMethodBuilderClientModule` for per-method configuration of a
Thrift client. ``PHAB_ID=D687663``
* thrift: Add `service_class` to Finatra library thrift registry entry. ``PHAB_ID=D687117``
* finatra (BREAKING API CHANGE): Update to use the new util/util-jackson `ScalaObjectMapper` for
case class object mapping. We've removed the custom Finatra `c.t.finatra.jackson.ScalaObjectMapper`
and instead now use the `c.t.util.jackson.ScalaObjectMapper`. Since the `c.t.util.jackson.ScalaObjectMapper`
does not support `Joda-Time <https://www.joda.org/joda-time/>`__, backwards compatibility is
maintained through usage of the Finatra `ScalaObjectMapperModule` for obtaining a configured
`ScalaObjectMapper` which will be created with Joda-Time support, though support for Joda-Time in
Finatra is deprecated and users should expect for Joda-Time support to be removed in an upcoming release.
Users should prefer to use the JDK 8 `java.time` classes or `java.util.Date`.
The finatra/inject `c.t.inject.domain.WrappedValue` has been removed and users should update to the
util/util-core `c.t.util.WrappedValue` instead.
The finatra/jackson JsonDiff utility is also removed. Users should switch to the improved version
in util/util-jackson: `c.t.util.jackson.JsonDiff`.
With the move to the util/util-jackson `ScalaObjectMapper` we're also able to clean up some awkward
directory structures in Finatra which were necessary because of dependencies. Specifically, the
`finatra/json-annotations` library no longer exists, as `@InjectableValue` is now an annotation in
`util/util-jackson-annotations`, and the remaining binding annotations `@CamelCaseMapper` and `@SnakeCaseMapper`
have been moved into `finatra/jackson`.
Using the util/util-jackson `ScalaObjectMapper` also brings `Java 8 date/time <https://www.oracle.com/technical-resources/articles/java/jf14-date-time.html>`__
(JSR310) support via inclusion of the Jackson `JavaTimeModule <https://github.com/FasterXML/jackson-modules-java8/tree/master/datetime>`__
by default.
Lastly, we've also added the `YamlScalaObjectMapperModule` which can be used in place of the
`ScalaObjectMapperModule` in order to provide a `YAMLFactory` configured `ScalaObjectMapper`.
``PHAB_ID=D664955``
* inject-utils: Remove deprecated `c.t.inject.utils.StringUtils`. Users should prefer to use
the corresponding methods in `com.twitter.conversions.StringOps` from util/util-core, instead.
``PHAB_ID=D684659``
* inject-utils: Remove deprecated `c.t.inject.utils.AnnotationUtils`. Users should instead prefer
`c.t.util.reflect.Annotations` from util/util-reflect. ``PHAB_ID=D684662``
21.5.0
------
Fixed
~~~~~
* finatra-jackson: Do not enforce `CaseClassDeserializer` deserialization semantics for a
field until after any deserializer annotation has been resolved. This fully allows a deserializer
to specify how to deserialize a field completely independent of the `CaseClassDeserializer`
requirements for fields. For example, if a user wanted to allow parsing of a JSON `null` value
into a `null` field instance value, they could define a custom deserializer to do so and annotate
the case class field with `@JsonDeserialize(using = classOf[CustomNullableDeserializer])`.
Additionally, we've fix a bug in how String case class fields are handled when the incoming JSON is
not a String-type. The current code incorrectly returns an empty string when the field value is
parsed into Jackson ContainerNode or ObjectNode types and an incorrect `toString` representation
for a PojoNode type. We now correctly represent the field value as a string in these cases to
deserialize into the case class field. ``PHAB_ID=D676938``
* finatra-jackson: Properly handle Scala enumeration fields wrapped in an `Option` during
deserialization failures in the `CaseClassDeserializer#isScalaEnumerationType` method.
``PHAB_ID=D665062``
Changed
~~~~~~~
* finatra-kafka: Deprecate `c.t.finatra.kafka.consumers.TracingKafkaConsumer`
as it only produced single-span traces and there is no way to propagate the `TraceId` back to the
caller without changing the entire API. Users should use the
`c.t.finatra.kafka.consumers.KafkaConsumerTracer.trace` method instead to enable tracing for
Kafka Consumers. Also added `c.t.finatra.kafka.producers.KafkaProducerTraceAnnotator` and
`c.t.finatra.kafka.consumers.KafkaConsumerTraceAnnotator` services which will can be used to add
custom trace annotations to the producer and consumer spans. ``PHAB_ID=D649655``
* finatra (BREAKING API CHANGE): Update to use the new util/util-validator `ScalaValidator` for case
class field validations. We've removed the custom Finatra `c.t.finatra.validation.Validator` and
instead now use the `c.t.util.validation.ScalaValidator`. Constraint annotations and validator
implementations now use the standard `jakarta.validation` API interface classes instead of any
custom Finatra types. We've deprecated the custom Finatra constraints as they are duplicative of
already existing "standard" or otherwise provided constraints and validators. Additionally,
`c.t.finatra.validation.ErrorCode` is deprecated with no replacement. The same data carried can be
obtained via the standard `jakarta.validation.ConstraintViolation[T]`.
Adapting the Finatra framework to use the util/util-validator also includes the framework Jackson
integration. We're also taking this opportunity to clean up the error reporting interface of
the `CaseClassFieldMappingException` to define a `CaseClassFieldMappingException.Reason` type to
replace the usage of the (removed) `ValidationResult.Invalid` type. The `Reason` carries a message
String as well as a `CaseClassFieldMappingException.Detail` which can be one of several possible
types including a `CaseClassFieldMappingException.ValidationError` which carries any failed validation
information including the emitted `ConstraintViolation[T]`.
Lastly, we are deprecating support for JSON serialization/deserialization of JodaTime fields in
case classes. This support will be dropped in an upcoming release. Users should prefer to use the
JDK 8 `java.time` classes and we will be adding support for these types in the Finatra Jackson
integration in the future. ``PHAB_ID=D659556``
* finatra-jackson: (BREAKING API CHANGE) JsonLogging should use the lazy Scala SLF4J logger
and no longer return the passed in argument that's logged as JSON. ``PHAB_ID=D563699``
21.4.0
------
Changed
~~~~~~~
* http-core: Add support to build a multipart/form-data POST request in Finatra RequestBuilder.
``PHAB_ID=D648869``
* finatra-kafka-streams: Update AsyncTransformer to support threadpools. ``PHAB_ID=D611608``
* finatra-kafka-streams: Set kafka.producer.acks=all by default ``PHAB_ID=D643266``
21.3.0
------
Added
~~~~~
* inject-thrift-client: Add per-method retry configuration withMaxRetries in
`com.twitter.inject.thrift.ThriftMethodBuilder` for customizing `configureServicePerEndpoint`.
``PHAB_ID=D619565``
Changed
~~~~~~~
* finatra (BREAKING API CHANGE): Deprecate `c.t.inject.utils.AnnotationUtils`, users should instead use
`c.t.util.reflect.Annotations` from `com.twitter:util-reflect`. Deprecate
`c.t.finatra.utils.ClassUtils`, users should instead use either
`c.t.util.reflect.Classes#simpleName`, `c.t.util.reflect.Types#isCaseClass` or
`c.t.util.reflect.Types#notCaseClass` from `com.twitter:util-reflect`. ``PHAB_ID=D638655``
* finatra (BREAKING API CHANGE): Builds are now only supported for Scala 2.12+ ``PHAB_ID=D631091``
* finatra: Revert to scala version 2.12.12 due to https://github.com/scoverage/sbt-scoverage/issues/319
``PHAB_ID=D635917``
* finatra: Bump scala version to 2.12.13 ``PHAB_ID=D632567``
* finatra: Move com.twitter.finatra.http.{jsonpatch,request} from the finatra/http-server project to
finatra/http-core project. Please update your build artifact references accordingly.
``PHAB_ID=D623745``
* http-server|http-core|jackson|thrift|validation: Update to use `c.t.util.reflect.Types`
in places for TypeTag reflection. ``PHAB_ID=D631819``
* finatra: Move c.t.finatra.http.{context,exceptions,response} from the finatra/http-server project
to finatra/http-core project. Please update your build artifact references accordingly.
``PHAB_ID=D631772``
* finatra: Move c.t.finatra.http.streaming from the finatra/http-server project to
finatra/http-core project. Please update your build artifact references accordingly.
``PHAB_ID=D631371``
* http-core: Introduce `c.t.finatra.http.marshalling.MessageBodyManager#builder` for creating an immutable
`c.t.finatra.http.marshalling.MessageBodyManager`. The MessageBodyManager's constructor is now private.
``PHAB_ID=D621755``
* http-server: Move `c.t.finatra.http.modules.MessageBodyFlagsModule` to
`c.t.finatra.http.marshalling.modules.MessageBodyFlagsModule`. ``PHAB_ID=D626600``
* validation: Remove deprecated constraint type aliases under `com.twitter.finatra.validation`, users
should prefer the actual constraint annotations at `com.twitter.finatra.validation.constraints`.
``PHAB_ID=D625174``
* jackson: Remove deprecated `com.twitter.finatra.json.utils.CamelCasePropertyNamingStrategy`,
users should prefer to use `PropertyNamingStrategy#LOWER_CAMEL_CASE` or an equivalent directly.
Also remove the deprecated `com.twitter.finatra.json.annotations.JsonCamelCase`, users should
use the `@JsonProperty` or `@JsonNaming` annotations or an appropriately configured
Jackson `PropertyNamingStrategy` instead. ``PHAB_ID=D623807``
* inject-core: (BREAKING API CHANGE) Rename `c.t.inject.TwitterModule.closeOnExit` to `onExit` so
it mirrors the API from `c.t.inject.App`. ``PHAB_ID=D621095``
* http-client: Remove deprecated c.t.finatra.httpclient.modules.HttpClientModule.
Use c.t.finatra.httpclient.modules.HttpClientModuleTrait instead.
``PHAB_ID=D619591``
* http-client: Remove deprecated c.t.finatra.httpclient.RichHttpClient. Use c.t.finagle.Http.Client
or c.t.finatra.httpclient.modules.HttpClientModuleTrait instead. Additionally,
`c.t.finatra.httpclient.modules.HttpClientModule.provideHttpService` has been removed. Use
`c.t.finatra.httpclient.modules.HttpClientModuleTrait.newService(injector, statsReceiver)`
instead. ``PHAB_ID=D619547``
* finatra: Move c.t.finatra.http.fileupload from the finatra/http-server project to
finatra/http-core project. Please update your build artifact references accordingly.
``PHAB_ID=D620478``
* http-client: Remove deprecated method `get` from c.t.finatra.httpclient.HttpClient.
Use HttpClient's `execute` instead. ``PHAB_ID=D618904``
* finatra: Create the finatra/http-core project, which is meant to contain common artifacts
for the finatra/http-server and finatra/http-client project. As part of this
change, the `com.twitter.finatra.httpclient.RequestBuilder` has been deprecated
and should be updated to reference `com.twitter.finatra.http.request.RequestBuilder`.
```PHAB_ID=D618583```
* finatra: Rename the finatra/httpclient project to finatra/http-client. Please update your
build artifact references (i.e. SBT, Maven) to use "finatra-http-client".
``PHAB_ID=D617614``
* kafkaStreams: Switch the default Kafka client and Kafka Stream client to version 2.4.1.
``PHAB_ID=D606782``
* finatra: Rename the finatra/http project to finatra/http-server. Please update your
build artifact references (i.e. SBT, Maven) to use "finatra-http-server". See the
`Finatra User's Guide <https://twitter.github.io/finatra/user-guide/index.html>`__
``PHAB_ID=D616257``
21.2.0
------
Changed
~~~~~~~
* finatra: all subprojects cross-building with 2.13.1. ``PHAB_ID=D613483``
* kafkaStreams: Enables cross-build for 2.13.1 for projects kafkaStreamsStaticPartitioning,
kafkaStreamsPrerestore, and kafkaStreamsQueryableThrift. ``PHAB_ID=D608958``
21.1.0
------
Changed
~~~~~~~
* kafka: Enables cross-build for 2.13.1. Note that kafka 2.5 is bundled with scala 2.13+
and kafka 2.2 is bundled with scala 2.12-. ``PHAB_ID=D597065``
* kafkaStreams: Enables cross-build for 2.13.1. Note that kafka 2.5 is bundled with
scala 2.13+ and kafka 2.2 is bundled with scala 2.12-. ``PHAB_ID=D597065``
* benchmarks: Enables cross-build for 2.13.1. ``PHAB_ID=D597288``
* inject-thrift-client-http-mapper: Enables cross-build for 2.13.1. ``PHAB_ID=D596470``
* http-mustache: Enables cross-build for 2.13.1. ``PHAB_ID=D596470``
* thrift: (BREAKING API CHANGE) Removed `JavaThriftRouter.add(controller, protocolFactory)` method.
Use `AbstractThriftServer.configureThriftServer` to override Thrift-specific stack params
(including `Thrift.param.ProtocolFactory`). ``PHAB_ID=D593876``
* finatra-http: Remove deprecated `c.t.finatra.http.response.StreamingResponse`.
Use `c.t.finatra.http.streaming.StreamingResponse` instead. ``PHAB_ID=D594642``
* finatra-kafka-streams: (BREAKING API CHANGE) Changed the `delayWithStore` DSL call to ensure that
the store name is consistent across shards. Requires a new `storeName` parameter to allow
for multiple delays in a single topology. ``PHAB_ID=D593593``
Fixed
~~~~~
* finatra-kafka-streams: Renamed implicit Kafka Streams DSL classes in order to
permit multiple DSL extensions to be used in the same Kafka Streams topology.
``PHAB_ID=D598368``
* thrift: Fixed a bug where Thrift stack params (i.e., protocol factory) that are passed to
`AbstractThriftServer.configureThriftServer` are ignored in `JavaThriftRouter`.
``PHAB_ID=D593876``
20.12.0
-------
Added
~~~~~
* finatra-kafka-streams: Add async map commands to Kafka Streams DSL (`flatMapAsync`,
`flatMapValuesAsync`, `mapAsync`, and `mapValuesAsync`) ``PHAB_ID=D593995``
* finatra-kafka-streams: Allow String configuration to be null and set upgradefrom to null if it is
running in 2.5 kafka client. ``PHAB_ID=D592608``
* finatra-http: Allow injecting filtered controllers in HttpRouter from Java. ``PHAB_ID=D590707``
* inject-utils: Move deprecation warning from `c.t.inject.conversions.map` to
`c.t.inject.conversions.map.RichMap`. ``PHAB_ID=D591979``
* kafka: Add an option `includePartitionMetrics` to `KafkaFinagleMetricsReporter` to not include
metrics per partition of the `FinagleKafkaConsumer`. Defaults to true. ``PHAB_ID=D587636``
* finatra: Enables cross-build for 2.13.1 for inject-logback. ``PHAB_ID=D588586``
* finatra-kafka-streams: Add delay DSL calls to insert a delay into a Kafka Streams topology.
* finatra: Enables cross-build for 2.13.1 for inject-thrift-client. ``PHAB_ID=D583509``
* finatra-kafka-streams: Add `c.t.f.k.t.s.PersistentTimerValueStore` which stores a value in the
timerstore that can be used when the timer is triggered. ``PHAB_ID=D583020``
* inject-core: Add ability to call `InMemoryStats#waitFor` with a fixed timeout
``PHAB_ID=D576147``
* finatra: Enables cross-build for 2.13.1 for httpclient, http, and jackson. ``PHAB_ID=D574391``
Changed
~~~~~~~
* inject-utils: Deprecate all methods in `c.t.inject.conversions.map.RichMap`, and move
functionality to `c.t.conversions.MapOps` in the util/util-core project. ``PHAB_ID=D578819``
* inject-utils: Deprecate all methods in `c.t.inject.conversions.tuple`, and move functionality
to `c.t.conversions.TupleOps` in the util/util-core project. ``PHAB_ID=D578804``
* inject-utils: Deprecate all methods in `c.t.inject.conversions.seq`, and move functionality
to `c.t.conversions.SeqOps` in the util/util-core project. ``PHAB_ID=D578605``
* inject-utils: Remove deprecated `camelify`, `pascalify`, and `snakify` from
`c.t.inject.conversions.string.RichString`. Additionally, deprecate `toOption` and
`getOrElse` in `c.t.inject.conversions.string.RichString`, and move functionality to
`c.t.conversions.StringOps` in the util/util-core project. ``PHAB_ID=D578549``
* c.t.finatra.http.exceptions.ExceptionMapperCollection changed from Traversable to Iterable
for cross-building 2.12 and 2.13. ``PHAB_ID=D574391``
* inject-core: (BREAKING API CHANGE) Move the testing utility `InMemoryStatsReceiverUtility`
and `InMemoryStats` into inject-core from inject-server. They can both be found under
`com.twitter.inject`. ``PHAB_ID=D574643``
* validation: (BREAKING API CHANGE) Introduce new Validation Framework APIs which support
cascading validation to nested case classes and other improvements which also closer align
to JSR380. `Validator#validate` has changed from returning `Unit` and throwing an exception
to model the JSR380 version that returns a Set of failed constraints. There is a new method
which replicates the throwing behavior. ``PHAB_ID=D559644``
* kafka: Split `c.t.f.kafka.tracingEnabled` flag into `c.t.f.k.producers.producerTracingEnabled` and
`c.t.f.k.consumers.consumerTracingEnabled` to selectively enable/disable tracing for
producers/consumers. Producer tracing is turned on by default and consumer tracing is turned off
by default now. ``PHAB_ID=D571064``
Fixed
~~~~~~~
* inject-server: Wire through HTTP method in AdminHttpClient so that POST requests can be made to
HTTPAdmin endpoints. ``PHAB_ID=D584988``
20.10.0
-------
Added
~~~~~
* finatra-kafka-streams: Add toCluster DSL call to publish to another Kafka cluster.
``PHAB_ID=D562195``
* jackson: Add support for validating `@JsonCreator` annotated static (e.g., companion
object defined apply methods) or secondary case class constructors. ``PHAB_ID=D552921``
* inject-app: Allow injecting flags without default values as both `scala.Option` and
`java.util.Optional`. ``PHAB_ID=D526226``
Changed
~~~~~~~
* utils: Undo usage of TypesApi for help in determining if a class is a Scala case class
as this fails for generic case classes in Scala 2.11, failing some supported cases for
Jackson processing. ``PHAB_ID=D566596``
* utils: Update `ClassUtils#simpleName` to handle when package names have underscores
followed by a number which throws an `InternalError`. Add tests. ``PHAB_ID=D566069``
* utils: Revamp `ClassUtils#isCaseClass` to use the TypesApi for help in determining
if a class is a Scala case class. Add tests. ``PHAB_ID=D566069``
* http: The http server did not properly log the bound address on server startup. Fix this
and make the thrift server consistent. ``PHAB_ID=D563758``
* utils: (BREAKING API CHANGE) Rename `maybeIsCaseClass` to `notCaseClass` in
`ClassUtils` and change the scope of the method. ``PHAB_ID=D556169``
* http: Adding support for optionally passing chain in the TLS sever trait. ``PHAB_ID=D553718``
* finatra: Bump version of Joda-Time to 2.10.8. ``PHAB_ID=D570496``
Fixed
~~~~~
* finatra-kafka-streams: Revert AsyncTransformer to still use ConcurrentHashMap.
``PHAB_ID=D555422``
* inject-thrift-client: The `Singleton` annotation has been removed from the `DarkTrafficFilter` and
the `JavaDarkTrafficFilter`. It was there in error. `PHAB_ID=D553539`
* inject-thrift-client: When using `RepRepServicePerEndpoint`, Finatra's `DarkTrafficFilter` would
throw a `NoSuchMethodException` when trying to lookup an inherited Thrift endpoint.
``PHAB_ID=D553361``
20.9.0
------
Added
~~~~~
* finatra-inject: `TestInjector` has been reworked to allow users executing modules' lifecycle
callbacks. Specifically, the `TestInjector` builder API has been moved under `TestInjector.Builder`
to allow `TestInjector` extends `Injector` with two new methods: `start()` and `close()`.
``PHAB_ID=D537056``
Changed
~~~~~~~
* finatra-kafka-streams: Update and separate the Finatra kafka stream code base which has direct
dependency on Kafka 2.2. Separate any code which cannot easily be upgraded to separate build
target. ``PHAB_ID=D545900``
* inject-core: `c.t.inject.Injector` is now an abstract class. Use `Injector.apply` to create
a new instance (versus the `new Injector(...)` before). ``PHAB_ID=D543297``
* http: Ensure HttpWarmer creates the request exactly the number of times requested and
mutates the correct objects. ``PHAB_ID=D547310``
* kafka: Replaced the `com.twitter.finatra.kafka.TracingEnabled` toggle with a GlobalFlag enabling
Zipkin tracing for Kafka clients. ``PHAB_ID=D525274``
* finatra: Bump version of Jackson to 2.11.2. ``PHAB_ID=D538440``
Fixed
~~~~~
* jackson: Fix issue in the handling of unknown properties. The `CaseClassDeserializer` only
considered the case where the incoming JSON contained more fields than the case class and
not the case where the incoming JSON contained less fields than specified in the case class.
This has been fixed to ensure that when the fields of the JSON do not line up to the
non-ignored case class fields the handling of unknown properties is properly invoked.
``PHAB_ID=D549353``
* validation: `c.t.f.validation.Validator` would throw an `IndexOutOfBoundsException` when
trying to validate a case class which contained additional fields that are not included in the
constructor parameters. ``PHAB_ID=D549253``
20.8.1
------
Added
~~~~~
* thrift: `JavaThriftRouter` now allows mounting controllers by value (as opposed to via DI).
``PHAB_ID=D528659``
* finatra-kafka: Expose delivery timeout duration in KafkaProducerConfig. ``PHAB_ID=D535761``
Changed
~~~~~~~
* inject-core: Remove deprecated `com.twitter.inject.Mockito` trait. Users are encouraged to
switch to the `com.twitter.util.mock.Mockito` trait from util/util-mock. ``PHAB_ID=D529174``
Fixed
~~~~~
* inject-server: Ensure `Awaiter.any` does not try to block on an empty list of Awaitables. Add
tests. ``PHAB_ID=D537727``
* finatra-jackson: Fix bugs around generic case class deserialization involving other generic
types. Reported (with reproduction and pointers) on GitHub by @aatasiei
(https://github.com/twitter/finatra/issues/547). Fixes #547. ``PHAB_ID=D532768``
* finatra-jackson: Fix a bug preventing JSON parsing of generic case classes, which in turn, contain
fields with generic case classes. Reported (with a thorough reproducer and an analysis) on GitHub
by @aatasiei (https://github.com/twitter/finatra/issues/548). Fixes #548. ``PHAB_ID=D531452``
20.8.0 (DO NOT USE)
-------------------
Added
~~~~~
* inject-app: Add more Java-friendly constructors for the TestInjector. ``PHAB_ID=D520900``
Changed
~~~~~~~
* inject-modules: Improve Java usability: rename `apply` to `get` for
StatsReceiverModule and LoggerModule.
Add `get` methods for other TwitterModule singleton objects.
(BREAKING API CHANGE) ``PHAB_IB=D525696``
* inject-core: Deprecate `c.t.inject.Resettable` (no replacement) and `c.t.inject.TestTwitterModule`.
Users should prefer the `#bind[T]` DSL over usage of the `TestTwitterModule`. ``PHAB_ID=D520889``
Fixed
~~~~~
* inject-server: Fix EmbeddedTwitterServer to return `StartupTimeoutException` when server under
test fails to start within max startup time. ``PHAB_ID=D519318``
20.7.0
------
Added
~~~~~
* inject-app: Adding flag converters for `java.io.File` (including comma-separated variants).
``PHAB_ID=D516020``
* finatra-kafka-streams: Added `TracingKafkaClientSupplier` to provide `TracingKafkaProducer` and
`TracingKafkaConsumer` to enable Zipkin tracing. Tracing can be enabled with the toggle
`com.twitter.finatra.kafka.TracingEnabled`. ``PHAB_ID=D502911``
* finatra-kafka: Added `TracingKafkaProducer` and `TracingKafkaConsumer` to enable Zipkin tracing
for Kafka. `FinagleKafkaProducerBuilder.build()` and `FinagleKafkaConsumerBuilder.buildClient()`
now return instances of `TracingKafkaProducer` and `TracingKafkaConsumer` respectively with
tracing enabled by default. Tracing can be enabled with the toggle
`com.twitter.finatra.kafka.TracingEnabled`. ``PHAB_ID=D490711``
Changed
~~~~~~~
* finatra: Update `org.scalatest` dependency to 3.1.2 and introduce finer-grained dependencies on
`org.scalatestplus` artifacts. ``PHAB_ID=D518553`` ``PHAB_ID=D518794``
* inject-thrift-client: Remove unused ClientId property from
`ThriftMethodBuilderClientModule#provideServicePerEndpoint` method. ``PHAB_ID=D513491``
* inject-server: Improve startup time of `EmbeddedTwitterServer` by observing lifecycle events to
determine startup, where previously we were doing 1 second polls. The `nonInjectableServerStarted`
property is removed and `isStarted` should be referenced regardless of the type of underlying
`twitterServer` type. The end result should see a faster test execution feedback loop. Our Finatra
test targets range from a roughly 2x to 10x reduction in execution times.
You may experience new test failures in cases where an exception is thrown as part of
`c.t.inject.TwitterServer.start()` or `c.t.server.TwitterServer.main()` and the test would have
expected a failure as part of startup. As the error takes place after the startup lifecycle,
you may now need to `Await.result` the `EmbeddedTwitterServer.mainResult()` to assert the error.
You may also experience some new non-deterministic behavior when testing against PubSub style
logic. As the server may be started earlier, your tests may be relying on assumptions that
an event would have occurred within the previous 1 second startup poll, which is no longer
guaranteed. You may need to adjust your test logic to account for this behavior.
``PHAB_ID=D499999``
* finatra: Update `com.google.inject.guice` dependency to 4.2.3 and `net.codingwell.scala-guice`
to version 4.2.11. The `net.codingwell.scala-guice` library has switched from Manifests to TypeTags
for transparent binding and injector key creation. The `c.t.inject.TwitterModule` has moved from its
custom bind DSL to the `scalaguice.ScalaModule` which brings the `TwitterModule` inline with both the
`TwitterPrivateModule` and the `bind[T]` test DSL to now have the same consistent binding DSL across
all three. Thus, there is no more confusing `bindSingleton` function in the `TwitterModule` bind API.
Upgrading scalaguice helps move a necessary dependency of Finatra to a version which is Scala 2.13
compatible moving Finatra closer to Scala 2.13 support. ``PHAB_ID=D504559`` ``PHAB_ID=D515857``
Fixed
~~~~~
* inject-app: Having two sets of flag converters for primitive types (both Java and Scala) confuses
the DI runtime, preventing the injection. We now have only a single set of converters, based off
Scala primitive types. ``PHAB_ID=D509192``
20.6.0
------
Added
~~~~~
* inject-app: You can now inject Flag values of any type (not just primitive types). Most of the
common Flag types are already supported out of the box (e.g., `Seq[InetSocketAddress]`), but it's
also possible to register your own converters derived from any Flaggable instance.
``PHAB_ID=D498210``
* inject-stack: Move `StackTransformer` from `inject/inject-core` to `inject/inject-stack` to
remove the finagle-core dependency from `inject/inject-core`. ``PHAB_ID=D489604``
* inject-server: adding httpPostAdmin test method. ``PHAB_ID=D482624``
Changed
~~~~~~~
* thrift/http: Introduce a `Common Log Format <https://en.wikipedia.org/wiki/Common_Log_Format>`__
type of formatting for Thrift access logging to replace the current `prelog` text. Ensure
the HTTP and Thrift access logging filters are aligned in functionality and behavior.
``PHAB_ID=D497596``
* inject-slf4j: Remove Jackson dependency. Case classes which wish to use the slf4j Logging
functionality should use the finatra/jackson `c.t.finatra.jackson.caseclass.SerdeLogging`
trait which provides a `@JsonIgnoreProperties` to ignore logging fields. ``PHAB_ID=D487948``
Fixed
~~~~~
* finatra-validation: Added a `c.t.finatra.validation.ValidatorModule` to provide a default
Validator. The new module is added to the default Finatra HttpServer modules, users can override
it with a customized `ValidatorModule` by overriding the `validatorModule` field.
``PHAB_ID=D503417``
20.5.0
------
Added
~~~~~
* inject-mdc: Move MDC integration from `inject/inject-slf4j` to `inject/inject-mdc`.
``PHAB_ID=D485870``
* finatra-http|finatra-thrift: Update TraceIdMDCFilter to log traceSampled and traceSpanId
``PHAB_ID=472013``
* finatra-examples: Ensure there are Java and Scala examples for the different
types of applications and servers which can be built with Finatra. Update `/examples`
directory layout for discoverability and consistency. ``PHAB_ID=D469677``
Changed
~~~~~~~
* inject-slf4j: Move MDC integration from `inject/inject-slf4j` to `inject/inject-mdc`.
``PHAB_ID=D485870``
* finatra-http: Allow extensions of the `c.t.finatra.http.filters.HttpResponseFilter`
to specify how to set the Location Header value into a Response. Additionally, don't
allow exceptions resulting from the inability to set a non-compliant 'Location' response
header escape the filter. ``PHAB_ID=D483793``
* inject-core: Make flag methods in `c.t.inject.TwitterModule` public an final. ``PHAB_ID=D484168``
* inject-core: `c.t.inject.Mockito` has been marked deprecated. Users are encouraged to prefer
`mockito-scala <https://github.com/mockito/mockito-scala>`_ (or ScalaTest `MockitoSugar <http://doc.scalatest.org/3.1.1/#org.scalatestplus.mockito.MockitoSugar>`_
which provides some basic syntax sugar for Mockito). ``PHAB_ID=D482531``
* http: (BREAKING API CHANGE) Update the `c.t.finatra.http.HttpResponseFilter` to optionally fully
qualify response 'Location' header values. A `previous change <https://github.com/twitter/finatra/commit/ff9acc9fbf4e89b532df9daf2b9cba6d90b2df96>`_
made the filter always attempt to fully qualify any response 'Location' header value. This updates
the logic to be opt-in for the more strict returning of fully qualified 'Location' header values with
the default being to allow relative values per the `RFC7231 <https://tools.ietf.org/html/rfc7231#section-7.1.2>`_
which replaces the obsolete `RFC2616 <https://tools.ietf.org/html/rfc2616#section-14.30>`_. This is
thus a breaking API change as the default is now to allow relative values. To enable the previous
strict behavior, users should instantiate the filter with the constructor arg `fullyQualifyLocationHeader`
set to 'true'. This addresses issue #524. ``PHAB_ID=D467909``
* jackson: Remove deprecated `FinatraObjectMapper` and `FinatraJacksonModule`. Users are encouraged
to switch to the equivalent `c.t.finatra.jackson.ScalaObjectMapper` and
`c.t.finatra.jackson.modules.ScalaObjectMapperModule`. ``PHAB_ID=D473177``
* finatra-http: Update `c.t.finatra.http.StreamingJsonTestHelper` to not use `Thread.sleep` for
writing JSON elements on an artificial delay. ``PHAB_ID=D470793``
* inject-app: Remove finagle-core dependency. Introduce finatra/inject/inject-dtab.
``PHAB_ID=D474298``
* finatra: Bump version of Jackson to 2.11.0. ``PHAB_ID=D457496``
* finatra-http: Only create `EnrichedResponse` counters when needed. Any "service/failure"
response counters will only be generated upon first failure and not eagerly for each
response generated. This change impacts users who expect a counter value of 0 when no
response failures have been encountered - now the counter will not exist until the first
failure has been recorded. ``PHAB_ID=D474918``
* finatra: Bump version of Joda-Time to 2.10.6. ``PHAB_ID=D473522``
Fixed
~~~~~
* inject-thrift-client: Convert non-camel case `ThriftMethod` names, e.g., "get_tweets" to
camelCase, e.g., "getTweets" for reflection lookup of generated `ReqRepServicePerEndpoint`
interface methods in `c.t.inject.thrift.filters.DarkTrafficFilter`. ``PHAB_ID=D478104``
20.4.1
------
Added
~~~~~
* inject-app: Add default type conversions for `java.time.LocalTime`, `c.t.util.Time`,
`java.net.InetSocketAddress`, and `c.t.util.StorageUnit`. This allows the injector to convert from
a String representation to the given type. The type conversion for `java.net.InetSocketAddress`
uses the `c.t.app.Flaggable.ofInetSocketAddress` implementation and the type conversion for
`c.t.util.Time` uses the `c.t.app.Flaggable.ofTime` implementation for consistency with Flag parsing.
Because of the current state of type erasure with `c.t.app.Flag` instances, Finatra currently binds
a parsed `c.t.app.Flag` value as a String type, relying on registered Guice TypeConverters to convert
from the bound String type to the requested type. These conversions now allow for a `c.t.app.Flag`
defined over the type to be injected by the type as Guice now has a type conversion from the bound
String type rather than as a String representation which then must be manually converted.
``PHAB_ID=D471545``
* finatra-http: Method in tests to return an absolute path URI with the https scheme and authority
``PHAB_ID=D466424``
* finatra: Java-friendly `bindClass` test APIs. The `bindClass` API calls from Java can be
now chained with the `TestInjector`, `EmbeddedApp`, `EmbeddedTwitterServer`,
`EmbeddedThriftServer`, and `EmbeddedHttpServer`. For example, the following is now possible:
```
EmbeddedHttpServer server = new EmbeddedHttpServer(
new HelloWorldServer(),
Collections.emptyMap(),
Stage.DEVELOPMENT)
.bindClass(Integer.class, Flags.named("magic.number"), 42)
.bindClass(Integer.class, Flags.named("module.magic.number"), 9999);
return server;
```
``PHAB_ID=D463042``
Changed
~~~~~~~
* inject-app: Introduce consistent `c.t.app.Flag` creation methods for Java. Bring HTTP and Thrift
server traits inline with each other to provide consistent Java support. Ensure Java examples in
documentation. ``PHAB_ID=D471716``
* inject-core: Update the configuration of `c.t.app.Flag` instances created within a `c.t.inject.TwitterModule`
to have `failFastUntilParsed` set to 'true' by default. While this is configurable for a given
`c.t.inject.TwitterModule`, much like for the application itself, it is STRONGLY recommended that
users adopt this behavior. ``PHAB_ID=D448047``