Multi version with fdbcli 7.3

Hi,

We are trying to setup multi versions for the fdbcli, while we want to support 3 different versions.
It seems that the fdbcli in 7.3 is behaving a bit differently that other fdbcli version.

For context :

  • the var env FDB_NETWORK_OPTION_EXTERNAL_CLIENT_DIRECTORY is set to /usr/lib/fdb/multiversion
  • the /usr/lib/fdb/multiversion folder contains following libraries : libfdb_c_6.2.so, libfdb_c_7.2.so qnd libfdb_c_7.3.so
  • the cluster file is pointing on a cluster running in 7.3 version

When I’m running LD_DEBUG=libs /usr/bin/fdb/6.2/fdbcli, the fdbcli output is the following :

Using cluster file `/etc/foundationdb/fdb.cluster'.

WARNING: One or more of the processes in the cluster is incompatible with this version of fdbcli.

The database is unavailable; type `status' for more information.

When I’m running LD_DEBUG=libs /usr/bin/fdb/7.2/fdbcli, the fdbcli output is the following :

       calling init: /usr/lib/fdb/multiversion/libfdb_c_6.2.so
        70:
        70:	/usr/lib/fdb/multiversion/libfdb_c_6.2.so: error: symbol lookup error: undefined symbol: fdb_use_future_protocol_version (fatal)
        70:
        70:	calling init: /usr/lib/fdb/multiversion/libfdb_c_7.2.so
        70:
        70:	find library=liblzma.so.5 [0]; searching
        70:	 search cache=/etc/ld.so.cache
        70:	  trying file=/lib/x86_64-linux-gnu/liblzma.so.5
        70:
        70:	find library=libz.so.1 [0]; searching
        70:	 search cache=/etc/ld.so.cache
        70:	  trying file=/lib/x86_64-linux-gnu/libz.so.1
        70:
        70:
        70:	calling init: /lib/x86_64-linux-gnu/libz.so.1
        70:
        70:
        70:	calling init: /lib/x86_64-linux-gnu/liblzma.so.5
        70:
        70:
        70:	calling init: /usr/lib/fdb/multiversion/libfdb_c_7.3.so
.....
.....
Using cluster file `/etc/foundationdb/fdb.cluster'.

WARNING: One or more of the processes in the cluster is incompatible with this version of fdbcli.

The database is unavailable; type `status' for more information.

But when I run the command LD_DEBUG=libs /usr/bin/fdb/7.3/fdbcli, the fdbcli failed and it’s not able to start :

calling init: /usr/lib/fdb/multiversion/libfdb_c_6.2.so
        73:
        73:	/usr/lib/fdb/multiversion/libfdb_c_6.2.so: error: symbol lookup error: undefined symbol: fdb_use_future_protocol_version (fatal)
ERROR: Failed to load a required FDB API function. (2204)

I do see the fdbcli loading the libfdb_c_6.2.so, but it’s not trying to load other libraries. While the fdbcli 7.2 is loading all of them.

Do you know if something has changed in the fdbcli 7.3 ?

I’m not sure what the default value is IGNORE_EXTERNAL_CLIENT_FAILURES in the fdbcli. Did you try setting FDB_NETWORK_OPTION_IGNORE_EXTERNAL_CLIENT_FAILURES?

1 Like

@newhook provided the right pointer. For 7.3 you have to set IGNORE_EXTERNAL_CLIENT_FAILURES as 7.3 added some new checks for loading external client libraries and those checks are not present in the older versions, see:

2 Likes

Thank you @newhook and @johscheuer it worked. :ok_hand: