class StorageDistributionImpl implements StorageDistribution {

    @Override
    public BulkObjectStoreResponse bulkCreateFromWorkspace(String strategyId,
        BulkObjectStoreRequest bulkObjectStoreRequest, String requester)
        throws StorageException {

        Integer tenantId = ParameterHelper.getTenantParameter();
        List<String> offerIds =
            getStorageOffers(strategyId).stream().map(StorageOffer::getId).collect(Collectors.toList());

        Map<String, Driver> storageDrivers = new HashMap<>();
        for (String offerId : offerIds) {
            storageDrivers.put(offerId, retrieveDriverInternal(offerId));
        }

        Map<String, StorageOffer> storageOffers = new HashMap<>();
        for (String offerId : offerIds) {
            storageOffers.put(offerId, OFFER_PROVIDER.getStorageOffer(offerId));
        }

        Map<String, String> objectDigests =
            bulkStorageDistribution
                .bulkCreateFromWorkspaceWithRetries(tenantId, offerIds, storageDrivers, storageOffers,
                    bulkObjectStoreRequest.getType(), bulkObjectStoreRequest.getWorkspaceContainerGUID(),
                    bulkObjectStoreRequest.getWorkspaceObjectURIs(), bulkObjectStoreRequest.getObjectNames(),
                    requester);

        return new BulkObjectStoreResponse(offerIds, digestType.getName(), objectDigests);
    }

    public  StorageDistributionImpl(StorageConfiguration configuration, StorageLog storageLogService);
    @VisibleForTesting  StorageDistributionImpl(WorkspaceClientFactory workspaceClientFactory, DigestType digestType,
        StorageLog storageLogService,
        ExecutorService batchExecutorService, int batchDigestComputationTimeout,
        BulkStorageDistribution bulkStorageDistribution);

}