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

org.apache.activemq.artemis.core.server.cluster.ha.ReplicationPrimaryPolicy Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.activemq.artemis.core.server.cluster.ha;

import java.util.Map;
import java.util.Objects;

import org.apache.activemq.artemis.core.config.ha.ReplicationPrimaryPolicyConfiguration;
import org.apache.activemq.artemis.core.config.ha.DistributedPrimitiveManagerConfiguration;
import org.apache.activemq.artemis.core.io.IOCriticalErrorListener;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.core.server.impl.ReplicationPrimaryActivation;
import org.apache.activemq.artemis.quorum.DistributedPrimitiveManager;

public class ReplicationPrimaryPolicy implements HAPolicy {

   private final ReplicationBackupPolicy backupPolicy;
   private final String clusterName;
   private final String groupName;
   private final long initialReplicationSyncTimeout;
   private final DistributedPrimitiveManagerConfiguration distributedManagerConfiguration;
   private final boolean allowAutoFailBack;
   private final String coordinationId;

   private ReplicationPrimaryPolicy(ReplicationPrimaryPolicyConfiguration configuration,
                                    ReplicationBackupPolicy backupPolicy,
                                    boolean allowAutoFailBack) {
      Objects.requireNonNull(backupPolicy);
      clusterName = configuration.getClusterName();
      groupName = configuration.getGroupName();
      initialReplicationSyncTimeout = configuration.getInitialReplicationSyncTimeout();
      distributedManagerConfiguration = configuration.getDistributedManagerConfiguration();
      coordinationId = configuration.getCoordinationId();
      this.allowAutoFailBack = allowAutoFailBack;
      this.backupPolicy = backupPolicy;
   }

   private ReplicationPrimaryPolicy(ReplicationPrimaryPolicyConfiguration config) {
      clusterName = config.getClusterName();
      groupName = config.getGroupName();
      coordinationId = config.getCoordinationId();
      initialReplicationSyncTimeout = config.getInitialReplicationSyncTimeout();
      distributedManagerConfiguration = config.getDistributedManagerConfiguration();
      this.allowAutoFailBack = false;
      backupPolicy = ReplicationBackupPolicy.failback(config.getRetryReplicationWait(), config.getClusterName(),
                                                      config.getGroupName(), this,
                                                      config.getDistributedManagerConfiguration());
   }

   /**
    * It creates a companion failing-over primary policy for a natural-born backup: it's allowed to allow auto fail-back
    * only if configured to do it.
    */
   static ReplicationPrimaryPolicy failoverPolicy(long initialReplicationSyncTimeout,
                                                  String groupName,
                                                  String clusterName,
                                                  ReplicationBackupPolicy replicaPolicy,
                                                  boolean allowAutoFailback,
                                                  DistributedPrimitiveManagerConfiguration distributedManagerConfiguration) {
      return new ReplicationPrimaryPolicy(ReplicationPrimaryPolicyConfiguration.withDefault()
                                             .setInitialReplicationSyncTimeout(initialReplicationSyncTimeout)
                                             .setGroupName(groupName)
                                             .setClusterName(clusterName)
                                             .setDistributedManagerConfiguration(distributedManagerConfiguration),
                                          replicaPolicy, allowAutoFailback);
   }

   /**
    * It creates a primary policy that never allow auto fail-back.
* It's meant to be used for natural-born primary brokers: its backup policy is set to always try to fail-back. */ public static ReplicationPrimaryPolicy with(ReplicationPrimaryPolicyConfiguration configuration) { return new ReplicationPrimaryPolicy(configuration); } public ReplicationBackupPolicy getBackupPolicy() { return backupPolicy; } @Override public ReplicationPrimaryActivation createActivation(ActiveMQServerImpl server, boolean wasLive, Map activationParams, IOCriticalErrorListener shutdownOnCriticalIO) throws Exception { return new ReplicationPrimaryActivation(server, DistributedPrimitiveManager.newInstanceOf( distributedManagerConfiguration.getClassName(), distributedManagerConfiguration.getProperties()), this); } @Override public boolean isSharedStore() { return false; } @Override public boolean isBackup() { return false; } @Override public boolean isWaitForActivation() { return true; } @Override public boolean canScaleDown() { return false; } @Override public String getBackupGroupName() { return groupName; } @Override public String getScaleDownGroupName() { return null; } @Override public String getScaleDownClustername() { return null; } public boolean isAllowAutoFailBack() { return allowAutoFailBack; } public String getClusterName() { return clusterName; } public long getInitialReplicationSyncTimeout() { return initialReplicationSyncTimeout; } public String getGroupName() { return groupName; } @Override public boolean useQuorumManager() { return false; } public String getCoordinationId() { return coordinationId; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy