use of de.invesdwin.context.integration.retry.task.RetryOriginator in project invesdwin-context-persistence by subes.
the class ADelegateTable method getTableWithReadLock.
private Table<H, V> getTableWithReadLock(final boolean forUpdate) {
maybePurgeTable();
// directly return table with read lock if not null
final ILock readLock = getReadLock(forUpdate);
readLock.lock();
if (tableFinalizer.table != null) {
return tableFinalizer.table;
}
readLock.unlock();
if (!initializing.compareAndSet(false, true)) {
while (initializing.get()) {
FTimeUnit.MILLISECONDS.sleepNoInterrupt(1);
}
return getTableWithReadLock(forUpdate);
} else {
try {
return new ARetryCallable<Table<H, V>>(new RetryOriginator(ADelegateTable.class, "initializeTableInitLocked", getName())) {
@Override
protected Table<H, V> callRetry() throws Exception {
return initializeTableInitLocked(readLock);
}
}.call();
} finally {
initializing.set(false);
}
}
}
use of de.invesdwin.context.integration.retry.task.RetryOriginator in project invesdwin-context-persistence by subes.
the class ADelegateRangeTable method getTableWithReadLock.
private RangeTable<H, R, V> getTableWithReadLock(final boolean forUpdate) {
maybePurgeTable();
// directly return table with read lock if not null
final ILock readLock = getReadLock(forUpdate);
readLock.lock();
if (tableFinalizer.table != null) {
return tableFinalizer.table;
}
readLock.unlock();
if (!initializing.compareAndSet(false, true)) {
while (initializing.get()) {
FTimeUnit.MILLISECONDS.sleepNoInterrupt(1);
}
return getTableWithReadLock(forUpdate);
} else {
try {
return new ARetryCallable<RangeTable<H, R, V>>(new RetryOriginator(ADelegateRangeTable.class, "initializeTableInitLocked", getName())) {
@Override
protected RangeTable<H, R, V> callRetry() throws Exception {
return initializeTableInitLocked(readLock);
}
}.call();
} finally {
initializing.set(false);
}
}
}
use of de.invesdwin.context.integration.retry.task.RetryOriginator in project invesdwin-context-persistence by subes.
the class ASegmentedTimeSeriesStorageCache method initSegmentRetry.
private void initSegmentRetry(final SegmentedKey<K> segmentedKey, final Function<SegmentedKey<K>, ICloseableIterable<? extends V>> source) {
final ARetryCallable<Throwable> retryTask = new ARetryCallable<Throwable>(new RetryOriginator(ASegmentedTimeSeriesDB.class, "initSegment", segmentedKey)) {
@Override
protected Throwable callRetry() throws Exception {
try {
if (closed) {
return new RetryLaterRuntimeException(ASegmentedTimeSeriesStorageCache.class.getSimpleName() + "for [" + hashKey + "] is already closed.");
} else {
initSegment(segmentedKey, source);
}
return null;
} catch (final Throwable t) {
if (closed) {
return t;
} else {
throw t;
}
}
}
@Override
protected BackOffPolicy getBackOffPolicyOverride() {
// randomize backoff to prevent race conditions between multiple processes
return BackOffPolicies.randomFixedBackOff(Duration.ONE_SECOND);
}
};
final Throwable t = retryTask.call();
if (t != null) {
throw Throwables.propagate(t);
}
}
Aggregations