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/12/21 12:40:14 UTC
svn commit: r1721134 [23/48] - in /lucene/dev/branches/lucene6835: ./
dev-tools/ dev-tools/eclipse/dot.settings/ dev-tools/idea/.idea/libraries/
dev-tools/maven/ dev-tools/maven/lucene/analysis/morfologik/
dev-tools/scripts/ lucene/ lucene/analysis/ lu...
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java Mon Dec 21 11:39:57 2015
@@ -17,25 +17,28 @@
package org.apache.solr.core;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.commons.lang.StringUtils;
-import org.apache.solr.cloud.CloudDescriptor;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.IOUtils;
-import org.apache.solr.util.PropertiesUtil;
-
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
+import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
-import java.nio.file.Paths;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.Locale;
+import java.util.Map;
import java.util.Properties;
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.apache.commons.lang.StringUtils;
+import org.apache.solr.cloud.CloudDescriptor;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.util.PropertiesUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A Solr core descriptor
@@ -43,12 +46,10 @@ import static com.google.common.base.Pre
* @since solr 1.3
*/
public class CoreDescriptor {
-
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
// Properties file name constants
public static final String CORE_NAME = "name";
public static final String CORE_CONFIG = "config";
- public static final String CORE_INSTDIR = "instanceDir";
- public static final String CORE_ABS_INSTDIR = "absoluteInstDir";
public static final String CORE_DATADIR = "dataDir";
public static final String CORE_ULOGDIR = "ulogDir";
public static final String CORE_SCHEMA = "schema";
@@ -91,13 +92,12 @@ public class CoreDescriptor {
.build();
private static ImmutableList<String> requiredProperties = ImmutableList.of(
- CORE_NAME, CORE_INSTDIR, CORE_ABS_INSTDIR
+ CORE_NAME
);
public static ImmutableList<String> standardPropNames = ImmutableList.of(
CORE_NAME,
CORE_CONFIG,
- CORE_INSTDIR,
CORE_DATADIR,
CORE_ULOGDIR,
CORE_SCHEMA,
@@ -118,6 +118,8 @@ public class CoreDescriptor {
private final CloudDescriptor cloudDesc;
+ private final Path instanceDir;
+
/** The original standard core properties, before substitution */
protected final Properties originalCoreProperties = new Properties();
@@ -130,61 +132,72 @@ public class CoreDescriptor {
/** The properties for this core, substitutable by resource loaders */
protected final Properties substitutableProperties = new Properties();
- /**
- * Create a new CoreDescriptor.
- * @param container the CoreDescriptor's container
- * @param name the CoreDescriptor's name
- * @param instanceDir a String containing the instanceDir
- * @param coreProps a Properties object of the properties for this core
- */
- public CoreDescriptor(CoreContainer container, String name, String instanceDir,
- Properties coreProps) {
- this(container, name, instanceDir, coreProps, null);
+ public CoreDescriptor(CoreContainer container, String name, Path instanceDir, String... properties) {
+ this(container, name, instanceDir, toMap(properties));
}
- public CoreDescriptor(CoreContainer container, String name, String instanceDir, String... properties) {
- this(container, name, instanceDir, toProperties(properties));
- }
-
- private static Properties toProperties(String... properties) {
- Properties props = new Properties();
+ private static Map<String, String> toMap(String... properties) {
+ Map<String, String> props = new HashMap<>();
assert properties.length % 2 == 0;
for (int i = 0; i < properties.length; i += 2) {
- props.setProperty(properties[i], properties[i+1]);
+ props.put(properties[i], properties[i+1]);
}
return props;
}
-
+
+ /**
+ * Create a new CoreDescriptor with a given name and instancedir
+ * @param container the CoreDescriptor's container
+ * @param name the CoreDescriptor's name
+ * @param instanceDir the CoreDescriptor's instancedir
+ */
+ public CoreDescriptor(CoreContainer container, String name, Path instanceDir) {
+ this(container, name, instanceDir, Collections.emptyMap());
+ }
+
+ /**
+ * Create a new CoreDescriptor using the properties of an existing one
+ * @param coreName the new CoreDescriptor's name
+ * @param other the CoreDescriptor to copy
+ */
+ public CoreDescriptor(String coreName, CoreDescriptor other) {
+ this.coreContainer = other.coreContainer;
+ this.cloudDesc = other.cloudDesc;
+ this.instanceDir = other.instanceDir;
+ this.originalExtraProperties.putAll(other.originalExtraProperties);
+ this.originalCoreProperties.putAll(other.originalCoreProperties);
+ this.coreProperties.putAll(other.coreProperties);
+ this.substitutableProperties.putAll(other.substitutableProperties);
+ this.coreProperties.setProperty(CORE_NAME, coreName);
+ this.originalCoreProperties.setProperty(CORE_NAME, coreName);
+ this.substitutableProperties.setProperty(SOLR_CORE_PROP_PREFIX + CORE_NAME, coreName);
+ }
+
/**
* Create a new CoreDescriptor.
* @param container the CoreDescriptor's container
* @param name the CoreDescriptor's name
- * @param instanceDir a String containing the instanceDir
- * @param coreProps a Properties object of the properties for this core
- * @param params additional params
+ * @param instanceDir a Path resolving to the instanceDir
+ * @param coreProps a Map of the properties for this core
*/
- public CoreDescriptor(CoreContainer container, String name, String instanceDir,
- Properties coreProps, SolrParams params) {
+ public CoreDescriptor(CoreContainer container, String name, Path instanceDir,
+ Map<String, String> coreProps) {
this.coreContainer = container;
+ this.instanceDir = instanceDir;
originalCoreProperties.setProperty(CORE_NAME, name);
- originalCoreProperties.setProperty(CORE_INSTDIR, instanceDir);
Properties containerProperties = container.getContainerProperties();
name = PropertiesUtil.substituteProperty(checkPropertyIsNotEmpty(name, CORE_NAME),
containerProperties);
- instanceDir = PropertiesUtil.substituteProperty(checkPropertyIsNotEmpty(instanceDir, CORE_INSTDIR),
- containerProperties);
coreProperties.putAll(defaultProperties);
coreProperties.put(CORE_NAME, name);
- coreProperties.put(CORE_INSTDIR, instanceDir);
- coreProperties.put(CORE_ABS_INSTDIR, convertToAbsolute(instanceDir, container.getCoreRootDirectory()));
- for (String propname : coreProps.stringPropertyNames()) {
+ for (String propname : coreProps.keySet()) {
- String propvalue = coreProps.getProperty(propname);
+ String propvalue = coreProps.get(propname);
if (isUserDefinedProperty(propname))
originalExtraProperties.put(propname, propvalue);
@@ -202,15 +215,12 @@ public class CoreDescriptor {
// TODO maybe make this a CloudCoreDescriptor subclass?
if (container.isZooKeeperAware()) {
cloudDesc = new CloudDescriptor(name, coreProperties, this);
- if (params != null) {
- cloudDesc.setParams(params);
- }
}
else {
cloudDesc = null;
}
- SolrCore.log.info("Created CoreDescriptor: " + coreProperties);
+ log.info("Created CoreDescriptor: " + coreProperties);
}
/**
@@ -226,20 +236,16 @@ public class CoreDescriptor {
*/
protected void loadExtraProperties() {
String filename = coreProperties.getProperty(CORE_PROPERTIES, DEFAULT_EXTERNAL_PROPERTIES_FILE);
- File propertiesFile = resolvePaths(filename);
- if (propertiesFile.exists()) {
- FileInputStream in = null;
- try {
- in = new FileInputStream(propertiesFile);
+ Path propertiesFile = instanceDir.resolve(filename);
+ if (Files.exists(propertiesFile)) {
+ try (InputStream is = Files.newInputStream(propertiesFile)) {
Properties externalProps = new Properties();
- externalProps.load(new InputStreamReader(in, StandardCharsets.UTF_8));
+ externalProps.load(new InputStreamReader(is, StandardCharsets.UTF_8));
coreProperties.putAll(externalProps);
} catch (IOException e) {
String message = String.format(Locale.ROOT, "Could not load properties from %s: %s:",
- propertiesFile.getAbsoluteFile(), e.toString());
+ propertiesFile.toString(), e.toString());
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, message);
- } finally {
- IOUtils.closeQuietly(in);
}
}
}
@@ -258,13 +264,6 @@ public class CoreDescriptor {
}
}
- protected File resolvePaths(String filepath) {
- File file = new File(filepath);
- if (file.isAbsolute())
- return file;
- return new File(getInstanceDir(), filepath);
- }
-
/**
* Is this property a Solr-standard property, or is it an extra property
* defined per-core by the user?
@@ -283,33 +282,6 @@ public class CoreDescriptor {
return value;
}
- /**
- * Create a new CoreDescriptor with a given name and instancedir
- * @param container the CoreDescriptor's container
- * @param name the CoreDescriptor's name
- * @param instanceDir the CoreDescriptor's instancedir
- */
- public CoreDescriptor(CoreContainer container, String name, String instanceDir) {
- this(container, name, instanceDir, new Properties());
- }
-
- /**
- * Create a new CoreDescriptor using the properties of an existing one
- * @param coreName the new CoreDescriptor's name
- * @param other the CoreDescriptor to copy
- */
- public CoreDescriptor(String coreName, CoreDescriptor other) {
- this.coreContainer = other.coreContainer;
- this.cloudDesc = other.cloudDesc;
- this.originalExtraProperties.putAll(other.originalExtraProperties);
- this.originalCoreProperties.putAll(other.originalCoreProperties);
- this.coreProperties.putAll(other.coreProperties);
- this.substitutableProperties.putAll(other.substitutableProperties);
- this.coreProperties.setProperty(CORE_NAME, coreName);
- this.originalCoreProperties.setProperty(CORE_NAME, coreName);
- this.substitutableProperties.setProperty(SOLR_CORE_PROP_PREFIX + CORE_NAME, coreName);
- }
-
public String getPropertiesName() {
return coreProperties.getProperty(CORE_PROPERTIES);
}
@@ -322,22 +294,11 @@ public class CoreDescriptor {
return defaultProperties.get(CORE_DATADIR).equals(coreProperties.getProperty(CORE_DATADIR));
}
- /**@return the core instance directory. */
- public String getRawInstanceDir() {
- return coreProperties.getProperty(CORE_INSTDIR);
- }
-
- private static String convertToAbsolute(String instDir, String solrHome) {
- checkNotNull(instDir);
- return SolrResourceLoader.normalizeDir(Paths.get(solrHome).resolve(instDir).toString());
- }
-
/**
- *
- * @return the core instance directory, prepended with solr_home if not an absolute path.
+ * @return the core instance directory
*/
- public String getInstanceDir() {
- return coreProperties.getProperty(CORE_ABS_INSTDIR);
+ public Path getInstanceDir() {
+ return instanceDir;
}
/**@return the core configuration resource name. */
@@ -401,12 +362,7 @@ public class CoreDescriptor {
@Override
public String toString() {
- return new StringBuilder("CoreDescriptor[name=")
- .append(this.getName())
- .append(";instanceDir=")
- .append(this.getInstanceDir())
- .append("]")
- .toString();
+ return "CoreDescriptor[name=" + this.getName() + ";instanceDir=" + this.getInstanceDir() + "]";
}
public String getConfigSet() {
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java Mon Dec 21 11:39:57 2015
@@ -17,24 +17,28 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import com.google.common.collect.Lists;
-
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.util.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import com.google.common.collect.Lists;
+import org.apache.solr.common.SolrException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Persists CoreDescriptors as properties files
*/
@@ -42,24 +46,24 @@ public class CorePropertiesLocator imple
public static final String PROPERTIES_FILENAME = "core.properties";
- private static final Logger logger = LoggerFactory.getLogger(CoresLocator.class);
+ private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- private final File rootDirectory;
+ private final Path rootDirectory;
- public CorePropertiesLocator(String coreDiscoveryRoot) {
- this.rootDirectory = new File(coreDiscoveryRoot);
- logger.info("Config-defined core root directory: {}", this.rootDirectory.getAbsolutePath());
+ public CorePropertiesLocator(Path coreDiscoveryRoot) {
+ this.rootDirectory = coreDiscoveryRoot;
+ logger.info("Config-defined core root directory: {}", this.rootDirectory);
}
@Override
public void create(CoreContainer cc, CoreDescriptor... coreDescriptors) {
for (CoreDescriptor cd : coreDescriptors) {
- File propFile = new File(new File(cd.getInstanceDir()), PROPERTIES_FILENAME);
- if (propFile.exists())
+ Path propertiesFile = this.rootDirectory.resolve(cd.getInstanceDir()).resolve(PROPERTIES_FILENAME);
+ if (Files.exists(propertiesFile))
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
"Could not create a new core in " + cd.getInstanceDir()
+ "as another core is already defined there");
- writePropertiesFile(cd, propFile);
+ writePropertiesFile(cd, propertiesFile);
}
}
@@ -70,24 +74,21 @@ public class CorePropertiesLocator imple
@Override
public void persist(CoreContainer cc, CoreDescriptor... coreDescriptors) {
for (CoreDescriptor cd : coreDescriptors) {
- File propFile = new File(new File(cd.getInstanceDir()), PROPERTIES_FILENAME);
+ Path propFile = this.rootDirectory.resolve(cd.getInstanceDir()).resolve(PROPERTIES_FILENAME);
writePropertiesFile(cd, propFile);
}
}
- private void writePropertiesFile(CoreDescriptor cd, File propfile) {
+ private void writePropertiesFile(CoreDescriptor cd, Path propfile) {
Properties p = buildCoreProperties(cd);
- Writer os = null;
try {
- propfile.getParentFile().mkdirs();
- os = new OutputStreamWriter(new FileOutputStream(propfile), StandardCharsets.UTF_8);
- p.store(os, "Written by CorePropertiesLocator");
+ Files.createDirectories(propfile.getParent());
+ try (Writer os = new OutputStreamWriter(Files.newOutputStream(propfile), StandardCharsets.UTF_8)) {
+ p.store(os, "Written by CorePropertiesLocator");
+ }
}
catch (IOException e) {
- logger.error("Couldn't persist core properties to {}: {}", propfile.getAbsolutePath(), e);
- }
- finally {
- IOUtils.closeQuietly(os);
+ logger.error("Couldn't persist core properties to {}: {}", propfile, e.getMessage());
}
}
@@ -98,12 +99,12 @@ public class CorePropertiesLocator imple
}
for (CoreDescriptor cd : coreDescriptors) {
if (cd == null) continue;
- File instanceDir = new File(cd.getInstanceDir());
- File propertiesFile = new File(instanceDir, PROPERTIES_FILENAME);
- propertiesFile.renameTo(new File(instanceDir, PROPERTIES_FILENAME + ".unloaded"));
- // This is a best-effort: the core.properties file may already have been
- // deleted by the core unload, so we don't worry about checking if the
- // rename has succeeded.
+ Path propfile = this.rootDirectory.resolve(cd.getInstanceDir()).resolve(PROPERTIES_FILENAME);
+ try {
+ Files.deleteIfExists(propfile);
+ } catch (IOException e) {
+ logger.warn("Couldn't delete core properties file {}: {}", propfile, e.getMessage());
+ }
}
}
@@ -118,65 +119,69 @@ public class CorePropertiesLocator imple
}
@Override
- public List<CoreDescriptor> discover(CoreContainer cc) {
- logger.info("Looking for core definitions underneath {}", rootDirectory.getAbsolutePath());
- List<CoreDescriptor> cds = Lists.newArrayList();
- if (rootDirectory.canRead() == false) {
- throw new RuntimeException("Solr home '" + rootDirectory.getAbsolutePath() + "' doesn't have read permissions");
+ public List<CoreDescriptor> discover(final CoreContainer cc) {
+ logger.info("Looking for core definitions underneath {}", rootDirectory);
+ final List<CoreDescriptor> cds = Lists.newArrayList();
+ try {
+ Files.walkFileTree(this.rootDirectory, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ if (file.getFileName().toString().equals(PROPERTIES_FILENAME)) {
+ CoreDescriptor cd = buildCoreDescriptor(file, cc);
+ logger.info("Found core {} in {}", cd.getName(), cd.getInstanceDir());
+ cds.add(cd);
+ return FileVisitResult.SKIP_SIBLINGS;
+ }
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
+ // if we get an error on the root, then fail the whole thing
+ // otherwise, log a warning and continue to try and load other cores
+ if (file.equals(rootDirectory)) {
+ logger.error("Error reading core root directory {}: {}", file, exc);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error reading core root directory");
+ }
+ logger.warn("Error visiting {}: {}", file, exc);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ } catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Couldn't walk file tree under " + this.rootDirectory, e);
}
- discoverUnder(rootDirectory, cds, cc);
logger.info("Found {} core definitions", cds.size());
return cds;
}
- private void discoverUnder(File root, List<CoreDescriptor> cds, CoreContainer cc) {
- for (File child : root.listFiles()) {
- if (child.canRead() == false) {
- logger.warn("Cannot read directory or file during core discovery '" + child.getAbsolutePath() + "' during core discovery. Skipping");
- continue;
- }
- File propertiesFile = new File(child, PROPERTIES_FILENAME);
- if (propertiesFile.exists()) {
- CoreDescriptor cd = buildCoreDescriptor(propertiesFile, cc);
- logger.info("Found core {} in {}", cd.getName(), cd.getInstanceDir());
- cds.add(cd);
- continue;
- }
- if (child.isDirectory())
- discoverUnder(child, cds, cc);
- }
- }
+ protected CoreDescriptor buildCoreDescriptor(Path propertiesFile, CoreContainer cc) {
- protected CoreDescriptor buildCoreDescriptor(File propertiesFile, CoreContainer cc) {
- FileInputStream fis = null;
- try {
- File instanceDir = propertiesFile.getParentFile();
- Properties coreProperties = new Properties();
- fis = new FileInputStream(propertiesFile);
+ Path instanceDir = propertiesFile.getParent();
+ Properties coreProperties = new Properties();
+ try (InputStream fis = Files.newInputStream(propertiesFile)) {
coreProperties.load(new InputStreamReader(fis, StandardCharsets.UTF_8));
String name = createName(coreProperties, instanceDir);
- return new CoreDescriptor(cc, name, instanceDir.getAbsolutePath(), coreProperties);
+ Map<String, String> propMap = new HashMap<>();
+ for (String key : coreProperties.stringPropertyNames()) {
+ propMap.put(key, coreProperties.getProperty(key));
+ }
+ return new CoreDescriptor(cc, name, instanceDir, propMap);
}
catch (IOException e) {
- logger.error("Couldn't load core descriptor from {}:{}", propertiesFile.getAbsolutePath(), e.toString());
+ logger.error("Couldn't load core descriptor from {}:{}", propertiesFile, e.toString());
return null;
}
- finally {
- IOUtils.closeQuietly(fis);
- }
+
}
- protected static String createName(Properties p, File instanceDir) {
- return p.getProperty(CoreDescriptor.CORE_NAME, instanceDir.getName());
+ protected static String createName(Properties p, Path instanceDir) {
+ return p.getProperty(CoreDescriptor.CORE_NAME, instanceDir.getFileName().toString());
}
protected Properties buildCoreProperties(CoreDescriptor cd) {
Properties p = new Properties();
p.putAll(cd.getPersistableStandardProperties());
p.putAll(cd.getPersistableUserProperties());
- // We don't persist the instance directory, as that's defined by the location
- // of the properties file.
- p.remove(CoreDescriptor.CORE_INSTDIR);
return p;
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/Diagnostics.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/Diagnostics.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/Diagnostics.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/Diagnostics.java Mon Dec 21 11:39:57 2015
@@ -20,11 +20,12 @@ package org.apache.solr.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.lang.invoke.MethodHandles;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
public class Diagnostics {
- protected static Logger log = LoggerFactory.getLogger(Diagnostics.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public interface Callable {
public void call(Object... data); // data depends on the context
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java Mon Dec 21 11:39:57 2015
@@ -21,6 +21,7 @@ import java.io.Closeable;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.util.Collection;
import java.util.Collections;
@@ -52,7 +53,7 @@ public abstract class DirectoryFactory i
// hint about what the directory contains - default is index directory
public enum DirContext {DEFAULT, META_DATA}
- private static final Logger log = LoggerFactory.getLogger(DirectoryFactory.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
/**
* Indicates a Directory will no longer be used, and when its ref count
@@ -265,8 +266,7 @@ public abstract class DirectoryFactory i
public String getDataHome(CoreDescriptor cd) throws IOException {
// by default, we go off the instance directory
- String instanceDir = new File(cd.getInstanceDir()).getAbsolutePath();
- return normalize(SolrResourceLoader.normalizeDir(instanceDir) + cd.getDataDir());
+ return cd.getInstanceDir().resolve(cd.getDataDir()).toAbsolutePath().toString();
}
/**
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java Mon Dec 21 11:39:57 2015
@@ -20,6 +20,7 @@ package org.apache.solr.core;
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Collection;
@@ -66,8 +67,7 @@ import com.google.common.cache.RemovalLi
import com.google.common.cache.RemovalNotification;
public class HdfsDirectoryFactory extends CachingDirectoryFactory implements SolrCoreAware {
- public static Logger LOG = LoggerFactory
- .getLogger(HdfsDirectoryFactory.class);
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public static final String BLOCKCACHE_SLAB_COUNT = "solr.hdfs.blockcache.slab.count";
public static final String BLOCKCACHE_DIRECT_MEMORY_ALLOCATION = "solr.hdfs.blockcache.direct.memory.allocation";
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java Mon Dec 21 11:39:57 2015
@@ -20,6 +20,7 @@ package org.apache.solr.core;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -27,8 +28,10 @@ import org.apache.solr.common.util.Named
import org.apache.solr.handler.PingRequestHandler;
import org.apache.solr.handler.RealTimeGetHandler;
import org.apache.solr.handler.ReplicationHandler;
+import org.apache.solr.handler.SQLHandler;
import org.apache.solr.handler.SchemaHandler;
import org.apache.solr.handler.SolrConfigHandler;
+import org.apache.solr.handler.StreamHandler;
import org.apache.solr.handler.UpdateRequestHandler;
import org.apache.solr.handler.admin.LoggingHandler;
import org.apache.solr.handler.admin.LukeRequestHandler;
@@ -39,13 +42,15 @@ import org.apache.solr.handler.admin.Sho
import org.apache.solr.handler.admin.SolrInfoMBeanHandler;
import org.apache.solr.handler.admin.SystemInfoHandler;
import org.apache.solr.handler.admin.ThreadDumpHandler;
+import org.apache.solr.handler.component.SearchHandler;
import org.apache.solr.request.SolrRequestHandler;
import static java.util.Collections.singletonMap;
-import static org.apache.solr.common.util.Utils.makeMap;
import static org.apache.solr.common.params.CommonParams.JSON;
import static org.apache.solr.common.params.CommonParams.NAME;
import static org.apache.solr.common.params.CommonParams.WT;
+import static org.apache.solr.common.util.Utils.makeMap;
+import static org.apache.solr.core.PluginInfo.APPENDS;
import static org.apache.solr.core.PluginInfo.DEFAULTS;
import static org.apache.solr.core.PluginInfo.INVARIANTS;
@@ -55,51 +60,95 @@ public class ImplicitPlugins {
List<PluginInfo> implicits = new ArrayList<>();
//update handle implicits
- implicits.add(getReqHandlerInfo("/update", UpdateRequestHandler.class, null));
- implicits.add(getReqHandlerInfo(UpdateRequestHandler.JSON_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/json")));
- implicits.add(getReqHandlerInfo(UpdateRequestHandler.CSV_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/csv")));
- implicits.add(getReqHandlerInfo(UpdateRequestHandler.DOC_PATH, UpdateRequestHandler.class, makeMap("update.contentType", "application/json", "json.command", "false")));
+ implicits.add(createPluginInfoWithDefaults("/update", UpdateRequestHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.JSON_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/json")));
+ implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.CSV_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/csv")));
+ implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.DOC_PATH, UpdateRequestHandler.class, makeMap("update.contentType", "application/json", "json.command", "false")));
//solrconfighandler
- PluginInfo config = getReqHandlerInfo("/config", SolrConfigHandler.class, null);
+ PluginInfo config = createPluginInfoWithDefaults("/config", SolrConfigHandler.class, null);
if (solrCore.getConfigSetProperties() != null) {
config.initArgs.addAll(solrCore.getConfigSetProperties());
}
implicits.add(config);
//schemahandler
- PluginInfo schema = getReqHandlerInfo("/schema", SchemaHandler.class, null);
+ PluginInfo schema = createPluginInfoWithDefaults("/schema", SchemaHandler.class, null);
if (solrCore.getConfigSetProperties() != null) {
schema.initArgs.addAll(solrCore.getConfigSetProperties());
}
implicits.add(schema);
//register replicationhandler always for SolrCloud
- implicits.add(getReqHandlerInfo("/replication", ReplicationHandler.class,null));
+ implicits.add(createPluginInfoWithDefaults("/replication", ReplicationHandler.class,null));
- implicits.add(getReqHandlerInfo("/get", RealTimeGetHandler.class,
+ implicits.add(createPluginInfoWithDefaults("/get", RealTimeGetHandler.class,
makeMap(
"omitHeader", "true",
WT, JSON,
"indent", "true")));
+
+ PluginInfo exportInitArgs = createPluginInfo("/export", SearchHandler.class,
+ null, // defaults
+ null, // appends
+ // we need invariants here
+ makeMap(
+ "rq", "{!xport}",
+ "wt", "xsort",
+ "distrib", "false"
+ ));
+ exportInitArgs.initArgs.add("components", Collections.singletonList("query"));
+ implicits.add(exportInitArgs);
+
+ implicits.add(createPluginInfo("/stream", StreamHandler.class,
+ null, // defaults
+ null, // appends
+ // we need invariants here
+ makeMap(
+ "wt", "json",
+ "distrib", "false"
+ )));
+
+ implicits.add(createPluginInfo("/sql", SQLHandler.class,
+ null, // defaults
+ null, // appends
+ // we need invariants here
+ makeMap(
+ "wt", "json",
+ "distrib", "false"
+ )));
+
//register adminHandlers
- implicits.add(getReqHandlerInfo("/admin/luke", LukeRequestHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/system", SystemInfoHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/mbeans", SolrInfoMBeanHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/plugins", PluginInfoHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/threads", ThreadDumpHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/properties", PropertiesRequestHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/logging", LoggingHandler.class, null));
- implicits.add(getReqHandlerInfo("/admin/file", ShowFileRequestHandler.class, null));
- PluginInfo ping = getReqHandlerInfo("/admin/ping", PingRequestHandler.class, null);
- ping.initArgs.add(INVARIANTS, new NamedList<>(makeMap("echoParams", "all", "q", "{!lucene}*:*")));
- implicits.add(ping);
- implicits.add(getReqHandlerInfo("/admin/segments", SegmentsInfoRequestHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/luke", LukeRequestHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/system", SystemInfoHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/mbeans", SolrInfoMBeanHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/plugins", PluginInfoHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/threads", ThreadDumpHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/properties", PropertiesRequestHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/logging", LoggingHandler.class, null));
+ implicits.add(createPluginInfoWithDefaults("/admin/file", ShowFileRequestHandler.class, null));
+ implicits.add(createPluginInfo("/admin/ping", PingRequestHandler.class,
+ null, // defaults
+ null, // appends
+ // invariants
+ makeMap("echoParams", "all", "q", "{!lucene}*:*")));
+ implicits.add(createPluginInfoWithDefaults("/admin/segments", SegmentsInfoRequestHandler.class, null));
return implicits;
}
- public static PluginInfo getReqHandlerInfo(String name, Class clz, Map defaults){
- if(defaults == null) defaults= Collections.emptyMap();
+ public static PluginInfo createPluginInfoWithDefaults(String name, Class clz, Map defaults) {
+ return createPluginInfo(name, clz, defaults, null, null);
+ }
+
+ public static PluginInfo createPluginInfo(String name, Class clz, Map defaults, Map appends, Map invariants) {
+ if (defaults == null) defaults = Collections.emptyMap();
Map m = makeMap(NAME, name, "class", clz.getName());
- // be explicit with generics, because Java 9 fails to compile otherwise (type inference: Map.Entry[] vs. singletonMap):
- return new PluginInfo(SolrRequestHandler.TYPE, m, new NamedList<>(Collections.<String,Object>singletonMap(DEFAULTS, new NamedList<>(defaults))),null);
+ Map<String, Object> args = new HashMap<>(1);
+ args.put(DEFAULTS, new NamedList<>(defaults));
+ if (appends != null) {
+ args.put(APPENDS, new NamedList<>(appends));
+ }
+ if (invariants != null) {
+ args.put(INVARIANTS, new NamedList<>(invariants));
+ }
+ return new PluginInfo(SolrRequestHandler.TYPE, m, new NamedList<>(args), null);
}
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java Mon Dec 21 11:39:57 2015
@@ -25,6 +25,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
@@ -45,8 +46,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 static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
private final IndexDeletionPolicy deletionPolicy;
private volatile Map<Long, IndexCommit> solrVersionVsCommits = new ConcurrentHashMap<>();
private final Map<Long, Long> reserves = new ConcurrentHashMap<>();
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JarRepository.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JarRepository.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JarRepository.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JarRepository.java Mon Dec 21 11:39:57 2015
@@ -22,6 +22,7 @@ import static org.apache.solr.common.clo
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
@@ -53,7 +54,7 @@ import org.slf4j.LoggerFactory;
* The purpose of this class is to store the Jars loaded in memory and to keep only one copy of the Jar in a single node.
*/
public class JarRepository {
- public static Logger log = LoggerFactory.getLogger(JarRepository.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
static final Random RANDOM;
static {
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java Mon Dec 21 11:39:57 2015
@@ -37,6 +37,8 @@ import javax.management.openmbean.Simple
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
+
+import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -71,8 +73,7 @@ import static org.apache.solr.common.par
*/
public class JmxMonitoredMap<K, V> extends
ConcurrentHashMap<String, SolrInfoMBean> {
- private static final Logger LOG = LoggerFactory.getLogger(JmxMonitoredMap.class
- .getName());
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
// set to true to use cached statistics NamedLists between getMBeanInfo calls to work
// around over calling getStatistics on MBeanInfos when iterating over all attributes (SOLR-6586)
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java Mon Dec 21 11:39:57 2015
@@ -19,6 +19,7 @@ package org.apache.solr.core;
import java.io.File;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.nio.file.Path;
import org.apache.lucene.store.Directory;
@@ -41,7 +42,7 @@ import org.slf4j.LoggerFactory;
*
**/
public class MMapDirectoryFactory extends StandardDirectoryFactory {
- private transient static Logger log = LoggerFactory.getLogger(MMapDirectoryFactory.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
boolean unmapHack;
private int maxChunk;
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MemClassLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MemClassLoader.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MemClassLoader.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/MemClassLoader.java Mon Dec 21 11:39:57 2015
@@ -19,6 +19,7 @@ package org.apache.solr.core;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.invoke.MethodHandles;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
@@ -38,7 +39,7 @@ import org.slf4j.LoggerFactory;
public class MemClassLoader extends ClassLoader implements AutoCloseable, ResourceLoader {
- static final Logger log = LoggerFactory.getLogger(MemClassLoader.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private boolean allJarsLoaded = false;
private final SolrResourceLoader parentLoader;
private List<PluginBag.RuntimeLib> libs = new ArrayList<>();
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/NodeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/NodeConfig.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/NodeConfig.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/NodeConfig.java Mon Dec 21 11:39:57 2015
@@ -17,20 +17,21 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import java.nio.file.Path;
+import java.util.Properties;
+
import org.apache.solr.common.SolrException;
import org.apache.solr.logging.LogWatcherConfig;
import org.apache.solr.update.UpdateShardHandlerConfig;
-import java.util.Properties;
-
public class NodeConfig {
private final String nodeName;
- private final String coreRootDirectory;
+ private final Path coreRootDirectory;
- private final String configSetBaseDirectory;
+ private final Path configSetBaseDirectory;
private final String sharedLibDirectory;
@@ -58,7 +59,7 @@ public class NodeConfig {
private final String managementPath;
- private NodeConfig(String nodeName, String coreRootDirectory, String configSetBaseDirectory, String sharedLibDirectory,
+ private NodeConfig(String nodeName, Path coreRootDirectory, Path configSetBaseDirectory, String sharedLibDirectory,
PluginInfo shardHandlerFactoryConfig, UpdateShardHandlerConfig updateShardHandlerConfig,
String coreAdminHandlerClass, String collectionsAdminHandlerClass,
String infoHandlerClass, String configSetsHandlerClass,
@@ -94,7 +95,7 @@ public class NodeConfig {
return nodeName;
}
- public String getCoreRootDirectory() {
+ public Path getCoreRootDirectory() {
return coreRootDirectory;
}
@@ -158,7 +159,7 @@ public class NodeConfig {
return managementPath;
}
- public String getConfigSetBaseDirectory() {
+ public Path getConfigSetBaseDirectory() {
return configSetBaseDirectory;
}
@@ -187,8 +188,8 @@ public class NodeConfig {
public static class NodeConfigBuilder {
- private String coreRootDirectory = "";
- private String configSetBaseDirectory = "configsets";
+ private Path coreRootDirectory;
+ private Path configSetBaseDirectory;
private String sharedLibDirectory = "lib";
private PluginInfo shardHandlerFactoryConfig;
private UpdateShardHandlerConfig updateShardHandlerConfig = UpdateShardHandlerConfig.DEFAULT;
@@ -219,16 +220,17 @@ public class NodeConfig {
public NodeConfigBuilder(String nodeName, SolrResourceLoader loader) {
this.nodeName = nodeName;
this.loader = loader;
- this.coreRootDirectory = loader.getInstanceDir();
+ this.coreRootDirectory = loader.getInstancePath();
+ this.configSetBaseDirectory = loader.getInstancePath().resolve("configsets");
}
public NodeConfigBuilder setCoreRootDirectory(String coreRootDirectory) {
- this.coreRootDirectory = loader.resolve(coreRootDirectory);
+ this.coreRootDirectory = loader.getInstancePath().resolve(coreRootDirectory);
return this;
}
public NodeConfigBuilder setConfigSetBaseDirectory(String configSetBaseDirectory) {
- this.configSetBaseDirectory = configSetBaseDirectory;
+ this.configSetBaseDirectory = loader.getInstancePath().resolve(configSetBaseDirectory);
return this;
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/PluginBag.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/PluginBag.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/PluginBag.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/PluginBag.java Mon Dec 21 11:39:57 2015
@@ -19,6 +19,7 @@ package org.apache.solr.core;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
@@ -51,7 +52,7 @@ import static org.apache.solr.common.par
* This manages the lifecycle of a set of plugin of the same type .
*/
public class PluginBag<T> implements AutoCloseable {
- public static Logger log = LoggerFactory.getLogger(PluginBag.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<String, PluginHolder<T>> registry;
private final Map<String, PluginHolder<T>> immutableRegistry;
@@ -125,6 +126,11 @@ public class PluginBag<T> implements Aut
}
}
+ /** make a plugin available in an alternate name. This is an internal API and not for public use
+ * @param src key in which the plugin is already registered
+ * @param target the new key in which the plugin should be aliased to. If target exists already, the alias fails
+ * @return flag if the operation is successful or not
+ */
boolean alias(String src, String target) {
if (src == null) return false;
PluginHolder<T> a = registry.get(src);
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java Mon Dec 21 11:39:57 2015
@@ -21,6 +21,8 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.response.ResultContext;
import org.apache.solr.search.SolrIndexSearcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.apache.solr.search.DocList;
import org.apache.solr.search.DocIterator;
import org.apache.solr.common.params.CommonParams;
@@ -28,12 +30,15 @@ import org.apache.solr.common.util.Named
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
+import java.lang.invoke.MethodHandles;
import java.util.List;
/**
*
*/
public class QuerySenderListener extends AbstractSolrEventListener {
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
public QuerySenderListener(SolrCore core) {
super(core);
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java Mon Dec 21 11:39:57 2015
@@ -25,16 +25,12 @@ import org.apache.lucene.store.RAMDirect
import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Factory to instantiate {@link org.apache.lucene.store.RAMDirectory}
*/
public class RAMDirectoryFactory extends EphemeralDirectoryFactory {
- public static Logger LOG = LoggerFactory.getLogger(RAMDirectoryFactory.class);
-
@Override
protected LockFactory createLockFactory(String rawLockType) throws IOException {
if (!(rawLockType == null || "single".equalsIgnoreCase(rawLockType.trim()))) {
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestHandlers.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestHandlers.java Mon Dec 21 11:39:57 2015
@@ -17,6 +17,7 @@
package org.apache.solr.core;
+import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -31,7 +32,7 @@ import org.slf4j.LoggerFactory;
/**
*/
public final class RequestHandlers {
- public static Logger log = LoggerFactory.getLogger(RequestHandlers.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
protected final SolrCore core;
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestParams.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestParams.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RequestParams.java Mon Dec 21 11:39:57 2015
@@ -20,6 +20,7 @@ package org.apache.solr.core;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -42,7 +43,7 @@ import org.slf4j.LoggerFactory;
* returns a copy of the Object with the changed values
*/
public class RequestParams implements MapSerializable {
- public static final Logger log = LoggerFactory.getLogger(RequestParams.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map data;
private final Map<String, VersionedParams> paramsets = new LinkedHashMap<>();
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RunExecutableListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RunExecutableListener.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RunExecutableListener.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/RunExecutableListener.java Mon Dec 21 11:39:57 2015
@@ -20,15 +20,20 @@ package org.apache.solr.core;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.search.SolrIndexSearcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.ArrayList;
/**
*/
class RunExecutableListener extends AbstractSolrEventListener {
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
public RunExecutableListener(SolrCore core) {
super(core);
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java Mon Dec 21 11:39:57 2015
@@ -3,7 +3,7 @@ package org.apache.solr.core;
import org.apache.lucene.codecs.Codec;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.PostingsFormat;
-import org.apache.lucene.codecs.lucene53.Lucene53Codec;
+import org.apache.lucene.codecs.lucene60.Lucene60Codec;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.util.plugin.SolrCoreAware;
@@ -51,7 +51,7 @@ public class SchemaCodecFactory extends
@Override
public void init(NamedList args) {
super.init(args);
- codec = new Lucene53Codec() {
+ codec = new Lucene60Codec() {
@Override
public PostingsFormat getPostingsFormatForField(String field) {
final SchemaField schemaField = core.getLatestSchema().getFieldOrNull(field);
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrConfig.java Mon Dec 21 11:39:57 2015
@@ -20,29 +20,20 @@ package org.apache.solr.core;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathConstants;
-
-import java.io.File;
-import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.lang.invoke.MethodHandles;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.UUID;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.ImmutableList;
-
import org.apache.lucene.index.IndexDeletionPolicy;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.util.Version;
@@ -68,8 +59,6 @@ import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
import org.apache.solr.util.DOMUtil;
-import org.apache.solr.util.FileUtils;
-import org.apache.solr.util.RegexFileFilter;
import org.noggit.JSONParser;
import org.noggit.ObjectBuilder;
import org.slf4j.Logger;
@@ -79,9 +68,9 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import static org.apache.solr.common.util.Utils.makeMap;
import static org.apache.solr.common.params.CommonParams.NAME;
import static org.apache.solr.common.params.CommonParams.PATH;
+import static org.apache.solr.common.util.Utils.makeMap;
import static org.apache.solr.core.ConfigOverlay.ZNODEVER;
import static org.apache.solr.core.SolrConfig.PluginOpts.LAZY;
import static org.apache.solr.core.SolrConfig.PluginOpts.MULTI_OK;
@@ -98,7 +87,7 @@ import static org.apache.solr.core.SolrC
*/
public class SolrConfig extends Config implements MapSerializable {
- public static final Logger log = LoggerFactory.getLogger(SolrConfig.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public static final String DEFAULT_CONF_FILE = "solrconfig.xml";
private RequestParams requestParams;
@@ -166,7 +155,7 @@ public class SolrConfig extends Config i
* @param name the configuration name used by the loader if the stream is null
* @param is the configuration stream
*/
- public SolrConfig(String instanceDir, String name, InputSource is)
+ public SolrConfig(Path instanceDir, String name, InputSource is)
throws ParserConfigurationException, IOException, SAXException {
this(new SolrResourceLoader(instanceDir), name, is);
}
@@ -179,7 +168,7 @@ public class SolrConfig extends Config i
if (loader instanceof ZkSolrResourceLoader) {
resource = name;
} else {
- resource = loader.getConfigDir() + name;
+ resource = Paths.get(loader.getConfigDir()).resolve(name).toString();
}
throw new SolrException(ErrorCode.SERVER_ERROR, "Error loading solr config from " + resource, e);
}
@@ -318,7 +307,7 @@ public class SolrConfig extends Config i
}
solrRequestParsers = new SolrRequestParsers(this);
- Config.log.info("Loaded SolrConfig: " + name);
+ log.info("Loaded SolrConfig: " + name);
}
public static final List<SolrPluginInfo> plugins = ImmutableList.<SolrPluginInfo>builder()
@@ -745,32 +734,38 @@ public class SolrConfig extends Config i
log.info("Adding specified lib dirs to ClassLoader");
SolrResourceLoader loader = getResourceLoader();
+ List<URL> urls = new ArrayList<>();
- try {
- for (int i = 0; i < nodes.getLength(); i++) {
- Node node = nodes.item(i);
-
- String baseDir = DOMUtil.getAttr(node, "dir");
- String path = DOMUtil.getAttr(node, PATH);
- if (null != baseDir) {
- // :TODO: add support for a simpler 'glob' mutually exclusive of regex
- String regex = DOMUtil.getAttr(node, "regex");
- FileFilter filter = (null == regex) ? null : new RegexFileFilter(regex);
- loader.addToClassLoader(baseDir, filter, false);
- } else if (null != path) {
- final File file = FileUtils.resolvePath(new File(loader.getInstanceDir()), path);
- loader.addToClassLoader(file.getParent(), new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- return pathname.equals(file);
- }
- }, false);
- } else {
- throw new RuntimeException(
- "lib: missing mandatory attributes: 'dir' or 'path'");
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node node = nodes.item(i);
+ String baseDir = DOMUtil.getAttr(node, "dir");
+ String path = DOMUtil.getAttr(node, PATH);
+ if (null != baseDir) {
+ // :TODO: add support for a simpler 'glob' mutually exclusive of regex
+ Path dir = loader.getInstancePath().resolve(baseDir);
+ String regex = DOMUtil.getAttr(node, "regex");
+ try {
+ if (regex == null)
+ urls.addAll(SolrResourceLoader.getURLs(dir));
+ else
+ urls.addAll(SolrResourceLoader.getFilteredURLs(dir, regex));
+ } catch (IOException e) {
+ log.warn("Couldn't add files from {} filtered by {} to classpath: {}", dir, regex, e.getMessage());
+ }
+ } else if (null != path) {
+ final Path dir = loader.getInstancePath().resolve(path);
+ try {
+ urls.add(dir.toUri().toURL());
+ } catch (MalformedURLException e) {
+ log.warn("Couldn't add file {} to classpath: {}", dir, e.getMessage());
}
+ } else {
+ throw new RuntimeException("lib: missing mandatory attributes: 'dir' or 'path'");
}
- } finally {
+ }
+
+ if (urls.size() > 0) {
+ loader.addToClassLoader(urls);
loader.reloadLuceneSPI();
}
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCore.java Mon Dec 21 11:39:57 2015
@@ -17,9 +17,6 @@
package org.apache.solr.core;
-import static com.google.common.base.Preconditions.*;
-import static org.apache.solr.common.params.CommonParams.*;
-
import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
@@ -27,26 +24,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.lang.invoke.MethodHandles;
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.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -55,7 +38,6 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.commons.io.FileUtils;
@@ -83,6 +65,7 @@ import org.apache.solr.common.params.Upd
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.ObjectReleaseTracker;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.DirectoryFactory.DirContext;
import org.apache.solr.handler.IndexFetcher;
@@ -94,20 +77,7 @@ import org.apache.solr.handler.component
import org.apache.solr.logging.MDCLoggingContext;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
-import org.apache.solr.response.BinaryResponseWriter;
-import org.apache.solr.response.CSVResponseWriter;
-import org.apache.solr.response.JSONResponseWriter;
-import org.apache.solr.response.PHPResponseWriter;
-import org.apache.solr.response.PHPSerializedResponseWriter;
-import org.apache.solr.response.PythonResponseWriter;
-import org.apache.solr.response.QueryResponseWriter;
-import org.apache.solr.response.RawResponseWriter;
-import org.apache.solr.response.RubyResponseWriter;
-import org.apache.solr.response.SchemaXmlResponseWriter;
-import org.apache.solr.response.SmileResponseWriter;
-import org.apache.solr.response.SolrQueryResponse;
-import org.apache.solr.response.SortingResponseWriter;
-import org.apache.solr.response.XMLResponseWriter;
+import org.apache.solr.response.*;
import org.apache.solr.response.transform.TransformerFactory;
import org.apache.solr.rest.ManagedResourceStorage;
import org.apache.solr.rest.ManagedResourceStorage.StorageIO;
@@ -147,20 +117,17 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.solr.common.params.CommonParams.PATH;
+
/**
*
*/
public final class SolrCore implements SolrInfoMBean, Closeable {
public static final String version="1.0";
- // These should *only* be used for debugging or monitoring purposes
- public static final AtomicLong numOpens = new AtomicLong();
- public static final AtomicLong numCloses = new AtomicLong();
- public static Map<SolrCore,Exception> openHandles = Collections.synchronizedMap(new IdentityHashMap<SolrCore, Exception>());
-
-
- public static final Logger log = LoggerFactory.getLogger(SolrCore.class);
- public static final Logger requestLog = LoggerFactory.getLogger(SolrCore.class.getName() + ".Request");
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ public static final Logger requestLog = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass().getName() + ".Request");
private String name;
private String logid; // used to show what name is set
@@ -259,17 +226,37 @@ public final class SolrCore implements S
public String getSchemaResource() {
return getLatestSchema().getResourceName();
}
-
- /** @return the latest snapshot of the schema used by this core instance. */
+
+ /**
+ * @return the latest snapshot of the schema used by this core instance.
+ * @see #setLatestSchema
+ */
public IndexSchema getLatestSchema() {
return schema;
}
-
- /** Sets the latest schema snapshot to be used by this core instance. */
+
+ /**
+ * Sets the latest schema snapshot to be used by this core instance.
+ * If the specified <code>replacementSchema</code> uses a {@link SimilarityFactory} which is
+ * {@link SolrCoreAware} then this method will {@link SolrCoreAware#inform} that factory about
+ * this SolrCore prior to using the <code>replacementSchema</code>
+ * @see #getLatestSchema
+ */
public void setLatestSchema(IndexSchema replacementSchema) {
- schema = replacementSchema;
+ // 1) For a newly instantiated core, the Similarity needs SolrCore before inform() is called on
+ // any registered SolrCoreAware listeners (which will likeley need to use the SolrIndexSearcher.
+ //
+ // 2) If a new IndexSchema is assigned to an existing live SolrCore (ie: managed schema
+ // replacement via SolrCloud) then we need to explicitly inform() the similarity because
+ // we can't rely on the normal SolrResourceLoader lifecycle because the sim was instantiated
+ // after the SolrCore was already live (see: SOLR-8311 + SOLR-8280)
+ final SimilarityFactory similarityFactory = replacementSchema.getSimilarityFactory();
+ if (similarityFactory instanceof SolrCoreAware) {
+ ((SolrCoreAware) similarityFactory).inform(this);
+ }
+ this.schema = replacementSchema;
}
-
+
public NamedList getConfigSetProperties() {
return configSetProperties;
}
@@ -721,6 +708,9 @@ public final class SolrCore implements S
IndexSchema schema, NamedList configSetProperties,
CoreDescriptor coreDescriptor, UpdateHandler updateHandler,
IndexDeletionPolicyWrapper delPolicy, SolrCore prev) {
+
+ assert ObjectReleaseTracker.track(searcherExecutor); // ensure that in unclean shutdown tests we still close this
+
checkNotNull(coreDescriptor, "coreDescriptor cannot be null");
this.coreDescriptor = coreDescriptor;
@@ -743,7 +733,7 @@ public final class SolrCore implements S
this.dataDir = initDataDir(dataDir, config, coreDescriptor);
this.ulogDir = initUpdateLogDir(coreDescriptor);
- log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, resourceLoader.getInstanceDir(), dataDir);
+ log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, resourceLoader.getInstancePath(), this.dataDir);
checkVersionFieldExistsInSchema(schema, coreDescriptor);
@@ -751,7 +741,7 @@ public final class SolrCore implements S
this.infoRegistry = initInfoRegistry(name, config);
infoRegistry.put("fieldCache", new SolrFieldCacheMBean());
- this.schema = initSchema(config, schema);
+ initSchema(config, schema);
this.maxWarmingSearchers = config.maxWarmingSearchers;
this.slowQueryThresholdMillis = config.slowQueryThresholdMillis;
@@ -859,13 +849,11 @@ public final class SolrCore implements S
seedVersionBuckets();
bufferUpdatesIfConstructing(coreDescriptor);
-
- // For debugging
-// numOpens.incrementAndGet();
-// openHandles.put(this, new RuntimeException("unclosed core - name:" + getName() + " refs: " + refCount.get()));
this.ruleExpiryLock = new ReentrantLock();
registerConfListener();
+
+ assert ObjectReleaseTracker.track(this);
}
public void seedVersionBuckets() {
@@ -948,17 +936,18 @@ public final class SolrCore implements S
infoRegistry.put("updateHandler", newUpdateHandler);
return newUpdateHandler;
}
-
- private IndexSchema initSchema(SolrConfig config, IndexSchema schema) {
+
+ /**
+ * Initializes the "Latest Schema" for this SolrCore using either the provided <code>schema</code>
+ * if non-null, or a new instance build via the factory identified in the specified <code>config</code>
+ * @see IndexSchemaFactory
+ * @see #setLatestSchema
+ */
+ private void initSchema(SolrConfig config, IndexSchema schema) {
if (schema == null) {
schema = IndexSchemaFactory.buildIndexSchema(IndexSchema.DEFAULT_SCHEMA_FILE, config);
}
- final SimilarityFactory similarityFactory = schema.getSimilarityFactory();
- if (similarityFactory instanceof SolrCoreAware) {
- // Similarity needs SolrCore before inform() is called on all registered SolrCoreAware listeners below
- ((SolrCoreAware) similarityFactory).inform(this);
- }
- return schema;
+ setLatestSchema(schema);
}
private Map<String,SolrInfoMBean> initInfoRegistry(String name, SolrConfig config) {
@@ -1013,10 +1002,7 @@ public final class SolrCore implements S
private String initUpdateLogDir(CoreDescriptor coreDescriptor) {
String updateLogDir = coreDescriptor.getUlogDir();
if (updateLogDir == null) {
- updateLogDir = dataDir;
- if (new File(updateLogDir).isAbsolute() == false) {
- updateLogDir = SolrResourceLoader.normalizeDir(coreDescriptor.getInstanceDir()) + updateLogDir;
- }
+ updateLogDir = coreDescriptor.getInstanceDir().resolve(dataDir).normalize().toAbsolutePath().toString();
}
return updateLogDir;
}
@@ -1236,6 +1222,7 @@ public final class SolrCore implements S
throw (Error) e;
}
}
+ assert ObjectReleaseTracker.release(searcherExecutor);
try {
// Since we waited for the searcherExecutor to shut down,
@@ -1275,7 +1262,6 @@ public final class SolrCore implements S
}
-
if( closeHooks != null ) {
for( CloseHook hook : closeHooks ) {
try {
@@ -1288,10 +1274,7 @@ public final class SolrCore implements S
}
}
}
-
- // For debugging
-// numCloses.incrementAndGet();
-// openHandles.remove(this);
+ assert ObjectReleaseTracker.release(this);
}
/** Current core usage count. */
@@ -2169,7 +2152,7 @@ public final class SolrCore implements S
private final PluginBag<QueryResponseWriter> responseWriters = new PluginBag<>(QueryResponseWriter.class, this);
public static final Map<String ,QueryResponseWriter> DEFAULT_RESPONSE_WRITERS ;
static{
- HashMap<String, QueryResponseWriter> m= new HashMap<>();
+ HashMap<String, QueryResponseWriter> m= new HashMap<>(14, 1);
m.put("xml", new XMLResponseWriter());
m.put("standard", m.get("xml"));
m.put(CommonParams.JSON, new JSONResponseWriter());
@@ -2243,14 +2226,14 @@ public final class SolrCore implements S
private final PluginBag<TransformerFactory> transformerFactories = new PluginBag<>(TransformerFactory.class, this);
<T> Map<String, T> createInstances(Map<String, Class<? extends T>> map) {
- Map<String, T> result = new LinkedHashMap<>();
+ Map<String, T> result = new LinkedHashMap<>(map.size(), 1);
for (Map.Entry<String, Class<? extends T>> e : map.entrySet()) {
try {
Object o = getResourceLoader().newInstance(e.getValue().getName(), e.getValue());
result.put(e.getKey(), (T) o);
} catch (Exception exp) {
//should never happen
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unbale to instantiate class", exp);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unable to instantiate class", exp);
}
}
return result;
@@ -2293,7 +2276,7 @@ public final class SolrCore implements S
*/
public <T> List<T> initPlugins(List<PluginInfo> pluginInfos, Class<T> type, String defClassName) {
if(pluginInfos.isEmpty()) return Collections.emptyList();
- List<T> result = new ArrayList<>();
+ List<T> result = new ArrayList<>(pluginInfos.size());
for (PluginInfo info : pluginInfos) result.add(createInitInstance(info,type, type.getSimpleName(), defClassName));
return result;
}
@@ -2440,11 +2423,11 @@ public final class SolrCore implements S
@Override
public NamedList getStatistics() {
- NamedList<Object> lst = new SimpleOrderedMap<>();
+ NamedList<Object> lst = new SimpleOrderedMap<>(8);
lst.add("coreName", name==null ? "(null)" : name);
lst.add("startTime", startTime);
lst.add("refCount", getOpenCount());
- lst.add("instanceDir", resourceLoader.getInstanceDir());
+ lst.add("instanceDir", resourceLoader.getInstancePath());
lst.add("indexDir", getIndexDir());
CoreDescriptor cd = getCoreDescriptor();
@@ -2499,12 +2482,11 @@ public final class SolrCore implements S
public void postClose(SolrCore core) {
CoreDescriptor cd = core.getCoreDescriptor();
if (cd != null) {
- File instanceDir = new File(cd.getInstanceDir());
try {
- FileUtils.deleteDirectory(instanceDir);
+ FileUtils.deleteDirectory(cd.getInstanceDir().toFile());
} catch (IOException e) {
SolrException.log(log, "Failed to delete instance dir for core:"
- + core.getName() + " dir:" + instanceDir.getAbsolutePath());
+ + core.getName() + " dir:" + cd.getInstanceDir());
}
}
}
@@ -2523,12 +2505,11 @@ public final class SolrCore implements S
}
}
if (deleteInstanceDir) {
- File instanceDir = new File(cd.getInstanceDir());
try {
- FileUtils.deleteDirectory(instanceDir);
+ FileUtils.deleteDirectory(cd.getInstanceDir().toFile());
} catch (IOException e) {
SolrException.log(log, "Failed to delete instance dir for unloaded core:" + cd.getName()
- + " dir:" + instanceDir.getAbsolutePath());
+ + " dir:" + cd.getInstanceDir());
}
}
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCores.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCores.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCores.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrCores.java Mon Dec 21 11:39:57 2015
@@ -23,6 +23,7 @@ import org.apache.solr.logging.MDCLoggin
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -52,7 +53,7 @@ class SolrCores {
private Set<String> currentlyLoadingCores = Collections.newSetFromMap(new ConcurrentHashMap<String,Boolean>());
- private static final Logger log = LoggerFactory.getLogger(SolrCores.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
// This map will hold objects that are being currently operated on. The core (value) may be null in the case of
// initial load. The rule is, never to any operation on a core that is currently being operated upon.
@@ -70,7 +71,7 @@ class SolrCores {
// there is no setting for max size, nothing is done and all cores go in the regular "cores" list
protected void allocateLazyCores(final int cacheSize, final SolrResourceLoader loader) {
if (cacheSize != Integer.MAX_VALUE) {
- CoreContainer.log.info("Allocating transient cache for {} transient cores", cacheSize);
+ log.info("Allocating transient cache for {} transient cores", cacheSize);
transientCores = new LinkedHashMap<String, SolrCore>(cacheSize, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, SolrCore> eldest) {
@@ -123,7 +124,7 @@ class SolrCores {
try {
core.close();
} catch (Throwable e) {
- SolrException.log(CoreContainer.log, "Error shutting down core", e);
+ SolrException.log(log, "Error shutting down core", e);
if (e instanceof Error) {
throw (Error) e;
}
@@ -137,7 +138,7 @@ class SolrCores {
//WARNING! This should be the _only_ place you put anything into the list of transient cores!
protected SolrCore putTransientCore(NodeConfig cfg, String name, SolrCore core, SolrResourceLoader loader) {
SolrCore retCore;
- CoreContainer.log.info("Opening transient core {}", name);
+ log.info("Opening transient core {}", name);
synchronized (modifyLock) {
retCore = transientCores.put(name, core);
}
@@ -352,7 +353,7 @@ class SolrCores {
// We _really_ need to do this within the synchronized block!
if (! container.isShutDown()) {
if (! pendingCoreOps.add(name)) {
- CoreContainer.log.warn("Replaced an entry in pendingCoreOps {}, we should not be doing this", name);
+ log.warn("Replaced an entry in pendingCoreOps {}, we should not be doing this", name);
}
return getCoreFromAnyList(name, false); // we might have been _unloading_ the core, so return the core if it was loaded.
}
@@ -365,7 +366,7 @@ class SolrCores {
protected void removeFromPendingOps(String name) {
synchronized (modifyLock) {
if (! pendingCoreOps.remove(name)) {
- CoreContainer.log.warn("Tried to remove core {} from pendingCoreOps and it wasn't there. ", name);
+ log.warn("Tried to remove core {} from pendingCoreOps and it wasn't there. ", name);
}
modifyLock.notifyAll();
}
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java Mon Dec 21 11:39:57 2015
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
+import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Locale;
@@ -42,7 +43,7 @@ import java.util.Locale;
* @see org.apache.lucene.index.IndexDeletionPolicy
*/
public class SolrDeletionPolicy extends IndexDeletionPolicy implements NamedListInitializedPlugin {
- public static Logger log = LoggerFactory.getLogger(SolrCore.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private String maxCommitAge = null;
private int maxCommitsToKeep = 1;
Modified: lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrEventListener.java?rev=1721134&r1=1721133&r2=1721134&view=diff
==============================================================================
--- lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrEventListener.java (original)
+++ lucene/dev/branches/lucene6835/solr/core/src/java/org/apache/solr/core/SolrEventListener.java Mon Dec 21 11:39:57 2015
@@ -20,15 +20,10 @@ package org.apache.solr.core;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
*
*/
public interface SolrEventListener extends NamedListInitializedPlugin{
- static final Logger log = LoggerFactory.getLogger(SolrCore.class);
-
public void postCommit();