forked from twitter/finagle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
2517 lines (1959 loc) · 109 KB
/
CHANGES
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 Finagle's user's guide.
Note that ``RB_ID=#`` correspond to associated messages in commits.
6.x
-----
Bug Fixes
~~~~~~~~~
* finagle-http: Servers which aggregate content chunks (streaming == false) now return a 413
response for streaming clients who exceed the servers' configured max request size.
``RB_ID=828741``
New Features
~~~~~~~~~~~~
* finagle-core: Added gauge, "scheduler/blocking_ms" measuring how much time,
in milliseconds, the ``com.twitter.concurrent.Scheduler`` is spending doing blocking
operations on threads that have opted into tracking. This also moves the
"scheduler/dispatches" gauge out of TwitterServer into Finagle. ``RB_ID=828289``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* Builds are now only for Java 8 and Scala 2.11. See the
`blog post <https://finagle.github.io/blog/2016/04/20/scala-210-and-java7/>`_
for details. ``RB_ID=828898``
6.35.0
------
Deprecations
~~~~~~~~~~~~
* finagle: remove unused finagle-validate and finagle-testers packages. ``RB_ID=818726``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: DeadlineFilter is now per-connection, so the max rejection percentage
is not shared across clients. This prevents a single client from exceeding the rejection
budget. ``RB_ID=813731``.
* finagle-http: Local Dtabs are now encoded into the `Dtab-Local` header. `X-Dtab` headers
may still be read but should be considered deprecated. ``RB_ID=815092``
* finagle-thrift: Removed duplicate "thrift" label on Thrift/ThriftMux scrooge-related
server stats. ``RB_ID=816825``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-redis: Deprecated ChannelBuffer exposing apis for string commands. ``RB_ID=817766``.
* finagle-core: DefaultClient has been removed. Implementors should prefer `c.t.f.StackClient`
``RB_ID=812681``.
* finagle-core: When a client is created, its server set resolution is started eagerly.
``RB_ID=806940``
* finagle-core: Dentry now takes a Dentry.Prefix instead of a Path. ``RB_ID=813914``
* finagle-thrift/thriftmux: Thrift servers constructed using `Thrift.serveIface` now use
`Thrift.server.serveIface`. ThriftMux servers constructed using `ThriftMux.serveIface` now use
`ThriftMux.server.serveIface`. ``RB_ID=824865``
* finagle-cache-resolver: `c.t.f.cacheresolver.ZookeeperCacheNodeGroup` has been removed from the
API since we no longer check for the zookeeper data for the cache pool size to refresh for the
changes in the serverset. ``RB_ID=811190``
New Features
~~~~~~~~~~~~
* finagle-http: http 1.1 running on netty4 is configurable via `c.t.finagle.netty4.http.exp.Netty4Impl`.
It has not been tested in production and should be considered beta software. ``RB_ID=828188``
* finagle-core: Multi-line Dtabs may now contain line-oriented comments beginning with '#'.
Comments are omitted from parsed Dtabs. ``RB_ID=818752``
* finagle-http: new stack params MaxChunkSize, MaxHeaderSize, and MaxInitialLineLength
are available to configure the http codec. ``RB_ID=811129``
* finagle-mux: Mux now has support for fragmenting Tdispatch and Rdispatch payloads.
This helps with head-of-line blocking in the presence of large payloads and allows
long transmissions to be interrupted. ``RB_ID=794641``.
* finagle-core: Dtabs allow wildcard path elements in prefixes. ``RB_ID=813914``
* finagle-netty4: HTTP proxy support for any Finagle Netty 4 client. ``RB_ID=819752``
* finagle-core: Gauge for dns resolutions awaiting lookups. ``RB_ID=822410``
Bug Fixes
~~~~~~~~~
* finagle-http: Ensure that service closure is delayed until chunked response bodies
have been processed. ``RB_ID=813110``
* finagle-stats: Ensure that histogram snapshotting does not fall behind if snapshot()
is not called at least once per interval. ``RB_ID=826149``
6.34.0
------
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: GenSerialClientDispatcher fails pending and subsequent requests when
its underlying transport closes. ``RB_ID=807590``
New Features
~~~~~~~~~~~~
* finagle-core: Include upstream/downstream addresses/client ids and request trace id
in exceptions that extend `c.t.f.HasRemoteInfo` (including `c.t.f.SourcedException`),
accessible via the `remoteInfo` value. ``RB_ID=797082``
* finagle-core: Introduce `c.t.f.service.ResponseClassifier` for HTTP servers,
which allows developers to give Finagle the additional application specific knowledge
necessary in order to properly classify responses.``RB_ID=800179``
* finagle: Export two new histograms: `request_payload_bytes` and `response_payload_bytes`
for the following protocols: HTTP (non-chunked), Mux, ThriftMux and Thrift. ``RB_ID=797821``
* finagle-core: Define `c.t.f.Address` to represent an endpoint's physical location.
Resolvers and namers may attach metadata such as weight to individual endpoint addresses.
``RB_ID=792209``
* finagle-http: Introduce convenience extractors to pattern match `c.t.f.http.Response.status`
against the different categories. ``RB_ID=802953``
* finagle-http: Add `toBoolean` method in `StringUtil` to parse strings to boolean consistently.
``RB_ID=804056``
* finagle-http: Servers now actually decompress requests when decompression is turned on.
``RB_ID=810629``
* finagle-redis: Add support for SENTINEL commands. ``RB_ID=810663``
* finagle-redis: Support for Pub/Sub. ``RB_ID=810610``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `c.t.f.Codec.prepareConnFactory(ServiceFactory)` is marked `final`, override
`c.t.f.Codec.prepareConnFactory(ServiceFactory, Stack.Params)` instead. ``RB_ID=797821``
* finagle-core: `c.t.f.Codec.newClientDispatcher(Transport)` is marked `final`, override
`c.t.f.Codec.newClientDispatcher(Transport, Stack.Params)` instead. ``RB_ID=797821``
* finagle-core: Removed deprecations: ``RB_ID=800974``
- Removed `c.t.f.Service.release`, replace usage with `Service.close()`.
- Removed `c.t.f.ServiceFactory.make`, replace usage with `ServiceFactory.apply`.
- Removed `c.t.f.ProxyServiceFactory`, replace usage with `ServiceFactoryProxy`.
- Removed deprecated `c.t.f.service.FailureAccrualFactory` constructor.
- Removed `c.t.f.netty3.ChannelBufferBuf.apply`, replace usage with `ChannelBufferBuf.Owned.apply`.
- Removed `c.t.f.util.InetAddressUtil.Loopback`, replace usage with `java.net.InetAddress.getLoopbackAddress`.
- Removed `c.t.f.tracing.TracingFilter`, replace usage with `TraceInitializationFilter` and `(Client|Server)TracingFilter`.
* finagle-core: `c.t.f.Addr.Bound.addr` type changed from `Set[SocketAddress]` to
`Set[c.t.f.Address]`. We provide a migration guide below for the most common cases.
Callers of `c.t.f.Addr.Bound.addr` must handle `Set[c.t.f.Address]` instead of
`Set[SocketAddresses]`. If you do something with the `SocketAddress` and expect the underlying
type to be `InetSocketAddress`, use `c.t.f.Address.Inet.addr` to get the underlying
`InetSocketAddress`.
`c.t.f.Addr` constructors and `c.t.f.Name.bound` method now accept `c.t.f.Address` instead
of `SocketAddress`. For most cases, wrapping the `InetSocketAddress` in an `Address.Inet`
will fix the compile error.
Any other `SocketAddress` subclass is currently incompatible with `c.t.f.Address`. Instead,
you should encode any additional information in the metadata field of `c.t.f.Address.Inet`
or `c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209``
* finagle-core: Delete `c.t.f.ServiceFactorySocketAddress` and replace usages with
`c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209``
* finagle-core: Delete `c.t.f.WeightedSocketAddress` and instead use
`c.t.f.addr.WeightedAddress` to represent address weights. ``RB_ID=792209``
* finagle-core: `c.t.f.builder.ClientBuilder.hosts` takes a Seq of `InetSocketAddress` instead of
`SocketAddress`. If you get a compile error, change the static type to `InetSocketAddress` if
you can. Otherwise, cast it at runtime to `InetSocketAddress`. ``RB_ID=792209``
* finagle-core: `c.t.f.client.Transporter.EndpointAddr` takes a `c.t.f.Address` as its
parameter instead of `SocketAddress`. ``RB_ID=792209``
* finagle-core: `c.t.f.service.FauilureAccrualFactory.Param(FailureAccrualPolicy)` is removed -
it's not safe to configure Failure Accrual with a shareable instance of the policy, use
`() => FailureAccrualPolicy` instead. ``RB_ID=802953``
* finagle-core: `$Client.withSessionQualifier.failureAccrualPolicy` has been removed from the API
since it enables an experimental feature (use Stack's `.configured` API instead). ``RB_ID=802953``
* finagle-core: `c.t.f.service.exp.FailureAccrualPolicies` (Java-friendly API) has been removed -
use `c.t.f.service.exp.FailureAccrualPolicy` instead.
* finagle-core: DefaultServer is removed. Protocol implementors should use StackServer instead.
``RB_ID=811918``
* finagle-memcached: `c.t.f.memcached.protocol.text.Memcached` no longer takes a `StatsReceiver`,
pass it to a `(Client/Server)Builder` instead. ``RB_ID=797821``
* finagle-redis: `c.t.f.redis.Redis` no longer takes a `StatsReceiver`, pass it to a
`(Client/Server)Builder` instead. ``RB_ID=797821``
* finagle-core: `c.t.f.http.MapHeaderMap` no longer takes a `mutable.Map[String, Seq[String]]` as
a constructor parameter. `apply` method provides a similar functionality.
Bug Fixes
~~~~~~~~~
* finagle-core: Fixed `getAll` method on `c.t.f.http.MapHeaderMap`, now it is case insensitive.
`apply` method was altering the provided header names. This is fixed it is now possible to
iterate on the original header names.
6.33.0
------
New Features
~~~~~~~~~~~~
* finagle-core: Introduce the `c.t.f.service.PendingRequestFactory` module in the client Stack.
The module allows clients to limit the number of pending requests per connection. It is disabled
by default. ``RB_ID=795491``
* finagle-core: Introduce the `c.t.f.filter.ServerAdmissionControl` module in the server Stack,
which is enabled through the param `c.t.f.param.EnableServerAdmissionControl`. Users can define
their own admission control filters, which reject requests when the server operates beyond
its capacity. These rejections apply backpressure and allow clients to retry requests on
servers that may not be over capacity. The filter implementation should define its own logic
to determine over capacity. One or more admission control filters can be installed through
the `ServerAdmissionControl.register` method. ``RB_ID=776385``
* finagle-core: Introduce `c.t.f.service.ResponseClassifier` which allows developers to
give Finagle the additional application specific knowledge necessary in order to properly
classify them. Without this, Finagle can only safely make judgements about transport
level failures. This is now used by `StatsFilter` and `FailureAccrualFactory` so that
application level failures can be used for both success metrics and failure accrual.
``RB_ID=772906``
* finagle-core: Added a new 'Endpoints' section on client pages, listing the weights, paths,
and resolved endpoints for each dtab.``RB_ID=779001``
* finagle-core: Introduce discoverable stack params which are available on every client/server
via the `with`-prefixed methods. ``RB_ID=781833``
* finagle-memcached: Added `c.t.f.memcached.BaseClient.checkAndSet` which exposes the difference
between a conflict and a not found result.
* finagle-mux: Add a Wireshark dissector that can decode Mux messages. ``RB_ID=779482``
* finagle-stats: Define flag `c.t.f.stats.statsFilterFile` as GlobalFlag[Set[File]] to take
comma-separated multiple files. ``RB_ID=793397``
* finagle-mux: Tinit/Rinit are now available and permit feature negotiation. ``RB_ID=793350``
Deprecations
~~~~~~~~~~~~
* finagle-memcached: `c.t.f.memcached.BaseClient.cas` is deprecated in favor of the richer
`checkAndSet` method.
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: All the deprecated exceptions from `Exceptions.scala` have been removed.
``RB_ID=774658``
* finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
`c.t.f.Thrift.Server`. This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
* finagle-core: Unused `c.t.f.builder.NonShrinkingCluster` has been removed.
``RB_ID=779001``
* finagle-thrift: `c.t.f.ThriftRichClient` has a new abstract protected method
`responseClassifier: ResponseClassifier`. If your implementation does not need
this, you can implement it with `ResponseClassifier.Default`. ``RB_ID=791470``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-thrift,thriftmux: Deserialization of Thrift responses now happens as part
of service application which means that it will now be part of the latency reported by
`StatsFilter`. The actual latency as perceived by clients will not have changed, but
for clients that spend significant time deserializing and do not have higher level
metrics this may come as a surprise. ``RB_ID=772931``
* finagle-mux,thriftmux: The default `closeTimeout` in ping based failure detection
is changed from Duration.Top to 4 seconds, to allow a session to be closed by default
when a ping response times out after 4 seconds. This allows sessions to be reestablished
when there may be a networking issue, so that it can choose an alternative networking
path instead. ``RB_ID=773649``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
`c.t.f.Thrift.Server`. This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
6.32.0
------
NOT RELEASED
6.31.0
------
New Features
~~~~~~~~~~~~
* finagle-core: `c.t.f.Server` now has a `serveAndAnnounce` method that accepts a `SocketAddress`
as an address. ``RB_ID=758862``
* finagle-core: `c.t.f.service.Retries` now supports adding delay between each automatic retry.
This is configured via the `Retries.Budget`. ``RB_ID=768883``
* finagle-core: FailureAccrualFactory now uses a FailureAccrualPolicy to determine when to
mark an endpoint dead. The default policy, FailureAccrualPolicy.consecutiveFailures(),
mimicks existing functionality, and FailureAccrualPolicy.successRate() operates on the
exponentially weighted average success rate over a window of requests.``RB_ID=756921``
* finagle-core: Introduce `c.t.f.transport.Transport.Options` to configure transport-level options
(i.e., socket options `TCP_NODELAY` and `SO_REUSEADDR`). ``RB_ID=773824``
* finagle-http: `c.t.f.http.exp.Multipart` now supports both in-memory and on-disk file uploads.
``RB_ID=RB_ID=769889``
* finagle-netty4: Hello World. Introduce a `Listener` for Netty 4.1. This is still considered beta.
``RB_ID=718688``
* finagle-netty4: Introduce `ChannelTransport` for Netty 4.1. ``RB_ID=763435``
* finagle-thrift: `c.t.f.ThriftRichClient` implementations of `newServiceIface`
method that accept a `label` argument to pass to the `ScopedStats` instance. ``RB_ID=760157``
* finagle-stats: Added `c.t.f.stats` now has a `statsFilterFile` flag which will read a blacklist
of regex, newline-separated values. It will be used along with the `statsFilter` flag for stats
filtering. ``RB_ID=764914``
Deprecations
~~~~~~~~~~~~
* finagle-core: the #channelFactory method of `c.t.f.builder.ServerBuilder` has been deprecated
in favor of the `c.t.f.netty3.numWorkers` flag. ``RB_ID=718688``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: The behavior for `c.t.f.util.DefaultMonitor` has changed such that
unhandled exceptions are propagated to `c.t.u.RootMonitor` except for
`c.t.f.Failures` with a log `Level` below INFO. ``RB_ID=758056``
* finagle-core: The metrics for requeues `requeue/requeues`, `requeue/budget` and
`requeue/budget_exhausted` have moved under retries. They are now `retries/requeues`,
`retries/budget` and `retries/budget_exhausted`. ``RB_ID=760213``
* finagle-core: `c.t.f.service.RetryFilter` and `c.t.f.service.RetryExceptionsFilter`
now default to using a `RetryBudget` to mitigate retry amplification on downstream
services. The previous behavior can be achieved by explicitly passing in
`RetryBudget.Infinite`. ``RB_ID=766302``
* finagle-core: `c.t.f.factory.TrafficDistributor` now suppresses changes when a bound
address is updated from a valid set to an error. Instead, it continues using stale
data until it gets a successful update.
* finagle-http: Unhandled exceptions from user defined HTTP services are now converted
into very basic 500 responses so clients talking to those services see standard HTTP
responses instead of a dropped connection. ``RB_ID=755846``
* finagle-memcached: Moved metrics from underlying `KetamaPartitionedClient` for Memcached clients
to share the same scope of the underlying finagle client. ``RB_ID=771691``
* finagle-mux: `com.twitter.finagle.mux.ThresholdFailureDetector` is turned on by
default. ``RB_ID=756213``
* finagle-serversets: The `c.t.f.serverset2.Zk2Resolver` now surfaces `Addr.Pending`
when it detects that its underlying ZooKeeper client is unhealthy. Unhealthy is defined
as non-connected for greater than its 'unhealthyWindow' (which defaults to 5 minutes).
``RB_ID=760771``
* finagle-serversets: The `c.t.f.serverset2.ZkSession` now uses an unbounded semaphore to
limit to 100 outstanding zookeeper requests at any one moment. ``RB_ID=771399``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `BackupRequestLost` is no longer itself an `Exception`. Use
`BackupRequestLost.Exception` in its place. ``RB_ID=758056``
* finagle-core: Replaced `c.t.f.builder.ClientConfig.Retries` with
`c.t.f.service.Retries.Policy`. ``RB_ID=760213``
* finagle-core: A deprecated `c.t.f.CancelledReadException` has been removed.
``RB=763435``
* finagle-http: `c.t.f.http.exp.Multipart.decodeNonChunked` has been removed from
the public API. Use `c.t.f.http.Request.multipart` instead. Also
`c.t.f.http.exp.Multipart.FileUpload` is no longer a case class, but base trait
for `Multipart.InMemoryFileUpload` and `Multipart.OnDiskFileUpload`. ``RB_ID=769889``
* finagle-mux: `c.t.f.FailureDetector.apply` method is changed to private scope,
to reduce API surface area. Using `FailureDetector.Config` is enough to config
session based failure detection behavior. ``RB_ID=756833``
* finagle-mux: `closeThreshold` in `c.t.f.mux.FailureDetector.ThresholdConfig` is
changed to `closeTimeout`, from an integer that was used as a multiplier to time
duration. This makes it easier to config. ``RB_ID=759406``
Bug Fixes
~~~~~~~~~
* finagle-thrift: `c.t.f.ThriftRichClient` scoped stats label is now threaded
properly through `newServiceIface` ``RB_ID=760157``
6.30.0
------
New Features
~~~~~~~~~~~~
* finagle-core: `com.twitter.finagle.client.LatencyCompensator` allows its
default Compensator value to be set via an API call. This allows
libraries to set defaults for clients that have not configured this module.
``RB_ID=750228``
* finagle-core: New Resolver `com.twitter.finagle.FixedInetResolver` extends
InetResolver by caching successful DNS lookups indefinitely. It's scheme is 'fixedinet'.
This is used by clients or resolvers that do not want or expect
host->ip map changes (such as the zk2 resolver and twemcache client).
``RB_ID=753712``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: `RetryPolicy.tries` now uses jittered backoffs instead of
having no delay. ``RB_ID=752629``
* finagle-core: `FailureAccrualFactory` uses jittered backoffs as the duration
to mark dead for, if `markDeadFor` is not configured. ``RB_ID=746930``
* finagle-core: The transit latency (transit_latency_ms) and deadline budget
(deadline_budget_ms) stats are now only recorded for servers, not for
clients anymore, since they're only meaningful for servers. ``RB_ID=75268``
* finagle-http: Clients sending requests with payloads larger than the server
accepts (default 5MB) now receive a HTTP 413 response instead of a channel
closed exception. ``RB_ID=753664``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `TimerFromNettyTimer` is renamed to `HashedWheelTimer` and
the constructor accepting `org.jboss.netty.util.Timer` made private. For
compatibility, `HashedWheelTimer` has additional constructors to match
those provided by `org.jboss.netty.util.HashedWheelTimer`. ``RB_ID=748514``
* finagle-httpx / finagle-httpx-compat: Renamed to finagle-http and
finagle-http-compat respectively. This changes the package names, e.g.:
com.twitter.finagle.httpx to com.twitter.finagle.http. ``RB_ID=751876``
* finagle-core: Marked `HandletimeFilter` private[finagle], and renamed it to
`ServerStatsFilter`. ``RB_ID=75268``
* finagle-zipkin: Drop `c.t.zipkin.thrift.Annotation.duration` and associated thrift field
`c.t.f.thrift.thrift.Annotation.duration`. ``RB_ID=751986``
* finagle-stress: Project has been removed from Finagle. ``RB_ID=752201``
* finagle-swift: Project has been moved off of Finagle to
https://github.com/finagle/finagle-swift . ``RB_ID=752826``
6.29.0
------
Deprecations
~~~~~~~~~~~~
* finagle-http: Deprecated in favour of finagle-httpx and now removed.
New Features
~~~~~~~~~~~~
* finagle-core: Provides a `RetryFilter` which takes a
`RetryPolicy[(Req, Try[Rep])]` and allows you to retry on both "successful"
requests, such as HTTP 500s, as well as failed requests. The `Req`
parameterization facilitates using the request to determine if retrying is
safe (i.e. the request is idempotent).
* finagle-httpx: Experimental support `multipart/form-data` (file uploads)
decoding via `c.t.f.httpx.exp.Multipart`. ``RB_ID=730102``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: `InetResolver.bind` will now succeed if any hostname resolution
succeeds. Previous behavior required that all hosts are successfully resolved.
``RB_ID=737748``
* finagle-core: DNS lookups in InetResolver are no longer cached
within Finagle according to `networkaddress.cache.ttl`; we rely
instead on however caching is configured in the JVM and OS. ``RB_ID=735006``
* finagle-core: After being revived, a `FailureAccrualFactory` enters a
'probing' state wherein it must successfully satisfy a request before
accepting more. If the request fails, it waits for the next `markDeadFor`
period. ``RB_ID=747541``
* finagle-serversets: DNS lookups in Zk2Resolver are no longer
cached within Finagle according to `networkaddress.cache.ttl`;
instead they are cached indefinitely. ``RB_ID=735006``
* finagle-redis: c.t.f.Redis now uses a pipelined dispatcher along with
a concurrent load balancer to help eliminate head-of-line blocking.
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `RetryingFilter`, which takes a RetryPolicy[Try[Nothing]]` and
is invoked only on exceptions, has been renamed to `RetryExceptionsFilter`.
`RetryExceptionsFilter` is a subclass of `RetryFilter`, which takes a
`RetryPolicy[(Req, Try[Rep])]` and allows you to retry on both "successful"
requests, such as HTTP 500s, as well as failed requests. The `Req`
parameterization facilitates using the request to determine if retrying is
safe (i.e. the request is idempotent).
* finagle-core: Name.all is now private to `com.twitter.finagle`.
* finagle-memcached: Unified stack-based construction APIs and cleanup internal
constructors. In particular, `KetamaClient` was removed and `KetamaPartitionClient`
and `KetamaFailureAccrualFactory` are now sealed inside Finagle. See
[[com.twitter.finagle.Memcached]] for how to construct a finagle-memcached client.
* finagle-redis: Port the c.t.f.Redis protocol object to the StackClient API.
A redis client can now be constructed and configured like the rest of the
finagle subprojects.
6.28.0
------
New Features
~~~~~~~~~~~~
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: Weights are no longer supported by the load balancers. They are moved
one level above and interpreted by a new module, the `TrafficDistributor`. This
frees the balancers to have non-linear load metrics. It also changes the semantics
of weights. They are now normalized by size of endpoints that share the same weight
and interpreted proportional to offered load (however, they can still be though of,
roughly, as multipliers for traffic). ``RB_ID=677416``
* finagle-core: The RequestSemaphoreFilter now sheds load by dropping the tail of the queue
and failing it with a `Failure.Restartable`. Previously, the filter had an unbounded
queue but now the default size is 0 (i.e. no queueing). The dropped requests are in
turn requeued by Finagle clients with protocol support (e.g. Http, ThriftMux).
``RB_ID=696934``
* finagle-core: `ServerBuilder.ServerConfig.BindTo`, `ServerBuilder.ServerConfig.MonitorFactory`,
and `ServerBuilder.ServerConfig.Daemonize`, are now private to `com.twitter.finagle.builder`. ``RB_ID=730865``
* finagle-memcachedx: Renamed to finagle-memcached.
* finagle-stats: Standard deviation ("$statName.stddev") is no longer exported.
``RB_ID=726309`` (follow up to ``RB_ID=717647``)
* finagle-serversets: `namer/bind_latency_us` stat now counts only
time in name resolution, not service acquisition.
`namer/{dtabcache,namecache,nametreecache}/misstime_ms` stats are
no longer exported. ``RB_ID=730309``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `c.t.f.jsr166y` has been replaced with Java 7 API. finagle: Replace JSR166y
with Java 7 API. ``RB_ID=720903``
* finagle-core: `LoadBalancerFactory` no longer takes endpoints with weights as
per the decoupling mentioned in runtime changes. ``RB_ID=677416``
* finagle-core: `RequestSemaphoreFilter.Param` now accepts a `com.twitter.concurrent.AsyncSemaphore`
instead of an integer representing the max concurrency. ``RB_ID=696934``
* finagle-core: removed `c.t.f.asyncDns` flag and `c.t.f.SyncInetResolver`; DNS resolution is
now always asynchronous. ``RB_ID=734427``
* finagle-core: `ClientBuilder.ClientConfig.DefaultParams`, `ClientBuilder.ClientConfig.DestName`,
`ClientBuilder.ClientConfig.GlobalTimeout`, `ClientBuilder.ClientConfig.Daemonize`, and
`ClientBuilder.ClientConfig.MonitorFactory` are now private to `com.twitter.finagle.builder`.
`ClientBuilder.ClientConfig.Retries` is now private to `com.twitter`. ``RB_ID=727245``
* finagle-httpx: `Method` no longer has an extractor. To access the name of
custom methods, use `toString`. ``RB_ID=722913``
* finagle-mux: `c.t.f.mux.exp.FailureDetector` and `c.t.f.mux.exp.sessionFailureDetector` are
moved out of exp package into mux package. ``RB_ID=725350``
6.27.0
------
New Features
~~~~~~~~~~~~
* finagle-http: Support nacks between Finagle Http clients and servers. When a server fails
with retryable exceptions (exceptions wrapped by `Failure.rejected`), it sends back a "Nack"
response, i.e. 503 Response code with a new "finagle-http-nack" header. This allows clients
to safely retry failed requests, and keep connections open. ``RB_ID=705948``
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: FailFast parameter renamed from `onOrOff` to `enabled`. ``RB_ID=720781``
* finagle-core: When evaluating NameTree unions, return components of the union in Ok state rather
than waiting for all components to be Ok. This enables resilience of unions when part of the
tree cannot be resolved. ``RB_ID=697114``
* finagle-stats: Standard of deviation is no longer calculated. It is exported as a constant 0.0
for "$statName.stddev". ``RB_ID=717647``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-stream: Introduce StreamRequest as a replacement for Netty's
HttpRequest, and converted the rest of the public API to not leak
other Netty types (notably ChannelBuffer is replaced by Buf). ``RB_ID=695896``
* finagle-core: Dtab does not implement the Namer interface anymore. Use
`c.t.f.naming.DefaultInterpreter` to bind a name via a Dtab. Support for Dtab entries starting
with /#/ has been removed. `c.t.f.Namer.bindAndEval` has been removed. Use
`c.t.f.Namer.resolve` instead. ``RB_ID=711681``
* finagle: `LoadService` and `ThriftRichClient` migrated off of deprecated `ClassManifest`
to `ClassTag`. ``RB_ID=720455``
6.26.0
-------
Deprecations
~~~~~~~~~~~~
* finagle-memcached: Deprecated in favor of finagle-memcachedx and now removed.
New Features
~~~~~~~~~~~~
* finagle-httpx: Support nacks between Finagle Http clients and servers. When a server fails
with retryable exceptions (exceptions wrapped by `Failure.rejected`), it sends back a "Nack"
response, i.e. 503 Response code with a new "finagle-http-nack" header. This allows clients
to safely retry failed requests, and keep connections open. ``RB_ID=670046``
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: Moved netty3 specific things into a netty3 namespace. For
these symbols, the namespace translation follows this pattern:
`c.t.f.$MODULE._ => c.t.f.netty3.$MODULE._.` ``RB_ID=691746``
* finagle-core: Define `WeightedSocketAddress` as a case class. Add
`WeightedSocketAddress.extract` method to extract weight. ``RB_ID=614228``
* finagle-core: Constructing a new Balancer that can be injected into a Finagle client
was unnecessarily complex and non-uniform. We removed the legacy constructors around
defining the collection of endpoints and simplified the interface to `LoadBalancerFactory`.
Now, `com.twitter.finagle.loadbalancer.Balancers` defines the collection of balancer
constructors. ``RB_ID=660730``
* finagle-core: Aperture can no longer be enabled via command line flags. Configuring
per-client settings globally is generally not a good idea and we're working to remove
these flags from Finagle. Use the constructors in `com.twitter.finagle.loadbalancer.Balancers`
to create an instance that can be injected into a client. ``RB_ID=663194``
* finagle-core: The default load balancer has changed to p2c from heap. ``RB_ID=693450``
* finagle-core: `Service.isAvailable` and `ServiceFactory.isAvailable` is finalized.
`Service.status` and `ServiceFactory.status` supersedes `isAvailable` usage since 6.24.0 release.
``RB_ID=678588``
* finagle-core: `ClientBuilder.failureAccrual` method is removed. Use `ClientBuilder.failureAccrualFactory`
instead. ``RB_ID=689076``
* finagle-core: Stack param `ClientBuilder.ClientConfig.FailureAccrualFac` is removed.
Use `ClientBuilder.failureAccrualFactory` instead. ``RB_ID=689076``
* finagle-exception: `com.twitter.finagle.exception.ExceptionReporter` is no longer used
as the default `com.twitter.finagle.util.ReporterFactory`. ``RB_ID=674646``
* finagle-kestrel: Replace deprecated finagle-kestrel package with finagle-kestrelx.
``RB_ID=667920``
* finagle-core: Add new method `noFailureAccrual` on `ClientBuilder` that completely disables
`FailureAccrualFactory` in the underlying stack. ``RB_ID=689076``
New Features
~~~~~~~~~~~~
- finagle-thrift: Support for finagle Services per thrift method.
6.25.0
------
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: `c.t.f.builder.Server` now implements `c.t.f.ListeningServer`.
* finagle-core: `c.t.f.Server.serveAndAnnounce` with a `ServiceFactory` had
its first argument renamed to `name` from `forum`.
* finagle-core: Add an attribute map to `c.t.f.Addr.Bound`.
* finagle-core: `c.t.f.builder.ClientConfig.FailFast` has moved to
`c.t.f.FailFastFactory.FailFast`.
* finagle-core: NoBrokersAvailableException now has two Dtab constructor
arguments, both the base and local Dtabs.
* finagle-core: `c.t.f.Failure` convenience constructors (e.g., `Failure.Cause`,
`Failure.Rejected`) were removed in favor of uniform flag treatment, and clean
separation of attributes from interpretation of those attributes.
* finagle-core: `ExitGuard` usage is now private to finagle.
* finagle-core: `c.t.f.service.TimeoutFilter.module` is now split into
`TimeoutFilter.clientModule` and `TimeoutFilter.serverModule`.
* finagle-core: remove deprecated `c.t.f.builder.ClientBuilder.stack` taking a
`Stack.Params => Client[Req1, Rep1]`.
* finagle-core: StackRegistry.Entry takes different constructor arguments, and the
name has been bundled in with the Stack.Params. StackRegistry.Entry is only used
internally, so this should be relatively inexpensive. Similarly, StackRegister#register
has also had a small change to its method signature along the same lines.
* finagle-http: deprecated methods in `c.t.f.http.HttpMessageProxy` have been removed.
* finagle-memcached / finagle-memcachedx: move TwitterCacheResolver
and related objects to new finagle-cacheresolver package.
* finagle-memcached / finagle-memcachedx: failureAccrual param in ReplicationClient
is changed from type (Int, Duration) to (Int, () => Duration), to allow flexibility
to config duration. Also see `markDeadFor` change in finagle-core in the "New Features"
section below.
* finagle-memcached / finagle-memcachedx: MigrationClientTest now uses
ServerCnxnFactory from com.twitter.zk rather than NIOServerCnxn.Factory from
org.apache.zookeeper.server.
* finagle-mux: `c.t.f.mux.RequestNackedException` is removed in favor of a standard
Failure (`c.t.f.Failure.Rejected`).
* finagle-ostrich4: Switched dependency to finagle-httpx from finagle-http.
* finagle-serversets: ZkInstance in tests now uses ServerCnxnFactory from
com.twitter.zk rather than NIOServerCnxn.Factory from
org.apache.zookeeper.server.
* finagle-stats: Switched dependency to finagle-httpx from finagle-http.
* finagle-mysql: PreparedStatements are now more type-safe! The type signature of
PreparedStatements has changed from Seq[Any] => Future[Result] to Seq[Parameter] =>
Future[Result]. Parameter represents objects that are serializable by finagle-mysql.
In most cases, scalac should transparently wrap your arguments in Parameter when
applying a PreparedStatement. However, in cases where this doesn't happen you
can explicitly wrap them using `Parameter.wrap`.
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-core: `com.twitter.finagle.service.StatsFilter` no longer requires a
`com.twitter.finagle.stats.RollupStatsReceiver` for correct behaviour, and
providing one will double count failures.
* finagle-core: `com.twitter.finagle.factory.TimeoutFactory` will fail with
a retryable `com.twitter.finagle.Failure` when it times out.
* finagle-core: `com.twitter.finagle.pool.WatermarkPool` will fail with
an interrupted `com.twitter.finagle.Failure` when it is interrupted while
waiting or trying to establish a connection. It has previously failed with
a `com.twitter.finagle.WriteException` when trying to establish a
connection, but it's incorrect to retry on an interruption.
* finagle-core: `com.twitter.fiangle.RetryPolicy`'s `RetryableWriteException`
and `WriteExceptionsOnly` will not retry on `com.twitter.finagle.Failure`s
that are marked `InterruptedBy`, even if they are `Retryable`.
* finagle-core: The error message provided by `c.t.f.NoBrokersAvailableException`
prints both the base and local Dtabs.
* finagle-core: Stats produced by `com.twitter.finagle.factory.BindingFactory`
are now scoped with the "namer" prefix rather than "interpreter". The total
latency associated with Name binding is now recorded in the "bind_latency_ms"
stat.
* finagle-core: The "service_creation/service_acquisition_latency_ms" stat
produced by `com.twitter.finagle.factory.StatsFactoryWrapper` no longer
includes time spent in name resolution, which is now covered by
"namer/bind_latency_us" as discussed above.
* finagle-core: added transit_latency_ms and deadline_budget_ms stats.
* finagle-core: Automatic retries (requeues) are now credited as a ratio of
requests over a window of time, instead of a fixed limit. The stats scope
has also changed from "automatic" to "requeues".
Deprecations
~~~~~~~~~~~~
* finagle-core: `c.t.f.builder.Server.localAddress` is deprecated in favor of
`c.t.f.ListeningServer.boundAddress`.
New Features
~~~~~~~~~~~~
* finagle-core: `Fail fast <https://twitter.github.io/finagle/guide/FAQ.html#why-do-clients-see-com-twitter-finagle-failedfastexception-s>`_
is now `configurable <https://twitter.github.io/finagle/guide/FAQ.html#configuring-finagle6>`_
on Stack-based clients via the `com.twitter.finagle.FailFastFactory.FailFast` param.
* finagle-core: `com.twitter.finagle.service.StatsFilter` is now configurable with an
`com.twitter.finagle.stats.ExceptionStatsHandler` to customize how failures are recorded.
* finagle-core: It should be safe to match on `com.twitter.finagle.Failure.InterruptedBy`
to tell if a `com.twitter.util.Future` failed due to being interrupted.
* finagle-core: `markDeadFor` in c.t.f.service.FailureAccrualFactory.Param is changed from
Duration type to () => Duration. So it's flexible for clients to pass in a function that
specifies Duration. For example, c.t.f.service.FailureAccrualFactory provides a function
that adds perturbation in durations. Stack-based API and c.t.f.builder.ClientBuilder
support both types for client configuration. For example,
::
Thrift.client.configured(FailureAccrualFactory(5, () => 1.seconds))
// or
Thrift.client.configured(new FailureAccrualFactory(5, 1.seconds)).
c.t.f.client.DefaultClient does not support Duration type in failureAccrual anymore.
* finagle-core: improved Java compatiblity for `c.t.f.Stack.Params` / `c.t.f.Stack.Parameterized`.
* finagle-core: Introduce the ability to add metadata to bound `com.twitter.finagle.Addr`\s.
* finagle-core: Introduce per-address latency compensation. Clients may be configured with
a 'Compensator' function that uses the client's address metadata to adjust connection and
request timeouts. This can be used, for instance, to account for speed-of-light latency
between physical regions.
* finagle-core: Introduce per-address stats scoping. Clients may be configured with
a `com.twitter.finagle.client.StatsScoping.Scoper` function that uses the client's
address metadata to adjust the scope of client stats. This can be used, for instance,
to properly scope client stats for a Name that resolves to a Union of distinct clusters.
* finagle-core: A convenient method `Client.newService(dest: String, label: String)` was added.
* finagle-core: ExitGuard now has an 'explainGuards' method to provide a human-readable
description of exit guards that are still active.
* finagle-http(x): Two missing params were added: `Decompression` and `CompressionLevel`. Both
client and server may be configured with either `configured` method or `withDecompression`/
`withCompressionLevel`.
* finagle-mysql: Add support for MySQL transactions.
* finagle-stats: A new HostStatsReceiver type is added and used for per host stats.
It is loaded through LoadService and used by the Stack-based API as a default
param. Per host stats can be turned on through `com.twitter.finagle.loadbalancer.perHostStats`
flag, and is exported to the "/admin/per_host_metrics.json" route in twitter-server.
* finagle-stats: Improved compatibility when migrating from
`Ostrich <https://github.com/twitter/ostrich/>`_ stats via two flags:
``com.twitter.finagle.stats.useCounterDeltas=true`` and
``com.twitter.finagle.stats.format=ostrich``. If these flags are both set,
HTTP requests to ``/admin/stats.json`` with the ``period=60`` query string
parameter will replicate Ostrich's behavior by computing deltas on counters
every minute and formatting histograms with the same labels Ostrich uses.
* finagle-memcached(x): Add `c.t.f.memcached.Memcached` which provides a Stack
based Memcache client that uses pipelining.
Bug Fixes
~~~~~~~~~
* finagle-core: `c.t.f.Server.serveAndAnnounce` for a `Service` had its usage
of `name` and `addr` transposed.
Miscellaneous Cleanup
~~~~~~~~~~~~~~~~~~~~~
* finagle-protobuf: Move entire unused subproject to the `Finagle
organization on GitHub <https://github.com/finagle/finagle-protobuf>`_.
6.24.0
------
Breaking API Changes
~~~~~~~~~~~~~~~~~~~~
* finagle-core: Remove `c.t.f.client.StackClient.Role.loadBalancer`, which
was unused and duplicated by `c.t.f.loadbalancer.LoadBalancerFactory.role`.
* finagle-core: `c.t.f.Namer.orElse` was removed; composing Namers
may be accomplished by constructing an appropriate Dtab.
* finagle-core: removed experimental `enum` / `expand` from
`c.t.f.Namer` and `alt` / `union` from `c.t.f.Dtab`.
* finagle-http: Remove `c.t.f.http.CheckRequestFilter` along with
`c.t.f.http.CheckHttpRequestFilter`. The functionality has been
added to `c.t.f.http.codec.HttpServerDispatcher`. In addition,
the codecError in `c.t.f.http.BadHttpRequest` has been replaced
with the exception thrown by the HttpServerCodec.
* finagle-httpx: Remove deprecated code, limited scope of access on internal
classes.
* finagle-mux: `c.t.f.mux.lease.exp.WindowedByteCounter` no longer
calls `Thread.start()` in its constructor. This should be now be
done by the caller.
* finagle-mux: The experimental session API is discontinued.
* finagle-mux: Introduce new Request and Response types for mux services.
The new mux request includes a `destination` path so that, which corresponds
to the `destination` field in Tdispatch requests. Furthermore, these new
types expose `c.t.io.Buf` instead of Netty's ChannelBuffers.
* finagle-thrift,finagle-thriftmux: `c.t.f.Thrift.Client`, `c.t.f.Thrift.Server`,
`c.t.f.ThriftMux.Client` and `c.t.f.ThriftMux.Server` have their
`TProtocolFactory` configured via a `c.t.f.thrift.param.ProtocolFactory`
`Stack.Param`.
* finagle-thriftmux: `c.t.f.ThriftMux.Client` now has its `ClientId`
configured via a `c.t.f.thrift.param.ClientId` `Stack.Param`.
* Traces (``com.twitter.finagle.tracing.Trace``) lose their local-state mutating methods:
``Trace.clear``, ``Trace.pushId``, ``Trace.setId``, ``Trace.setTerminalId``, ``Trace.pushTracer``,
``Trace.pushTracerAndSetNextId``,
``Trace.state_=``, and ``Trace.unwind``.
Let-bound versions of these are introduced in their stead.
This makes it simple to ensure that state changes are properly delimited;
further, these are always guaranteed to be delimited properly by Finagle.
::
Trace.setTracer(tracer)
codeThatUsesTracer()
// Let-bound version:
Tracer.letTracer(tracer) {
codeThatUsesTracer()
}
* Context handlers (``com.twitter.finagle.Context``) are removed.
They are replaced by the use of marshalled request contexts
(``com.twitter.finagle.context.Contexts.broadcast``).
Marshalled request contexts do not require the use of service loading,
so their use no longer requires build system coordination.
We show Finagle's trace context:
the first version uses the old context handler mechanism;
the second uses ``Contexts.broadcast``.
::
// The old context handler for Finagle's tracing context. Note that this
// also required the file
// finagle-core/src/main/resources/META-INF/services/com.twitter.finagle.ContextHandler
// to contain the fully qualifed class path of the below object.
class TraceContext extends ContextHandler {
val key = Buf.Utf8("com.twitter.finagle.tracing.TraceContext")
def handle(body: Buf) {
// Parse 'body' and mutate the trace state accordingly.
}
def emit(): Option[Buf] = {
// Read the trace state and marshal to a Buf.
}
}
// New definition. No service loading required.
private[finagle] val idCtx = new Contexts.broadcast.Key[TraceId] {
val marshalId = Buf.Utf8("com.twitter.finagle.tracing.TraceContext")
def marshal(id: TraceId): Buf = {
// Marshal the given trace Id
}
def tryUnmarshal(body: Buf): Try[TraceId] = {
// Try to marshal 'body' into a trace id.
}
}
Runtime Behavior Changes
~~~~~~~~~~~~~~~~~~~~~~~~
* finagle-mux: Mark the ServiceFactory available again if the underlying
Service is no longer available. This permits it to be closed and reused.