protected void doWithRefStreamDefinitionLock(final Striped<Lock> refStreamDefStripedReentrantLock,
                                                 final RefStreamDefinition refStreamDefinition,
                                                 final Runnable work) {

        final Lock lock = refStreamDefStripedReentrantLock.get(refStreamDefinition);

        LAMBDA_LOGGER.logDurationIfDebugEnabled(
                () -> {
                    try {
                        LOGGER.debug("Acquiring lock for {}", refStreamDefinition);
                        lock.lockInterruptibly();
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                        throw new RuntimeException(LogUtil.message(
                                "Thread interrupted while trying to acquire lock for refStreamDefinition {}",
                                refStreamDefinition.asUiFriendlyString()));
                    }
                },
                () -> LogUtil.message("Acquiring lock for {}", refStreamDefinition));
        try {
            // now we have sole access to this RefStreamDefinition so perform the work on it
            work.run();
        } finally {
            lock.unlock();
        }
    }
Get an instance of a {@link RefDataLoader} for bulk loading multiple entries for a given
{@link RefStreamDefinition} and its associated effectiveTimeMs. The {@link RefDataLoader}
should be used in a try with resources block to ensure any transactions are closed, e.g.
<pre>try (RefDataLoader refDataLoader = refDataOffHeapStore.getLoader(...)) { ... }</pre>
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/AbstractRefDataStore.java