All Versions
Latest Version
Avg Release Cycle
24 days
Latest Release

Changelog History
Page 7

  • v6.45.0 Changes

    June 06, 2017

    ๐Ÿ†• New Features

    * util-app: Optional resource shutdown sequencing for registered closables
      via ``. See longer note there for usage.
    * util-core: Added `writeBytes(Buf)` to the ByteWriter abstract class to allow
      for efficient writing of the `` type. ``RB_ID=917094``
    * โœ… util-core: Added `writeString(CharSequence, Charset)` and readString(Int, Charset)`
      to ByteWriter and ByteReader respectively to facilitate for more efficient String
      encoding and decoding. ``PHAB_ID=D63987``
    * util-core: Added `ByteReader.readUnsignedLongBE` and `ByteReader.readUnsignedLongLE`.
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿšš util-collection: Removed deprecated c.t.u.JMapWrapper. Use scala.collection.JavaConverters instead. RB_ID=915544

    • util-core: ByteReader extends the AutoClosable interface to provide a notion of resource management. Users should ensure that instances of the ByteReader interface are closed after they are no longer needed. RB_ID=916086

    • ๐Ÿšš util-core: Removed deprecated methods from c.t.u.Future:

      • rawException; use exception instead
      • cancel; use raise instead

    Removed deprecated; use instead. Remove deprecated flatten method on c.t.u.Future; use Futures.flatten instead. RB_ID=915500

    • ๐Ÿšš util-core: Removed deprecated c.t.u.LongOverflowException. Use java.lang.ArithmeticException instead. Removed deprecated c.t.u.LongOverflowArith and all methods on it:

      • add; use Java 8's Math.addExact instead
      • sub; use Java 8's Math.subtractExact instead
      • mul; use Java 8's Math.multiplyExact instead RB_ID=915545
    • ๐Ÿšš util-core: Removed deprecated c.t.concurrent.exp.AsyncStream. Use c.t.concurrent.AsyncStream instead. RB_ID=916422

    • ๐Ÿšš util-eval: Removed from the project. RB_ID=915430

    โš™ Runtime Behavior Changes

    * util-core: All `Timers` now handle negative or undefined times/durations in uniform way:
      treat them as zeros (i.e., `Time.epoch`, `Duration.Zero`). ``RB_ID=916008``
  • v6.43.0 Changes

    April 20, 2017

    โš™ Runtime Behavior Changes

    * ๐Ÿ”€ util-core: `Closable.all(..)` will now catch synchronous exceptions thrown
      by any `Closable.close(..)` invocations, and wrap them in a failed Future.
    * util-stats: InMemoryStatsReceiver's `gauges` member is now safe for
      concurrent iteration but now holds strong references to gauge instances.
    ๐Ÿ†• New Features
    • util-core: c.t.f.u.BufReader and c.t.f.u.BufWriter have been moved from finagle-core to util-core and renamed to and respectively. They are now also exposed publicly. RB_ID=911639

    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿšš util: util-zk-commons was removed, since it was only a connector between
      util and commons, which was not widely used.  ``RB_ID=910721``
    * util-core: AsyncQueue's `size` method is now final while `offer` and `fail`
      are no longer final. ``RB_ID=914191``
  • v6.42.0 Changes

    March 10, 2017

    ๐Ÿ†• New Features

    * util-core: Promoted the positional `Buf.Indexed` API to be a first-class
      part of ``. If you have a custom implementation of `Buf` it
      will require some effort to become compatible. ``RB_ID=907231``
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿ“œ util-app: Set failFastUntilParsed on created flag added to via RB_ID=908804

    • ๐Ÿšš util-core: Remove deprecated which is replaced by[Buf]). RB_ID=907180

    • ๐Ÿšš util-core: Remove deprecated c.t.util.RingBuffer. Use Guava's EvictingQueue. RB_ID=907516

    • ๐Ÿšš util-core: Remove deprecated c.t.concurrent.ConcurrentPool. Prefer Finagle's c.t.f.pool.BufferingPool. RB_ID=907516

    • ๐Ÿšš util-core: Remove deprecated c.t.concurrent.ConcurrentMultiMap. Prefer Guava's Multimap. RB_ID=907516


    * util: Bump guava to 19.0. ``RB_ID=907807``
  • v6.41.0 Changes

    February 03, 2017

    ๐Ÿ†• New Features

    * util-app: App now exposes `closeOnExit` publicly. ``RB_ID=906890``
    * util-core: Add method to `Buf` to efficiently write to a nio `ByteBuffer`.
    * util-core: Add Java-friendly API to for converting from
      a Java 8 `Optional` to a Scala `Option`. ``RB_ID=906512``
    * util-core: Introduced a positional `Buf` API, `Buf.Indexed`, and retrofitted
      all existing implementations in util and finagle to adopt it. It is now used
      throughout for a reductions in allocation and latency. In two services at
      Twitter we saw a 1-2% reduction in allocations. We plan to open the API to
      the public and make it a part of `Buf` once we are confident in the APIs.
      ``RB_ID=904559`` ``RB_ID=905253`` ``RB_ID=906201``
    * ๐Ÿ‘ util-slf4j-api: Introduce slf4j-api support into util. This includes a
      small scala wrapper over the `org.slf4j.Logger` and a scala-friendly
      `Logging` trait. Changes also include the util-slf4j-jul-bridge module which
      is a library that provides a utility to "smartly" install the
      Slf4jBridgeHandler. ``RB_ID=900815``
    โš™ Runtime Behavior Changes
    • ๐ŸŽ util-core: Improved performance and allocation rates of some "random access" Buf operations. RB_ID=905253

    • util-core: Standardized argument checking in implementations of and RB_ID=899935

    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿ—„ util-core: Deprecated `` which is replaced by
      `[Buf])`. ``RB_ID=899623``
  • v6.40.0 Changes

    December 20, 2016

    ๐Ÿ› Bug Fixes

    * util-core: Fix issue with c.t.concurrent.AsyncStream.mapConcurrent which
      will cause the stream head to be held for life of operation. ``RB_ID=896168``
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿ—„ util-core: Deprecated charset constants in have been removed. Use java.nio.charset.StandardCharsets instead. RB_ID=893542

    • ๐Ÿ—„ util-core: com.twitter.util.NonFatal is deprecated, use scala.util.control.NonFatal instead. RB_ID=892475

    • util-core: FactoryPool/SimplePool now inherits scala.collection.mutable.Queue[A] not deprecated scala.collection.mutable.QueueProxy[A] RB_ID=896485

    • util-core: Buf has been promoted from a trait to an abstract class to facilitate memoization of the Buf hash code. This also removes the need for the Java friendly abstract class: AbstractBuf. RB_ID=897476

  • v6.39.0 Changes

    November 22, 2016

    No Changes

  • v6.38.0 Changes

    October 10, 2016

    ๐Ÿ†• New Features

    * util-app: Java developers can now declare instances of `GlobalFlag`
      from Java. See `` for details. ``RB_ID=874073``
    * util-thrift: We now depend on a fork of libthrift hosted in the Central Repository.
      The new package lives in the 'com.twitter' organization. This removes the necessity of
      depending on This also means that eviction will not be automatic and
      using a newer libthrift library requires manual eviction if artifacts are being pulled
      in transitively. ``RB_ID=885879``
    * ๐ŸŒฒ util-logging: Allow users to override `c.t.util.logging.Logger` installation,
      making it easier to work with SLF4J bridges. ``RB_ID=870684``
    * util: No longer need to add an additional resolver that points to
    ๐Ÿ› Bug Fixes
    • util-core: and Readers created by and fromStream now close the underlying InputStream on reading of EOF and on calls to Reader.discard. RB_ID=873319

    ๐Ÿ’ฅ Breaking API Changes

    * util-core: `` is now `abstract` to reflect how the class
      is intended to be used. ``RB_ID=875409``
  • v6.37.0 Changes

    September 07, 2016

    ๐Ÿ†• New Features

    * util-app: Introduce `` allowing flags to be unset.
  • v6.36.0 Changes

    August 25, 2016

    ๐Ÿ†• New Features

    * util-core: `c.t.util.FuturePool` now optionally exposes metrics on
      their internal state such as active tasks, and completed tasks.
    * util-core: Add a system property
      `com.twitter.concurrent.schedulerSampleBlockingFraction` that can be
      set to a value between 0.0 and 1.0 (inclusive). When the Scheduler
      runs blocking code, it will log the stacktrace for that fraction of
      the calls. ``RB_ID=861892``
    * ๐Ÿ‘€ util-core: Add Java-friendly API for `StorageUnit`. See `StorageUnit.fromX`
      and `StorageUnit.{times, plus, minus, divide}` methods. ``RB_ID=864546``
    โš™ Runtime Behavior Changes
    • util-eval: The compiler reporter is now reset between code check invocations. This means that when there is a failure that it is no longer required to reset the entire state to recover and that already compiled and loaded classes can still be used. RB_ID=859878
  • v6.35.0 Changes

    July 07, 2016

    โš™ Runtime Behavior Changes

    * util-codec: StringEncoder no longer depends on apache commons-codec, and
      decode will now throw an exception when it fails to decode a byte, instead
      of failing silently. ``RB_ID=833478``
    * util-collection: LruMap is now backed by jdk LinkedHashMap instead of apache
      collections LRUMap. ``RB_ID=833515``
    * util-core: `com.twitter.util.NonFatal` is now implemented by Scala's
      `scala.util.control.NonFatal`. This changes behavior such that
      `java.lang.StackOverflowError` is considered fatal and
      `java.lang.NoSuchMethodException` is considered non-fatal.
    ๐Ÿ†• New Features
    • ๐Ÿšš util-app: com.twitter.finagle.util.LoadService has been moved to and can now be used without needing a finagle-core dependency. RB_ID=829897

    • ๐Ÿ’… util-cache: Adds support for Caffeine-style caches. RB_ID=833848

    • โฑ util-core: Add c.t.concurrent.Scheduler.blockingTimeNanos which tracks time spent doing blocking operations. RB_ID=828289

    • ๐Ÿšค util-core: Reduced allocations by 40% and latency by 18% of satisfying Promises. RB_ID=832816

    • ๐Ÿšš util-core: c.t.util.NoStacktrace is removed. Use scala.util.control.NoStackTrace instead. RB_ID=833188

    • util-core: Add Future.joinWith that also accepts a function (A, B) => C for mapping a joined result. RB_ID=838169

    • util-core: Add, complementary to the existing Future.within(Duration) RB_ID=838169

    • util-core: Add c.t.util.ProxyTimer which allows for creating proxy based Timers outside of the com.twitter.util package. RB_ID=846194

    • ๐Ÿ”€ util-core: Add AsyncStream.merge merge potentially inifite streams RB_ID=846681

    • ๐Ÿ”’ util-security: Added new project. RB_ID=843070

    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿ— Builds are now only for Java 8 and Scala 2.11. See the
      `blog post <>`_
      for details. ``RB_ID=828898``
    * ๐Ÿšš util-core: `c.t.u.Bijection` is removed. use `c.t.bijection.Bijection`
      ( instead. ``RB_ID=834383``
    * ๐Ÿšš util-core: Deprecated method `Future.get()` has been removed because it made it
      too easy to hide blocking code. Replaced usage with the more explicit
      `com.twitter.util.Await.result(Future)`. ``RB_ID=833579``
    * ๐Ÿšš util-core: Deprecated method `Future.get(Duration): Try` has been removed because it
      made it too easy to hide blocking code. Replaced usage with the more explicit
      `com.twitter.util.Await.result(Future.liftToTry)`. ``RB_ID=836066``
    * ๐Ÿ—„ util-core: Deprecated methods `Future.isReturn` and `Future.isThrow` have been
      removed because they made it too easy to hide blocking code. Replaced usage with
      the more explicit `Await.result(Future.liftToTry).isReturn` and
      `Await.result(Future.liftToTry).isThrow`. ``RB_ID=837329``
    * ๐Ÿ‘• util-lint: Added methods `com.twitter.util.lint.Rules.removeById(String)` and
      `com.twitter.util.lint.RulesImpl.removeById(String)` so that it is now possible
      to remove a `com.twitter.util.lint.Rule` from the `com.twitter.util.lint.GlobalRules`
      set. ``RB_ID=840753``
    ๐Ÿ› Bug Fixes
    • util-core: AsyncMeter had a bug where if the burst size was smaller than the number of disbursed tokens, it would discard all of the tokens over the disbursal limit. Changed to instead process tokens in the wait queue with leftover tokens. This improves behavior where the actual period is smaller than can actually be simulated with the given timer. RB_ID=836742

    • util-core: Once didn't actually provide the guarantee it tried to, because of an issue with the scala compiler, It should now actually be synchronized. RB_ID=842245

    • ๐Ÿš€ util-zk: Fixed race when an existing permit is released between the time the list was gotten and the data was checked. RB_ID=835856

    • util-core: Memoize apply now throws IllegalStateException if a thread re-enters with identical input parameters instead of deadlocking.