Search in sources :

Example 1 with DeadHistoryException

use of org.opendaylight.controller.cluster.access.commands.DeadHistoryException in project controller by opendaylight.

the class LeaderFrontendState method handleTransactionRequest.

@Nullable
TransactionSuccess<?> handleTransactionRequest(final TransactionRequest<?> request, final RequestEnvelope envelope, final long now) throws RequestException {
    checkRequestSequence(envelope);
    try {
        final LocalHistoryIdentifier lhId = request.getTarget().getHistoryId();
        final AbstractFrontendHistory history;
        if (lhId.getHistoryId() != 0) {
            history = localHistories.get(lhId);
            if (history == null) {
                if (purgedHistories.contains(lhId.getHistoryId())) {
                    LOG.warn("{}: rejecting request {} to purged history", persistenceId, request);
                    throw new DeadHistoryException(purgedHistories.toImmutable());
                }
                LOG.warn("{}: rejecting unknown history request {}", persistenceId, request);
                throw new UnknownHistoryException(lastSeenHistory);
            }
        } else {
            history = standaloneHistory;
        }
        return history.handleTransactionRequest(request, envelope, now);
    } finally {
        expectNextRequest();
    }
}
Also used : UnknownHistoryException(org.opendaylight.controller.cluster.access.commands.UnknownHistoryException) DeadHistoryException(org.opendaylight.controller.cluster.access.commands.DeadHistoryException) LocalHistoryIdentifier(org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier) Nullable(javax.annotation.Nullable)

Example 2 with DeadHistoryException

use of org.opendaylight.controller.cluster.access.commands.DeadHistoryException in project controller by opendaylight.

the class LeaderFrontendState method handleCreateHistory.

private LocalHistorySuccess handleCreateHistory(final CreateLocalHistoryRequest request, final RequestEnvelope envelope, final long now) throws RequestException {
    final LocalHistoryIdentifier historyId = request.getTarget();
    final AbstractFrontendHistory existing = localHistories.get(historyId);
    if (existing != null) {
        // History already exists: report success
        LOG.debug("{}: history {} already exists", persistenceId, historyId);
        return new LocalHistorySuccess(historyId, request.getSequence());
    }
    // end up resurrecting a purged history.
    if (purgedHistories.contains(historyId.getHistoryId())) {
        LOG.debug("{}: rejecting purged request {}", persistenceId, request);
        throw new DeadHistoryException(purgedHistories.toImmutable());
    }
    // Update last history we have seen
    if (lastSeenHistory == null || Long.compareUnsigned(lastSeenHistory, historyId.getHistoryId()) < 0) {
        lastSeenHistory = historyId.getHistoryId();
    }
    // We have to send the response only after persistence has completed
    final ShardDataTreeTransactionChain chain = tree.ensureTransactionChain(historyId, () -> {
        LOG.debug("{}: persisted history {}", persistenceId, historyId);
        envelope.sendSuccess(new LocalHistorySuccess(historyId, request.getSequence()), tree.readTime() - now);
    });
    localHistories.put(historyId, LocalFrontendHistory.create(persistenceId, tree, chain));
    LOG.debug("{}: created history {}", persistenceId, historyId);
    return null;
}
Also used : DeadHistoryException(org.opendaylight.controller.cluster.access.commands.DeadHistoryException) LocalHistoryIdentifier(org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier) LocalHistorySuccess(org.opendaylight.controller.cluster.access.commands.LocalHistorySuccess)

Aggregations

DeadHistoryException (org.opendaylight.controller.cluster.access.commands.DeadHistoryException)2 LocalHistoryIdentifier (org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier)2 Nullable (javax.annotation.Nullable)1 LocalHistorySuccess (org.opendaylight.controller.cluster.access.commands.LocalHistorySuccess)1 UnknownHistoryException (org.opendaylight.controller.cluster.access.commands.UnknownHistoryException)1