Workaround for deadlock issue when attempting to create partitions for reference stores

A core bug has been identified, where attempting to create partitions for reference stores results in a deadlock: PIVOT-5759

Here’s a workaround for resolving this issue.

StorePartitionBase.java can be overridden with the following to fix this issue. You can override the core version by placing this class into the package com.qfs.store.impl in your cvarc-starter module.

public IEpoch allocatePartitionContent() {
    final FutureValue < IEpoch > future = new FutureValue < > ();
    try {
        final var allocatePartitoinTask = new RecursiveAction() {
            private static final long serialVersionUID = 1 L;
            @Override
            protected void compute() {
                try {
                    future.setValue(mvStorePartition.allocatePartitionContent());
                } catch (Exception e) {
                    future.setException(e);
                    throw e;
                }
            }
        };
        final var transactionPool = this.mixedWorkloadPool.getTransactionPool();
        if (transactionPool == ForkJoinTask.getPool()) {
            allocatePartitoinTask.fork();
        } else {
            transactionPool.submit(allocatePartitoinTask);
        }
        // Do not call get() on the submitted task. The current thread could steal tasks that
        // use the same lock as the one we need to allocate the partition content.
        // We use a future to prevent the work stealing.
        return future.get();
    } catch (ExecutionException | InterruptedException e) {
        throw new ActiveViamRuntimeException(
            "Could not allocate partition content for partition " + partitionId +
            " of store " + store.getMetadata().getName() + ".", e);
    }
}
search.js