You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/02/09 00:53:25 UTC
svn commit: r1658277 [18/38] - in /lucene/dev/branches/lucene6005: ./
dev-tools/ dev-tools/idea/solr/contrib/dataimporthandler/
dev-tools/idea/solr/contrib/velocity/ dev-tools/maven/lucene/replicator/
dev-tools/maven/solr/ dev-tools/maven/solr/contrib/...
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/ZkController.java Sun Feb 8 23:53:14 2015
@@ -50,7 +50,6 @@ import org.apache.solr.core.CloseHook;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.handler.component.ShardHandler;
import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.UpdateShardHandler;
@@ -614,15 +613,13 @@ public final class ZkController {
ShardHandler shardHandler;
UpdateShardHandler updateShardHandler;
- String adminPath;
shardHandler = cc.getShardHandlerFactory().getShardHandler();
updateShardHandler = cc.getUpdateShardHandler();
- adminPath = cc.getAdminPath();
if (!zkRunOnly) {
overseerElector = new LeaderElector(zkClient);
this.overseer = new Overseer(shardHandler, updateShardHandler,
- adminPath, zkStateReader, this, cc.getConfig());
+ CoreContainer.CORES_HANDLER_PATH, zkStateReader, this, cc.getConfig());
ElectionContext context = new OverseerElectionContext(zkClient,
overseer, getNodeName());
overseerElector.setup(context);
@@ -855,12 +852,10 @@ public final class ZkController {
// Restore the interrupted status
Thread.currentThread().interrupt();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
- } catch (KeeperException e) {
- throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
- } catch (IOException e) {
+ } catch (KeeperException | IOException e) {
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
}
-
+
// in this case, we want to wait for the leader as long as the leader might
// wait for a vote, at least - but also long enough that a large cluster has
@@ -1636,9 +1631,7 @@ public final class ZkController {
log.info("Replica "+myCoreNodeName+
" NOT in leader-initiated recovery, need to wait for leader to see down state.");
- HttpSolrClient client = null;
- client = new HttpSolrClient(leaderBaseUrl);
- try {
+ try (HttpSolrClient client = new HttpSolrClient(leaderBaseUrl)) {
client.setConnectionTimeout(15000);
client.setSoTimeout(120000);
WaitForState prepCmd = new WaitForState();
@@ -1689,8 +1682,8 @@ public final class ZkController {
}
}
}
- } finally {
- client.shutdown();
+ } catch (IOException e) {
+ SolrException.log(log, "Error closing HttpSolrClient", e);
}
}
}
@@ -2023,14 +2016,10 @@ public final class ZkController {
stateData = zkClient.getData(znodePath, null, new Stat(), false);
} catch (NoNodeException ignoreMe) {
// safe to ignore as this znode will only exist if the leader initiated recovery
- } catch (ConnectionLossException cle) {
+ } catch (ConnectionLossException | SessionExpiredException cle) {
// sort of safe to ignore ??? Usually these are seen when the core is going down
// or there are bigger issues to deal with than reading this znode
log.warn("Unable to read "+znodePath+" due to: "+cle);
- } catch (SessionExpiredException see) {
- // sort of safe to ignore ??? Usually these are seen when the core is going down
- // or there are bigger issues to deal with than reading this znode
- log.warn("Unable to read "+znodePath+" due to: "+see);
} catch (Exception exc) {
log.error("Failed to read data from znode "+znodePath+" due to: "+exc);
if (exc instanceof SolrException) {
@@ -2151,10 +2140,9 @@ public final class ZkController {
*
* @return true on success
*/
- public static boolean persistConfigResourceToZooKeeper( SolrResourceLoader loader, int znodeVersion ,
+ public static boolean persistConfigResourceToZooKeeper( ZkSolrResourceLoader zkLoader, int znodeVersion ,
String resourceName, byte[] content,
boolean createIfNotExists) {
- final ZkSolrResourceLoader zkLoader = (ZkSolrResourceLoader)loader;
final ZkController zkController = zkLoader.getZkController();
final SolrZkClient zkClient = zkController.getZkClient();
final String resourceLocation = zkLoader.getConfigSetZkPath() + "/" + resourceName;
@@ -2162,12 +2150,12 @@ public final class ZkController {
try {
try {
zkClient.setData(resourceLocation , content,znodeVersion, true);
- zkClient.setData(zkLoader.getConfigSetZkPath(),new byte[]{0},true);
+ touchConfDir(zkLoader);
} catch (NoNodeException e) {
if(createIfNotExists){
try {
zkClient.create(resourceLocation,content, CreateMode.PERSISTENT,true);
- zkClient.setData(zkLoader.getConfigSetZkPath(), new byte[]{0}, true);
+ touchConfDir(zkLoader);
} catch (KeeperException.NodeExistsException nee) {
try {
Stat stat = zkClient.exists(resourceLocation, null, true);
@@ -2206,6 +2194,21 @@ public final class ZkController {
return true;
}
+ public static void touchConfDir(ZkSolrResourceLoader zkLoader) {
+ SolrZkClient zkClient = zkLoader.getZkController().getZkClient();
+ try {
+ zkClient.setData(zkLoader.getConfigSetZkPath(),new byte[]{0},true);
+ } catch (Exception e) {
+ if (e instanceof InterruptedException) {
+ Thread.currentThread().interrupt(); // Restore the interrupted status
+ }
+ final String msg = "Error 'touching' conf location " + zkLoader.getConfigSetZkPath();
+ log.error(msg, e);
+ throw new SolrException(ErrorCode.SERVER_ERROR, msg, e);
+
+ }
+ }
+
public static class ResourceModifiedInZkException extends SolrException {
public ResourceModifiedInZkException(ErrorCode code, String msg) {
super(code, msg);
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java Sun Feb 8 23:53:14 2015
@@ -17,7 +17,6 @@ package org.apache.solr.cloud.overseer;
* limitations under the License.
*/
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -151,7 +150,7 @@ public class ZkStateWriter {
// let's clean up the collections path for this collection
reader.getZkClient().clean("/collections/" + name);
} else if (c.getStateFormat() > 1) {
- byte[] data = ZkStateReader.toJSON(new ClusterState(-1, Collections.<String>emptySet(), singletonMap(c.getName(), c)));
+ byte[] data = ZkStateReader.toJSON(singletonMap(c.getName(),c));
if (reader.getZkClient().exists(path, true)) {
assert c.getZNodeVersion() >= 0;
log.info("going to update_collection {} version: {}", path, c.getZNodeVersion());
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java Sun Feb 8 23:53:14 2015
@@ -36,7 +36,6 @@ import org.apache.lucene.store.LockFacto
import org.apache.lucene.store.NRTCachingDirectory;
import org.apache.lucene.store.NativeFSLockFactory;
import org.apache.lucene.store.NoLockFactory;
-import org.apache.lucene.store.RateLimitedDirectoryWrapper;
import org.apache.lucene.store.SimpleFSLockFactory;
import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.lucene.util.IOUtils;
@@ -350,7 +349,6 @@ public abstract class CachingDirectoryFa
directory = create(fullPath, createLockFactory(rawLockType), dirContext);
boolean success = false;
try {
- directory = rateLimit(directory);
CacheValue newCacheValue = new CacheValue(fullPath, directory);
byDirectoryCache.put(directory, newCacheValue);
byPathCache.put(fullPath, newCacheValue);
@@ -370,25 +368,6 @@ public abstract class CachingDirectoryFa
}
}
- private Directory rateLimit(Directory directory) {
- if (maxWriteMBPerSecDefault != null || maxWriteMBPerSecFlush != null || maxWriteMBPerSecMerge != null || maxWriteMBPerSecRead != null) {
- directory = new RateLimitedDirectoryWrapper(directory);
- if (maxWriteMBPerSecDefault != null) {
- ((RateLimitedDirectoryWrapper)directory).setMaxWriteMBPerSec(maxWriteMBPerSecDefault, Context.DEFAULT);
- }
- if (maxWriteMBPerSecFlush != null) {
- ((RateLimitedDirectoryWrapper)directory).setMaxWriteMBPerSec(maxWriteMBPerSecFlush, Context.FLUSH);
- }
- if (maxWriteMBPerSecMerge != null) {
- ((RateLimitedDirectoryWrapper)directory).setMaxWriteMBPerSec(maxWriteMBPerSecMerge, Context.MERGE);
- }
- if (maxWriteMBPerSecRead != null) {
- ((RateLimitedDirectoryWrapper)directory).setMaxWriteMBPerSec(maxWriteMBPerSecRead, Context.READ);
- }
- }
- return directory;
- }
-
/*
* (non-Javadoc)
*
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/Config.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/Config.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/Config.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/Config.java Sun Feb 8 23:53:14 2015
@@ -20,6 +20,7 @@ package org.apache.solr.core;
import org.apache.lucene.util.Version;
import org.apache.solr.cloud.ZkSolrResourceLoader;
import org.apache.solr.common.SolrException;
+import org.apache.solr.update.SolrIndexConfig;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.util.SystemIdResolver;
import org.apache.solr.common.util.XMLErrorLogger;
@@ -150,18 +151,27 @@ public class Config {
if (substituteProps) {
DOMUtil.substituteProperties(doc, getSubstituteProperties());
}
- } catch (ParserConfigurationException e) {
- SolrException.log(log, "Exception during parsing file: " + name, e);
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- } catch (SAXException e) {
- SolrException.log(log, "Exception during parsing file: " + name, e);
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- } catch (TransformerException e) {
+ } catch (ParserConfigurationException | SAXException | TransformerException e) {
SolrException.log(log, "Exception during parsing file: " + name, e);
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
}
}
+ /*
+ * Assert that assertCondition is true.
+ * If not, prints reason as log warning.
+ * If failCondition is true, then throw exception instead of warning
+ */
+ public static void assertWarnOrFail(String reason, boolean assertCondition, boolean failCondition) {
+ if (assertCondition) {
+ return;
+ } else if (failCondition) {
+ throw new SolrException(SolrException.ErrorCode.FORBIDDEN, reason);
+ } else {
+ log.warn(reason);
+ }
+ }
+
protected Properties getSubstituteProperties() {
return loader.getCoreProperties();
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java Sun Feb 8 23:53:14 2015
@@ -75,6 +75,7 @@ public class ConfigOverlay implements Ma
for (int i = 0; i < hierarchy.size(); i++) {
String s = hierarchy.get(i);
if(i < hierarchy.size()-1){
+ if (!(obj.get(s) instanceof Map)) return null;
obj = (Map) obj.get(s);
if(obj == null) return null;
} else {
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolr.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolr.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolr.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolr.java Sun Feb 8 23:53:14 2015
@@ -22,24 +22,15 @@ import org.apache.solr.cloud.CloudConfig
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.SolrException;
import org.apache.solr.logging.LogWatcherConfig;
-import org.apache.solr.util.DOMUtil;
-import org.apache.solr.util.PropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Properties;
@@ -73,10 +64,9 @@ public abstract class ConfigSolr {
public static ConfigSolr fromInputStream(SolrResourceLoader loader, InputStream is) {
try {
byte[] buf = IOUtils.toByteArray(is);
- String originalXml = new String(buf, StandardCharsets.UTF_8);
try (ByteArrayInputStream dup = new ByteArrayInputStream(buf)) {
Config config = new Config(loader, null, new InputSource(dup), null, false);
- return fromConfig(config, originalXml);
+ return new ConfigSolrXml(config);
}
} catch (SolrException exc) {
throw exc;
@@ -88,12 +78,6 @@ public abstract class ConfigSolr {
public static ConfigSolr fromSolrHome(SolrResourceLoader loader, String solrHome) {
return fromFile(loader, new File(solrHome, SOLR_XML_FILE));
}
-
- public static ConfigSolr fromConfig(Config config, String originalXml) {
- boolean oldStyle = (config.getNode("solr/cores", false) != null);
- return oldStyle ? new ConfigSolrXmlOld(config, originalXml)
- : new ConfigSolrXml(config);
- }
public abstract CoresLocator getCoresLocator();
@@ -105,32 +89,26 @@ public abstract class ConfigSolr {
* @return core root directory
*/
public String getCoreRootDirectory() {
- SolrResourceLoader loader = config.getResourceLoader();
- String relativeDir = get(CfgProp.SOLR_COREROOTDIRECTORY, null);
+ String relativeDir = getString(CfgProp.SOLR_COREROOTDIRECTORY, null);
if (relativeDir != null)
return loader.resolve(relativeDir);
return loader.getInstanceDir();
}
- public PluginInfo getShardHandlerFactoryPluginInfo() {
- Node node = config.getNode(getShardHandlerFactoryConfigPath(), false);
- return (node == null) ? null : new PluginInfo(node, "shardHandlerFactory", false, true);
- }
-
- protected abstract String getShardHandlerFactoryConfigPath();
+ public abstract PluginInfo getShardHandlerFactoryPluginInfo();
public String getZkHost() {
String sysZkHost = System.getProperty("zkHost");
if (sysZkHost != null)
return sysZkHost;
- return get(CfgProp.SOLR_ZKHOST, null);
+ return getString(CfgProp.SOLR_ZKHOST, null);
}
public int getZkClientTimeout() {
String sysProp = System.getProperty("zkClientTimeout");
if (sysProp != null)
return Integer.parseInt(sysProp);
- return get(CfgProp.SOLR_ZKCLIENTTIMEOUT, DEFAULT_ZK_CLIENT_TIMEOUT);
+ return getInt(CfgProp.SOLR_ZKCLIENTTIMEOUT, DEFAULT_ZK_CLIENT_TIMEOUT);
}
private static final int DEFAULT_ZK_CLIENT_TIMEOUT = 15000;
@@ -142,124 +120,117 @@ public abstract class ConfigSolr {
private static final int DEFAULT_AUTO_REPLICA_FAILOVER_WAIT_AFTER_EXPIRATION = 30000;
private static final int DEFAULT_AUTO_REPLICA_FAILOVER_WORKLOOP_DELAY = 10000;
private static final int DEFAULT_AUTO_REPLICA_FAILOVER_BAD_NODE_EXPIRATION = 60000;
+
+ public static final int DEFAULT_DISTRIBUPDATECONNTIMEOUT = 60000;
+ public static final int DEFAULT_DISTRIBUPDATESOTIMEOUT = 600000;
protected static final String DEFAULT_CORE_ADMIN_PATH = "/admin/cores";
public String getSolrHostPort() {
- return get(CfgProp.SOLR_HOSTPORT, null);
+ return getString(CfgProp.SOLR_HOSTPORT, null);
}
public String getZkHostContext() {
- return get(CfgProp.SOLR_HOSTCONTEXT, null);
+ return getString(CfgProp.SOLR_HOSTCONTEXT, null);
}
public String getHost() {
- return get(CfgProp.SOLR_HOST, null);
+ return getString(CfgProp.SOLR_HOST, null);
}
public int getLeaderVoteWait() {
- return get(CfgProp.SOLR_LEADERVOTEWAIT, DEFAULT_LEADER_VOTE_WAIT);
+ return getInt(CfgProp.SOLR_LEADERVOTEWAIT, DEFAULT_LEADER_VOTE_WAIT);
}
public int getLeaderConflictResolveWait() {
- return get(CfgProp.SOLR_LEADERCONFLICTRESOLVEWAIT, DEFAULT_LEADER_CONFLICT_RESOLVE_WAIT);
+ return getInt(CfgProp.SOLR_LEADERCONFLICTRESOLVEWAIT, DEFAULT_LEADER_CONFLICT_RESOLVE_WAIT);
}
public int getAutoReplicaFailoverWaitAfterExpiration() {
- return get(CfgProp.SOLR_AUTOREPLICAFAILOVERWAITAFTEREXPIRATION, DEFAULT_AUTO_REPLICA_FAILOVER_WAIT_AFTER_EXPIRATION);
+ return getInt(CfgProp.SOLR_AUTOREPLICAFAILOVERWAITAFTEREXPIRATION, DEFAULT_AUTO_REPLICA_FAILOVER_WAIT_AFTER_EXPIRATION);
}
public int getAutoReplicaFailoverWorkLoopDelay() {
- return get(CfgProp.SOLR_AUTOREPLICAFAILOVERWORKLOOPDELAY, DEFAULT_AUTO_REPLICA_FAILOVER_WORKLOOP_DELAY);
+ return getInt(CfgProp.SOLR_AUTOREPLICAFAILOVERWORKLOOPDELAY, DEFAULT_AUTO_REPLICA_FAILOVER_WORKLOOP_DELAY);
}
public int getAutoReplicaFailoverBadNodeExpiration() {
- return get(CfgProp.SOLR_AUTOREPLICAFAILOVERBADNODEEXPIRATION, DEFAULT_AUTO_REPLICA_FAILOVER_BAD_NODE_EXPIRATION);
+ return getInt(CfgProp.SOLR_AUTOREPLICAFAILOVERBADNODEEXPIRATION, DEFAULT_AUTO_REPLICA_FAILOVER_BAD_NODE_EXPIRATION);
}
public boolean getGenericCoreNodeNames() {
- return get(CfgProp.SOLR_GENERICCORENODENAMES, false);
+ return getBoolean(CfgProp.SOLR_GENERICCORENODENAMES, false);
}
public int getDistributedConnectionTimeout() {
- return get(CfgProp.SOLR_DISTRIBUPDATECONNTIMEOUT, 0);
+ return getInt(CfgProp.SOLR_DISTRIBUPDATECONNTIMEOUT, DEFAULT_DISTRIBUPDATECONNTIMEOUT);
}
public int getDistributedSocketTimeout() {
- return get(CfgProp.SOLR_DISTRIBUPDATESOTIMEOUT, 0);
+ return getInt(CfgProp.SOLR_DISTRIBUPDATESOTIMEOUT, DEFAULT_DISTRIBUPDATESOTIMEOUT);
}
public int getMaxUpdateConnections() {
- return get(CfgProp.SOLR_MAXUPDATECONNECTIONS, 10000);
+ return getInt(CfgProp.SOLR_MAXUPDATECONNECTIONS, 10000);
}
public int getMaxUpdateConnectionsPerHost() {
- return get(CfgProp.SOLR_MAXUPDATECONNECTIONSPERHOST, 100);
+ return getInt(CfgProp.SOLR_MAXUPDATECONNECTIONSPERHOST, 100);
}
public int getCoreLoadThreadCount() {
- return get(ConfigSolr.CfgProp.SOLR_CORELOADTHREADS, DEFAULT_CORE_LOAD_THREADS);
+ return getInt(ConfigSolr.CfgProp.SOLR_CORELOADTHREADS, DEFAULT_CORE_LOAD_THREADS);
}
public String getSharedLibDirectory() {
- return get(ConfigSolr.CfgProp.SOLR_SHAREDLIB , null);
- }
-
- public String getDefaultCoreName() {
- return get(CfgProp.SOLR_CORES_DEFAULT_CORE_NAME, null);
- }
-
- public abstract boolean isPersistent();
-
- public String getAdminPath() {
- return get(CfgProp.SOLR_ADMINPATH, DEFAULT_CORE_ADMIN_PATH);
+ return getString(ConfigSolr.CfgProp.SOLR_SHAREDLIB, null);
}
public String getCoreAdminHandlerClass() {
- return get(CfgProp.SOLR_ADMINHANDLER, "org.apache.solr.handler.admin.CoreAdminHandler");
+ return getString(CfgProp.SOLR_ADMINHANDLER, "org.apache.solr.handler.admin.CoreAdminHandler");
}
public String getZkCredentialsProviderClass() {
- return get(CfgProp.SOLR_ZKCREDENTIALSPROVIDER, null);
+ return getString(CfgProp.SOLR_ZKCREDENTIALSPROVIDER, null);
}
public String getZkACLProviderClass() {
- return get(CfgProp.SOLR_ZKACLPROVIDER, null);
+ return getString(CfgProp.SOLR_ZKACLPROVIDER, null);
}
public String getCollectionsHandlerClass() {
- return get(CfgProp.SOLR_COLLECTIONSHANDLER, "org.apache.solr.handler.admin.CollectionsHandler");
+ return getString(CfgProp.SOLR_COLLECTIONSHANDLER, "org.apache.solr.handler.admin.CollectionsHandler");
}
public String getInfoHandlerClass() {
- return get(CfgProp.SOLR_INFOHANDLER, "org.apache.solr.handler.admin.InfoHandler");
+ return getString(CfgProp.SOLR_INFOHANDLER, "org.apache.solr.handler.admin.InfoHandler");
}
public boolean hasSchemaCache() {
- return get(ConfigSolr.CfgProp.SOLR_SHARESCHEMA, false);
+ return getBoolean(ConfigSolr.CfgProp.SOLR_SHARESCHEMA, false);
}
public String getManagementPath() {
- return get(CfgProp.SOLR_MANAGEMENTPATH, null);
+ return getString(CfgProp.SOLR_MANAGEMENTPATH, null);
}
public String getConfigSetBaseDirectory() {
- return get(CfgProp.SOLR_CONFIGSETBASEDIR, "configsets");
+ return getString(CfgProp.SOLR_CONFIGSETBASEDIR, "configsets");
}
public LogWatcherConfig getLogWatcherConfig() {
- String loggingClass = get(CfgProp.SOLR_LOGGING_CLASS, null);
- String loggingWatcherThreshold = get(CfgProp.SOLR_LOGGING_WATCHER_THRESHOLD, null);
+ String loggingClass = getString(CfgProp.SOLR_LOGGING_CLASS, null);
+ String loggingWatcherThreshold = getString(CfgProp.SOLR_LOGGING_WATCHER_THRESHOLD, null);
return new LogWatcherConfig(
- get(CfgProp.SOLR_LOGGING_ENABLED, true),
+ getBoolean(CfgProp.SOLR_LOGGING_ENABLED, true),
loggingClass,
loggingWatcherThreshold,
- get(CfgProp.SOLR_LOGGING_WATCHER_SIZE, 50)
+ getInt(CfgProp.SOLR_LOGGING_WATCHER_SIZE, 50)
);
}
public int getTransientCacheSize() {
- return get(CfgProp.SOLR_TRANSIENTCACHESIZE, Integer.MAX_VALUE);
+ return getInt(CfgProp.SOLR_TRANSIENTCACHESIZE, Integer.MAX_VALUE);
}
public ConfigSetService createCoreConfigService(SolrResourceLoader loader, ZkController zkController) {
@@ -271,7 +242,7 @@ public abstract class ConfigSolr {
}
// Ugly for now, but we'll at least be able to centralize all of the differences between 4x and 5x.
- protected static enum CfgProp {
+ public static enum CfgProp {
SOLR_ADMINHANDLER,
SOLR_COLLECTIONSHANDLER,
SOLR_CORELOADTHREADS,
@@ -305,59 +276,44 @@ public abstract class ConfigSolr {
SOLR_ZKCREDENTIALSPROVIDER,
SOLR_ZKACLPROVIDER,
-
- //TODO: Remove all of these elements for 5.0
- SOLR_PERSISTENT,
- SOLR_CORES_DEFAULT_CORE_NAME,
- SOLR_ADMINPATH
+
}
- protected Config config;
- protected Map<CfgProp, Object> propMap = new HashMap<>();
+ protected final SolrResourceLoader loader;
+ protected final Properties solrProperties;
- public ConfigSolr(Config config) {
- this.config = config;
- config.substituteProperties();
+ public ConfigSolr(SolrResourceLoader loader, Properties solrProperties) {
+ this.loader = loader;
+ this.solrProperties = solrProperties;
}
- // for extension & testing.
- protected ConfigSolr() {
-
+ public ConfigSolr(SolrResourceLoader loader) {
+ this(loader, new Properties());
}
-
- public Config getConfig() {
- return config;
+
+ protected abstract String getProperty(CfgProp key);
+
+ private String getString(CfgProp key, String defaultValue) {
+ String v = getProperty(key);
+ return v == null ? defaultValue : v;
}
- @SuppressWarnings("unchecked")
- public <T> T get(CfgProp key, T defaultValue) {
- if (propMap.containsKey(key) && propMap.get(key) != null) {
- return (T) propMap.get(key);
- }
- return defaultValue;
+ private int getInt(CfgProp key, int defaultValue) {
+ String v = getProperty(key);
+ return v == null ? defaultValue : Integer.parseInt(v);
}
- public Properties getSolrProperties(String path) {
- try {
- return readProperties(((NodeList) config.evaluate(
- path, XPathConstants.NODESET)).item(0));
- } catch (Exception e) {
- SolrException.log(log, null, e);
- }
- return null;
+ private boolean getBoolean(CfgProp key, boolean defaultValue) {
+ String v = getProperty(key);
+ return v == null ? defaultValue : Boolean.parseBoolean(v);
+ }
+ public Properties getSolrProperties() {
+ return solrProperties;
}
-
- protected Properties readProperties(Node node) throws XPathExpressionException {
- XPath xpath = config.getXPath();
- NodeList props = (NodeList) xpath.evaluate("property", node, XPathConstants.NODESET);
- Properties properties = new Properties();
- for (int i = 0; i < props.getLength(); i++) {
- Node prop = props.item(i);
- properties.setProperty(DOMUtil.getAttr(prop, "name"),
- PropertiesUtil.substituteProperty(DOMUtil.getAttr(prop, "value"), null));
- }
- return properties;
+
+ public SolrResourceLoader getSolrResourceLoader() {
+ return loader;
}
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java Sun Feb 8 23:53:14 2015
@@ -17,24 +17,26 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.util.DOMUtil;
-
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
+import org.apache.solr.util.PropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
-import java.io.IOException;
-import java.util.List;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
import java.util.ArrayList;
-import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
/**
@@ -45,51 +47,28 @@ public class ConfigSolrXml extends Confi
protected static Logger log = LoggerFactory.getLogger(ConfigSolrXml.class);
private final CoresLocator coresLocator;
+ private final Config config;
+ private final Map<CfgProp, Object> propMap = new HashMap<>();
public ConfigSolrXml(Config config) {
- super(config);
- try {
- checkForIllegalConfig();
- fillPropMap();
- coresLocator = new CorePropertiesLocator(getCoreRootDirectory());
- } catch (IOException e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- }
+ super(config.getResourceLoader(), loadProperties(config));
+ this.config = config;
+ this.config.substituteProperties();
+ checkForIllegalConfig();
+ fillPropMap();
+ coresLocator = new CorePropertiesLocator(getCoreRootDirectory());
}
- private void checkForIllegalConfig() throws IOException {
+ private void checkForIllegalConfig() {
- // Do sanity checks - we don't want to find old style config
failIfFound("solr/@coreLoadThreads");
failIfFound("solr/@persistent");
failIfFound("solr/@sharedLib");
failIfFound("solr/@zkHost");
- failIfFound("solr/logging/@class");
- failIfFound("solr/logging/@enabled");
- failIfFound("solr/logging/watcher/@size");
- failIfFound("solr/logging/watcher/@threshold");
-
- failIfFound("solr/cores/@adminHandler");
- failIfFound("solr/cores/@distribUpdateConnTimeout");
- failIfFound("solr/cores/@distribUpdateSoTimeout");
- failIfFound("solr/cores/@host");
- failIfFound("solr/cores/@hostContext");
- failIfFound("solr/cores/@hostPort");
- failIfFound("solr/cores/@leaderVoteWait");
- failIfFound("solr/cores/@leaderConflictResolveWait");
- failIfFound("solr/cores/@genericCoreNodeNames");
- failIfFound("solr/cores/@managementPath");
- failIfFound("solr/cores/@shareSchema");
- failIfFound("solr/cores/@transientCacheSize");
- failIfFound("solr/cores/@zkClientTimeout");
-
- // These have no counterpart in 5.0, asking for any of these in Solr 5.0
- // will result in an error being
- // thrown.
- failIfFound("solr/cores/@defaultCoreName");
+ failIfFound("solr/cores");
+
failIfFound("solr/@persistent");
- failIfFound("solr/cores/@adminPath");
}
@@ -97,7 +76,32 @@ public class ConfigSolrXml extends Confi
if (config.getVal(xPath, false) != null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Should not have found " + xPath +
- " solr.xml may be a mix of old and new style formats.");
+ "\n. Please upgrade your solr.xml: https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml");
+ }
+ }
+
+ protected String getProperty(CfgProp key) {
+ if (!propMap.containsKey(key) || propMap.get(key) == null)
+ return null;
+ return propMap.get(key).toString();
+ }
+
+ private static Properties loadProperties(Config config) {
+ try {
+ Node node = ((NodeList) config.evaluate("solr", XPathConstants.NODESET)).item(0);
+ XPath xpath = config.getXPath();
+ NodeList props = (NodeList) xpath.evaluate("property", node, XPathConstants.NODESET);
+ Properties properties = new Properties();
+ for (int i = 0; i < props.getLength(); i++) {
+ Node prop = props.item(i);
+ properties.setProperty(DOMUtil.getAttr(prop, "name"),
+ PropertiesUtil.substituteProperty(DOMUtil.getAttr(prop, "value"), null));
+ }
+ return properties;
+ }
+ catch (XPathExpressionException e) {
+ log.warn("Error parsing solr.xml: " + e.getMessage());
+ return null;
}
}
@@ -247,24 +251,9 @@ public class ConfigSolrXml extends Confi
}
}
- @Override
- public String getDefaultCoreName() {
- return "collection1";
- }
-
- @Override
- public boolean isPersistent() {
- return true;
- }
-
- @Override
- protected String getShardHandlerFactoryConfigPath() {
- return "solr/shardHandlerFactory";
- }
-
- @Override
- public String getAdminPath() {
- return DEFAULT_CORE_ADMIN_PATH;
+ public PluginInfo getShardHandlerFactoryPluginInfo() {
+ Node node = config.getNode("solr/shardHandlerFactory", false);
+ return (node == null) ? null : new PluginInfo(node, "shardHandlerFactory", false, true);
}
@Override
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreContainer.java Sun Feb 8 23:53:14 2015
@@ -17,21 +17,8 @@
package org.apache.solr.core;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.cloud.ZkSolrResourceLoader;
import org.apache.solr.common.SolrException;
@@ -51,8 +38,20 @@ import org.apache.zookeeper.KeeperExcept
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import static com.google.common.base.Preconditions.checkNotNull;
/**
@@ -102,9 +101,14 @@ public class CoreContainer {
protected final CoresLocator coresLocator;
private String hostName;
+
private final JarRepository jarRepository = new JarRepository(this);
-
- private Map<String ,SolrRequestHandler> containerHandlers = new HashMap<>();
+
+ public static final String CORES_HANDLER_PATH = "/admin/cores";
+ public static final String COLLECTIONS_HANDLER_PATH = "/admin/collections";
+ public static final String INFO_HANDLER_PATH = "/admin/info";
+
+ private Map<String, SolrRequestHandler> containerHandlers = new HashMap<>();
public SolrRequestHandler getRequestHandler(String path) {
return RequestHandlerBase.getRequestHandler(path, containerHandlers);
@@ -112,7 +116,6 @@ public class CoreContainer {
public Map<String, SolrRequestHandler> getRequestHandlers(){
return this.containerHandlers;
-
}
// private ClientConnectionManager clientConnectionManager = new PoolingClientConnectionManager();
@@ -137,7 +140,7 @@ public class CoreContainer {
* @see #load()
*/
public CoreContainer(SolrResourceLoader loader) {
- this(loader, ConfigSolr.fromSolrHome(loader, loader.getInstanceDir()));
+ this(ConfigSolr.fromSolrHome(loader, loader.getInstanceDir()));
}
/**
@@ -154,19 +157,15 @@ public class CoreContainer {
* Create a new CoreContainer using the given SolrResourceLoader,
* configuration and CoresLocator. The container's cores are
* not loaded.
- * @param loader the SolrResourceLoader
* @param config a ConfigSolr representation of this container's configuration
* @see #load()
*/
- public CoreContainer(SolrResourceLoader loader, ConfigSolr config) {
- this.loader = checkNotNull(loader);
- this.solrHome = loader.getInstanceDir();
- this.cfg = checkNotNull(config);
- this.coresLocator = config.getCoresLocator();
+ public CoreContainer(ConfigSolr config) {
+ this(config, config.getCoresLocator());
}
- public CoreContainer(SolrResourceLoader loader, ConfigSolr config, CoresLocator locator) {
- this.loader = checkNotNull(loader);
+ public CoreContainer(ConfigSolr config, CoresLocator locator) {
+ this.loader = config.getSolrResourceLoader();
this.solrHome = loader.getInstanceDir();
this.cfg = checkNotNull(config);
this.coresLocator = locator;
@@ -194,8 +193,13 @@ public class CoreContainer {
*/
public static CoreContainer createAndLoad(String solrHome, File configFile) {
SolrResourceLoader loader = new SolrResourceLoader(solrHome);
- CoreContainer cc = new CoreContainer(loader, ConfigSolr.fromFile(loader, configFile));
- cc.load();
+ CoreContainer cc = new CoreContainer(ConfigSolr.fromFile(loader, configFile));
+ try {
+ cc.load();
+ } catch (Exception e) {
+ cc.shutdown();
+ throw e;
+ }
return cc;
}
@@ -238,15 +242,15 @@ public class CoreContainer {
zkSys.initZooKeeper(this, solrHome, cfg);
collectionsHandler = createHandler(cfg.getCollectionsHandlerClass(), CollectionsHandler.class);
- containerHandlers.put("/admin/collections" , collectionsHandler);
+ containerHandlers.put(COLLECTIONS_HANDLER_PATH, collectionsHandler);
infoHandler = createHandler(cfg.getInfoHandlerClass(), InfoHandler.class);
- containerHandlers.put("/admin/info" , infoHandler);
+ containerHandlers.put(INFO_HANDLER_PATH, infoHandler);
coreAdminHandler = createHandler(cfg.getCoreAdminHandlerClass(), CoreAdminHandler.class);
- containerHandlers.put(cfg.getAdminPath() , coreAdminHandler);
+ containerHandlers.put(CORES_HANDLER_PATH, coreAdminHandler);
coreConfigService = cfg.createCoreConfigService(loader, zkSys.getZkController());
- containerProperties = cfg.getSolrProperties("solr");
+ containerProperties = cfg.getSolrProperties();
// setup executor to load cores in parallel
// do not limit the size of the executor in zk mode since cores may try and wait for each other.
@@ -341,10 +345,9 @@ public class CoreContainer {
}
try {
- coreAdminHandler.shutdown();
+ if (coreAdminHandler != null) coreAdminHandler.shutdown();
} catch (Exception e) {
- log.warn("Error shutting down CoreAdminHandler. Continuing to close CoreContainer.");
- e.printStackTrace();
+ log.warn("Error shutting down CoreAdminHandler. Continuing to close CoreContainer.", e);
}
try {
@@ -519,11 +522,15 @@ public class CoreContainer {
return core;
- }
- catch (Exception e) {
+ } catch (Exception e) {
coreInitFailures.put(dcore.getName(), new CoreLoadFailure(dcore, e));
log.error("Error creating core [{}]: {}", dcore.getName(), e.getMessage(), e);
throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to create core [" + dcore.getName() + "]", e);
+ } catch (Throwable t) {
+ SolrException e = new SolrException(ErrorCode.SERVER_ERROR, "JVM Error creating core [" + dcore.getName() + "]: " + t.getMessage(), t);
+ log.error("Error creating core [{}]: {}", dcore.getName(), t.getMessage(), t);
+ coreInitFailures.put(dcore.getName(), new CoreLoadFailure(dcore, e));
+ throw t;
}
}
@@ -591,8 +598,6 @@ public class CoreContainer {
*/
public void reload(String name) {
- name = checkDefault(name);
-
SolrCore core = solrCores.getCoreFromAnyList(name, false);
if (core == null)
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "No such core: " + name );
@@ -615,11 +620,6 @@ public class CoreContainer {
}
- //5.0 remove all checkDefaults?
- private String checkDefault(String name) {
- return (null == name || name.isEmpty()) ? getDefaultCoreName() : name;
- }
-
/**
* Swaps two SolrCore descriptors.
*/
@@ -627,8 +627,6 @@ public class CoreContainer {
if( n0 == null || n1 == null ) {
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Can not swap unnamed cores." );
}
- n0 = checkDefault(n0);
- n1 = checkDefault(n1);
solrCores.swap(n0, n1);
coresLocator.swap(this, solrCores.getCoreDescriptor(n0), solrCores.getCoreDescriptor(n1));
@@ -654,8 +652,6 @@ public class CoreContainer {
*/
public void unload(String name, boolean deleteIndexDir, boolean deleteDataDir, boolean deleteInstanceDir) {
- name = checkDefault(name);
-
// check for core-init errors first
CoreLoadFailure loadFailure = coreInitFailures.remove(name);
if (loadFailure != null) {
@@ -707,7 +703,6 @@ public class CoreContainer {
try (SolrCore core = getCore(name)) {
if (core != null) {
registerCore(toName, core, true);
- name = checkDefault(name);
SolrCore old = solrCores.remove(name);
coresLocator.rename(this, old.getCoreDescriptor(), core.getCoreDescriptor());
}
@@ -745,8 +740,6 @@ public class CoreContainer {
*/
public SolrCore getCore(String name) {
- name = checkDefault(name);
-
// Do this in two phases since we don't want to lock access to the cores over a load.
SolrCore core = solrCores.getCoreFromAnyList(name, true);
@@ -813,26 +806,6 @@ public class CoreContainer {
return infoHandler;
}
- // ---------------- Multicore self related methods ---------------
-
- /**
- * the default core name, or null if there is no default core name
- */
- public String getDefaultCoreName() {
- return cfg.getDefaultCoreName();
- }
-
- // all of the following properties aren't synchronized
- // but this should be OK since they normally won't be changed rapidly
- @Deprecated
- public boolean isPersistent() {
- return cfg.isPersistent();
- }
-
- public String getAdminPath() {
- return cfg.getAdminPath();
- }
-
public String getHostName() {
return this.hostName;
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java Sun Feb 8 23:53:14 2015
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUti
import org.apache.solr.cloud.CloudDescriptor;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.util.PropertiesUtil;
import java.io.File;
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java Sun Feb 8 23:53:14 2015
@@ -18,8 +18,9 @@ package org.apache.solr.core;
*/
import com.google.common.collect.Lists;
+
import org.apache.solr.common.SolrException;
-import org.apache.solr.util.IOUtils;
+import org.apache.solr.common.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java Sun Feb 8 23:53:14 2015
@@ -21,6 +21,7 @@ import static org.apache.hadoop.fs.Commo
import java.io.IOException;
import java.net.URI;
+import java.net.URL;
import java.net.URLEncoder;
import java.util.Locale;
@@ -37,6 +38,7 @@ import org.apache.solr.cloud.ZkControlle
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.store.blockcache.BlockCache;
import org.apache.solr.store.blockcache.BlockDirectory;
@@ -47,11 +49,10 @@ import org.apache.solr.store.blockcache.
import org.apache.solr.store.hdfs.HdfsDirectory;
import org.apache.solr.store.hdfs.HdfsLockFactory;
import org.apache.solr.util.HdfsUtil;
-import org.apache.solr.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class HdfsDirectoryFactory extends CachingDirectoryFactory {
+public class HdfsDirectoryFactory extends CachingDirectoryFactory implements SolrInfoMBean {
public static Logger LOG = LoggerFactory
.getLogger(HdfsDirectoryFactory.class);
@@ -60,7 +61,7 @@ public class HdfsDirectoryFactory extend
public static final String BLOCKCACHE_ENABLED = "solr.hdfs.blockcache.enabled";
public static final String BLOCKCACHE_GLOBAL = "solr.hdfs.blockcache.global";
public static final String BLOCKCACHE_READ_ENABLED = "solr.hdfs.blockcache.read.enabled";
- public static final String BLOCKCACHE_WRITE_ENABLED = "solr.hdfs.blockcache.write.enabled";
+ public static final String BLOCKCACHE_WRITE_ENABLED = "solr.hdfs.blockcache.write.enabled"; // currently buggy and disabled
public static final String NRTCACHINGDIRECTORY_ENABLE = "solr.hdfs.nrtcachingdirectory.enable";
public static final String NRTCACHINGDIRECTORY_MAXMERGESIZEMB = "solr.hdfs.nrtcachingdirectory.maxmergesizemb";
@@ -86,16 +87,22 @@ public class HdfsDirectoryFactory extend
public static Metrics metrics;
private static Boolean kerberosInit;
+ private final static class MetricsHolder {
+ // [JCIP SE, Goetz, 16.6] Lazy initialization
+ // Won't load until MetricsHolder is referenced
+ public static final Metrics metrics = new Metrics();
+ }
+
@Override
public void init(NamedList args) {
params = SolrParams.toSolrParams(args);
- this.hdfsDataDir = params.get(HDFS_HOME);
+ this.hdfsDataDir = getConfig(HDFS_HOME, null);
if (this.hdfsDataDir != null && this.hdfsDataDir.length() == 0) {
this.hdfsDataDir = null;
} else {
LOG.info(HDFS_HOME + "=" + this.hdfsDataDir);
}
- boolean kerberosEnabled = params.getBool(KERBEROS_ENABLED, false);
+ boolean kerberosEnabled = getConfig(KERBEROS_ENABLED, false);
LOG.info("Solr Kerberos Authentication "
+ (kerberosEnabled ? "enabled" : "disabled"));
if (kerberosEnabled) {
@@ -125,32 +132,27 @@ public class HdfsDirectoryFactory extend
@Override
protected Directory create(String path, LockFactory lockFactory, DirContext dirContext) throws IOException {
+ assert params != null : "init must be called before create";
LOG.info("creating directory factory for path {}", path);
Configuration conf = getConf();
if (metrics == null) {
- metrics = new Metrics(conf);
+ metrics = MetricsHolder.metrics;
}
- boolean blockCacheEnabled = params.getBool(BLOCKCACHE_ENABLED, true);
- boolean blockCacheGlobal = params.getBool(BLOCKCACHE_GLOBAL, false); // default to false for back compat
- boolean blockCacheReadEnabled = params.getBool(BLOCKCACHE_READ_ENABLED, true);
- boolean blockCacheWriteEnabled = params.getBool(BLOCKCACHE_WRITE_ENABLED, false);
-
- if (blockCacheWriteEnabled) {
- LOG.warn("Using " + BLOCKCACHE_WRITE_ENABLED + " is currently buggy and can result in readers seeing a corrupted view of the index.");
- }
+ boolean blockCacheEnabled = getConfig(BLOCKCACHE_ENABLED, true);
+ boolean blockCacheGlobal = getConfig(BLOCKCACHE_GLOBAL, false); // default to false for back compat
+ boolean blockCacheReadEnabled = getConfig(BLOCKCACHE_READ_ENABLED, true);
final Directory dir;
if (blockCacheEnabled && dirContext != DirContext.META_DATA) {
- int numberOfBlocksPerBank = params.getInt(NUMBEROFBLOCKSPERBANK, 16384);
+ int numberOfBlocksPerBank = getConfig(NUMBEROFBLOCKSPERBANK, 16384);
int blockSize = BlockDirectory.BLOCK_SIZE;
- int bankCount = params.getInt(BLOCKCACHE_SLAB_COUNT, 1);
+ int bankCount = getConfig(BLOCKCACHE_SLAB_COUNT, 1);
- boolean directAllocation = params.getBool(
- BLOCKCACHE_DIRECT_MEMORY_ALLOCATION, true);
+ boolean directAllocation = getConfig(BLOCKCACHE_DIRECT_MEMORY_ALLOCATION, true);
int slabSize = numberOfBlocksPerBank * blockSize;
LOG.info(
@@ -161,8 +163,8 @@ public class HdfsDirectoryFactory extend
new Object[] {slabSize, bankCount,
((long) bankCount * (long) slabSize)});
- int bufferSize = params.getInt("solr.hdfs.blockcache.bufferstore.buffersize", 128);
- int bufferCount = params.getInt("solr.hdfs.blockcache.bufferstore.buffercount", 128 * 128);
+ int bufferSize = getConfig("solr.hdfs.blockcache.bufferstore.buffersize", 128);
+ int bufferCount = getConfig("solr.hdfs.blockcache.bufferstore.buffercount", 128 * 128);
BlockCache blockCache = getBlockDirectoryCache(numberOfBlocksPerBank,
blockSize, bankCount, directAllocation, slabSize,
@@ -170,25 +172,51 @@ public class HdfsDirectoryFactory extend
Cache cache = new BlockDirectoryCache(blockCache, path, metrics, blockCacheGlobal);
HdfsDirectory hdfsDirectory = new HdfsDirectory(new Path(path), lockFactory, conf);
- dir = new BlockDirectory(path, hdfsDirectory, cache, null,
- blockCacheReadEnabled, blockCacheWriteEnabled);
+ dir = new BlockDirectory(path, hdfsDirectory, cache, null, blockCacheReadEnabled, false);
} else {
dir = new HdfsDirectory(new Path(path), lockFactory, conf);
}
- boolean nrtCachingDirectory = params.getBool(NRTCACHINGDIRECTORY_ENABLE, true);
+ boolean nrtCachingDirectory = getConfig(NRTCACHINGDIRECTORY_ENABLE, true);
if (nrtCachingDirectory) {
- double nrtCacheMaxMergeSizeMB = params.getInt(
- NRTCACHINGDIRECTORY_MAXMERGESIZEMB, 16);
- double nrtCacheMaxCacheMB = params.getInt(NRTCACHINGDIRECTORY_MAXCACHEMB,
- 192);
+ double nrtCacheMaxMergeSizeMB = getConfig(NRTCACHINGDIRECTORY_MAXMERGESIZEMB, 16);
+ double nrtCacheMaxCacheMB = getConfig(NRTCACHINGDIRECTORY_MAXCACHEMB, 192);
- return new NRTCachingDirectory(dir, nrtCacheMaxMergeSizeMB,
- nrtCacheMaxCacheMB);
+ return new NRTCachingDirectory(dir, nrtCacheMaxMergeSizeMB, nrtCacheMaxCacheMB);
}
return dir;
}
+ boolean getConfig(String name, boolean defaultValue) {
+ Boolean value = params.getBool(name);
+ if (value == null) {
+ String sysValue = System.getProperty(name);
+ if (sysValue != null) {
+ value = Boolean.valueOf(sysValue);
+ }
+ }
+ return value == null ? defaultValue : value;
+ }
+
+ int getConfig(String name, int defaultValue) {
+ Integer value = params.getInt(name);
+ if (value == null) {
+ String sysValue = System.getProperty(name);
+ if (sysValue != null) {
+ value = Integer.parseInt(sysValue);
+ }
+ }
+ return value == null ? defaultValue : value;
+ }
+
+ String getConfig(String name, String defaultValue) {
+ String value = params.get(name);
+ if (value == null) {
+ value = System.getProperty(name);
+ }
+ return value == null ? defaultValue : value;
+ }
+
private BlockCache getBlockDirectoryCache(int numberOfBlocksPerBank, int blockSize, int bankCount,
boolean directAllocation, int slabSize, int bufferSize, int bufferCount, boolean staticBlockCache) {
if (!staticBlockCache) {
@@ -245,7 +273,7 @@ public class HdfsDirectoryFactory extend
private Configuration getConf() {
Configuration conf = new Configuration();
- confDir = params.get(CONFIG_DIRECTORY, null);
+ confDir = getConfig(CONFIG_DIRECTORY, null);
HdfsUtil.addHdfsResources(conf, confDir);
return conf;
}
@@ -322,12 +350,12 @@ public class HdfsDirectoryFactory extend
}
private void initKerberos() {
- String keytabFile = params.get(KERBEROS_KEYTAB, "").trim();
+ String keytabFile = getConfig(KERBEROS_KEYTAB, "").trim();
if (keytabFile.length() == 0) {
throw new IllegalArgumentException(KERBEROS_KEYTAB + " required because "
+ KERBEROS_ENABLED + " set to true");
}
- String principal = params.get(KERBEROS_PRINCIPAL, "");
+ String principal = getConfig(KERBEROS_PRINCIPAL, "");
if (principal.length() == 0) {
throw new IllegalArgumentException(KERBEROS_PRINCIPAL
+ " required because " + KERBEROS_ENABLED + " set to true");
@@ -359,4 +387,45 @@ public class HdfsDirectoryFactory extend
}
}
}
+
+ // SolrInfoMBean methods
+
+ @Override
+ public String getName() {
+ return getClass().getSimpleName() + "BlockCache";
+ }
+
+ @Override
+ public String getVersion() {
+ return SolrCore.version;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Provides metrics for the HdfsDirectoryFactory BlockCache.";
+ }
+
+ @Override
+ public Category getCategory() {
+ return Category.CACHE;
+ }
+
+ @Override
+ public String getSource() {
+ return null;
+ }
+
+ @Override
+ public URL[] getDocs() {
+ return null;
+ }
+
+ @Override
+ public NamedList<?> getStatistics() {
+ if (metrics == null) {
+ return new NamedList<Object>();
+ }
+
+ return metrics.getStatistics();
+ }
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java Sun Feb 8 23:53:14 2015
@@ -21,6 +21,8 @@ import org.apache.lucene.index.IndexDele
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.solr.update.SolrIndexWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
@@ -43,6 +45,8 @@ import java.util.concurrent.atomic.Atomi
* @see org.apache.lucene.index.IndexDeletionPolicy
*/
public final class IndexDeletionPolicyWrapper extends IndexDeletionPolicy {
+ private static final Logger LOG = LoggerFactory.getLogger(IndexDeletionPolicyWrapper.class.getName());
+
private final IndexDeletionPolicy deletionPolicy;
private volatile Map<Long, IndexCommit> solrVersionVsCommits = new ConcurrentHashMap<>();
private final Map<Long, Long> reserves = new ConcurrentHashMap<>();
@@ -82,7 +86,11 @@ public final class IndexDeletionPolicyWr
// this is the common success case: the older time didn't exist, or
// came before the new time.
- if (previousTime == null || previousTime <= timeToSet) break;
+ if (previousTime == null || previousTime <= timeToSet) {
+ LOG.debug("Commit point reservation for generation {} set to {} (requested reserve time of {})",
+ indexGen, timeToSet, reserveTime);
+ break;
+ }
// At this point, we overwrote a longer reservation, so we want to restore the older one.
// the problem is that an even longer reservation may come in concurrently
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java Sun Feb 8 23:53:14 2015
@@ -60,9 +60,8 @@ public abstract class IndexReaderFactory
/**
* Creates a new IndexReader instance using the given IndexWriter.
* <p>
- * This is used for opening the initial reader in NRT mode ({@code nrtMode=true}
- * in solrconfig.xml)
- *
+ * This is used for opening the initial reader in NRT mode
+ *
* @param writer IndexWriter
* @param core {@link SolrCore} instance where this reader will be used. NOTE:
* this SolrCore instance may not be fully configured yet, but basic things like
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/InitParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/InitParams.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/InitParams.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/InitParams.java Sun Feb 8 23:53:14 2015
@@ -65,7 +65,8 @@ public class InitParams {
private static boolean matchPath(String path, String name){
List<String> pathSplit = StrUtils.splitSmart(path, '/');
List<String> nameSplit = StrUtils.splitSmart(name, '/');
- for (int i = 0; i < nameSplit.size(); i++) {
+ int i = 0;
+ for (;i < nameSplit.size(); i++) {
String s = nameSplit.get(i);
String ps = pathSplit.size()>i ? pathSplit.get(i) :null;
if(ps == null) return false;
@@ -74,7 +75,8 @@ public class InitParams {
if("**".equals(ps)) return true;
return false;
}
- return true;
+ String ps = pathSplit.size()>i ? pathSplit.get(i) :null;
+ return "*".equals(ps) || "**".equals(ps);
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JarRepository.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JarRepository.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JarRepository.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JarRepository.java Sun Feb 8 23:53:14 2015
@@ -23,8 +23,11 @@ import static org.apache.solr.common.clo
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
+import java.util.Random;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.zip.ZipEntry;
@@ -48,6 +51,18 @@ import org.slf4j.LoggerFactory;
*/
public class JarRepository {
public static Logger log = LoggerFactory.getLogger(JarRepository.class);
+
+ static final Random RANDOM;
+ static {
+ // We try to make things reproducible in the context of our tests by initializing the random instance
+ // based on the current seed
+ String seed = System.getProperty("tests.seed");
+ if (seed == null) {
+ RANDOM = new Random();
+ } else {
+ RANDOM = new Random(seed.hashCode());
+ }
+ }
private final CoreContainer coreContainer;
@@ -71,8 +86,10 @@ public class JarRepository {
ClusterState cs = this.coreContainer.getZkController().getZkStateReader().getClusterState();
DocCollection coll = cs.getCollectionOrNull(CollectionsHandler.SYSTEM_COLL);
if (coll == null) throw new SolrException(SERVICE_UNAVAILABLE, ".system collection not available");
- Slice slice = coll.getActiveSlices().iterator().next();
- if (slice == null) throw new SolrException(SERVICE_UNAVAILABLE, ".no active slices for .system collection");
+ ArrayList<Slice> slices = new ArrayList<>(coll.getActiveSlices());
+ if (slices.isEmpty()) throw new SolrException(SERVICE_UNAVAILABLE, ".no active slices for .system collection");
+ Collections.shuffle(slices, RANDOM); //do load balancing
+ Slice slice = slices.get(0) ;
Replica replica = slice.getReplicas().iterator().next();
if (replica == null) throw new SolrException(SERVICE_UNAVAILABLE, ".no active replica available for .system collection");
String url = replica.getStr(BASE_URL_PROP) + "/.system/blob/" + key + "?wt=filestream";
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java Sun Feb 8 23:53:14 2015
@@ -16,6 +16,7 @@
*/
package org.apache.solr.core;
+import org.apache.lucene.store.AlreadyClosedException;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrConfig.JmxConfiguration;
@@ -279,7 +280,9 @@ public class JmxMonitoredMap<K, V> exten
}
}
} catch (Exception e) {
- LOG.warn("Could not getStatistics on info bean {}", infoBean.getName(), e);
+ // don't log issue if the core is closing
+ if (!(SolrException.getRootCause(e) instanceof AlreadyClosedException))
+ LOG.warn("Could not getStatistics on info bean {}", infoBean.getName(), e);
}
MBeanAttributeInfo[] attrInfoArr = attrInfoList
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/PluginInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/PluginInfo.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/PluginInfo.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/PluginInfo.java Sun Feb 8 23:53:14 2015
@@ -40,7 +40,7 @@ public class PluginInfo implements MapSe
public final List<PluginInfo> children;
private boolean isFromSolrConfig;
- public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
+ public PluginInfo(String type, Map<String, String> attrs, NamedList initArgs, List<PluginInfo> children) {
this.type = type;
this.name = attrs.get(NAME);
this.className = attrs.get(CLASS_NAME);
@@ -63,12 +63,15 @@ public class PluginInfo implements MapSe
public PluginInfo(String type, Map<String,Object> map) {
LinkedHashMap m = new LinkedHashMap<>(map);
- NamedList nl = new NamedList();
- for (String s : asList(DEFAULTS, APPENDS, INVARIANTS)) if (m.get(s) != null) nl.add(s, map.remove(s));
+ initArgs = new NamedList();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ Object value = entry.getValue();
+ if (value instanceof Map) value = new NamedList((Map) value);
+ initArgs.add(entry.getKey(), value);
+ }
this.type = type;
this.name = (String) m.get(NAME);
this.className = (String) m.get(CLASS_NAME);
- this.initArgs = nl;
attributes = unmodifiableMap(m);
this.children = Collections.<PluginInfo>emptyList();
isFromSolrConfig = true;
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestHandlers.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestHandlers.java Sun Feb 8 23:53:14 2015
@@ -433,14 +433,14 @@ public final class RequestHandlers {
return;
}
- version = _pluginInfo.attributes.get("version");
- if (version == null) {
+ if (_pluginInfo.attributes.get("version") == null ){
errMsg = "ERROR 'lib' attribute must be accompanied with version also";
unrecoverable = true;
_handler = this;
log.error(errMsg);
return;
}
+ version = String.valueOf(_pluginInfo.attributes.get("version"));
classLoader = new MemClassLoader(this);
}
@@ -494,7 +494,7 @@ public final class RequestHandlers {
public void close() throws Exception {
super.close();
if (_closed) return;
- classLoader.releaseJar();
+ if(classLoader != null) classLoader.releaseJar();
_closed = true;
}
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestParams.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestParams.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/RequestParams.java Sun Feb 8 23:53:14 2015
@@ -23,6 +23,7 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import org.apache.solr.cloud.ZkSolrResourceLoader;
@@ -58,7 +59,7 @@ public class RequestParams implements Ma
Map.Entry e = (Map.Entry) o;
if (e.getValue() instanceof Map) {
Map value = (Map) e.getValue();
- Map copy = new LinkedHashMap<>(value);
+ Map copy = getMapCopy(value);
Map meta = (Map) copy.remove("");
this.paramsets.put((String) e.getKey(), new VersionedParams(Collections.unmodifiableMap(copy) ,meta));
}
@@ -67,6 +68,32 @@ public class RequestParams implements Ma
this.znodeVersion = znodeVersion;
}
+ private static Map getMapCopy(Map value) {
+ Map copy = new LinkedHashMap<>();
+ for (Object o1 : value.entrySet()) {
+ Map.Entry entry = (Map.Entry) o1;
+ if("".equals( entry.getKey())){
+ copy.put(entry.getKey(),entry.getValue());
+ continue;
+ }
+ if (entry.getValue() != null) {
+ if (entry.getValue() instanceof List) {
+ List l = (List) entry.getValue();
+ String[] sarr = new String[l.size()];
+ for (int i = 0; i < l.size(); i++) {
+ if( l.get(i) != null) sarr[i]= String.valueOf(l.get(i));
+ }
+ copy.put(entry.getKey(), sarr);
+ } else {
+ copy.put(entry.getKey(), String.valueOf(entry.getValue()));
+ }
+ } else {
+ copy.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return copy;
+ }
+
public VersionedParams getParams(String name){
return paramsets.get(name);
}
@@ -77,7 +104,7 @@ public class RequestParams implements Ma
@Override
public Map<String, Object> toMap() {
- return getMapWithVersion(data,znodeVersion);
+ return getMapWithVersion(data, znodeVersion);
}
public static Map<String, Object> getMapWithVersion(Map<String, Object> data, int znodeVersion) {
@@ -135,9 +162,9 @@ public class RequestParams implements Ma
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
}
- } else if(requestParams == null) {
+ } else {
Object[] o = getMapAndVersion(loader, RequestParams.RESOURCE);
- requestParams = new RequestParams((Map) o[0],(Integer)o[1]);
+ requestParams = new RequestParams((Map) o[0], (Integer) o[1]);
}
return requestParams;
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrConfig.java Sun Feb 8 23:53:14 2015
@@ -193,7 +193,11 @@ public class SolrConfig extends Config i
defaultIndexConfig = mainIndexConfig = null;
indexConfigPrefix = "indexConfig";
}
- nrtMode = getBool(indexConfigPrefix+"/nrtMode", true);
+ assertWarnOrFail("The <nrtMode> config has been discontinued and NRT mode is always used by Solr." +
+ " This config will be removed in future versions.", getNode(indexConfigPrefix + "/nrtMode", false) == null,
+ true
+ );
+
// Parse indexConfig section, using mainIndex as backup in case old config is used
indexConfig = new SolrIndexConfig(this, "indexConfig", mainIndexConfig);
@@ -419,7 +423,6 @@ public class SolrConfig extends Config i
public final int queryResultWindowSize;
public final int queryResultMaxDocsCached;
public final boolean enableLazyFieldLoading;
- public final boolean nrtMode;
// DocSet
public final float hashSetInverseLoadFactor;
public final int hashDocSetMaxSize;
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrCore.java Sun Feb 8 23:53:14 2015
@@ -17,6 +17,47 @@
package org.apache.solr.core;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.lang.reflect.Constructor;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.NoSuchFileException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.commons.io.FileUtils;
import org.apache.lucene.codecs.Codec;
import org.apache.lucene.index.DirectoryReader;
@@ -38,6 +79,7 @@ import org.apache.solr.common.params.Com
import org.apache.solr.common.params.CommonParams.EchoParamStyle;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.DirectoryFactory.DirContext;
@@ -97,7 +139,6 @@ import org.apache.solr.update.processor.
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.IOUtils;
import org.apache.solr.util.PropertiesInputStream;
import org.apache.solr.util.RefCounted;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
@@ -109,46 +150,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.NoSuchFileException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.ReentrantLock;
-
/**
*
*/
@@ -441,7 +442,7 @@ public final class SolrCore implements S
solrCoreState.increfSolrCoreState();
SolrCore currentCore;
boolean indexDirChange = !getNewIndexDir().equals(getIndexDir());
- if (indexDirChange || !coreConfig.getSolrConfig().nrtMode) {
+ if (indexDirChange) {
// the directory is changing, don't pass on state
currentCore = null;
} else {
@@ -462,13 +463,6 @@ public final class SolrCore implements S
}
- // gets a non-caching searcher
- public SolrIndexSearcher newSearcher(String name) throws IOException {
- return new SolrIndexSearcher(this, getNewIndexDir(), getLatestSchema(), getSolrConfig().indexConfig,
- name, false, directoryFactory);
- }
-
-
private void initDirectoryFactory() {
DirectoryFactory dirFactory;
PluginInfo info = solrConfig.getPluginInfo(DirectoryFactory.class.getName());
@@ -542,7 +536,7 @@ public final class SolrCore implements S
log.warn(logid+"Solr index directory '" + new File(indexDir) + "' doesn't exist."
+ " Creating new index...");
- SolrIndexWriter writer = SolrIndexWriter.create("SolrCore.initIndex", indexDir, getDirectoryFactory(), true,
+ SolrIndexWriter writer = SolrIndexWriter.create(this, "SolrCore.initIndex", indexDir, getDirectoryFactory(), true,
getLatestSchema(), solrConfig.indexConfig, solrDelPolicy, codec);
writer.close();
}
@@ -852,13 +846,7 @@ public final class SolrCore implements S
@Override
public DirectoryReader call() throws Exception {
- if(getSolrConfig().nrtMode) {
- // if in NRT mode, need to open from the previous writer
- return indexReaderFactory.newReader(iw, core);
- } else {
- // if not NRT, need to create a new reader from the directory
- return indexReaderFactory.newReader(iw.getDirectory(), core);
- }
+ return indexReaderFactory.newReader(iw, core);
}
};
}
@@ -1500,7 +1488,6 @@ public final class SolrCore implements S
SolrIndexSearcher tmp;
RefCounted<SolrIndexSearcher> newestSearcher = null;
- boolean nrt = solrConfig.nrtMode && updateHandlerReopens;
openSearcherLock.lock();
try {
@@ -1509,7 +1496,7 @@ public final class SolrCore implements S
String newIndexDirFile = null;
// if it's not a normal near-realtime update, check that paths haven't changed.
- if (!nrt) {
+ if (!updateHandlerReopens) {
indexDirFile = getDirectoryFactory().normalize(getIndexDir());
newIndexDirFile = getDirectoryFactory().normalize(newIndexDir);
}
@@ -1521,7 +1508,7 @@ public final class SolrCore implements S
}
}
- if (newestSearcher != null && (nrt || indexDirFile.equals(newIndexDirFile))) {
+ if (newestSearcher != null && (updateHandlerReopens || indexDirFile.equals(newIndexDirFile))) {
DirectoryReader newReader;
DirectoryReader currentReader = newestSearcher.get().getRawReader();
@@ -1531,12 +1518,11 @@ public final class SolrCore implements S
RefCounted<IndexWriter> writer = getUpdateHandler().getSolrCoreState()
.getIndexWriter(null);
try {
- if (writer != null && solrConfig.nrtMode) {
+ if (writer != null) {
// if in NRT mode, open from the writer
newReader = DirectoryReader.openIfChanged(currentReader, writer.get(), true);
} else {
// verbose("start reopen without writer, reader=", currentReader);
- // if not in NRT mode, just re-open the reader
newReader = DirectoryReader.openIfChanged(currentReader);
// verbose("reopen result", newReader);
}
@@ -1583,7 +1569,7 @@ public final class SolrCore implements S
DirectoryReader newReader = newReaderCreator.call();
tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(),
(realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
- } else if (solrConfig.nrtMode) {
+ } else {
RefCounted<IndexWriter> writer = getUpdateHandler().getSolrCoreState().getIndexWriter(this);
DirectoryReader newReader = null;
try {
@@ -1593,12 +1579,6 @@ public final class SolrCore implements S
}
tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(),
(realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
- } else {
- // normal open that happens at startup
- // verbose("non-reopen START:");
- tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(), getSolrConfig().indexConfig,
- "main", true, directoryFactory);
- // verbose("non-reopen DONE: searcher=",tmp);
}
}
Modified: lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1658277&r1=1658276&r2=1658277&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/branches/lucene6005/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Sun Feb 8 23:53:14 2015
@@ -18,6 +18,7 @@
package org.apache.solr.core;
import org.apache.lucene.analysis.util.CharFilterFactory;
+import org.apache.lucene.analysis.util.ResourceLoader;
import org.apache.lucene.analysis.util.ResourceLoaderAware;
import org.apache.lucene.analysis.util.TokenFilterFactory;
import org.apache.lucene.analysis.util.TokenizerFactory;
@@ -26,7 +27,6 @@ import org.apache.lucene.codecs.Codec;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.util.IOUtils;
-import org.apache.solr.common.ResourceLoader;
import org.apache.solr.common.SolrException;
import org.apache.solr.handler.admin.CoreAdminHandler;
import org.apache.solr.handler.component.SearchComponent;
@@ -519,41 +519,11 @@ public class SolrResourceLoader implemen
return newInstance(name, expectedType, empty);
}
- public <T> T newInstance(String cname, Class<T> expectedType, String ... subpackages) {
- Class<? extends T> clazz = findClass(cname, expectedType, subpackages);
- if( clazz == null ) {
- throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
- "Can not find class: "+cname + " in " + classLoader);
- }
-
- T obj = null;
- try {
- obj = clazz.newInstance();
- }
- catch (Exception e) {
- throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
- "Error instantiating class: '" + clazz.getName()+"'", e);
- }
+ private static final Class[] NO_CLASSES = new Class[0];
+ private static final Object[] NO_OBJECTS = new Object[0];
- if (!live) {
- if( obj instanceof SolrCoreAware ) {
- assertAwareCompatibility( SolrCoreAware.class, obj );
- waitingForCore.add( (SolrCoreAware)obj );
- }
- if (org.apache.solr.util.plugin.ResourceLoaderAware.class.isInstance(obj)) {
- log.warn("Class [{}] uses org.apache.solr.util.plugin.ResourceLoaderAware " +
- "which is deprecated. Change to org.apache.lucene.analysis.util.ResourceLoaderAware.", cname);
- }
- if( obj instanceof ResourceLoaderAware ) {
- assertAwareCompatibility( ResourceLoaderAware.class, obj );
- waitingForResources.add( (ResourceLoaderAware)obj );
- }
- if (obj instanceof SolrInfoMBean){
- //TODO: Assert here?
- infoMBeans.add((SolrInfoMBean) obj);
- }
- }
- return obj;
+ public <T> T newInstance(String cname, Class<T> expectedType, String ... subpackages) {
+ return newInstance(cname, expectedType, subpackages, NO_CLASSES, NO_OBJECTS);
}
public CoreAdminHandler newAdminHandlerInstance(final CoreContainer coreContainer, String cname, String ... subpackages) {
@@ -576,10 +546,6 @@ public class SolrResourceLoader implemen
if (!live) {
//TODO: Does SolrCoreAware make sense here since in a multi-core context
// which core are we talking about ?
- if (org.apache.solr.util.plugin.ResourceLoaderAware.class.isInstance(obj)) {
- log.warn("Class [{}] uses org.apache.solr.util.plugin.ResourceLoaderAware " +
- "which is deprecated. Change to org.apache.lucene.analysis.util.ResourceLoaderAware.", cname);
- }
if( obj instanceof ResourceLoaderAware ) {
assertAwareCompatibility( ResourceLoaderAware.class, obj );
waitingForResources.add( (ResourceLoaderAware)obj );
@@ -603,8 +569,13 @@ public class SolrResourceLoader implemen
Constructor<? extends T> constructor = clazz.getConstructor(params);
obj = constructor.newInstance(args);
- }
- catch (Exception e) {
+
+ } catch (Error err) {
+ log.error("Loading Class " + cName + " ("+clazz.getName() + ") triggered serious java error: "
+ + err.getClass().getName(), err);
+ throw err;
+
+ } catch (Exception e) {
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
"Error instantiating class: '" + clazz.getName()+"'", e);
}
@@ -614,10 +585,6 @@ public class SolrResourceLoader implemen
assertAwareCompatibility( SolrCoreAware.class, obj );
waitingForCore.add( (SolrCoreAware)obj );
}
- if (org.apache.solr.util.plugin.ResourceLoaderAware.class.isInstance(obj)) {
- log.warn("Class [{}] uses org.apache.solr.util.plugin.ResourceLoaderAware " +
- "which is deprecated. Change to org.apache.lucene.analysis.util.ResourceLoaderAware.", cName);
- }
if( obj instanceof ResourceLoaderAware ) {
assertAwareCompatibility( ResourceLoaderAware.class, obj );
waitingForResources.add( (ResourceLoaderAware)obj );
@@ -829,10 +796,10 @@ public class SolrResourceLoader implemen
public static void persistConfLocally(SolrResourceLoader loader, String resourceName, byte[] content) {
// Persist locally
- File managedSchemaFile = new File(loader.getConfigDir(), resourceName);
+ File confFile = new File(loader.getConfigDir(), resourceName);
OutputStreamWriter writer = null;
try {
- File parentDir = managedSchemaFile.getParentFile();
+ File parentDir = confFile.getParentFile();
if ( ! parentDir.isDirectory()) {
if ( ! parentDir.mkdirs()) {
final String msg = "Can't create managed schema directory " + parentDir.getAbsolutePath();
@@ -840,19 +807,19 @@ public class SolrResourceLoader implemen
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, msg);
}
}
- final FileOutputStream out = new FileOutputStream(managedSchemaFile);
+ final FileOutputStream out = new FileOutputStream(confFile);
out.write(content);
- log.info("Upgraded to managed schema at " + managedSchemaFile.getPath());
+ log.info("Written confile " + resourceName);
} catch (IOException e) {
- final String msg = "Error persisting managed schema " + managedSchemaFile;
+ final String msg = "Error persisting conf file " + resourceName;
log.error(msg, e);
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, msg, e);
} finally {
org.apache.commons.io.IOUtils.closeQuietly(writer);
try {
- FileUtils.sync(managedSchemaFile);
+ FileUtils.sync(confFile);
} catch (IOException e) {
- final String msg = "Error syncing the managed schema file " + managedSchemaFile;
+ final String msg = "Error syncing conf file " + resourceName;
log.error(msg, e);
}
}