Tinkoff/invest-openapi-java-sdk

Некорректное поведение паблишера

a14e opened this issue · 3 comments

a14e commented

Добрый день! простая подписка на паблишер приводит к некорректному поведению

Код для воспроизведения

  val token = ???
  val client: OpenApi = {
    val factory = new OkHttpOpenApiFactory(token, Logger.getLogger(this.getClass.getName))
    val api = factory.createSandboxOpenApiClient(Executors.newSingleThreadExecutor)
    api.asInstanceOf[SandboxOpenApi].getSandboxContext.performRegistration(null).join()
    api
  }

  client.getStreamingContext.getEventPublisher.subscribe(new Subscriber[StreamingEvent] {
    override def onSubscribe(s: Subscription): Unit = {
      println("onSubscribe")
      s.request(1)
    }

    override def onNext(t: StreamingEvent): Unit =  {
      println("onNext")
    }

    override def onError(t: Throwable): Unit = {
      println("onError")
    }

    override def onComplete(): Unit = {
      println("onError")
    }
  })

в результате получаем бесконечный вовод в консоль строки "onSubscribe"

но по правилам стримов https://github.com/reactive-streams/reactive-streams-jvm нельзя делать больше 1 раза onSubscribe

12. Subscriber.onSubscribe MUST be called at most once for a given Subscriber (based on object equality).

Это очень мешает использовать библиотеку в интеграции с fs2, так как она ломается от такого =(

a14e commented

я проверял на версии 0.4.1 (последняя в мавене)
Вижу, что коммит с фиксом уже есть в репозитории. Если собрать последнего мастера, то все работает

Но 0.5 версия клиента еще не запаблишена

Новую версию опубликуем в феврале.