Samuel-88

Samuel-88

Not receiving HTTP responses using Telsa + Hackney

Hello all,
Hope everyone is doing all right!

I am working on an application that uses an API that does not support the keep-alive option on HTTP requests.

On average we send a couple million requests to that API every month. And about two hundred of those requests are sent, the other API receives it, and answers back very fast (~200 ms) but for some reason the answer does not arrive in our application. We are using Tesla with Hackney, and we have an internal library that actually sends the requests. The first thing we tried to do is to disable the pool of connections since the API does not handle keep alive.

Our configs are as follow in the application that uses the internal lib to do requests:

config :tesla, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}
config :tesla, Module.PathToTheModule, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}

And in the internal lib that actually does the requests:

config :tesla, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}

The first thing that confuses me is which configuration will actually be used, the one in the original application that calls the lib that does the requests, or the actual lib that handles the requests? The Tesla client is built in the lib.

I thought about changing the HTTP client but not sure if it’s worth it. Has anyone gone through that? Does anyone have any tips?

Thanks a lot for any help,

First Post!

Eiji

Eiji

If you have config A and B and one of them overrides the other one, then the simplest way for you way to find it yourself without any help is to make a mistake in one of configuration and see if it affects your code. If not revert that change and just to be sure change second config. At least one of those changes should fail.

# Hackney -> HackHey
config :tesla, adapter: {Tesla.Adapter.HackHey, recv_timeout: 27_000, pool: false}

You should have an error that a module or it’s function is not available and that the module is not loaded.

I don’t know if it’s worth it .. Depends on how you see it … :sunglasses:

  1. If that’s the only problem and you are able to fix it then I do not see a need to do that other than a bigger code refactor :no_entry_sign:
  2. If you plan code refactor anyway then why not giving a try other hex dependency? :see_no_evil:
  3. Salary you can offer me :joy:

More or less seriously, but the general rule is that you should be the only person to make decisions for you. Nobody who only give you “empty advice” would take responsibility for what you do. This applies not only to programming, but any topic around investing (time, money, resources etc.).

Depends on what you ask … Many developers made a code refactor at least once and with good library API it should be enough simple to not even touch tests and the rest of code. If you mean an edge-case with a custom server not supporting any commonly supported HTTP header then I guess that most people may at most heard about such case, but never had a chance to work on it.

The simplest way is to show some example code, but I guess that may take some time for some cases. You can always ask somebody for help and invite him to project. As a senior Elixir developer I’m helping with creating issues and pull requests in last 7 years:

Recently in May I have even done a major code refactor for a public repository:
https://github.com/davidkuhta/avatarex/pull/1

Here is my GitHub profile:

Last Post!

rizwan_khalid

rizwan_khalid

Hey @Samuel-88 , I hope you are fine.
Found this post to a very similar issue happening with me, did you by any chance find a solution for this? Is there a bug in the Tesla lib? Any advice / tip would be much helpful to me.

Thanks in advance.

Where Next?

Popular in Questions Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New

We're in Beta

About us Mission Statement