From patchwork Wed Nov 8 07:12:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 1861403 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=FjLHK9bL; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::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 4SQGWq460Qz1yQK for ; Wed, 8 Nov 2023 18:13:11 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 3E6964091B; Wed, 8 Nov 2023 07:13:09 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 3E6964091B 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=FjLHK9bL 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 iJAPRlQW6OzC; Wed, 8 Nov 2023 07:13:07 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id B71294155E; Wed, 8 Nov 2023 07:13:06 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org B71294155E Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 926C1C0039; Wed, 8 Nov 2023 07:13:06 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id B8ACDC0032 for ; Wed, 8 Nov 2023 07:13:04 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 606AD410E4 for ; Wed, 8 Nov 2023 07:13:04 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 606AD410E4 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 L-iuOWq7enzX for ; Wed, 8 Nov 2023 07:13:02 +0000 (UTC) Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on20727.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe16::727]) by smtp4.osuosl.org (Postfix) with ESMTPS id 6C2B34091B for ; Wed, 8 Nov 2023 07:13:02 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 6C2B34091B ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PK+k9CyQ1k4qtoMz1l3160o0IyK0AHM2B/bUoeGWflVc08yLhXlYFYxX0L5SetfNnpo9tYD+ng6QLeojCaoazxGXhKzvaWl4Esy5fJeXmAFRK6kjSTwYXibxfZ9FwIwolMqh4uoyf95I4OkqNBqyqj7ZcKVCx+c26eA2frD2FdHfX8PyRmwNkGkQ5mf8UbXZ74sGlBw4Ov0KOdHev/fuAcT9v1fbcNDbPPGZ+oqd3+yuyHfBOK7HA8iCMwVJBEp9xO0D+k20BIxw/Vji2yVmIEpFN1OHNOIuPl+HvjNkgwaORmC5mhzH5e3RodWbLa7eEXlLxYj/IUSShnjfW342Rw== 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=2VwrTKVlaiW/2feCbBVyzId/XE3Cl3ZPVCHkJjepdWo=; b=OBvfJHB9Jra4PPsJF16OWmaomApczsOmp/0JfVYLcFJe3w6bwgsoMI/5LiGYiqkCbWmiI48RR3eg6iVOioLEXRnXAMMMnaltCY4SBHmMxCcP/iR6hXOGqORDio40iiohHPqgZkanJ9hZAyuxANiIK30vxY4nYhncGkF+Y5ZwJmiukPFFiAkO1VgSV8SKDjaUBMr3tHWv6HfsmiCid174tU5dncptiBa+8NpC5E/OMi0GYBpOCnjqylGw/V6BFFjVdFMlTXcHppESX1/7PzbDSsU/Tgmqy62wz4UhY4LNj3/ReE/L6R5HPEhUN4RK/M4ZIMByGOkfCjLsbavslHleHw== 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=2VwrTKVlaiW/2feCbBVyzId/XE3Cl3ZPVCHkJjepdWo=; b=FjLHK9bLp0a06Sw/aNP1lZuwsuL257uWYoYOWWSKBv78PMPPwVPEvXbs1lsG/C+xK4u9b9IRNHxdhX+N9HKgI/XRg15wseMfhCWVnUt0byiImTsBVZntHqPJwgZjeI2uB1+nI+XT2OoLejn9iAqZEGjdb8VT90gH3HDTLVLuhXNAd7OrB1tMVw4l1wrSXisvLWZTgTLlGkt3wEQwTWIqWCiX3vJjG717FBozWYB0bqIdSDqiKKJlP2hJjta3BnNVGNWjsYC24gAGw9ExfvD1FVXsxRBM16MfZmQppf+N+SAOlIJ3aFc8Hje2iuxBNdPki5Zsm7k9BpeXVjxc0UUXJQ== 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 PAXPR10MB5709.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:245::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Wed, 8 Nov 2023 07:12:58 +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 07:12:57 +0000 Date: Wed, 8 Nov 2023 08:12:55 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org Content-Disposition: inline X-ClientProxiedBy: FR3P281CA0117.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::8) To PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:29a::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PRAPR10MB5249:EE_|PAXPR10MB5709:EE_ X-MS-Office365-Filtering-Correlation-Id: 5042c313-74aa-4178-3b2c-08dbe02a2226 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: ZdoMKf9OF5FXwK26YsfeKc2XDeY5gLn4B5LDVcBSBfXaEEu2Ke2TtgcmlavAJSjUORhJw2KTNHKeoCERjgxoEusDx6h2lohJxaVIZMnWAo2UYTKT+FmErQsfDqfNOvCSaxBEDIRH8n2KM5qVLTMrKCZToJCbE5NGU+peDSNwrdkjAgN/URwKyU5UFTT+UMunrqcl3MWRuswm9ukgI4VlQiAKs+cEe7SWKKeOWVu1dV64sy5RyhmLYgCWo60GBxeXXFrGgiDwTyAQYAmkcCJ6hpRchIRTjLZCBQlg+DFR2r9w7f0q51F/gkYZS1M8i5TgG12pzVcnt7azctk0WKU9zwdvH5VlgLex5NXPkqqApi5WwxkBnKIVtFNmg6t7Fnqx0xS06+xIPHy4TsbG9uhcrcMobyq3if7sD3DZCypkM3zbh3iAmuRikjlU4y1cw0TFP0Unn/erxumFx0It+q1qSLC3kABnf1xNbTW6bvPNhBe6Eg+YFGf9juMfBH1Wqzc6z/r+cAv7MorpCbO+8nYgz7R1kEL3RY4ayl8XjObTM9qJUwiqM12GUWXRFVwhLcJD 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)(346002)(396003)(136003)(366004)(376002)(39860400002)(230922051799003)(451199024)(186009)(1800799009)(64100799003)(6486002)(478600001)(82960400001)(83380400001)(86362001)(66574015)(9686003)(316002)(6512007)(6506007)(6916009)(66476007)(66556008)(66946007)(26005)(8936002)(44832011)(30864003)(2906002)(5660300002)(41300700001)(8676002)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zZWnZY+SvfAjIknOLXEQU2Abii1ZYR8Gpg2RJUlMc/Avs+UT56GWHSK1FJzceU7Nhtn+dG8pQgAABKC3e0G9qZm8IEvxuDEuCs9a7doDwPfWODs06WCLuD7dXKwvG5AHShSfw6pdWT+HQfjSvhZBUwfpk3fDr91VbPZ8L50BN2CvREHi38zCMtm/TmkFdWv83vvOWEeaJIFngoxF2r2HBPHXWe8wq5rlTtlBFcCE+T3DPKM4HAYFcy9ZZLEwp7PsZK4slOYhMwxILy5/61mehYFBpnPU3VVNld4Xrr300d0k2+OpgnyNL4WQtGz12KCRWzoO5NkiLrr5zXs2sgJ2OMnsbtedGEW3DMzlpaemsa9O0R9lnAMpumcum7lXyU+/00Ca6Ng/gHLRSsafgtkG5Cu4UvfryMi/ZoNj3qX0iUTVLceoZRC5c5Aqy7RQqjhwJJPFZJP0ST/sSKniorxM2Dg485BYqW75xHwxENJ7x56zXIc7KTagJduc64s3iZB2p5gCuTV6Jk6HWA5FUkViP0Fg5CrJJeddL2Npf6e4n1DqrO3C2YfZBiOp/9nfKHx2i684S+pnHhZIKajOgh787otAaIOgQDZe+xTorFgCC4Q4WXfRHh4ExgYcGMMjoMAuC5o/DcfGHqMNDnMVsBO1hK04z35TzzaYY/YtKJtt0eJSWVi0vWDGQ6+Zj004ui2edgHNq3eSdXi1RV4amSJARuAMyPSx13f3q41n9L1ks8CYP7IaHFTrvWcIwG5aGJnxVjQgU6HF/MsanI3iJVZRWB4dWNE+Q70HOBG1MnkYDxwGCv3x3I9q0qUvKLN2UgFpXUNYfiZBH/YfImRId9tf/2SzOTvPY34fLSM7717WuSszYF6h1iG/lP8OW570z2FzAaoCN1iKInFAX8hj12wOPIXgzlNtz3xqJ7dWvmoga8m1HrHqiWaJPuIlFZaBMxgth9TFy361lChbEwy+IbAF8jqVQCgRvazA2WUiqwqroI8l75dOQ92m4QxLP4af5MZBMFP+j26+JiK35lLq3YI3hLxN4jKyQBLldaC5ZtctNgvVOpGvQ5LoXxfdIayHMTod5bAKcdyxB/OrR5bp+Z3SseCrCO6xblKlDiWdwg2r/XjQfPX2rx04lVfz/l5Ps70VxCRoKtRknz83UWecukNfXU0A/JGdksc+kNjnZuCOeHCB0GG8UwMpROqKrxE+/h3WuDkHsTBTikI1Zo4/9krJOU3+RtRgHW1fnlhBde8FNgizzXscGChGS/2aucOr5og1FJOW0/3cWjM9lgGJ2C8Y9CSQNq2KmipG3iE+8skahxORahrpEO6qjj7Mn7ckhHsBabyZNmFKG4ew+M5sIwaI4h3F5RvNWkEKRgiWQckwVOyUBwhxLbNOzTaqJ9Hd6Hvi8ydgF8FXCEqCsH0NcpipDd1hlfkavFlwvaQIMJxn/Pz1USXHb3yopozCuNoB0f4dLoL/cltSjAVfetPubJRNE5CLpvKlPLUxZ1yJIHt6HY6v4TqB2ck1JKn/2CN1P+6iF4gZAf8r8qMzXg9at0cijOSslqnaoqlhDUi8T2/oIeO1XW6Xeu1PdVzFnXYDxKs0ZViGd3jTTXWs0UbFZpKfXQ== X-OriginatorOrg: mail.schwarz X-MS-Exchange-CrossTenant-Network-Message-Id: 5042c313-74aa-4178-3b2c-08dbe02a2226 X-MS-Exchange-CrossTenant-AuthSource: PRAPR10MB5249.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2023 07:12:57.1187 (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: +hN2IycL+JmTmiB9NLjA1KVHKIU5oOyJD3qCHoXofUbj7Cgvy6vozc9KuyGcc07+oFy2pguh0P1WW7+YWfFUN2Qskwnj9Xfhj1Nk4NiYjyQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR10MB5709 Subject: [ovs-dev] [PATCH] 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 --- 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..b45516589 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. */ +int reconnect_default_min_backoff() { + static 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. */ +int reconnect_default_max_backoff() { + static 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. */ +int reconnect_default_probe_interval() { + static 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..feb6e4310 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 +int reconnect_default_min_backoff(); +int reconnect_default_max_backoff(); +int reconnect_default_probe_interval(); 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