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

com.sleepycat.je.rep.GroupShutdownException Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */
package com.sleepycat.je.rep;

import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

import com.sleepycat.je.EnvironmentFailureException;
import com.sleepycat.je.dbi.EnvironmentFailureReason;
import com.sleepycat.je.rep.impl.RepImpl;
import com.sleepycat.je.rep.impl.node.RepNode;
import com.sleepycat.je.utilint.LoggerUtils;
import com.sleepycat.je.utilint.VLSN;

/**
 * Thrown when an attempt is made to access an environment  that was
 * shutdown by the Master as a result of a call to
 * {@link ReplicatedEnvironment#shutdownGroup(long, TimeUnit)}.
 */
public class GroupShutdownException extends EnvironmentFailureException {
    private static final long serialVersionUID = 1;

    /* The time that the shutdown was initiated on the master. */
    private final long shutdownTimeMs;

    /* The master node that initiated the shutdown. */
    private final String masterNodeName;

    /* The VLSN at the time of shutdown */
    private final VLSN shutdownVLSN;

    /**
     * For internal use only.
     * @hidden
     */
    public GroupShutdownException(Logger logger,
                                  RepNode repNode,
                                  long shutdownTimeMs) {
        super(repNode.getRepImpl(),
              EnvironmentFailureReason.SHUTDOWN_REQUESTED,
              String.format("Master:%s, initiated shutdown at %1tc.",
                            repNode.getMasterStatus().getNodeMasterNameId().
                                getName(),
                            shutdownTimeMs));

        shutdownVLSN = repNode.getVLSNIndex().getRange().getLast();
        masterNodeName =
            repNode.getMasterStatus().getNodeMasterNameId().getName();
        this.shutdownTimeMs = shutdownTimeMs;

        LoggerUtils.warning(logger, repNode.getRepImpl(),
                            "Explicit shutdown request from Master:" +
                            masterNodeName);
    }

    /**
     * For internal use only.
     * @hidden
     */
    public GroupShutdownException(Logger logger,
                                 RepImpl repImpl,
                                 String masterNodeName,
                                 VLSN shutdownVLSN,
                                 long shutdownTimeMs) {
        super(repImpl,
                EnvironmentFailureReason.SHUTDOWN_REQUESTED,
                String.format("Master:%s, initiated shutdown at %1tc.",
                              masterNodeName,
                              shutdownTimeMs));

          this.shutdownVLSN = shutdownVLSN;
          this.masterNodeName = masterNodeName;
          this.shutdownTimeMs = shutdownTimeMs;

          LoggerUtils.warning(logger, repImpl,
                              "Explicit shutdown request from Master:" +
                              masterNodeName);

    }

    /**
     * For internal use only.
     * @hidden
     */
    private GroupShutdownException(String message,
                                   GroupShutdownException shutdownException) {
        super(message, shutdownException);
        shutdownVLSN = shutdownException.shutdownVLSN;
        shutdownTimeMs = shutdownException.shutdownTimeMs;
        masterNodeName = shutdownException.masterNodeName;
    }

    /**
     * For internal use only.
     * @hidden
     */
    @Override
    public GroupShutdownException wrapSelf(String msg) {
        return new GroupShutdownException(msg, this);
    }

    /**
     * For internal use only.
     *
     * Returns the shutdownVLSN, if it was available, at the time of the
     * exception
     *
     * @hidden
     */
    public VLSN getShutdownVLSN() {
        return shutdownVLSN;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy