%PDF- %PDF-
Direktori : /home/waritko/yacy/source/net/yacy/cora/federate/solr/instance/ |
Current File : //home/waritko/yacy/source/net/yacy/cora/federate/solr/instance/ShardInstance.java |
/** * ShardInstance * Copyright 2013 by Michael Peter Christen * First released 13.02.2013 at http://yacy.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program in the file lgpl21.txt * If not, see <http://www.gnu.org/licenses/>. */ package net.yacy.cora.federate.solr.instance; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import net.yacy.cora.federate.solr.connector.ShardSelection; import org.apache.solr.client.solrj.SolrClient; public class ShardInstance implements SolrInstance { private final ArrayList<RemoteInstance> instances; private final ShardSelection.Method method; private SolrClient defaultServer; private Map<String, SolrClient> serverCache; private final boolean writeEnabled; public ShardInstance(final ArrayList<RemoteInstance> instances, final ShardSelection.Method method, final boolean writeEnabled) { this.instances = instances; this.method = method; this.writeEnabled = writeEnabled; this.defaultServer = null; this.serverCache = new ConcurrentHashMap<String, SolrClient>(); } @Override public String getDefaultCoreName() { return instances.get(0).getDefaultCoreName(); } @Override public Collection<String> getCoreNames() { return instances.get(0).getCoreNames(); } @Override public SolrClient getDefaultServer() { if (this.defaultServer != null) return this.defaultServer; ArrayList<SolrClient> server = new ArrayList<SolrClient>(instances.size()); for (int i = 0; i < instances.size(); i++) server.set(i, instances.get(i).getDefaultServer()); this.defaultServer = new ServerShard(server, method, this.writeEnabled); return this.defaultServer; } @Override public SolrClient getServer(String name) { SolrClient s = serverCache.get(name); if (s != null) return s; ArrayList<SolrClient> server = new ArrayList<SolrClient>(instances.size()); for (int i = 0; i < instances.size(); i++) server.add(i, instances.get(i).getServer(name)); s = new ServerShard(server, method, this.writeEnabled); this.serverCache.put(name, s); return s; } @Override public void close() { for (RemoteInstance instance: instances) instance.close(); } /** * @param toExternalAddress * when true, try to replace the eventual loopback host part of the * Solr instances URLs with the external host name of the hosting machine * @param externalHost * the eventual external host name or address to use when * toExternalAddress is true * @return the administration URLs of the Solr instances */ public ArrayList<String> getAdminInterfaces(final boolean toExternalAddress, final String externalHost) { ArrayList<String> a = new ArrayList<String>(); for (RemoteInstance i: this.instances) a.add(i.getAdminInterface(toExternalAddress, externalHost)); return a; } }