Thanks to visit codestin.com
Credit goes to github.com

Skip to content

ZManaged.mapParN / zipPar parallel release strategy propagation issue #3986

@svroonland

Description

@svroonland

With ZIO 1.0.0-RC21-2 (actually 1.0.0-RC21-2+37-be08a9e6-SNAPSHOT), using ZManaged.mapParN propagates the parallel release strategy to both ZManaged arguments unexpectedly. The below test outputs:

start finalizer C
start finalizer A
start finalizer D
end finalizer D
end finalizer A
end finalizer C

while I would expect:

start finalizer D
start finalizer A
end finalizer D
start finalizer C
end finalizer C
end finalizer A

or some other permutation where at least start D - end D - start C - end C are in order.

import zio.test._
import zio.test.Assertion._
import zio.stream.ZStream
import zio.duration._
import zio._
import zio.console._
import zio.clock.Clock

object InnerStreamFinalizerSpec extends DefaultRunnableSpec {
  override def spec =
    testM("forkManaged") {
      ZManaged
        .mapParN(
          ZIO.unit
            .toManaged(_ => putStrLn("start finalizer A") *> ZIO.sleep(1.second) *> putStrLn("end finalizer A"))
            .fork,
          for {
            c <- ZIO.unit
                   .toManaged(_ => putStrLn("start finalizer C") *> ZIO.sleep(1.second) *> putStrLn("end finalizer C"))
                   .fork
            d <- ZIO.unit
                   .toManaged(_ => putStrLn("start finalizer D") *> ZIO.sleep(1.second) *> putStrLn("end finalizer D"))
                   .fork
          } yield ()
        )((_, _) => ZStream.tick(1.second))
        .use { _ =>
          ZIO.sleep(1.second) *> ZIO.succeed(assertCompletes)
        }
    }.provideCustomLayer(Clock.live)
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingzmanaged

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions