@Test
    void testPurgeOldData_all() {

        // two different ref stream definitions
        final List<RefStreamDefinition> refStreamDefinitions = IntStream.rangeClosed(1, REF_STREAM_DEF_COUNT)
                .boxed()
                .map(this::buildUniqueRefStreamDefinition)
                .collect(Collectors.toList());

        bulkLoadAndAssert(refStreamDefinitions, false, 0);

        referenceDataConfig = referenceDataConfig.withPurgeAge(StroomDuration.ZERO);

        assertThat(refDataStore.getProcessingInfoEntryCount())
                .isEqualTo(REF_STREAM_DEF_COUNT);
        assertThat(refDataStore.getKeyValueEntryCount())
                .isGreaterThan(0);
        assertThat(refDataStore.getRangeValueEntryCount())
                .isGreaterThan(0);

        refDataStore.logAllContents(LOGGER::debug);

        LOGGER.info("------------------------purge-starts-here--------------------------------------");

        refStreamDefinitions.forEach(refStreamDefinition -> {
            final RefDataOffHeapStore effectiveStore = getEffectiveStore(refStreamDefinition);
            LOGGER.info("\n{}", AsciiTable.fromCollection(effectiveStore.listProcessingInfo(Integer.MAX_VALUE)));
        });

        refDataStore.purgeOldData();

        assertThat(refDataStore.getProcessingInfoEntryCount())
                .isEqualTo(0);
        assertThat(refDataStore.getKeyValueEntryCount())
                .isEqualTo(0);
        assertThat(refDataStore.getRangeValueEntryCount())
                .isEqualTo(0);
    }
Each task is trying to load data for a different {@link RefStreamDefinition} so they will all be fighting over
the write txn
stroom-pipeline/src/test/java/stroom/pipeline/refdata/store/offheapstore/TestRefDataOffHeapStore.java