Skip to content

Commit

Permalink
Merge pull request #3613 from djspiewak/release/3.4.11-major
Browse files Browse the repository at this point in the history
Backport 3.4.11 into major branch
  • Loading branch information
armanbilge authored May 12, 2023
2 parents a4d76cd + 7f65ba2 commit 9236a21
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 30 deletions.
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@

## Getting Started

- Wired: **3.4.10**
- Wired: **3.4.11**
- Tired: **2.5.5** (end of life)

```scala
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.10"
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.11"
```

The above represents the core, stable dependency which brings in the entirety of Cats Effect. This is *most likely* what you want. All current Cats Effect releases are published for Scala 2.12, 2.13, 3.0, and Scala.js 1.7.
Expand All @@ -30,22 +30,22 @@ Depending on your use-case, you may want to consider one of the several other mo

```scala
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect-kernel" % "3.4.10",
"org.typelevel" %% "cats-effect-laws" % "3.4.10" % Test)
"org.typelevel" %% "cats-effect-kernel" % "3.4.11",
"org.typelevel" %% "cats-effect-laws" % "3.4.11" % Test)
```

If you're a middleware framework (like [Fs2](https://fs2.io/)), you probably want to depend on **std**, which gives you access to `Queue`, `Semaphore`, and much more without introducing a hard-dependency on `IO` outside of your tests:

```scala
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect-std" % "3.4.10",
"org.typelevel" %% "cats-effect" % "3.4.10" % Test)
"org.typelevel" %% "cats-effect-std" % "3.4.11",
"org.typelevel" %% "cats-effect" % "3.4.11" % Test)
```

You may also find some utility in the **testkit** and **kernel-testkit** projects, which contain `TestContext`, generators for `IO`, and a few other things:

```scala
libraryDependencies += "org.typelevel" %% "cats-effect-testkit" % "3.4.10" % Test
libraryDependencies += "org.typelevel" %% "cats-effect-testkit" % "3.4.11" % Test
```

Cats Effect provides backward binary compatibility within the 2.x and 3.x version lines, and both forward and backward compatibility within any major/minor line. This is analogous to the versioning scheme used by Cats itself, as well as other major projects such as Scala.js. Thus, any project depending upon Cats Effect 2.2.1 can be used with libraries compiled against Cats Effect 2.0.0 or 2.2.3, but *not* with libraries compiled against 2.3.0 or higher.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private final class WorkerThread(
private val indexTransfer: LinkedTransferQueue[Integer] = new LinkedTransferQueue()
private[this] val runtimeBlockingExpiration: Duration = pool.runtimeBlockingExpiration

val nameIndex: Int = pool.blockedWorkerThreadNamingIndex.incrementAndGet()
val nameIndex: Int = pool.blockedWorkerThreadNamingIndex.getAndIncrement()

// Constructor code.
{
Expand Down Expand Up @@ -824,6 +824,9 @@ private final class WorkerThread(
val idx = index
val clone =
new WorkerThread(idx, queue, parked, external, fiberBag, sleepers, pool)
// Make sure the clone gets our old name:
val clonePrefix = pool.threadPrefix
clone.setName(s"$clonePrefix-$idx")
pool.replaceWorker(idx, clone)
pool.blockedWorkerThreadCounter.incrementAndGet()
clone.start()
Expand Down
2 changes: 1 addition & 1 deletion docs/core/native-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ ThisBuild / scalaVersion := "2.13.8"

lazy val root = (project in file(".")).enablePlugins(NativeImagePlugin).settings(
name := "cats-effect-3-hello-world",
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.10",
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.11",
Compile / mainClass := Some("com.example.Main"),
nativeImageOptions += "--no-fallback",
nativeImageVersion := "22.1.0" // It should be at least version 21.0.0
Expand Down
2 changes: 1 addition & 1 deletion docs/core/scala-native.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ lazy val root = project.in(file("."))
.enablePlugins(ScalaNativePlugin)
.settings(
name := "cats-effect-3-hello-world",
libraryDependencies += "org.typelevel" %%% "cats-effect" % "3.4.10",
libraryDependencies += "org.typelevel" %%% "cats-effect" % "3.4.11",
Compile / mainClass := Some("com.example.Main")
)

Expand Down
2 changes: 1 addition & 1 deletion docs/core/test-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ For those migrating code from Cats Effect 2, `TestControl` is a considerably mor
In order to use `TestControl`, you will need to bring in the **cats-effect-testkit** dependency:

```scala
libraryDependencies += "org.typelevel" %% "cats-effect-testkit" % "3.4.10" % Test
libraryDependencies += "org.typelevel" %% "cats-effect-testkit" % "3.4.11" % Test
```

## Example
Expand Down
2 changes: 1 addition & 1 deletion docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: FAQ

```scala-cli
//> using scala "2.13.8"
//> using lib "org.typelevel::cats-effect::3.4.10"
//> using lib "org.typelevel::cats-effect::3.4.11"
import cats.effect._
Expand Down
4 changes: 2 additions & 2 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: Getting Started
Add the following to your **build.sbt**:

```scala
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.10"
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.11"
```

Naturally, if you're using ScalaJS, you should replace the double `%%` with a triple `%%%`. If you're on Scala 2, it is *highly* recommended that you enable the [better-monadic-for](https://github.com/oleg-py/better-monadic-for) plugin, which fixes a number of surprising elements of the `for`-comprehension syntax in the Scala language:
Expand Down Expand Up @@ -62,7 +62,7 @@ We will learn more about constructs like `start` and `*>` in later pages, but fo
Of course, the easiest way to play with Cats Effect is to try it out in a Scala REPL. We recommend using [Ammonite](https://ammonite.io/#Ammonite-REPL) for this kind of thing. To get started, run the following lines (if not using Ammonite, skip the first line and make sure that Cats Effect and its dependencies are correctly configured on the classpath):

```scala
import $ivy.`org.typelevel::cats-effect:3.4.10`
import $ivy.`org.typelevel::cats-effect:3.4.11`

import cats.effect.unsafe.implicits._
import cats.effect.IO
Expand Down
14 changes: 7 additions & 7 deletions docs/migration-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Here is an overview of the steps you should take to migrate your application to
### Before You Begin: This Isn't A "Quick Start" Guide

This guide is meant for existing users of Cats Effect 2 who want to upgrade their applications
to 3.4.10.
to 3.4.11.

> If you haven't used Cats Effect before and want to give it a try,
> please follow the [getting started guide](./getting-started.md) instead!
Expand Down Expand Up @@ -81,9 +81,9 @@ Cats Effect 3 splits the code dependency into multiple modules. If you were prev
The current non-test modules are:

```scala
"org.typelevel" %% "cats-effect-kernel" % "3.4.10",
"org.typelevel" %% "cats-effect-std" % "3.4.10",
"org.typelevel" %% "cats-effect" % "3.4.10",
"org.typelevel" %% "cats-effect-kernel" % "3.4.11",
"org.typelevel" %% "cats-effect-std" % "3.4.11",
"org.typelevel" %% "cats-effect" % "3.4.11",
```

- `kernel` - type class definitions, simple concurrency primitives
Expand All @@ -96,7 +96,7 @@ The current non-test modules are:
libraryDependencies ++= Seq(
//...
- "org.typelevel" %% "cats-effect" % "2.4.0",
+ "org.typelevel" %% "cats-effect" % "3.4.10",
+ "org.typelevel" %% "cats-effect" % "3.4.11",
//...
)
```
Expand All @@ -108,8 +108,8 @@ sbt:demo> update
[error] stack trace is suppressed; run last core / update for the full output
[error] (core / update) found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[error]
[error] * org.typelevel:cats-effect_2.13:3.4.10 (early-semver) is selected over {2.3.1, 2.1.4}
[error] +- com.example:core-core_2.13:0.0.7-26-3183519d (depends on 3.4.10)
[error] * org.typelevel:cats-effect_2.13:3.4.11 (early-semver) is selected over {2.3.1, 2.1.4}
[error] +- com.example:core-core_2.13:0.0.7-26-3183519d (depends on 3.4.11)
[error] +- io.monix:monix-catnap_2.13:3.3.0 (depends on 2.1.4)
[error] +- com.github.valskalla:odin-core_2.13:0.11.0 (depends on 2.3.1)
[error]
Expand Down
2 changes: 1 addition & 1 deletion docs/std/ref.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ This is probably one of the most common uses of this concurrency primitive.
In this example, the workers will concurrently run and update the value of the `Ref`.

```scala mdoc:reset:silent
//> using lib "org.typelevel::cats-effect:3.4.10"
//> using lib "org.typelevel::cats-effect:3.4.11"

import cats.effect.{IO, IOApp, Sync}
import cats.effect.kernel.Ref
Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ running the code snippets in this tutorial, it is recommended to use the same
```scala
name := "cats-effect-tutorial"

version := "3.4.10"
version := "3.4.11"

scalaVersion := "2.13.6"

libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.10" withSources() withJavadoc()
libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.11" withSources() withJavadoc()

scalacOptions ++= Seq(
"-feature",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,26 +54,39 @@ class WorkerThreadNameSpec extends BaseSpec with TestInstances {
"WorkerThread" should {
"rename itself when entering and exiting blocking region" in real {
for {
_ <- IO.cede
computeThread <- threadInfo
(computeThreadName, _) = computeThread
blockerThread <- IO.blocking(threadInfo).flatten
(blockerThreadName, blockerThreadId) = blockerThread
_ <- IO.cede
// The new worker (which replaced the thread which became a blocker) should also have a correct name
newComputeThread <- threadInfo
(newComputeThreadName, _) = newComputeThread
// Force the previously blocking thread to become a compute thread by converting
// the pool of compute threads (size=1) to blocker threads
resetComputeThreads <- List.fill(2)(threadInfo <* IO.blocking(())).parSequence
} yield {
// Start with the regular prefix
computeThreadName must startWith("io-compute")
// Correct WSTP index (threadCount is 1, so the only possible index is 0)
computeThreadName must endWith("-0")
// Check that entering a blocking region changes the name
blockerThreadName must startWith("io-blocker")
// Check that the same thread is renamed again if it is readded to the compute pool
resetComputeThreads.map {
case (name, `blockerThreadId`) => {
name must startWith("io-compute").setMessage("blocker thread name was not reset")
}
case _ => ok
// Check that the replacement compute thread has correct name
newComputeThreadName must startWith("io-compute")
// And index
newComputeThreadName must endWith("-0")
// Check that the same thread is renamed again when it is readded to the compute pool
val resetBlockerThread = resetComputeThreads.collectFirst {
case (name, `blockerThreadId`) => name
}
resetBlockerThread must beSome[String].setMessage(
"blocker thread not found after reset")
resetBlockerThread must beSome((_: String).startsWith("io-compute"))
.setMessage("blocker thread name was not reset")
resetBlockerThread must beSome((_: String).endsWith("-0"))
.setMessage("blocker thread index was not correct")
}
}
}
Expand Down

0 comments on commit 9236a21

Please sign in to comment.