How to setup multi-version clients with Java?

You will need to set one of those two EXTERNAL_CLIENT_... options in order to use the multi-version client. It can be done by calling the network option in Java:

FDB fdb = FDB.selectAPIVersion(600);
fdb.options().setExternalClientDirectory(...);

Or you can control it via environment variable:

FDB_NETWORK_OPTION_EXTERNAL_CLIENT_DIRECTORY=...

To set your client up to connect with both versions, you would need to use one of the libfdb_c.so files as your “primary” library that gets loaded normally. Typically, this would be done with the new library so that you have access to all its capabilities when the cluster is upgraded, though you could equally do it with the old one as the primary. After that, you would place your other version somewhere with a unique name and use one of the two external client options to tell the primary client where to find it.

Yes, there should be very little downtime during an upgrade if this is configured correctly. You’d basically just have to wait how long it takes the cluster to recover (usually in the neighborhood of a few seconds for the ssd storage engine) and then restart all of your in-flight transactions (which should happen automatically if you are using the built-in retry loops).