function initializeMultiObjectDeleteWithBatchingSupport(bucketName, inPlay, log, callback) {
    if (config.multiObjectDeleteEnableOptimizations === false) {
        return callback(null, {});
    }
    // If the backend supports batching, we want to optimize the API latency by
    // first getting all the objects metadata, stored in memory, for later use
    // in the API. This approach does not change the API architecture, but
    // transplants an additional piece of code that can greatly improve the API
    // latency when the database supports batching.
    const objectKeys = Object.values(inPlay).map(entry => {
        const [err, versionId] = decodeObjectVersion(entry, bucketName);
        if (err) {
            return null;
        }
        return {
            versionId,
            inPlay: entry,
        };
    });
    return metadataUtils.metadataGetObjects(bucketName, objectKeys, log, (err, cache) => {
        // This optional step is read-only, so any error can be safely ignored
        if (err) {
            return callback(null, {});
        }
        return callback(null, cache);
    });
}
Initialization function for the MultiObjectDelete API that will, based on the
current metadata backend, assess if metadata READ batching is supported. If
yes, the initialization step will call the metadataGetObjects function from
the MetadataWrapper.
@param {string} bucketName - bucket name
@param {string []} inPlay - list of object keys still in play
@param {object} log - logger object
@param {function} callback - callback to call with error or list of objects
@return {undefined}