/* * * * Copyright 2014 Orient Technologies LTD (info(at)orientechnologies.com) * * * * Licensed 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. * * * * For more information: http://www.orientechnologies.com * */ package com.orientechnologies.orient.server.distributed.impl; import com.orientechnologies.orient.core.command.OCommandDistributedReplicateRequest; import com.orientechnologies.orient.core.exception.OConfigurationException; import com.orientechnologies.orient.server.distributed.ODistributedConfiguration; import com.orientechnologies.orient.server.distributed.ODistributedRequest; import com.orientechnologies.orient.server.distributed.ODistributedServerManager; import com.orientechnologies.orient.server.distributed.ODistributedStrategy; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Default quorum factory. This is the default for the CE. The EE supports also the concept of data-centers. * * @author Luca Garulli (l.garulli--at--orientdb.com) */ public class ODefaultDistributedStrategy implements ODistributedStrategy { @Override public void validateConfiguration(ODistributedConfiguration cfg) { if (cfg.hasDataCenterConfiguration()) throw new OConfigurationException("Data center configuration is supported only in OrientDB Enterprise Edition"); if (cfg.isLocalDataCenterWriteQuorum()) throw new OConfigurationException( "Quorum of type '" + ODistributedConfiguration.QUORUM_LOCAL_DC + "' is supported only in OrientDB Enterprise Edition"); } @Override public Set<String> getNodesConcurInQuorum(final ODistributedServerManager manager, final ODistributedConfiguration cfg, final ODistributedRequest request, final Collection<String> iNodes, final String databaseName, final Object localResult) { final Set<String> nodesConcurToTheQuorum = new HashSet<String>(); if (request.getTask().getQuorumType() == OCommandDistributedReplicateRequest.QUORUM_TYPE.WRITE) { // ONLY MASTER NODES CONCUR TO THE MINIMUM QUORUM for (String node : iNodes) { if (cfg.getServerRole(node) == ODistributedConfiguration.ROLES.MASTER) nodesConcurToTheQuorum.add(node); } if (localResult != null && cfg.getServerRole(manager.getLocalNodeName()) == ODistributedConfiguration.ROLES.MASTER) // INCLUDE LOCAL NODE TOO nodesConcurToTheQuorum.add(manager.getLocalNodeName()); } else { // ALL NODES CONCUR TO THE MINIMUM QUORUM nodesConcurToTheQuorum.addAll(iNodes); if (localResult != null) // INCLUDE LOCAL NODE TOO nodesConcurToTheQuorum.add(manager.getLocalNodeName()); } manager.getAvailableNodes(nodesConcurToTheQuorum, databaseName); return nodesConcurToTheQuorum; } }