From adc5c7385389134c8afecd79b92662679cf65b72 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Tue, 1 Apr 2025 22:03:52 -0300 Subject: [PATCH] fix: fix wrong invidious companion logic on backends do not change to another companion if request fails --- src/invidious.cr | 8 ++++--- src/invidious/yt_backend/connection_pool.cr | 26 +++------------------ src/invidious/yt_backend/youtube_api.cr | 7 +++++- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/invidious.cr b/src/invidious.cr index 2c64e35b..31ea8561 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -113,9 +113,11 @@ YT_POOL = YoutubeConnectionPool.new(YT_URL, capacity: CONFIG.pool_size) GGPHT_POOL = YoutubeConnectionPool.new(URI.parse("https://yt3.ggpht.com"), capacity: CONFIG.pool_size) -COMPANION_POOL = CompanionConnectionPool.new( - capacity: CONFIG.pool_size -) +COMPANION_POOL = [] of CompanionConnectionPool + +CONFIG.invidious_companion.each do |companion| + COMPANION_POOL << CompanionConnectionPool.new(companion, capacity: CONFIG.pool_size) +end # CLI Kemal.config.extra_options do |parser| diff --git a/src/invidious/yt_backend/connection_pool.cr b/src/invidious/yt_backend/connection_pool.cr index 5e4525c5..bc04700e 100644 --- a/src/invidious/yt_backend/connection_pool.cr +++ b/src/invidious/yt_backend/connection_pool.cr @@ -49,7 +49,7 @@ end struct CompanionConnectionPool property pool : DB::Pool(HTTP::Client) - def initialize(capacity = 5, timeout = 5.0) + def initialize(companion, capacity = 5, timeout = 5.0) options = DB::Pool::Options.new( initial_pool_size: 0, max_pool_size: capacity, @@ -58,33 +58,13 @@ struct CompanionConnectionPool ) @pool = DB::Pool(HTTP::Client).new(options) do - companion = CONFIG.invidious_companion.sample next make_client(companion.private_url, use_http_proxy: false) end end - def client(env : HTTP::Server::Context | Nil, &) + def client(&) conn = pool.checkout - - begin - response = yield conn - rescue ex - conn.close - - if env.nil? - companion = CONFIG.invidious_companion.sample - else - current_companion = env.get("current_companion").as(Int32) - companion = CONFIG.invidious_companion[current_companion] - end - - conn = make_client(companion.private_url, use_http_proxy: false) - - response = yield conn - ensure - pool.release(conn) - end - + response = yield conn response end end diff --git a/src/invidious/yt_backend/youtube_api.cr b/src/invidious/yt_backend/youtube_api.cr index f8de1b0f..e811e2ba 100644 --- a/src/invidious/yt_backend/youtube_api.cr +++ b/src/invidious/yt_backend/youtube_api.cr @@ -688,7 +688,12 @@ module YoutubeAPI # Send the POST request begin - response = COMPANION_POOL.client(env, &.post(endpoint, headers: headers, body: data.to_json)) + if env.nil? + current_companion = rand(CONFIG.invidious_companion.size) + else + current_companion = env.get("current_companion").as(Int32) + end + response = COMPANION_POOL[current_companion].client &.post(endpoint, headers: headers, body: data.to_json) body = response.body if (response.status_code != 200) raise Exception.new(