[ovs-dev] [PATCH v2] Backup and remove existing DB when joining cluster

Terry Wilson twilson at redhat.com
Fri Nov 5 13:29:35 UTC 2021


On Fri, Nov 5, 2021 at 6:07 AM Dumitru Ceara <dceara at redhat.com> wrote:
>
> On 10/20/21 10:56 PM, Terry Wilson wrote:
> > ovsdb-tool join-cluster requires a remote addr, so the existing
> > code that tried to join a cluster without it when there was an
> > existing $DB_FILE would fail.
> >
> > Instead, if we are trying to specifically join a cluster and there
> > is an existing $DB_FILE, back it up and remove the original before
> > continuing to join the cluster.
> >
> > Signed-off-by: Terry Wilson <twilson at redhat.com>
> > ---
> >  utilities/ovs-lib.in | 9 ++++-----
> >  1 file changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
> > index 3eda01d3c..a710f053a 100644
> > --- a/utilities/ovs-lib.in
> > +++ b/utilities/ovs-lib.in
> > @@ -519,13 +519,12 @@ join_cluster() {
> >      LOCAL_ADDR="$3"
> >      REMOTE_ADDR="$4"
> >
> > +    if test -e "$DB_FILE" && ovsdb_tool db-is-standalone "$DB_FILE"; then
> > +        backup_db || return 1
> > +        rm $DB_FILE
>
> I think this is OK, but it's a behavior change (improvement I'd say),
> should we mention it somewhere public (NEWS?) in case users had scripts
> that handled migration from standalone to clustered externally?

I'm never against giving more information to users. The case the patch
is handling was completely broken before, since ovsdb-tool would exit
with error. So if someone did have an external script, would the NEWS
item just be "The case where ovs-ctl would try to join a cluster when
a previous DB file existed in the specified location will no longer
exit with error, but will instead backup the existing db file and
continue joining the cluster."?

> Also, it's probably useful to log something here to make it more visible
> that we backed up the standalone DB and removed the original file.
> Wdyt?

Good point. backup_db() will handle logging the backup and I'll make
the call to ovsdb_tool an "action" so that we log that the file is
created joining the cluster.

>
> > +    fi
> >      if test ! -e "$DB_FILE"; then
> >          ovsdb_tool join-cluster "$DB_FILE" "$SCHEMA_NAME" "$LOCAL_ADDR" "$REMOTE_ADDR"
> > -    elif ovsdb_tool db-is-standalone "$DB_FILE"; then
> > -        # Backup standalone database and join cluster.
> > -        backup_db || return 1
> > -        action "Joining $DB_FILE to cluster" \
> > -               ovsdb_tool join-cluster "$DB_FILE" "$SCHEMA_NAME" "$LOCAL_ADDR"
> >      fi
> >  }
> >
> >
>
> Thanks,
> Dumitru
>



More information about the dev mailing list