Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Sep 21 01:07
    stale[bot] labeled #735
  • Sep 21 01:07
    stale[bot] commented #735
  • Sep 17 14:58
    simpadjo opened #737
  • Sep 15 11:57
    simpadjo opened #736
  • Jul 30 16:06
    stale[bot] closed #732
  • Jul 13 18:43
    stale[bot] labeled #732
  • Jul 13 18:43
    stale[bot] commented #732
  • Jul 11 22:26
    simpadjo opened #735
  • Jun 10 19:37
    stale[bot] closed #706
  • Jun 10 19:37
    stale[bot] closed #668
  • May 31 15:15
    tyrcho closed #698
  • May 31 00:29
    stale[bot] labeled #668
  • May 31 00:29
    stale[bot] labeled #698
  • May 31 00:29
    stale[bot] labeled #706
  • May 31 00:29
    stale[bot] commented #668
  • May 31 00:29
    stale[bot] commented #698
  • May 31 00:29
    stale[bot] commented #706
  • May 21 08:40

    mergify[bot] on master

    Update cats-effect to 3.3.12 Merge pull request #734 from sc… (compare)

  • May 21 08:40
    mergify[bot] closed #734
  • May 21 08:34
    scala-steward opened #734
Gavin Bisesi
@Daenyth
I can make a PR to that effect, I don't think it should change any behaviors
Gabriel Volpe
@gvolpe
Hey @Daenyth , not sure to be honest, that's as old as the library itself I guess
If I had a reason when I wrote that code I should have added a comment cause I don't recall now :smile:
Gavin Bisesi
@Daenyth
K, I'll PR it
Gabriel Volpe
@gvolpe
:+1:
Gavin Bisesi
@Daenyth
Gavin Bisesi
@Daenyth
yeah wow I think fs2-rabbit is very slow when you have high prefetch values
if I look in my docker rabbit's console I can see "unacked = 131,072" and "ready = 0" but I'm having to use Agitation to set >4second timeouts on every single message in order to not be timing out
I wonder if this is because of the dequeue1
or if it's something I'm doing myself
Gavin Bisesi
@Daenyth
Running a single test case, in 464,085ms according to logback, I dequeued 47 envelopes. That's not right, we definitely go faster in prod. Something I'm doing is being very slow, maybe it's the Agitation?
lemme try throwing in a groupWithin
maybe bounded by internalQueueSize?
Gavin Bisesi
@Daenyth
Thanks for the quick merge btw. Github actions looks neat. Is there any way to have it also show the html-ized test report?
Gabriel Volpe
@gvolpe
No worries, is there such a thing?
Gavin Bisesi
@Daenyth
sort of. There's the standard junit-style xml that you can have scalatest emit, and many things allow you to navigate through it interactively
even pytest in python emits it, so I wouldn't be surprised if GH can read it
Gabriel Volpe
@gvolpe
no idea tbh, we used to have something like that when we had test coverage metrics
I don't find so much value in it, though
Gavin Bisesi
@Daenyth
more useful for coverage than tests, but I've found them useful especially in projects with thousands of tests - grepping sbt output is a bear
looks like nothing out of the box
oh well
Gavin Bisesi
@Daenyth
ok part of it was slow because my docker rabbit was running out of memory, because I wasn't declaring my test queues with TTLs or as AutoDelete
Adriani Furtado
@Adriani277
Hi all, I was looking at the Publishing Algebra and noticed that most return types
are F[A => F[Unit]]. Is it possible to have a SimplePublish that takes a payload as a parameter and simply publishes the message?
Something like
def simplePublish[A](
      payload: A,
      channel: AMQPChannel,
      exchangeName: ExchangeName,
      routingKey: RoutingKey
  )(implicit encoder: MessageEncoder[F, A]): F[Unit] =
FlatMap[F].flatMap(client.createPublisher(exchangeName, routingKey))(_.apply(payload))
Gavin Bisesi
@Daenyth
I mean it won't be broken
I don't recall off hand what effect is being captured in the "create publisher" method
better to reuse it if you can, but wouldn't be broken if you didn't, I think
Adriani Furtado
@Adriani277
Alright I see, I suspected there would be some performance hit by re-creating the publisher
Sebastian Voss
@sebastianvoss

I have an application which creates a publisher and consumer to interact with an AMQP server.

When the app receives an SIGINT it needs to send a logout message and wait for the response before
shutting down. I got some hint from @Daenyth to use Resource.makeCase but I'm failing to see where
to inject this. Maybe you can help me out again.

val resources = for {
  conn    <- R.createConnection
  resChan <- R.createChannel(conn)
  reqChan <- R.createChannel(conn)
} yield (resChan, reqChan)

resources.use {
  case (responseChannel, requestChannel) =>
    for {
      publisher <- createPublisher(R)(requestChannel)
      consumer  <- createConsumer(R)(responseChannel)
      _         <- program(consumer, publisher).compile.drain
    } yield ()
}
Gavin Bisesi
@Daenyth
below reqChan in resources
oh well no..
actually, onFinalize on program should be able to get you done
Sebastian Voss
@sebastianvoss

Thanks @Daenyth , I just tried this:

resources.use {
  case (responseChannel, requestChannel) =>
    for {
      publisher <- createPublisher(R)(requestChannel)
      consumer  <- createConsumer(R)(responseChannel)
      _         <- program(consumer.onFinalize(IO(println("finalize consumer"), publisher)
          .onFinalize(IO(println("finalize program")
          .compile
          .drain
    } yield ()
}

it prints:

finalize consumer
finalize program
Gavin Bisesi
@Daenyth
wait, what type is Consumer there?
not a Resource, is it?
or stream maybe
Sebastian Voss
@sebastianvoss
Stream[IO, AmqpEnvelope[String]]
Gavin Bisesi
@Daenyth
ah right
Sebastian Voss
@sebastianvoss
createConsumer has this signature: def createConsumer(R: RabbitClient[IO])(implicit channel: AMQPChannel): IO[Stream[IO, AmqpEnvelope[String]]]
Gavin Bisesi
@Daenyth
ok then it needs to happen in program
or alternately, you could have it on consumer
because that's inside the scope of publisher
Sebastian Voss
@sebastianvoss
the thing is I need to keep the consumer stream running to wait for the response. When I tried to put it there the consumer stream got closed before the response came in.
Gavin Bisesi
@Daenyth
You need the consumer to come before the publisher then
I see
mm
yeah so like consumer -> producer -> Stream.bracket and in the bracket, do your cleanup logic there
Then the closure of both consumer and producer waits for that
but in general I do recommend you rethink the pattern because you can't prevent or handle a kill -9
So have an idea of what cleanup you do when the process for this code just vanishes