private Path ensureDirectoryIsWritable(final String pathStr, final PropertyPath propertyPath) {
        final Path path = pathCreator.toAppPath(pathStr);
        LOGGER.debug("Ensuring directory {}", path);
        try {
            Files.createDirectories(path);
        } catch (IOException e) {
            throw new RuntimeException(LogUtil.message("Error ensuring directory {} for property '{}': {}",
                    path,
                    propertyPath,
                    LogUtil.exceptionMessage(e)), e);
        }

        LOGGER.debug("Testing directory {} is writable", path);
        Path tempFile = null;
        try {
            tempFile = Files.createTempFile(path, "", null);
        } catch (IOException e) {
            throw new RuntimeException(LogUtil.message("Error writing test file in directory {} for property '{}': {}",
                    path,
                    propertyPath,
                    LogUtil.exceptionMessage(e), e));
        } finally {
            if (tempFile != null) {
                try {
                    Files.deleteIfExists(tempFile);
                } catch (IOException e) {
                    // Swallow and log
                    LOGGER.error("Error writing test file in directory {} for property {}: {}",
                            path,
                            propertyPath,
                            e.getMessage());
                }
            }
        }
        return path;
    }
Is a front for multiple {@link RefDataOffHeapStore} instances, one per feed.
It either delegates to the appropriate store if the stream id is know (so that the feed can be derived
from the stream ID), or it delegates to all stores and aggregates the results.
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/offheapstore/DelegatingRefDataOffHeapStore.java