All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.controller.cluster.sharding.LookupTask Maven / Gradle / Ivy

/*
 * Copyright (c) 2017 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.controller.cluster.sharding;

import static akka.actor.ActorRef.noSender;

import akka.actor.ActorRef;
import akka.actor.Status;
import org.eclipse.jdt.annotation.Nullable;

/**
 * Base class for lookup tasks. Lookup tasks are supposed to run repeatedly until successful lookup or maximum retries
 * are hit. This class is NOT thread-safe.
 */
abstract class LookupTask implements Runnable {
    private final int maxRetries;
    private final ActorRef replyTo;
    private int retried = 0;

    LookupTask(final ActorRef replyTo, final int maxRetries) {
        this.replyTo = replyTo;
        this.maxRetries = maxRetries;
    }

    abstract void reschedule(int retries);

    void tryReschedule(final @Nullable Throwable throwable) {
        if (retried <= maxRetries) {
            retried++;
            reschedule(retried);
        } else {
            fail(throwable);
        }
    }

    void fail(final @Nullable Throwable throwable) {
        if (throwable == null) {
            replyTo.tell(new Status.Failure(
                    new DOMDataTreeShardCreationFailedException("Unable to find the backend shard."
                            + "Failing..")), noSender());
        } else {
            replyTo.tell(new Status.Failure(
                    new DOMDataTreeShardCreationFailedException("Unable to find the backend shard."
                            + "Failing..", throwable)), noSender());
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy