From patchwork Wed Nov 8 10:07:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 1861420 X-Patchwork-Delegate: i.maximets@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=W/5za9Tq; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQLPW6gs0z1yRL for ; Wed, 8 Nov 2023 21:07:59 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 6D51041758; Wed, 8 Nov 2023 10:07:57 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 6D51041758 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=W/5za9Tq X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IsyihWVlIF58; Wed, 8 Nov 2023 10:07:56 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id E7FC2416D0; Wed, 8 Nov 2023 10:07:54 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org E7FC2416D0 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id B4941C0071; Wed, 8 Nov 2023 10:07:54 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 37621C0032 for ; Wed, 8 Nov 2023 10:07:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id E264C81E17 for ; Wed, 8 Nov 2023 10:07:52 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E264C81E17 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=W/5za9Tq X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UzCK9VKdyotK for ; Wed, 8 Nov 2023 10:07:50 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on072e.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::72e]) by smtp1.osuosl.org (Postfix) with ESMTPS id 742E781E0B for ; Wed, 8 Nov 2023 10:07:49 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 742E781E0B ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R2d2hg/O/kafcUKk1be9HRtjGZN8qx/c+5fcAWI2L8d4EMQsM80FzbxgT/KABbhT1s/nSC9jMO56cQHWr2FYtx0MuV/f3ztNtt+D0Y/xNi6okuNZMJZBBSsVJmNEjwnIVFUbLj1+XwaRm9u+H2+EFWfsodMbZFSndzkeuhbcnf/1ZuGdZnwJcLw6HEffHOIAHfx7/sLpxWLbVvbkO3/AmS60W6W/x7pf4JRjYyqw0NM+3XeXyzA+VUu4cfEBBeiaEUFL1+1EEw4v7m6SXwNvudgC6V+w5cAvS1dkmIyN3fbw3Qh4VPYfyAi3hG5FNB5QqWwP+LTc4oIqgr3OEHqiaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AVDo8iRgWd7CeLb8icTmrU1qXhbB9PJievZ7R3Cl3OY=; b=Fwd5ogpaxfTAzLYvAPWqt2dbmYhUZw6NkX8LzoOxJCliI2cR+fNOYqfYD/1XgMJdKzMxFVZrdZ4ksjMJ68hcFayxIYOWdXHpFaK8AJSKrcvhkz01Bl6zpNHVcObbvRdw0/+hVp13ppBgjbRdu/MW2XHhSs2vYF91DaNKWxnOWnwTP/1ibUPOmbVj8xlvr3f4umkT24hdFUrKFl55atP5FgeR4Zze96RtkBHMdWEEPVpfBE8PMXQ3oPHD7B7vmbbYl4Qj0HXNHJXK6LQT673K+MLoldLRtlce4DxPmDqUJeD5REsZ6+zl6sfao7Cfr9kuzr0/mWfbPCBIYoIJIx8Wcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mail.schwarz; dmarc=pass action=none header.from=mail.schwarz; dkim=pass header.d=mail.schwarz; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.schwarz; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AVDo8iRgWd7CeLb8icTmrU1qXhbB9PJievZ7R3Cl3OY=; b=W/5za9TqSM7zmw0U3oylF5mQSk3Xm8k1N3PeJbjrHLP5b4WvcFTtaRR+oSVl1eXZGKGTEhVF9PUzH+M5yh1B52g4dvkpP3NBri9f75u/fuKQKRADQd+hOXWO5hwC7beYiOrNgU60aMxyqJHzhj37v6YkoKfmHdmDsihsIChmfqCLXFfr4y2gk4UnTNuY2WZrmRVIa5ukyAAKlXpwvrrq+SKEbHWG1qIqtKmvj387bpO5hgrFhrxisWRxmFNhTtdIhtS4kJUfBoAUTmy0G5jm9BETxvS6j0VKYX7wJldPOIuV9eXaGj1iZ6a8X93A8ivEt5L2YXM0TlurIJzKsu3OzQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mail.schwarz; Received: from PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:29a::9) by AS2PR10MB6711.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:55f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.18; Wed, 8 Nov 2023 10:07:44 +0000 Received: from PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM ([fe80::745f:8b3a:60e4:dd64]) by PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM ([fe80::745f:8b3a:60e4:dd64%6]) with mapi id 15.20.6954.028; Wed, 8 Nov 2023 10:07:44 +0000 Date: Wed, 8 Nov 2023 11:07:42 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org Content-Disposition: inline X-ClientProxiedBy: FR3P281CA0116.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::20) To PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:29a::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PRAPR10MB5249:EE_|AS2PR10MB6711:EE_ X-MS-Office365-Filtering-Correlation-Id: 9c8aa7b4-ce32-4510-aea5-08dbe0428d35 x-mp-schwarz-dsgvo2: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BcGe9gY6VjguYcfeShJBiGHcsXARtbtvDuFjSp2xX6FzMgrYrLhbZU0lQ/pcMkHUX+QS0GVVN8A/fUAYh+JRMbed6jokFyS5Srh6qYhsHpXAd6tRV5Kg3MstbkI/2PPs5EqLpOKZ032mNX726JWghn6/17OnT4IFpizXHQyDx+BSB/6uZ/C75z3Vr7eZK1TNDeUlm5VplZz0DJZePLd8SKphb+85vCXgumdUBzeb7qG4TE3pkBwpsLVSWIuTwEwO38EGDuw2IaSllDtyTxEPJuoZySHfUZqFa1VA6ybd6AJuY1KmqmGLQLx+d+VGtk+1WQeX92bzS/J34eW2cxm7Rt60uui0XbIRpGQEXLxj40g7TBy0481ylFY6S0jpnveK4E6M2vY29lKBQJMftOcBvaLac+wsBzM7hHa7CBoppgQ9LiCcLNW+EbHkTHk4W+L4xAomtomLXFNhRKMfDbUfcPZ/+RkYtcvJRHx8e367Ki700EvAubVwBNp/cLkfeIg9Ly4J7SAcrnOnqJk55Hz6WelrWOLf1YBXsLY8oxR0r/0wX8lyUzM/sIWaU0P19Apb X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(396003)(346002)(39860400002)(376002)(136003)(366004)(230922051799003)(1800799009)(186009)(64100799003)(451199024)(316002)(6916009)(66556008)(66476007)(66946007)(9686003)(6512007)(6506007)(66574015)(6486002)(26005)(478600001)(38100700002)(82960400001)(83380400001)(86362001)(44832011)(41300700001)(30864003)(2906002)(5660300002)(8676002)(8936002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PWIcxDOzjzAPU4SmgkkZMAbQlrIDlKu3GyN2YroTkSbtmw3s+A0JrwSVd8QhICgbUUwf9EgkXz9PydvBabN0uVK0gcBzinVkHSX5X16rGNUs/7/kAWiLfbkX5CkuGrQUCgfinlVfxqZo3eyAUWx/spxANgYwOW9lRVpIbBIFv4/Lwe58eTOhK6gcZLDscvkyFWo7ZkRK14YYXt55r2PAodSxBA5+UTWRpwU4rTrL6UGcwo4F6U1ou9DC+tfaMm7t5PDIbvKQi8fAMAiJJluQ3ni3glbL0x6OYAIdal4AP+JuYyoTp18PzHj4HT3tuF7Go9reXzjJBn4CT6CFi7XP26vUs7TnXmTI7T31aJcNc4y0vyp8W+tQDdPqubBus0YdDuv7vBIkfoPRPgbi1VVRF7r7rHxQwlP3biAN8jQOguL/g1UIeDUahPm9EZzdAIKxU1rmEtmoQRGzBlanFSwyOmDnwA8IP+At4fvE0g8Q7mhMAsbyQvmWATK3F0nHX97PgIshlLBVPbP7+A3jM/ggNsNmUcwpL6x+ixCYIJlBWNJNcrNabsEKNZjnQcsKtPPrRD1Xbzr2YzwNzoO2d94v1WvBzPyyRZpRv1X5LF3zwnG6Qde18/iVAswHHrUuabGLaoD9shJzOHZQqjE1TDldhroXSKOdFC8RmN6ckM6KKQsKvGOXVsMB7r7Or2G4Y0h5T3gh029y2FDFJTqzL10J3IFfdnUrGJW9TqOReuO0LlxVM1Bw91ipUGYw5t0FtYUCLiNfO9O7GVxdxtrGq26wYy2436yAa+f8zs3nQodmuRGFaSjAsx9I4UoVCZYIlgGz80X5OyRe+ErpkSrtNozcnXGhoCmvL4caoC3WA/cabMRlx2nmkrfghKL5MD95uy9HVejW1AL3IavIgceFUe4egGdZ1x4B+8xrZrVr+L7GB9BqHzPHZ8B3JGQEo+3jceyR840jCpf/0JX2Jl0gsRwE/AZUrpYwPuzsRMALUiBGbw8qpUu1ZpMdxsvFrbH7pQRKbtbKO7OEVNixT1t3sCCg8WKVvScjAe5MRlP7qsXs/XgXkLOfPAJ4wPtFBllPWwU0uUYTgDFoBbmG1qqc2wdXNPShoBi9i71jZ73JnErZTehy/BKJDB/Wvvqyw263Um72vTH36CzaFkG9qGTHzjDzG1Tn5sVVsLC9DJEj/g9nId/P2uTySgHWChnL4OuXqvfhNiOFUXiTZi4AS3Ka0QtSLSJHr6u4frDecEgPwraGMNglCHmNd8tp3E73TYNXaNi7bma0WjthVmuT/t3nagUBR8x83371rmMaKgu1XoIyqOwruJnkrOZPk+D9G0iOi9OLTQmZ9AaobXHpLJZP081KR41rQ28yA3vneNVPEi5cB7BazwWdYkPg2KuFeaJ2YjGsn37OmzjoPB7qfF1g+0/braj/KhrEEA3VcNIG5wbExtuintzx7pAUa0ppeENJ8A8wzZYmKEyuL+M5gw1AdMQSIx5Y5cCeqQeU/eRAwdfjATQBl55UQ/4E2tVua3aiEq/gFeeBHQwjDUmJ6KYwp7qXAYT4VcL2v8tNAMIVsyG0iv3AkeuOzM+HDOzJ+ehTm9jL+XJx9m29MU9zToHqrFO+yg== X-OriginatorOrg: mail.schwarz X-MS-Exchange-CrossTenant-Network-Message-Id: 9c8aa7b4-ce32-4510-aea5-08dbe0428d35 X-MS-Exchange-CrossTenant-AuthSource: PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2023 10:07:44.6025 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HZ1eqfUEA6dqp0mI1TcX1UZylgEJozJewDPGGehDdZt3d094/7qn71sYDpc/s3fHbZtmPA+bqajDDO7d76zMT6YQ9fPvkA4pTwSsABTDKZw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR10MB6711 Subject: [ovs-dev] [PATCH v2] reconnect: Set defaults from environment variables. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this exposes the old constants regarding min backoff, max backoff and probe interval using environment variables. In case previously users wanted to tune the probe interval for all connections this required setting this setting in multiple locations. E.g. to configure the probe interval from a relay to the ovsdb server you need to call an appctl command after the relay has started up. The new environment variables make it easy to set them for all new connections. The existing configuration options for these settings stay in place and take precedence over the environment variables. In case the environment variables are not specified/invalid formated we default to the previous defaults. Signed-off-by: Felix Huettner --- v1->v2: fixed wrong function definitions --- NEWS | 7 +++++ lib/jsonrpc.c | 4 +-- lib/reconnect.c | 63 +++++++++++++++++++++++++++++++++++++---- lib/reconnect.h | 7 ++--- ovsdb/jsonrpc-server.c | 4 +-- ovsdb/ovsdb-server.c | 2 +- ovsdb/relay.h | 2 -- python/ovs/reconnect.py | 45 +++++++++++++++++++++++++++-- 8 files changed, 114 insertions(+), 20 deletions(-) -- 2.42.0 Diese E Mail enthält möglicherweise vertrauliche Inhalte und ist nur für die Verwertung durch den vorgesehenen Empfänger bestimmt. Sollten Sie nicht der vorgesehene Empfänger sein, setzen Sie den Absender bitte unverzüglich in Kenntnis und löschen diese E Mail. Hinweise zum Datenschutz finden Sie hier. This e-mail may contain confidential content and is intended only for the specified recipient/s. If you are not the intended recipient, please inform the sender immediately and delete this e-mail. Information on data protection can be found here. diff --git a/NEWS b/NEWS index 6b45492f1..58266ae52 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,13 @@ Post-v3.2.0 from older version is supported but it may trigger more leader elections during the process, and error logs complaining unrecognized fields may be observed on old nodes. + - The environment variable OVS_RECONNECT_MIN_BACKOFF, + OVS_RECONNECT_MAX_BACKOFF and OVS_RECONNECT_PROBE_INTERVAL, if set, allow + users to tune the default reconnect configuration. E.g. adapting + OVS_RECONNECT_PROBE_INTERVAL modifies the default probe interval, for all + servers and clients. These variables are valid for all ovs code as well as + the python client. Values set for individual connections (e.g. using the + `inactivity_probe` column in the `Manager` tables) will take precedence. v3.2.0 - 17 Aug 2023 diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index c8ce5362e..7bf49fc81 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -1269,8 +1269,8 @@ void jsonrpc_session_enable_reconnect(struct jsonrpc_session *s) { reconnect_set_max_tries(s->reconnect, UINT_MAX); - reconnect_set_backoff(s->reconnect, RECONNECT_DEFAULT_MIN_BACKOFF, - RECONNECT_DEFAULT_MAX_BACKOFF); + reconnect_set_backoff(s->reconnect, reconnect_default_min_backoff(), + reconnect_default_max_backoff()); } /* Forces 's' to drop its connection (if any) and reconnect. */ diff --git a/lib/reconnect.c b/lib/reconnect.c index 89a0bcaf9..3e73d7cca 100644 --- a/lib/reconnect.c +++ b/lib/reconnect.c @@ -99,9 +99,9 @@ reconnect_create(long long int now) struct reconnect *fsm = xzalloc(sizeof *fsm); fsm->name = xstrdup("void"); - fsm->min_backoff = RECONNECT_DEFAULT_MIN_BACKOFF; - fsm->max_backoff = RECONNECT_DEFAULT_MAX_BACKOFF; - fsm->probe_interval = RECONNECT_DEFAULT_PROBE_INTERVAL; + fsm->min_backoff = reconnect_default_min_backoff(); + fsm->max_backoff = reconnect_default_max_backoff(); + fsm->probe_interval = reconnect_default_probe_interval(); fsm->passive = false; fsm->info = VLL_INFO; @@ -163,7 +163,7 @@ reconnect_set_name(struct reconnect *fsm, const char *name) } /* Return the minimum number of milliseconds to back off between consecutive - * connection attempts. The default is RECONNECT_DEFAULT_MIN_BACKOFF. */ + * connection attempts. The default is reconnect_default_min_backoff(). */ int reconnect_get_min_backoff(const struct reconnect *fsm) { @@ -171,7 +171,7 @@ reconnect_get_min_backoff(const struct reconnect *fsm) } /* Return the maximum number of milliseconds to back off between consecutive - * connection attempts. The default is RECONNECT_DEFAULT_MAX_BACKOFF. */ + * connection attempts. The default is reconnect_default_max_backoff(). */ int reconnect_get_max_backoff(const struct reconnect *fsm) { @@ -190,6 +190,57 @@ reconnect_get_probe_interval(const struct reconnect *fsm) return fsm->probe_interval; } +/* Returns the default min_backoff value for reconnect. It uses the environment + * variable OVS_RECONNECT_MIN_BACKOFF if set and valid or otherwise defaults + * to 1 second. The return value is in ms. */ +unsigned int reconnect_default_min_backoff(void) { + static unsigned int default_min_backoff = 0; + if (default_min_backoff == 0) { + char *env = getenv("OVS_RECONNECT_MIN_BACKOFF"); + if (env && env[0]) { + str_to_uint(env, 10, &default_min_backoff); + } + if (default_min_backoff == 0) { + default_min_backoff = 1000; + } + } + return default_min_backoff; +} + +/* Returns the default max_backoff value for reconnect. It uses the environment + * variable OVS_RECONNECT_MAX_BACKOFF if set and valid or otherwise defaults + * to 8 second. The return value is in ms. */ +unsigned int reconnect_default_max_backoff(void) { + static unsigned int default_max_backoff = 0; + if (default_max_backoff == 0) { + char *env = getenv("OVS_RECONNECT_MAX_BACKOFF"); + if (env && env[0]) { + str_to_uint(env, 10, &default_max_backoff); + } + if (default_max_backoff == 0) { + default_max_backoff = 8000; + } + } + return default_max_backoff; +} + +/* Returns the default probe_interval value for reconnect. It uses the + * environment variable OVS_RECONNECT_PROBE_INTERVAL if set and valid or + * otherwise defaults to 5 second. The return value is in ms. */ +unsigned int reconnect_default_probe_interval(void) { + static unsigned int default_probe_interval = 0; + if (default_probe_interval == 0) { + char *env = getenv("OVS_RECONNECT_PROBE_INTERVAL"); + if (env && env[0]) { + str_to_uint(env, 10, &default_probe_interval); + } + if (default_probe_interval == 0) { + default_probe_interval = 5000; + } + } + return default_probe_interval; +} + /* Limits the maximum number of times that 'fsm' will ask the client to try to * reconnect to 'max_tries'. UINT_MAX (the default) means an unlimited number * of tries. @@ -234,7 +285,7 @@ reconnect_set_backoff(struct reconnect *fsm, int min_backoff, int max_backoff) fsm->min_backoff = MAX(min_backoff, 1000); fsm->max_backoff = (max_backoff ? MAX(max_backoff, 1000) - : RECONNECT_DEFAULT_MAX_BACKOFF); + : reconnect_default_max_backoff()); if (fsm->min_backoff > fsm->max_backoff) { fsm->max_backoff = fsm->min_backoff; } diff --git a/lib/reconnect.h b/lib/reconnect.h index 40cc569c4..b76ce0f15 100644 --- a/lib/reconnect.h +++ b/lib/reconnect.h @@ -40,10 +40,9 @@ void reconnect_set_quiet(struct reconnect *, bool quiet); const char *reconnect_get_name(const struct reconnect *); void reconnect_set_name(struct reconnect *, const char *name); -/* Defaults, all in msecs. */ -#define RECONNECT_DEFAULT_MIN_BACKOFF 1000 -#define RECONNECT_DEFAULT_MAX_BACKOFF 8000 -#define RECONNECT_DEFAULT_PROBE_INTERVAL 5000 +unsigned int reconnect_default_min_backoff(void); +unsigned int reconnect_default_max_backoff(void); +unsigned int reconnect_default_probe_interval(void); int reconnect_get_min_backoff(const struct reconnect *); int reconnect_get_max_backoff(const struct reconnect *); diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index a3ca48a7b..5d8e98e1c 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -211,9 +211,9 @@ struct ovsdb_jsonrpc_options * ovsdb_jsonrpc_default_options(const char *target) { struct ovsdb_jsonrpc_options *options = xzalloc(sizeof *options); - options->max_backoff = RECONNECT_DEFAULT_MAX_BACKOFF; + options->max_backoff = reconnect_default_max_backoff(); options->probe_interval = (stream_or_pstream_needs_probes(target) - ? RECONNECT_DEFAULT_PROBE_INTERVAL + ? reconnect_default_probe_interval() : 0); return options; } diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 4d29043f4..78e62cdef 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -330,7 +330,7 @@ main(int argc, char *argv[]) struct shash all_dbs; struct shash_node *node; int replication_probe_interval = REPLICATION_DEFAULT_PROBE_INTERVAL; - int relay_source_probe_interval = RELAY_SOURCE_DEFAULT_PROBE_INTERVAL; + int relay_source_probe_interval = reconnect_default_probe_interval(); ovs_cmdl_proctitle_init(argc, argv); set_program_name(argv[0]); diff --git a/ovsdb/relay.h b/ovsdb/relay.h index 218caad65..bf7568701 100644 --- a/ovsdb/relay.h +++ b/ovsdb/relay.h @@ -26,8 +26,6 @@ struct ovsdb; struct ovsdb_schema; struct uuid; -#define RELAY_SOURCE_DEFAULT_PROBE_INTERVAL RECONNECT_DEFAULT_PROBE_INTERVAL - typedef struct ovsdb_error *(*schema_change_callback)( struct ovsdb *, const struct ovsdb_schema *, diff --git a/python/ovs/reconnect.py b/python/ovs/reconnect.py index 6b0d023ae..229d08bb6 100644 --- a/python/ovs/reconnect.py +++ b/python/ovs/reconnect.py @@ -38,6 +38,9 @@ class Reconnect(object): since there is no hidden state. When not testing, just pass the return value of ovs.time.msec(). (Perhaps this design should be revisited later.)""" + default_min_backoff = None + default_max_backoff = None + default_probe_interval = None class Void(object): name = "VOID" @@ -161,9 +164,9 @@ class Reconnect(object): self.enable() and self.set_name() on the returned object.""" self.name = "void" - self.min_backoff = 1000 - self.max_backoff = 8000 - self.probe_interval = 5000 + self.min_backoff = Reconnect.get_default_min_backoff() + self.max_backoff = Reconnect.get_default_max_backoff() + self.probe_interval = Reconnect.get_default_probe_interval() self.passive = False self.info_level = vlog.info @@ -231,6 +234,42 @@ class Reconnect(object): self.run() returns ovs.reconnect.DISCONNECT.""" return self.probe_interval + def get_default_min_backoff(): + """Returns the default min_backoff value for reconnect. It uses the + environment variable OVS_RECONNECT_MIN_BACKOFF if set and valid or + otherwise defaults to 1 second. The return value is in ms.""" + if Reconnect.default_min_backoff is None: + try: + Reconnect.default_min_backoff = int(os.environ.get( + "OVS_RECONNECT_MIN_BACKOFF", "")) + except ValueError: + Reconnect.default_min_backoff = 1000 + return Reconnect.default_min_backoff + + def get_default_max_backoff(): + """Returns the default min_backoff value for reconnect. It uses the + environment variable OVS_RECONNECT_MIN_BACKOFF if set and valid or + otherwise defaults to 1 second. The return value is in ms.""" + if Reconnect.default_max_backoff is None: + try: + Reconnect.default_max_backoff = int(os.environ.get( + "OVS_RECONNECT_MAX_BACKOFF", "")) + except ValueError: + Reconnect.default_max_backoff = 8000 + return Reconnect.default_max_backoff + + def get_default_probe_interval(): + """Returns the default probe_interval value for reconnect. It uses the + environment variable OVS_RECONNECT_PROBE_INTERVAL if set and valid or + otherwise defaults to 1 second. The return value is in ms.""" + if Reconnect.default_probe_interval is None: + try: + Reconnect.default_probe_interval = int(os.environ.get( + "OVS_RECONNECT_PROBE_INTERVAL", "")) + except ValueError: + Reconnect.default_probe_interval = 5000 + return Reconnect.default_probe_interval + def set_max_tries(self, max_tries): """Limits the maximum number of times that this object will ask the client to try to reconnect to 'max_tries'. None (the default) means an