Samuel-88

Samuel-88

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,

Showing Posts 1 to 2

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:

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.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
ryanwinchester
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted” Version...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews