From f9521549e0dc45c9298dfbebb59b5aaef21e1670 Mon Sep 17 00:00:00 2001 From: Christine Poerschke Date: Wed, 15 Jun 2016 12:11:02 +0100 Subject: [PATCH 01/13] SOLR-9195: remove unnecessary allocation and null check in UpdateRequestProcessorChain.getReqProcessors --- solr/CHANGES.txt | 6 ++++++ .../UpdateRequestProcessorChain.java | 19 ++++++++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 3f7c5239608..00b280dfa66 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -47,6 +47,12 @@ Bug Fixes * SOLR-9161: Change SolrPluginUtils.invokeSetters implementation to accommodate setter variants. (Christine Poerschke, Steve Rowe, Uwe Schindler) +Other Changes +---------------------- + +* SOLR-9195: Remove unnecessary allocation and null check in UpdateRequestProcessorChain's + getReqProcessors method. (Christine Poerschke) + ================== 6.1.0 ================== Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release. diff --git a/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java b/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java index 5efcb95e8ef..bd23b4bb5d7 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java +++ b/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java @@ -265,17 +265,14 @@ public final class UpdateRequestProcessorChain implements PluginInfoInitialized static List getReqProcessors(String processor, SolrCore core) { if (processor == null) return Collections.EMPTY_LIST; List result = new ArrayList<>(); - if (processor != null) { - List names = StrUtils.splitSmart(processor, ','); - List l = new ArrayList<>(names.size()); - for (String s : names) { - s = s.trim(); - if (s.isEmpty()) continue; - UpdateRequestProcessorFactory p = core.getUpdateProcessors().get(s); - if (p == null) - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No such processor " + s); - result.add(p); - } + List names = StrUtils.splitSmart(processor, ','); + for (String s : names) { + s = s.trim(); + if (s.isEmpty()) continue; + UpdateRequestProcessorFactory p = core.getUpdateProcessors().get(s); + if (p == null) + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No such processor " + s); + result.add(p); } return result; } From b85c5be6c4f682136512851c5cce2d456b3ea85c Mon Sep 17 00:00:00 2001 From: Steve Rowe Date: Thu, 16 Jun 2016 12:58:40 -0400 Subject: [PATCH 02/13] LUCENE-6439: IntelliJ config --- dev-tools/idea/lucene/test-framework/lucene-test-framework.iml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-tools/idea/lucene/test-framework/lucene-test-framework.iml b/dev-tools/idea/lucene/test-framework/lucene-test-framework.iml index f46df7d683c..91e0daea26f 100644 --- a/dev-tools/idea/lucene/test-framework/lucene-test-framework.iml +++ b/dev-tools/idea/lucene/test-framework/lucene-test-framework.iml @@ -7,6 +7,7 @@ + From ea9c7ea88cc92f5ed18716874bfbbc8c287e8538 Mon Sep 17 00:00:00 2001 From: Mike McCandless Date: Fri, 17 Jun 2016 05:39:50 -0400 Subject: [PATCH 03/13] LUCENE-7335: IW's commit data is now late binding --- lucene/CHANGES.txt | 8 +++ .../byTask/tasks/CommitIndexTask.java | 2 +- .../org/apache/lucene/index/IndexCommit.java | 2 +- .../apache/lucene/index/IndexUpgrader.java | 2 +- .../org/apache/lucene/index/IndexWriter.java | 67 +++++++++++++++---- .../org/apache/lucene/index/SegmentInfos.java | 32 ++++----- .../lucene/index/TestDeletionPolicy.java | 4 +- .../index/TestDirectoryReaderReopen.java | 4 +- .../apache/lucene/index/TestIndexWriter.java | 39 +++++++---- .../lucene/index/TestIndexWriterCommit.java | 37 ++++++++-- .../lucene/index/TestTransactionRollback.java | 4 +- .../lucene/facet/taxonomy/TaxonomyReader.java | 2 +- .../lucene/facet/taxonomy/TaxonomyWriter.java | 16 ++--- .../directory/DirectoryTaxonomyWriter.java | 40 ++++++++--- .../TestDirectoryTaxonomyWriter.java | 20 ++++-- .../lucene/replicator/nrt/PrimaryNode.java | 26 +++++-- ...IndexAndTaxonomyReplicationClientTest.java | 4 +- .../IndexReplicationClientTest.java | 4 +- .../replicator/LocalReplicatorTest.java | 4 +- .../replicator/http/HttpReplicatorTest.java | 2 +- .../solr/update/DirectUpdateHandler2.java | 2 +- 21 files changed, 221 insertions(+), 100 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index c5a85d0c343..0de9da7b653 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -15,6 +15,14 @@ New Features long "sequence number" indicating the effective equivalent single-threaded execution order (Mike McCandless) +* LUCENE-7335: IndexWriter's commit data is now late binding, + recording key/values from a provided iterable based on when the + commit actually takes place (Mike McCandless) + +Bug Fixes + +* LUCENE-6662: Fixed potential resource leaks. (Rishabh Patel via Adrien Grand) + Improvements * LUCENE-7323: Compound file writing now verifies the incoming diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CommitIndexTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CommitIndexTask.java index fda49947c26..e09cfdfed3e 100644 --- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CommitIndexTask.java +++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CommitIndexTask.java @@ -51,7 +51,7 @@ public class CommitIndexTask extends PerfTask { IndexWriter iw = getRunData().getIndexWriter(); if (iw != null) { if (commitUserData != null) { - iw.setCommitData(commitUserData); + iw.setLiveCommitData(commitUserData.entrySet()); } iw.commit(); } diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexCommit.java b/lucene/core/src/java/org/apache/lucene/index/IndexCommit.java index 7c3ed72b857..0c4d323621c 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexCommit.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexCommit.java @@ -108,7 +108,7 @@ public abstract class IndexCommit implements Comparable { public abstract long getGeneration(); /** Returns userData, previously passed to {@link - * IndexWriter#setCommitData(Map)} for this commit. Map is + * IndexWriter#setLiveCommitData(Iterable)} for this commit. Map is * {@code String -> String}. */ public abstract Map getUserData() throws IOException; diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java b/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java index 02690c4bc6a..fffc3769da6 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java @@ -174,7 +174,7 @@ public final class IndexUpgrader { infoStream.message(LOG_PREFIX, "All segments upgraded to version " + Version.LATEST); infoStream.message(LOG_PREFIX, "Enforcing commit to rewrite all index metadata..."); } - w.setCommitData(w.getCommitData()); // fake change to enforce a commit (e.g. if index has no segments) + w.setLiveCommitData(w.getLiveCommitData()); // fake change to enforce a commit (e.g. if index has no segments) assert w.hasUncommittedChanges(); w.commit(); if (infoStream.isEnabled(LOG_PREFIX)) { diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java index 5fe164856ee..f0d756bdfb5 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java @@ -295,6 +295,8 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable { private volatile boolean closed; private volatile boolean closing; + private Iterable> commitUserData; + // Holds all SegmentInfo instances currently involved in // merges private HashSet mergingSegments = new HashSet<>(); @@ -947,6 +949,8 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable { rollbackSegments = segmentInfos.createBackupSegmentInfos(); } + commitUserData = new HashMap(segmentInfos.getUserData()).entrySet(); + pendingNumDocs.set(segmentInfos.totalMaxDoc()); // start with previous field numbers, but new FieldInfos @@ -2997,6 +3001,14 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable { segmentInfos.changed(); } + if (commitUserData != null) { + Map userData = new HashMap<>(); + for(Map.Entry ent : commitUserData) { + userData.put(ent.getKey(), ent.getValue()); + } + segmentInfos.setUserData(userData, false); + } + // Must clone the segmentInfos while we still // hold fullFlushLock and while sync'd so that // no partial changes (eg a delete w/o @@ -3011,7 +3023,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable { // we are trying to sync all referenced files, a // merge completes which would otherwise have // removed the files we are now syncing. - filesToCommit = toCommit.files(false); + filesToCommit = toCommit.files(false); deleter.incRef(filesToCommit); } success = true; @@ -3059,38 +3071,65 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable { } /** - * Sets the commit user data map. That method is considered a transaction by - * {@link IndexWriter} and will be {@link #commit() committed} even if no other - * changes were made to the writer instance. Note that you must call this method - * before {@link #prepareCommit()}, or otherwise it won't be included in the + * Sets the iterator to provide the commit user data map at commit time. Calling this method + * is considered a committable change and will be {@link #commit() committed} even if + * there are no other changes this writer. Note that you must call this method + * before {@link #prepareCommit()}. Otherwise it won't be included in the * follow-on {@link #commit()}. *

- * NOTE: the map is cloned internally, therefore altering the map's - * contents after calling this method has no effect. + * NOTE: the iterator is late-binding: it is only visited once all documents for the + * commit have been written to their segments, before the next segments_N file is written */ + public final synchronized void setLiveCommitData(Iterable> commitUserData) { + setLiveCommitData(commitUserData, true); + } + + /** + * Sets the commit user data map. + * + * @deprecated Use {@link #setLiveCommitData} instead. + */ + @Deprecated public final synchronized void setCommitData(Map commitUserData) { - setCommitData(commitUserData, true); + setLiveCommitData(new HashMap<>(commitUserData).entrySet()); } /** - * Sets the commit user data map, controlling whether to advance the {@link SegmentInfos#getVersion}. + * Sets the commit user data iterator, controlling whether to advance the {@link SegmentInfos#getVersion}. * - * @see #setCommitData(Map) + * @see #setLiveCommitData(Iterable) * * @lucene.internal */ - public final synchronized void setCommitData(Map commitUserData, boolean doIncrementVersion) { - segmentInfos.setUserData(new HashMap<>(commitUserData), doIncrementVersion); + public final synchronized void setLiveCommitData(Iterable> commitUserData, boolean doIncrementVersion) { + this.commitUserData = commitUserData; + if (doIncrementVersion) { + segmentInfos.changed(); + } changeCount.incrementAndGet(); } + /** + * Returns the commit user data iterable previously set with {@link #setLiveCommitData(Iterable)}, or null if nothing has been set yet. + */ + public final synchronized Iterable> getLiveCommitData() { + return commitUserData; + } + /** * Returns the commit user data map that was last committed, or the one that * was set on {@link #setCommitData(Map)}. + * + * @deprecated Use {@link #getLiveCommitData} instead. */ + @Deprecated public final synchronized Map getCommitData() { - return segmentInfos.getUserData(); + Map data = new HashMap<>(); + for(Map.Entry ent : commitUserData) { + data.put(ent.getKey(), ent.getValue()); + } + return data; } - + // Used only by commit and prepareCommit, below; lock // order is commitLock -> IW private final Object commitLock = new Object(); diff --git a/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java b/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java index 642b320cf37..5db339ec83b 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java +++ b/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java @@ -17,6 +17,20 @@ package org.apache.lucene.index; +import java.io.IOException; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Map; +import java.util.Set; + import org.apache.lucene.codecs.Codec; import org.apache.lucene.codecs.CodecUtil; import org.apache.lucene.codecs.DocValuesFormat; @@ -32,20 +46,6 @@ import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.StringHelper; import org.apache.lucene.util.Version; -import java.io.IOException; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; -import java.util.Map; -import java.util.Set; - /** * A collection of segmentInfo objects with methods for operating on those * segments in relation to the file system. @@ -103,7 +103,7 @@ import java.util.Set; *

  • SegID is the identifier of the Codec that encoded this segment.
  • *
  • CommitUserData stores an optional user-supplied opaque * Map<String,String> that was passed to - * {@link IndexWriter#setCommitData(java.util.Map)}.
  • + * {@link IndexWriter#setLiveCommitData(Iterable)}. *
  • FieldInfosGen is the generation count of the fieldInfos file. If this is * -1, there are no updates to the fieldInfos in that segment. Anything above * zero means there are updates to fieldInfos stored by {@link FieldInfosFormat} @@ -453,7 +453,7 @@ public final class SegmentInfos implements Cloneable, Iterable commitData = new HashMap<>(); commitData.put("commitTime", String.valueOf(System.currentTimeMillis())); - writer.setCommitData(commitData); + writer.setLiveCommitData(commitData.entrySet()); writer.commit(); writer.close(); @@ -251,7 +251,7 @@ public class TestDeletionPolicy extends LuceneTestCase { } commitData = new HashMap<>(); commitData.put("commitTime", String.valueOf(System.currentTimeMillis())); - writer.setCommitData(commitData); + writer.setLiveCommitData(commitData.entrySet()); writer.commit(); writer.close(); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java index e2102cb8f1b..0138b90b55c 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java @@ -557,14 +557,14 @@ public class TestDirectoryReaderReopen extends LuceneTestCase { writer.addDocument(doc); Map data = new HashMap<>(); data.put("index", i+""); - writer.setCommitData(data); + writer.setLiveCommitData(data.entrySet()); writer.commit(); } for(int i=0;i<4;i++) { writer.deleteDocuments(new Term("id", ""+i)); Map data = new HashMap<>(); data.put("index", (4+i)+""); - writer.setCommitData(data); + writer.setLiveCommitData(data.entrySet()); writer.commit(); } writer.close(); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java index 34ee56f2725..7a47d973c38 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java @@ -1892,9 +1892,9 @@ public class TestIndexWriter extends LuceneTestCase { writer.commit(); // first commit to complete IW create transaction. // this should store the commit data, even though no other changes were made - writer.setCommitData(new HashMap() {{ + writer.setLiveCommitData(new HashMap() {{ put("key", "value"); - }}); + }}.entrySet()); writer.commit(); DirectoryReader r = DirectoryReader.open(dir); @@ -1902,13 +1902,13 @@ public class TestIndexWriter extends LuceneTestCase { r.close(); // now check setCommitData and prepareCommit/commit sequence - writer.setCommitData(new HashMap() {{ + writer.setLiveCommitData(new HashMap() {{ put("key", "value1"); - }}); + }}.entrySet()); writer.prepareCommit(); - writer.setCommitData(new HashMap() {{ + writer.setLiveCommitData(new HashMap() {{ put("key", "value2"); - }}); + }}.entrySet()); writer.commit(); // should commit the first commitData only, per protocol r = DirectoryReader.open(dir); @@ -1926,21 +1926,32 @@ public class TestIndexWriter extends LuceneTestCase { writer.close(); dir.close(); } + + private Map getLiveCommitData(IndexWriter writer) { + Map data = new HashMap<>(); + Iterable> iter = writer.getLiveCommitData(); + if (iter != null) { + for(Map.Entry ent : iter) { + data.put(ent.getKey(), ent.getValue()); + } + } + return data; + } @Test public void testGetCommitData() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(null)); - writer.setCommitData(new HashMap() {{ + writer.setLiveCommitData(new HashMap() {{ put("key", "value"); - }}); - assertEquals("value", writer.getCommitData().get("key")); + }}.entrySet()); + assertEquals("value", getLiveCommitData(writer).get("key")); writer.close(); // validate that it's also visible when opening a new IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(null) .setOpenMode(OpenMode.APPEND)); - assertEquals("value", writer.getCommitData().get("key")); + assertEquals("value", getLiveCommitData(writer).get("key")); writer.close(); dir.close(); @@ -2650,9 +2661,9 @@ public class TestIndexWriter extends LuceneTestCase { DirectoryReader r = DirectoryReader.open(w); Map m = new HashMap<>(); m.put("foo", "bar"); - w.setCommitData(m); + w.setLiveCommitData(m.entrySet()); - // setCommitData with no other changes should count as an NRT change: + // setLiveCommitData with no other changes should count as an NRT change: DirectoryReader r2 = DirectoryReader.openIfChanged(r); assertNotNull(r2); @@ -2669,9 +2680,9 @@ public class TestIndexWriter extends LuceneTestCase { DirectoryReader r = DirectoryReader.open(w); Map m = new HashMap<>(); m.put("foo", "bar"); - w.setCommitData(m); + w.setLiveCommitData(m.entrySet()); w.commit(); - // setCommitData and also commit, with no other changes, should count as an NRT change: + // setLiveCommitData and also commit, with no other changes, should count as an NRT change: DirectoryReader r2 = DirectoryReader.openIfChanged(r); assertNotNull(r2); IOUtils.close(r, r2, w, dir); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java index 6148ba129a1..e94621a34c9 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java @@ -19,6 +19,7 @@ package org.apache.lucene.index; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; @@ -421,13 +422,13 @@ public class TestIndexWriterCommit extends LuceneTestCase { // commit to "first" Map commitData = new HashMap<>(); commitData.put("tag", "first"); - w.setCommitData(commitData); + w.setLiveCommitData(commitData.entrySet()); w.commit(); // commit to "second" w.addDocument(doc); commitData.put("tag", "second"); - w.setCommitData(commitData); + w.setLiveCommitData(commitData.entrySet()); w.close(); // open "first" with IndexWriter @@ -450,7 +451,7 @@ public class TestIndexWriterCommit extends LuceneTestCase { // commit IndexWriter to "third" w.addDocument(doc); commitData.put("tag", "third"); - w.setCommitData(commitData); + w.setLiveCommitData(commitData.entrySet()); w.close(); // make sure "second" commit is still there @@ -632,7 +633,7 @@ public class TestIndexWriterCommit extends LuceneTestCase { TestIndexWriter.addDoc(w); Map data = new HashMap<>(); data.put("label", "test1"); - w.setCommitData(data); + w.setLiveCommitData(data.entrySet()); w.close(); r = DirectoryReader.open(dir); @@ -663,4 +664,32 @@ public class TestIndexWriterCommit extends LuceneTestCase { r.close(); dir.close(); } + + // LUCENE-7335: make sure commit data is late binding + public void testCommitDataIsLive() throws Exception { + Directory dir = newDirectory(); + IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random()))); + w.addDocument(new Document()); + + final Map commitData = new HashMap<>(); + commitData.put("foo", "bar"); + + // make sure "foo" / "bar" doesn't take + w.setLiveCommitData(commitData.entrySet()); + + commitData.clear(); + commitData.put("boo", "baz"); + + // this finally does the commit, and should burn "boo" / "baz" + w.close(); + + List commits = DirectoryReader.listCommits(dir); + assertEquals(1, commits.size()); + + IndexCommit commit = commits.get(0); + Map data = commit.getUserData(); + assertEquals(1, data.size()); + assertEquals("baz", data.get("boo")); + dir.close(); + } } diff --git a/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java b/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java index 3abb3922685..e7de028cd68 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java @@ -71,7 +71,7 @@ public class TestTransactionRollback extends LuceneTestCase { .setIndexCommit(last)); Map data = new HashMap<>(); data.put("index", "Rolled back to 1-"+id); - w.setCommitData(data); + w.setLiveCommitData(data.entrySet()); w.close(); } @@ -142,7 +142,7 @@ public class TestTransactionRollback extends LuceneTestCase { if (currentRecordId%10 == 0) { Map data = new HashMap<>(); data.put("index", "records 1-"+currentRecordId); - w.setCommitData(data); + w.setLiveCommitData(data.entrySet()); w.commit(); } } diff --git a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyReader.java b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyReader.java index 319377a2013..f631d3be4d4 100644 --- a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyReader.java +++ b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyReader.java @@ -205,7 +205,7 @@ public abstract class TaxonomyReader implements Closeable { /** * Retrieve user committed data. * - * @see TaxonomyWriter#setCommitData(Map) + * @see TaxonomyWriter#setLiveCommitData(Iterable) */ public abstract Map getCommitUserData() throws IOException; diff --git a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyWriter.java b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyWriter.java index 763fe973742..1561e2abe1a 100644 --- a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyWriter.java +++ b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyWriter.java @@ -20,6 +20,7 @@ import java.io.Closeable; import java.io.IOException; import java.util.Map; +import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.TwoPhaseCommit; /** @@ -105,19 +106,14 @@ public interface TaxonomyWriter extends Closeable, TwoPhaseCommit { public int getSize(); /** - * Sets the commit user data map. That method is considered a transaction and - * will be {@link #commit() committed} even if no other changes were made to - * the writer instance. - *

    - * NOTE: the map is cloned internally, therefore altering the map's - * contents after calling this method has no effect. + * Sets the commit user data iterable. See {@link IndexWriter#setLiveCommitData}. */ - public void setCommitData(Map commitUserData); + public void setLiveCommitData(Iterable> commitUserData); /** - * Returns the commit user data map that was set on - * {@link #setCommitData(Map)}. + * Returns the commit user data iterable that was set on + * {@link #setLiveCommitData(Iterable)}. */ - public Map getCommitData(); + public Iterable> getLiveCommitData(); } diff --git a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java index 8e0841e4417..632d74bff8f 100644 --- a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java +++ b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java @@ -584,31 +584,42 @@ public class DirectoryTaxonomyWriter implements TaxonomyWriter { public synchronized long commit() throws IOException { ensureOpen(); // LUCENE-4972: if we always call setCommitData, we create empty commits - String epochStr = indexWriter.getCommitData().get(INDEX_EPOCH); + + Map data = new HashMap<>(); + Iterable> iter = indexWriter.getLiveCommitData(); + if (iter != null) { + for(Map.Entry ent : iter) { + data.put(ent.getKey(), ent.getValue()); + } + } + + String epochStr = data.get(INDEX_EPOCH); if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) { - indexWriter.setCommitData(combinedCommitData(indexWriter.getCommitData())); + indexWriter.setLiveCommitData(combinedCommitData(indexWriter.getLiveCommitData())); } return indexWriter.commit(); } /** Combine original user data with the taxonomy epoch. */ - private Map combinedCommitData(Map commitData) { + private Iterable> combinedCommitData(Iterable> commitData) { Map m = new HashMap<>(); if (commitData != null) { - m.putAll(commitData); + for(Map.Entry ent : commitData) { + m.put(ent.getKey(), ent.getValue()); + } } m.put(INDEX_EPOCH, Long.toString(indexEpoch, 16)); - return m; + return m.entrySet(); } @Override - public void setCommitData(Map commitUserData) { - indexWriter.setCommitData(combinedCommitData(commitUserData)); + public void setLiveCommitData(Iterable> commitUserData) { + indexWriter.setLiveCommitData(combinedCommitData(commitUserData)); } @Override - public Map getCommitData() { - return combinedCommitData(indexWriter.getCommitData()); + public Iterable> getLiveCommitData() { + return combinedCommitData(indexWriter.getLiveCommitData()); } /** @@ -619,9 +630,16 @@ public class DirectoryTaxonomyWriter implements TaxonomyWriter { public synchronized long prepareCommit() throws IOException { ensureOpen(); // LUCENE-4972: if we always call setCommitData, we create empty commits - String epochStr = indexWriter.getCommitData().get(INDEX_EPOCH); + Map data = new HashMap<>(); + Iterable> iter = indexWriter.getLiveCommitData(); + if (iter != null) { + for(Map.Entry ent : iter) { + data.put(ent.getKey(), ent.getValue()); + } + } + String epochStr = data.get(INDEX_EPOCH); if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) { - indexWriter.setCommitData(combinedCommitData(indexWriter.getCommitData())); + indexWriter.setLiveCommitData(combinedCommitData(indexWriter.getLiveCommitData())); } return indexWriter.prepareCommit(); } diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java index 2edee33fd7f..416b823c78d 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java @@ -94,7 +94,7 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase { taxoWriter.addCategory(new FacetLabel("b")); Map userCommitData = new HashMap<>(); userCommitData.put("testing", "1 2 3"); - taxoWriter.setCommitData(userCommitData); + taxoWriter.setLiveCommitData(userCommitData.entrySet()); taxoWriter.close(); DirectoryReader r = DirectoryReader.open(dir); assertEquals("2 categories plus root should have been committed to the underlying directory", 3, r.numDocs()); @@ -109,14 +109,22 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase { // that the taxonomy index has been recreated. taxoWriter = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE); taxoWriter.addCategory(new FacetLabel("c")); // add a category so that commit will happen - taxoWriter.setCommitData(new HashMap(){{ + taxoWriter.setLiveCommitData(new HashMap(){{ put("just", "data"); - }}); + }}.entrySet()); taxoWriter.commit(); // verify taxoWriter.getCommitData() + Map data = new HashMap<>(); + Iterable> iter = taxoWriter.getLiveCommitData(); + if (iter != null) { + for(Map.Entry ent : iter) { + data.put(ent.getKey(), ent.getValue()); + } + } + assertNotNull(DirectoryTaxonomyWriter.INDEX_EPOCH - + " not found in taoxWriter.commitData", taxoWriter.getCommitData().get(DirectoryTaxonomyWriter.INDEX_EPOCH)); + + " not found in taoxWriter.commitData", data.get(DirectoryTaxonomyWriter.INDEX_EPOCH)); taxoWriter.close(); r = DirectoryReader.open(dir); @@ -170,9 +178,9 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase { private void touchTaxo(DirectoryTaxonomyWriter taxoWriter, FacetLabel cp) throws IOException { taxoWriter.addCategory(cp); - taxoWriter.setCommitData(new HashMap(){{ + taxoWriter.setLiveCommitData(new HashMap(){{ put("just", "data"); - }}); + }}.entrySet()); taxoWriter.commit(); } diff --git a/lucene/replicator/src/java/org/apache/lucene/replicator/nrt/PrimaryNode.java b/lucene/replicator/src/java/org/apache/lucene/replicator/nrt/PrimaryNode.java index a045cde4cb5..749f54e716f 100644 --- a/lucene/replicator/src/java/org/apache/lucene/replicator/nrt/PrimaryNode.java +++ b/lucene/replicator/src/java/org/apache/lucene/replicator/nrt/PrimaryNode.java @@ -83,10 +83,16 @@ public abstract class PrimaryNode extends Node { message("IWC:\n" + writer.getConfig()); message("dir:\n" + writer.getDirectory()); - message("commitData: " + writer.getCommitData()); + message("commitData: " + writer.getLiveCommitData()); // Record our primaryGen in the userData, and set initial version to 0: - Map commitData = new HashMap<>(writer.getCommitData()); + Map commitData = new HashMap<>(); + Iterable> iter = writer.getLiveCommitData(); + if (iter != null) { + for(Map.Entry ent : iter) { + commitData.put(ent.getKey(), ent.getValue()); + } + } commitData.put(PRIMARY_GEN_KEY, Long.toString(primaryGen)); if (commitData.get(VERSION_KEY) == null) { commitData.put(VERSION_KEY, "0"); @@ -94,7 +100,7 @@ public abstract class PrimaryNode extends Node { } else { message("keep current commitData version=" + commitData.get(VERSION_KEY)); } - writer.setCommitData(commitData, false); + writer.setLiveCommitData(commitData.entrySet(), false); // We forcefully advance the SIS version to an unused future version. This is necessary if the previous primary crashed and we are // starting up on an "older" index, else versions can be illegally reused but show different results: @@ -153,10 +159,16 @@ public abstract class PrimaryNode extends Node { } public synchronized long getLastCommitVersion() { - String s = curInfos.getUserData().get(VERSION_KEY); + Iterable> iter = writer.getLiveCommitData(); + assert iter != null; + for(Map.Entry ent : iter) { + if (ent.getKey().equals(VERSION_KEY)) { + return Long.parseLong(ent.getValue()); + } + } + // In ctor we always install an initial version: - assert s != null; - return Long.parseLong(s); + throw new AssertionError("missing VERSION_KEY"); } @Override @@ -167,7 +179,7 @@ public abstract class PrimaryNode extends Node { // on xlog replay we are replaying more ops than necessary. commitData.put(VERSION_KEY, Long.toString(copyState.version)); message("top: commit commitData=" + commitData); - writer.setCommitData(commitData, false); + writer.setLiveCommitData(commitData.entrySet(), false); writer.commit(); } diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java index 069e72d02fa..9ccb2c7a776 100644 --- a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java +++ b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java @@ -172,9 +172,9 @@ public class IndexAndTaxonomyReplicationClientTest extends ReplicatorTestCase { private Revision createRevision(final int id) throws IOException { publishIndexWriter.addDocument(newDocument(publishTaxoWriter, id)); - publishIndexWriter.setCommitData(new HashMap() {{ + publishIndexWriter.setLiveCommitData(new HashMap() {{ put(VERSION_ID, Integer.toString(id, 16)); - }}); + }}.entrySet()); publishIndexWriter.commit(); publishTaxoWriter.commit(); return new IndexAndTaxonomyRevision(publishIndexWriter, publishTaxoWriter); diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java index 64f539abba1..3d724921dc7 100644 --- a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java +++ b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java @@ -122,9 +122,9 @@ public class IndexReplicationClientTest extends ReplicatorTestCase { private Revision createRevision(final int id) throws IOException { publishWriter.addDocument(new Document()); - publishWriter.setCommitData(new HashMap() {{ + publishWriter.setLiveCommitData(new HashMap() {{ put(VERSION_ID, Integer.toString(id, 16)); - }}); + }}.entrySet()); publishWriter.commit(); return new IndexRevision(publishWriter); } diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java index d88218e8acf..ce91e2f08dd 100644 --- a/lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java +++ b/lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java @@ -65,9 +65,9 @@ public class LocalReplicatorTest extends ReplicatorTestCase { private Revision createRevision(final int id) throws IOException { sourceWriter.addDocument(new Document()); - sourceWriter.setCommitData(new HashMap() {{ + sourceWriter.setLiveCommitData(new HashMap() {{ put(VERSION_ID, Integer.toString(id, 16)); - }}); + }}.entrySet()); sourceWriter.commit(); return new IndexRevision(sourceWriter); } diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java index 7e302acdf6b..8dfec5b9337 100644 --- a/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java +++ b/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java @@ -93,7 +93,7 @@ public class HttpReplicatorTest extends ReplicatorTestCase { private void publishRevision(int id) throws IOException { Document doc = new Document(); writer.addDocument(doc); - writer.setCommitData(Collections.singletonMap("ID", Integer.toString(id, 16))); + writer.setLiveCommitData(Collections.singletonMap("ID", Integer.toString(id, 16)).entrySet()); writer.commit(); serverReplicator.publish(new IndexRevision(writer)); } diff --git a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java index 31eb94c81e7..8c3c74964c2 100644 --- a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java +++ b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java @@ -523,7 +523,7 @@ public class DirectUpdateHandler2 extends UpdateHandler implements SolrCoreState final Map commitData = new HashMap<>(); commitData.put(SolrIndexWriter.COMMIT_TIME_MSEC_KEY, String.valueOf(System.currentTimeMillis())); - iw.setCommitData(commitData); + iw.setLiveCommitData(commitData.entrySet()); } public void prepareCommit(CommitUpdateCommand cmd) throws IOException { From 3c67c77aa8975cb3fccb5e07e453ddba2dbdb5a6 Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Fri, 17 Jun 2016 14:38:59 +0200 Subject: [PATCH 04/13] Add 6.1.0 indices to TestBackwardsCompatibility. --- .../index/TestBackwardsCompatibility.java | 4 +++- .../org/apache/lucene/index/index.6.1.0-cfs.zip | Bin 0 -> 13769 bytes .../apache/lucene/index/index.6.1.0-nocfs.zip | Bin 0 -> 13763 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.1.0-cfs.zip create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.1.0-nocfs.zip diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java index d553752b6c0..d5dcd9ade8f 100644 --- a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java +++ b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java @@ -241,7 +241,9 @@ public class TestBackwardsCompatibility extends LuceneTestCase { "6.0.0-cfs", "6.0.0-nocfs", "6.0.1-cfs", - "6.0.1-nocfs" + "6.0.1-nocfs", + "6.1.0-cfs", + "6.1.0-nocfs" }; final String[] unsupportedNames = { diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.1.0-cfs.zip b/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.1.0-cfs.zip new file mode 100644 index 0000000000000000000000000000000000000000..f9ca09ef60108db8600c41975deaa69ca63c9115 GIT binary patch literal 13769 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 literal 0 HcmV?d00001 From f9bba7b512d2d07566251d3d16248bbeee6cf459 Mon Sep 17 00:00:00 2001 From: Mike McCandless Date: Fri, 17 Jun 2016 15:29:55 -0400 Subject: [PATCH 05/13] fix test bug: we cannot rely on relative importance of 'shorter document' and 'higher term freq' to the similarity's scoring --- lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java index 581e26f02a0..2cd3a37a1a9 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java @@ -165,7 +165,7 @@ public class TestBoolean2 extends LuceneTestCase { "w1 w2 w3 w4 w5", "w1 w3 w2 w3", "w1 xx w2 yy w3", - "w1 w3 xx w2 yy w3" + "w1 w3 xx w2 yy mm" }; public void queriesTest(Query query, int[] expDocNrs) throws Exception { From 068d1232164e7e54f714b6fe962d4a2891fe6537 Mon Sep 17 00:00:00 2001 From: Mike McCandless Date: Fri, 17 Jun 2016 15:54:36 -0400 Subject: [PATCH 06/13] fix CHANGES --- lucene/CHANGES.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 0de9da7b653..a0c467eabbe 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -19,10 +19,6 @@ New Features recording key/values from a provided iterable based on when the commit actually takes place (Mike McCandless) -Bug Fixes - -* LUCENE-6662: Fixed potential resource leaks. (Rishabh Patel via Adrien Grand) - Improvements * LUCENE-7323: Compound file writing now verifies the incoming From 7403b46c4daacfa977d7940961418c1b1fde346e Mon Sep 17 00:00:00 2001 From: Uwe Schindler Date: Sat, 18 Jun 2016 10:41:55 +0200 Subject: [PATCH 07/13] SOLR-8981: Update TIKA to 1.13: - This commit merges branch 'SOLR-8981' of https://github.com/tballison/lucene-solr - Adds some modifications and reverts jackcess-encrypt addition (not yet working) - Fixes order of ivy-versions.properties - This closes #44 --- lucene/ivy-versions.properties | 18 +- .../licenses/commons-compress-1.11.jar.sha1 | 1 + .../licenses/commons-compress-1.8.1.jar.sha1 | 1 - solr/CHANGES.txt | 2 +- solr/NOTICE.txt | 3 + .../dataimport/TestTikaEntityProcessor.java | 2 - solr/contrib/extraction/ivy.xml | 3 + .../extraction/ExtractingDocumentLoader.java | 4 +- .../ExtractingRequestHandlerTest.java | 2 - .../cell/SolrCellMorphlineTest.java | 2 +- solr/licenses/commons-compress-1.11.jar.sha1 | 1 + solr/licenses/commons-compress-1.8.1.jar.sha1 | 1 - solr/licenses/fontbox-1.8.8.jar.sha1 | 1 - solr/licenses/fontbox-2.0.1.jar.sha1 | 1 + solr/licenses/isoparser-1.0.2.jar.sha1 | 1 - solr/licenses/isoparser-1.1.18.jar.sha1 | 1 + solr/licenses/jackcess-2.1.3.jar.sha1 | 1 + solr/licenses/jackcess-LICENSE-ASL.txt | 507 ++++++++++++++++++ solr/licenses/jackcess-NOTICE.txt | 1 + solr/licenses/jempbox-1.8.12.jar.sha1 | 1 + solr/licenses/jempbox-1.8.8.jar.sha1 | 1 - .../metadata-extractor-2.6.2.jar.sha1 | 1 - .../metadata-extractor-2.8.1.jar.sha1 | 1 + solr/licenses/pdfbox-1.8.8.jar.sha1 | 1 - solr/licenses/pdfbox-2.0.1.jar.sha1 | 1 + solr/licenses/pdfbox-tools-2.0.1.jar.sha1 | 1 + solr/licenses/pdfbox-tools-LICENSE-ASL.txt | 314 +++++++++++ solr/licenses/pdfbox-tools-NOTICE.txt | 14 + solr/licenses/poi-3.11.jar.sha1 | 1 - solr/licenses/poi-3.15-beta1.jar.sha1 | 1 + solr/licenses/poi-ooxml-3.11.jar.sha1 | 1 - solr/licenses/poi-ooxml-3.15-beta1.jar.sha1 | 1 + solr/licenses/poi-ooxml-schemas-3.11.jar.sha1 | 1 - .../poi-ooxml-schemas-3.15-beta1.jar.sha1 | 1 + solr/licenses/poi-scratchpad-3.11.jar.sha1 | 1 - .../poi-scratchpad-3.15-beta1.jar.sha1 | 1 + solr/licenses/tika-core-1.13.jar.sha1 | 1 + solr/licenses/tika-core-1.7.jar.sha1 | 1 - solr/licenses/tika-java7-1.13.jar.sha1 | 1 + solr/licenses/tika-java7-1.7.jar.sha1 | 1 - solr/licenses/tika-parsers-1.13.jar.sha1 | 1 + solr/licenses/tika-parsers-1.7.jar.sha1 | 1 - solr/licenses/tika-xmp-1.13.jar.sha1 | 1 + solr/licenses/tika-xmp-1.7.jar.sha1 | 1 - solr/licenses/vorbis-java-core-0.6.jar.sha1 | 1 - solr/licenses/vorbis-java-core-0.8.jar.sha1 | 1 + solr/licenses/vorbis-java-tika-0.6.jar.sha1 | 1 - solr/licenses/vorbis-java-tika-0.8.jar.sha1 | 1 + 48 files changed, 876 insertions(+), 32 deletions(-) create mode 100644 lucene/licenses/commons-compress-1.11.jar.sha1 delete mode 100644 lucene/licenses/commons-compress-1.8.1.jar.sha1 create mode 100644 solr/licenses/commons-compress-1.11.jar.sha1 delete mode 100644 solr/licenses/commons-compress-1.8.1.jar.sha1 delete mode 100644 solr/licenses/fontbox-1.8.8.jar.sha1 create mode 100644 solr/licenses/fontbox-2.0.1.jar.sha1 delete mode 100644 solr/licenses/isoparser-1.0.2.jar.sha1 create mode 100644 solr/licenses/isoparser-1.1.18.jar.sha1 create mode 100644 solr/licenses/jackcess-2.1.3.jar.sha1 create mode 100644 solr/licenses/jackcess-LICENSE-ASL.txt create mode 100644 solr/licenses/jackcess-NOTICE.txt create mode 100644 solr/licenses/jempbox-1.8.12.jar.sha1 delete mode 100644 solr/licenses/jempbox-1.8.8.jar.sha1 delete mode 100644 solr/licenses/metadata-extractor-2.6.2.jar.sha1 create mode 100644 solr/licenses/metadata-extractor-2.8.1.jar.sha1 delete mode 100644 solr/licenses/pdfbox-1.8.8.jar.sha1 create mode 100644 solr/licenses/pdfbox-2.0.1.jar.sha1 create mode 100644 solr/licenses/pdfbox-tools-2.0.1.jar.sha1 create mode 100644 solr/licenses/pdfbox-tools-LICENSE-ASL.txt create mode 100644 solr/licenses/pdfbox-tools-NOTICE.txt delete mode 100644 solr/licenses/poi-3.11.jar.sha1 create mode 100644 solr/licenses/poi-3.15-beta1.jar.sha1 delete mode 100644 solr/licenses/poi-ooxml-3.11.jar.sha1 create mode 100644 solr/licenses/poi-ooxml-3.15-beta1.jar.sha1 delete mode 100644 solr/licenses/poi-ooxml-schemas-3.11.jar.sha1 create mode 100644 solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1 delete mode 100644 solr/licenses/poi-scratchpad-3.11.jar.sha1 create mode 100644 solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1 create mode 100644 solr/licenses/tika-core-1.13.jar.sha1 delete mode 100644 solr/licenses/tika-core-1.7.jar.sha1 create mode 100644 solr/licenses/tika-java7-1.13.jar.sha1 delete mode 100644 solr/licenses/tika-java7-1.7.jar.sha1 create mode 100644 solr/licenses/tika-parsers-1.13.jar.sha1 delete mode 100644 solr/licenses/tika-parsers-1.7.jar.sha1 create mode 100644 solr/licenses/tika-xmp-1.13.jar.sha1 delete mode 100644 solr/licenses/tika-xmp-1.7.jar.sha1 delete mode 100644 solr/licenses/vorbis-java-core-0.6.jar.sha1 create mode 100644 solr/licenses/vorbis-java-core-0.8.jar.sha1 delete mode 100644 solr/licenses/vorbis-java-tika-0.6.jar.sha1 create mode 100644 solr/licenses/vorbis-java-tika-0.8.jar.sha1 diff --git a/lucene/ivy-versions.properties b/lucene/ivy-versions.properties index a4e1bb11fc9..1b455d5dc27 100644 --- a/lucene/ivy-versions.properties +++ b/lucene/ivy-versions.properties @@ -18,7 +18,7 @@ com.codahale.metrics.version = 3.0.1 /com.codahale.metrics/metrics-healthchecks = ${com.codahale.metrics.version} /com.cybozu.labs/langdetect = 1.1-20120112 -/com.drewnoakes/metadata-extractor = 2.6.2 +/com.drewnoakes/metadata-extractor = 2.8.1 /com.facebook.presto/presto-parser = 0.122 @@ -38,7 +38,8 @@ com.google.inject.guice.version = 3.0 /com.google.protobuf/protobuf-java = 2.5.0 /com.googlecode.juniversalchardet/juniversalchardet = 1.0.3 -/com.googlecode.mp4parser/isoparser = 1.0.2 +/com.googlecode.mp4parser/isoparser = 1.1.18 +/com.healthmarketscience.jackcess/jackcess = 2.1.3 /com.ibm.icu/icu4j = 56.1 /com.pff/java-libpst = 0.8.1 @@ -92,7 +93,7 @@ com.sun.jersey.version = 1.9 /org.apache.ant/ant = 1.8.2 /org.apache.avro/avro = 1.7.5 -/org.apache.commons/commons-compress = 1.8.1 +/org.apache.commons/commons-compress = 1.11 /org.apache.commons/commons-exec = 1.3 /org.apache.commons/commons-math3 = 3.4.1 @@ -173,18 +174,19 @@ org.apache.james.apache.mime4j.version = 0.7.2 /org.apache.mina/mina-core = 2.0.0-M5 /org.apache.mrunit/mrunit = 1.0.0 -org.apache.pdfbox.version = 1.8.8 +org.apache.pdfbox.version = 2.0.1 /org.apache.pdfbox/fontbox = ${org.apache.pdfbox.version} -/org.apache.pdfbox/jempbox = ${org.apache.pdfbox.version} +/org.apache.pdfbox/jempbox = 1.8.12 /org.apache.pdfbox/pdfbox = ${org.apache.pdfbox.version} +/org.apache.pdfbox/pdfbox-tools = ${org.apache.pdfbox.version} -org.apache.poi.version = 3.11 +org.apache.poi.version = 3.15-beta1 /org.apache.poi/poi = ${org.apache.poi.version} /org.apache.poi/poi-ooxml = ${org.apache.poi.version} /org.apache.poi/poi-ooxml-schemas = ${org.apache.poi.version} /org.apache.poi/poi-scratchpad = ${org.apache.poi.version} -org.apache.tika.version = 1.7 +org.apache.tika.version = 1.13 /org.apache.tika/tika-core = ${org.apache.tika.version} /org.apache.tika/tika-java7 = ${org.apache.tika.version} /org.apache.tika/tika-parsers = ${org.apache.tika.version} @@ -246,7 +248,7 @@ org.eclipse.jetty.version = 9.3.8.v20160314 /org.fusesource.leveldbjni/leveldbjni = 1.8 -org.gagravarr.vorbis.java.version = 0.6 +org.gagravarr.vorbis.java.version = 0.8 /org.gagravarr/vorbis-java-core = ${org.gagravarr.vorbis.java.version} /org.gagravarr/vorbis-java-tika = ${org.gagravarr.vorbis.java.version} diff --git a/lucene/licenses/commons-compress-1.11.jar.sha1 b/lucene/licenses/commons-compress-1.11.jar.sha1 new file mode 100644 index 00000000000..89bab1e9f7d --- /dev/null +++ b/lucene/licenses/commons-compress-1.11.jar.sha1 @@ -0,0 +1 @@ +f43ce4c878078cbcfbb061353aa672a4c8e81443 diff --git a/lucene/licenses/commons-compress-1.8.1.jar.sha1 b/lucene/licenses/commons-compress-1.8.1.jar.sha1 deleted file mode 100644 index 3b1154c2266..00000000000 --- a/lucene/licenses/commons-compress-1.8.1.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -a698750c16740fd5b3871425f4cb3bbaa87f529d diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 00b280dfa66..600e626cf23 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -20,7 +20,7 @@ See the Quick Start guide at http://lucene.apache.org/solr/quickstart.html Versions of Major Components --------------------- -Apache Tika 1.7 +Apache Tika 1.13 Carrot2 3.12.0 Velocity 1.7 and Velocity Tools 2.0 Apache UIMA 2.3.1 diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt index 25e2aa377c8..e147285db5e 100644 --- a/solr/NOTICE.txt +++ b/solr/NOTICE.txt @@ -61,6 +61,9 @@ Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs This product includes fugue icons created by Yusuke Kamiyamane Copyright (C) 2013-2014 Yusuke Kamiyamane, https://github.com/yusukekamiyamane/fugue-icons +Jackcess: http://jackcess.sourceforge.net/ +Copyright (C) 2011-2014 James Ahlborn + JavaMail API 1.5.1: https://glassfish.dev.java.net/javaee5/mail/ License: Common Development and Distribution License (CDDL) v1.1 (https://glassfish.java.net/public/CDDL+GPL_1_1.html) diff --git a/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestTikaEntityProcessor.java b/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestTikaEntityProcessor.java index 58b64859ead..fe769bc8c87 100644 --- a/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestTikaEntityProcessor.java +++ b/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestTikaEntityProcessor.java @@ -16,7 +16,6 @@ */ package org.apache.solr.handler.dataimport; -import org.apache.lucene.util.Constants; import org.junit.BeforeClass; import org.junit.Test; @@ -105,7 +104,6 @@ public class TestTikaEntityProcessor extends AbstractDataImportHandlerTestCase { public static void beforeClass() throws Exception { assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)", new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage())); - assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155)", Constants.JRE_IS_MINIMUM_JAVA9); initCore("dataimport-solrconfig.xml", "dataimport-schema-no-unique-key.xml", getFile("dihextras/solr").getAbsolutePath()); } diff --git a/solr/contrib/extraction/ivy.xml b/solr/contrib/extraction/ivy.xml index 8fafb0a5b9d..5cf19a17f36 100644 --- a/solr/contrib/extraction/ivy.xml +++ b/solr/contrib/extraction/ivy.xml @@ -32,13 +32,16 @@ + + + diff --git a/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java b/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java index f4040a34e27..cd5d4af576f 100644 --- a/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java +++ b/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java @@ -282,11 +282,13 @@ public class ExtractingDocumentLoader extends ContentStreamLoader { /** * Lowercases the element name, but returns null for <BR>, * which suppresses the start-element event for lt;BR> tags. + * This also suppresses the <BODY> tags because those + * are handled internally by Tika's XHTMLContentHandler. */ @Override public String mapSafeElement(String name) { String lowerName = name.toLowerCase(Locale.ROOT); - return lowerName.equals("br") ? null : lowerName; + return (lowerName.equals("br") || lowerName.equals("body")) ? null : lowerName; } } } \ No newline at end of file diff --git a/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java b/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java index 23ca28a6b9d..a53bcd98f2e 100644 --- a/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java +++ b/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import org.apache.lucene.util.Constants; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.SolrException; import org.apache.solr.common.util.ContentStream; @@ -45,7 +44,6 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 { public static void beforeClass() throws Exception { assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)", new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage())); - assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155)", Constants.JRE_IS_MINIMUM_JAVA9); initCore("solrconfig.xml", "schema.xml", getFile("extraction/solr").getAbsolutePath()); } diff --git a/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java b/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java index 2cdbd3c5da9..4d63eedb19b 100644 --- a/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java +++ b/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java @@ -42,7 +42,7 @@ public class SolrCellMorphlineTest extends AbstractSolrMorphlineTestBase { @BeforeClass public static void beforeClass2() { assumeFalse("FIXME: Morphlines currently has issues with Windows paths", Constants.WINDOWS); - assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155, https://issues.apache.org/jira/browse/SOLR-8876)", + assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/SOLR-8876)", Constants.JRE_IS_MINIMUM_JAVA9); } diff --git a/solr/licenses/commons-compress-1.11.jar.sha1 b/solr/licenses/commons-compress-1.11.jar.sha1 new file mode 100644 index 00000000000..89bab1e9f7d --- /dev/null +++ b/solr/licenses/commons-compress-1.11.jar.sha1 @@ -0,0 +1 @@ +f43ce4c878078cbcfbb061353aa672a4c8e81443 diff --git a/solr/licenses/commons-compress-1.8.1.jar.sha1 b/solr/licenses/commons-compress-1.8.1.jar.sha1 deleted file mode 100644 index 3b1154c2266..00000000000 --- a/solr/licenses/commons-compress-1.8.1.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -a698750c16740fd5b3871425f4cb3bbaa87f529d diff --git a/solr/licenses/fontbox-1.8.8.jar.sha1 b/solr/licenses/fontbox-1.8.8.jar.sha1 deleted file mode 100644 index ed67d1e302a..00000000000 --- a/solr/licenses/fontbox-1.8.8.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -d65d291533631de29b0ee61a9527d08e24ca579a diff --git a/solr/licenses/fontbox-2.0.1.jar.sha1 b/solr/licenses/fontbox-2.0.1.jar.sha1 new file mode 100644 index 00000000000..d55b6cb5f92 --- /dev/null +++ b/solr/licenses/fontbox-2.0.1.jar.sha1 @@ -0,0 +1 @@ +b9d4f0993e015f3f1ce0be9e7300cf62dd7a7f15 diff --git a/solr/licenses/isoparser-1.0.2.jar.sha1 b/solr/licenses/isoparser-1.0.2.jar.sha1 deleted file mode 100644 index 0b57cdb2d1f..00000000000 --- a/solr/licenses/isoparser-1.0.2.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -6d9a5c5814ec67178dd1d5a25bae874d4697a5b8 diff --git a/solr/licenses/isoparser-1.1.18.jar.sha1 b/solr/licenses/isoparser-1.1.18.jar.sha1 new file mode 100644 index 00000000000..56ee07f2477 --- /dev/null +++ b/solr/licenses/isoparser-1.1.18.jar.sha1 @@ -0,0 +1 @@ +c74bdac64b22f1e245a7657149a43437aae4a9d3 diff --git a/solr/licenses/jackcess-2.1.3.jar.sha1 b/solr/licenses/jackcess-2.1.3.jar.sha1 new file mode 100644 index 00000000000..fb74a2724a3 --- /dev/null +++ b/solr/licenses/jackcess-2.1.3.jar.sha1 @@ -0,0 +1 @@ +fe8553847c6744d61e071ef11a6a64010731d241 diff --git a/solr/licenses/jackcess-LICENSE-ASL.txt b/solr/licenses/jackcess-LICENSE-ASL.txt new file mode 100644 index 00000000000..3f40d408e02 --- /dev/null +++ b/solr/licenses/jackcess-LICENSE-ASL.txt @@ -0,0 +1,507 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +APACHE POI SUBCOMPONENTS: + +Apache POI includes subcomponents with separate copyright notices and +license terms. Your use of these subcomponents is subject to the terms +and conditions of the following licenses: + + +Office Open XML schemas (ooxml-schemas-1.0.jar) + + The Office Open XML schema definitions used by Apache POI are + a part of the Office Open XML ECMA Specification (ECMA-376, [1]). + As defined in section 9.4 of the ECMA bylaws [2], this specification + is available to all interested parties without restriction: + + 9.4 All documents when approved shall be made available to + all interested parties without restriction. + + Furthermore, both Microsoft and Adobe have granted patent licenses + to this work [3,4,5]. + + [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm + [2] http://www.ecma-international.org/memento/Ecmabylaws.htm + [3] http://www.microsoft.com/interop/osp/ + [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ECMA-376%20Edition%201%20Microsoft%20Patent%20Declaration.pdf + [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ga-2006-191.pdf + + +DOM4J library (dom4j-1.6.1.jar) + + Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. + + Redistribution and use of this software and associated documentation + ("Software"), with or without modification, are permitted provided + that the following conditions are met: + + 1. Redistributions of source code must retain copyright + statements and notices. Redistributions must also contain a + copy of this document. + + 2. Redistributions in binary form must reproduce the + above copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + 3. The name "DOM4J" must not be used to endorse or promote + products derived from this Software without prior written + permission of MetaStuff, Ltd. For written permission, + please contact dom4j-info@metastuff.com. + + 4. Products derived from this Software may not be called "DOM4J" + nor may "DOM4J" appear in their names without prior written + permission of MetaStuff, Ltd. DOM4J is a registered + trademark of MetaStuff, Ltd. + + 5. Due credit should be given to the DOM4J Project - + http://www.dom4j.org + + THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +JUnit test library (junit-3.8.1.jar) + + Common Public License - v 1.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial code and + documentation distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + + i) changes to the Program, and + + ii) additions to the Program; + + where such changes and/or additions to the Program originate from + and are distributed by that particular Contributor. A Contribution + 'originates' from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include additions to the Program which: (i) are + separate modules of software distributed in conjunction with the + Program under their own license agreement, and (ii) are not derivative + works of the Program. + + "Contributor" means any person or entity that distributes the Program. + + "Licensed Patents " mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement, + including all Contributors. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby grants + Recipient a non-exclusive, worldwide, royalty-free copyright license + to reproduce, prepare derivative works of, publicly display, publicly + perform, distribute and sublicense the Contribution of such + Contributor, if any, and such derivative works, in source code and + object code form. + + b) Subject to the terms of this Agreement, each Contributor hereby grants + Recipient a non-exclusive, worldwide, royalty-free patent license under + Licensed Patents to make, use, sell, offer to sell, import and + otherwise transfer the Contribution of such Contributor, if any, in + source code and object code form. This patent license shall apply to + the combination of the Contribution and the Program if, at the time + the Contribution is added by the Contributor, such addition of the + Contribution causes such combination to be covered by the Licensed + Patents. The patent license shall not apply to any other combinations + which include the Contribution. No hardware per se is licensed + hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the rights + and licenses granted hereunder, each Recipient hereby assumes sole + responsibility to secure any other intellectual property rights + needed, if any. For example, if a third party patent license is + required to allow Recipient to distribute the Program, it is + Recipient's responsibility to acquire that license before + distributing the Program. + + d) Each Contributor represents that to its knowledge it has sufficient + copyright rights in its Contribution, if any, to grant the copyright + license set forth in this Agreement. + + 3. REQUIREMENTS + + A Contributor may choose to distribute the Program in object code form + under its own license agreement, provided that: + + a) it complies with the terms and conditions of this Agreement; and + + b) its license agreement: + + i) effectively disclaims on behalf of all Contributors all warranties + and conditions, express and implied, including warranties or + conditions of title and non-infringement, and implied warranties + or conditions of merchantability and fitness for a particular + purpose; + + ii) effectively excludes on behalf of all Contributors all liability + for damages, including direct, indirect, special, incidental and + consequential damages, such as lost profits; + + iii) states that any provisions which differ from this Agreement are + offered by that Contributor alone and not by any other party; and + + iv) states that source code for the Program is available from such + Contributor, and informs licensees how to obtain it in a + reasonable manner on or through a medium customarily used for + software exchange. + + When the Program is made available in source code form: + + a) it must be made available under this Agreement; and + + b) a copy of this Agreement must be included with each copy of + the Program. + + Contributors may not remove or alter any copyright notices contained + within the Program. + + Each Contributor must identify itself as the originator of its + Contribution, if any, in a manner that reasonably allows subsequent + Recipients to identify the originator of the Contribution. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product offering + should do so in a manner which does not create potential liability for + other Contributors. Therefore, if a Contributor includes the Program + in a commercial product offering, such Contributor ("Commercial + Contributor") hereby agrees to defend and indemnify every other + Contributor ("Indemnified Contributor") against any losses, damages + and costs (collectively "Losses") arising from claims, lawsuits and + other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the + Program in a commercial product offering. The obligations in this + section do not apply to any claims or Losses relating to any actual + or alleged intellectual property infringement. In order to qualify, + an Indemnified Contributor must: a) promptly notify the Commercial + Contributor in writing of such claim, and b) allow the Commercial + Contributor to control, and cooperate with the Commercial Contributor + in, the defense and any related settlement negotiations. The Indemnified + Contributor may participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those + performance claims and warranties, and if a court requires any other + Contributor to pay any damages as a result, the Commercial Contributor + must pay those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED + ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR + CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR + A PARTICULAR PURPOSE. Each Recipient is solely responsible for + determining the appropriateness of using and distributing the Program + and assumes all risks associated with its exercise of rights under this + Agreement, including but not limited to the risks and costs of program + errors, compliance with applicable laws, damage to or loss of data, + programs or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR + ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING + WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR + DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED + HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against a Contributor with + respect to a patent applicable to software (including a cross-claim or + counterclaim in a lawsuit), then any patent licenses granted by that + Contributor to such Recipient under this Agreement shall terminate as of + the date such litigation is filed. In addition, if Recipient institutes + patent litigation against any entity (including a cross-claim or + counterclaim in a lawsuit) alleging that the Program itself (excluding + combinations of the Program with other software or hardware) infringes + such Recipient's patent(s), then such Recipient's rights granted under + Section 2(b) shall terminate as of the date such litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it fails + to comply with any of the material terms or conditions of this Agreement + and does not cure such failure in a reasonable period of time after + becoming aware of such noncompliance. If all Recipient's rights under + this Agreement terminate, Recipient agrees to cease use and distribution + of the Program as soon as reasonably practicable. However, Recipient's + obligations under this Agreement and any licenses granted by Recipient + relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and may + only be modified in the following manner. The Agreement Steward reserves + the right to publish new versions (including revisions) of this Agreement + from time to time. No one other than the Agreement Steward has the right + to modify this Agreement. IBM is the initial Agreement Steward. IBM may + assign the responsibility to serve as the Agreement Steward to a suitable + separate entity. Each new version of the Agreement will be given a + distinguishing version number. The Program (including Contributions) may + always be distributed subject to the version of the Agreement under which + it was received. In addition, after a new version of the Agreement is + published, Contributor may elect to distribute the Program (including + its Contributions) under the new version. Except as expressly stated in + Sections 2(a) and 2(b) above, Recipient receives no rights or licenses + to the intellectual property of any Contributor under this Agreement, + whether expressly, by implication, estoppel or otherwise. All rights in + the Program not expressly granted under this Agreement are reserved. + + This Agreement is governed by the laws of the State of New York and the + intellectual property laws of the United States of America. No party to + this Agreement will bring a legal action under this Agreement more than + one year after the cause of action arose. Each party waives its rights + to a jury trial in any resulting litigation. diff --git a/solr/licenses/jackcess-NOTICE.txt b/solr/licenses/jackcess-NOTICE.txt new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/solr/licenses/jackcess-NOTICE.txt @@ -0,0 +1 @@ + diff --git a/solr/licenses/jempbox-1.8.12.jar.sha1 b/solr/licenses/jempbox-1.8.12.jar.sha1 new file mode 100644 index 00000000000..9882f8d5277 --- /dev/null +++ b/solr/licenses/jempbox-1.8.12.jar.sha1 @@ -0,0 +1 @@ +426450c573c19f6f2c751a7a52c11931b712c9f6 diff --git a/solr/licenses/jempbox-1.8.8.jar.sha1 b/solr/licenses/jempbox-1.8.8.jar.sha1 deleted file mode 100644 index c1189346b1a..00000000000 --- a/solr/licenses/jempbox-1.8.8.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -5a6cd3d3bf9464a8d7f06127a4847d6b0e840fe6 diff --git a/solr/licenses/metadata-extractor-2.6.2.jar.sha1 b/solr/licenses/metadata-extractor-2.6.2.jar.sha1 deleted file mode 100644 index c9f398b5c40..00000000000 --- a/solr/licenses/metadata-extractor-2.6.2.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -13930ff22d3f152bd969a63e88537d2f2adc2cd5 diff --git a/solr/licenses/metadata-extractor-2.8.1.jar.sha1 b/solr/licenses/metadata-extractor-2.8.1.jar.sha1 new file mode 100644 index 00000000000..d067bbf38ac --- /dev/null +++ b/solr/licenses/metadata-extractor-2.8.1.jar.sha1 @@ -0,0 +1 @@ +120630f96316e0f173aedf0c88bb06c5e146ad96 diff --git a/solr/licenses/pdfbox-1.8.8.jar.sha1 b/solr/licenses/pdfbox-1.8.8.jar.sha1 deleted file mode 100644 index 2c01ecebb15..00000000000 --- a/solr/licenses/pdfbox-1.8.8.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -520d4255b392f56124d693d72f2df61ba1172061 diff --git a/solr/licenses/pdfbox-2.0.1.jar.sha1 b/solr/licenses/pdfbox-2.0.1.jar.sha1 new file mode 100644 index 00000000000..a96cb90d25e --- /dev/null +++ b/solr/licenses/pdfbox-2.0.1.jar.sha1 @@ -0,0 +1 @@ +dbc69649118b7eff278f228c070a40ee559e1f62 diff --git a/solr/licenses/pdfbox-tools-2.0.1.jar.sha1 b/solr/licenses/pdfbox-tools-2.0.1.jar.sha1 new file mode 100644 index 00000000000..a38c974ebfb --- /dev/null +++ b/solr/licenses/pdfbox-tools-2.0.1.jar.sha1 @@ -0,0 +1 @@ +a585a59c58f822884b1c5e56b670efa9241b699d diff --git a/solr/licenses/pdfbox-tools-LICENSE-ASL.txt b/solr/licenses/pdfbox-tools-LICENSE-ASL.txt new file mode 100644 index 00000000000..d1f4d5cc086 --- /dev/null +++ b/solr/licenses/pdfbox-tools-LICENSE-ASL.txt @@ -0,0 +1,314 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox project: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + This file and the 14 PostScript(R) AFM files it accompanies may be used, + copied, and distributed for any purpose and without charge, with or without + modification, provided that all copyright notices are retained; that the + AFM files are not distributed without this file; that all modifications + to this file or any of the AFM files are prominently noted in the modified + file(s); and that this paragraph is not modified. Adobe Systems has no + responsibility or obligation to support the use of the AFM files. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html) + + Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file to use, copy, publish, distribute, + sublicense, and/or sell copies of the documentation, and to permit + others to do the same, provided that: + - No modification, editing or other alteration of this document is + allowed; and + - The above copyright notice and this permission notice shall be + included in all copies of the documentation. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file, to create their own derivative works + from the content of this document to use, copy, publish, distribute, + sublicense, and/or sell the derivative works, and to permit others to do + the same, provided that the derived work is not represented as being a + copy or version of this document. + + Adobe shall not be liable to any party for any loss of revenue or profit + or for indirect, incidental, special, consequential, or other similar + damages, whether based on tort (including without limitation negligence + or strict liability), contract or other legal or equitable grounds even + if Adobe has been advised or had reason to know of the possibility of + such damages. The Adobe materials are provided on an "AS IS" basis. + Adobe specifically disclaims all express, statutory, or implied + warranties relating to the Adobe materials, including but not limited to + those concerning merchantability or fitness for a particular purpose or + non-infringement of any third party rights regarding the Adobe + materials. + diff --git a/solr/licenses/pdfbox-tools-NOTICE.txt b/solr/licenses/pdfbox-tools-NOTICE.txt new file mode 100644 index 00000000000..0d67b51ff03 --- /dev/null +++ b/solr/licenses/pdfbox-tools-NOTICE.txt @@ -0,0 +1,14 @@ +Apache PDFBox +Copyright 2011 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Based on source code originally developed in the PDFBox, JempBox and +FontBox projects. +Copyright (c) 2002-2007, www.pdfbox.org +Copyright (c) 2006-2007, www.jempbox.org + +Based on source code originally developed in the PaDaF project. +Copyright (c) 2010 Atos Worldline SAS + diff --git a/solr/licenses/poi-3.11.jar.sha1 b/solr/licenses/poi-3.11.jar.sha1 deleted file mode 100644 index 8a24258f62b..00000000000 --- a/solr/licenses/poi-3.11.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -51058d9db469437a5ed0aa508e7de8937019e1d9 diff --git a/solr/licenses/poi-3.15-beta1.jar.sha1 b/solr/licenses/poi-3.15-beta1.jar.sha1 new file mode 100644 index 00000000000..a6d9c5ed1b5 --- /dev/null +++ b/solr/licenses/poi-3.15-beta1.jar.sha1 @@ -0,0 +1 @@ +048bb8326b81323631d9ceb4236cfbd382e56da2 diff --git a/solr/licenses/poi-ooxml-3.11.jar.sha1 b/solr/licenses/poi-ooxml-3.11.jar.sha1 deleted file mode 100644 index 9109cd712b6..00000000000 --- a/solr/licenses/poi-ooxml-3.11.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -e87975291fbb65888468b09fda2cf00e2996c2a0 diff --git a/solr/licenses/poi-ooxml-3.15-beta1.jar.sha1 b/solr/licenses/poi-ooxml-3.15-beta1.jar.sha1 new file mode 100644 index 00000000000..ea710445bb5 --- /dev/null +++ b/solr/licenses/poi-ooxml-3.15-beta1.jar.sha1 @@ -0,0 +1 @@ +81085a47fdf0d74d473d605c6b3784e26731842e diff --git a/solr/licenses/poi-ooxml-schemas-3.11.jar.sha1 b/solr/licenses/poi-ooxml-schemas-3.11.jar.sha1 deleted file mode 100644 index a9bd3a7d471..00000000000 --- a/solr/licenses/poi-ooxml-schemas-3.11.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -4f015e9125a65351a2e1d27c1f8c6af0ff4a34c8 diff --git a/solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1 b/solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1 new file mode 100644 index 00000000000..6b094dd2d58 --- /dev/null +++ b/solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1 @@ -0,0 +1 @@ +f8bc979ad79908a99483337f1ca2edf78558ac20 diff --git a/solr/licenses/poi-scratchpad-3.11.jar.sha1 b/solr/licenses/poi-scratchpad-3.11.jar.sha1 deleted file mode 100644 index 5a891fc24a3..00000000000 --- a/solr/licenses/poi-scratchpad-3.11.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -c5f7987f03d92bb6d01895f043915e897f7bb50a diff --git a/solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1 b/solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1 new file mode 100644 index 00000000000..5a301267009 --- /dev/null +++ b/solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1 @@ -0,0 +1 @@ +f4e276aaf97a60a1156388c9e38069122b7ea914 diff --git a/solr/licenses/tika-core-1.13.jar.sha1 b/solr/licenses/tika-core-1.13.jar.sha1 new file mode 100644 index 00000000000..90ffc56432c --- /dev/null +++ b/solr/licenses/tika-core-1.13.jar.sha1 @@ -0,0 +1 @@ +1305c798d41d1d7bbf12cb7c0ca184c98eed25ad diff --git a/solr/licenses/tika-core-1.7.jar.sha1 b/solr/licenses/tika-core-1.7.jar.sha1 deleted file mode 100644 index 081a792b949..00000000000 --- a/solr/licenses/tika-core-1.7.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -ee92c1d9deb07e85198fe2ff69926a7a1ce068d6 diff --git a/solr/licenses/tika-java7-1.13.jar.sha1 b/solr/licenses/tika-java7-1.13.jar.sha1 new file mode 100644 index 00000000000..80d5225b192 --- /dev/null +++ b/solr/licenses/tika-java7-1.13.jar.sha1 @@ -0,0 +1 @@ +d6ffea1f1f76faa01509598b8a31f54b3da124cd diff --git a/solr/licenses/tika-java7-1.7.jar.sha1 b/solr/licenses/tika-java7-1.7.jar.sha1 deleted file mode 100644 index b2930d7b9dc..00000000000 --- a/solr/licenses/tika-java7-1.7.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -f3f7f9c82fbf5ce1c3948e1f77f1469393d5eb38 diff --git a/solr/licenses/tika-parsers-1.13.jar.sha1 b/solr/licenses/tika-parsers-1.13.jar.sha1 new file mode 100644 index 00000000000..6e704e76804 --- /dev/null +++ b/solr/licenses/tika-parsers-1.13.jar.sha1 @@ -0,0 +1 @@ +374fde67b9d35f785534b0e6c4953533c31bab5f diff --git a/solr/licenses/tika-parsers-1.7.jar.sha1 b/solr/licenses/tika-parsers-1.7.jar.sha1 deleted file mode 100644 index 8b9886d2f1d..00000000000 --- a/solr/licenses/tika-parsers-1.7.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -ae2a0cdac649cf9baab01156c75a655cf50ca936 diff --git a/solr/licenses/tika-xmp-1.13.jar.sha1 b/solr/licenses/tika-xmp-1.13.jar.sha1 new file mode 100644 index 00000000000..38942cd1f2c --- /dev/null +++ b/solr/licenses/tika-xmp-1.13.jar.sha1 @@ -0,0 +1 @@ +1d73457bcc68ba7df72833baa40b29c39ce4a67e diff --git a/solr/licenses/tika-xmp-1.7.jar.sha1 b/solr/licenses/tika-xmp-1.7.jar.sha1 deleted file mode 100644 index 01b88b66642..00000000000 --- a/solr/licenses/tika-xmp-1.7.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -ac7b48998ffbafa98467ed075ab5f8efb688bebc diff --git a/solr/licenses/vorbis-java-core-0.6.jar.sha1 b/solr/licenses/vorbis-java-core-0.6.jar.sha1 deleted file mode 100644 index 306f7da528c..00000000000 --- a/solr/licenses/vorbis-java-core-0.6.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -71deedbdfe6a1b0dcadd6c5ae335e3e9b427524c diff --git a/solr/licenses/vorbis-java-core-0.8.jar.sha1 b/solr/licenses/vorbis-java-core-0.8.jar.sha1 new file mode 100644 index 00000000000..dbff784db95 --- /dev/null +++ b/solr/licenses/vorbis-java-core-0.8.jar.sha1 @@ -0,0 +1 @@ +7e9937c2575cda2e3fc116415117c74f23e43fa6 diff --git a/solr/licenses/vorbis-java-tika-0.6.jar.sha1 b/solr/licenses/vorbis-java-tika-0.6.jar.sha1 deleted file mode 100644 index 8ea612e9395..00000000000 --- a/solr/licenses/vorbis-java-tika-0.6.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -be5b08ff4c45632975646f286a1d13e325bec59a diff --git a/solr/licenses/vorbis-java-tika-0.8.jar.sha1 b/solr/licenses/vorbis-java-tika-0.8.jar.sha1 new file mode 100644 index 00000000000..2b634bb6868 --- /dev/null +++ b/solr/licenses/vorbis-java-tika-0.8.jar.sha1 @@ -0,0 +1 @@ +4ddbb27ac5884a0f0398a63d46a89d3bc87dc457 From 1f7b9555076b4a46cc44cc9d4c8619ebe340f350 Mon Sep 17 00:00:00 2001 From: Uwe Schindler Date: Sat, 18 Jun 2016 19:27:39 +0200 Subject: [PATCH 08/13] SOLR-8981: Add changes entry --- solr/CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 600e626cf23..d7268e0d56b 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -53,6 +53,9 @@ Other Changes * SOLR-9195: Remove unnecessary allocation and null check in UpdateRequestProcessorChain's getReqProcessors method. (Christine Poerschke) +* SOLR-8981: Upgraded Extraction module to Apache Tika 1.13. + (Tim Allison, Lewis John McGibbney via Uwe Schindler) + ================== 6.1.0 ================== Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release. From 940aedf26b5d2d09b6d85e66de9a996d3f5c47a5 Mon Sep 17 00:00:00 2001 From: Steve Rowe Date: Sat, 18 Jun 2016 16:10:37 -0400 Subject: [PATCH 09/13] SOLR-9220: Disable failing tests --- .../src/test/org/apache/solr/hadoop/MorphlineMapperTest.java | 1 + .../org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineMapperTest.java b/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineMapperTest.java index 959ca543d03..8b510885146 100644 --- a/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineMapperTest.java +++ b/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineMapperTest.java @@ -44,6 +44,7 @@ public class MorphlineMapperTest extends MRUnitBase { } @Test + @AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-9220") public void testMapper() throws Exception { MorphlineMapper mapper = new MorphlineMapper(); MapDriver mapDriver = MapDriver.newMapDriver(mapper);; diff --git a/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java b/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java index 4d63eedb19b..36072528d5e 100644 --- a/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java +++ b/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java @@ -196,6 +196,7 @@ public class SolrCellMorphlineTest extends AbstractSolrMorphlineTestBase { } @Test + @AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-9220") public void testSolrCellDocumentTypes2() throws Exception { AbstractSolrMorphlineTestBase.setupMorphline(tempDir, "test-morphlines/solrCellDocumentTypes", false); From a5c43b415f87436ba62c57a4ef9d6e3d4c3133ce Mon Sep 17 00:00:00 2001 From: Mike McCandless Date: Sun, 19 Jun 2016 06:03:29 -0400 Subject: [PATCH 10/13] fix test bug: use an FSDirectory when there are too many docs --- .../apache/lucene/search/TestBoolean2.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java index 2cd3a37a1a9..8123addab84 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java @@ -33,6 +33,7 @@ import org.apache.lucene.index.Term; import org.apache.lucene.search.similarities.ClassicSimilarity; import org.apache.lucene.search.similarities.Similarity; import org.apache.lucene.store.Directory; +import org.apache.lucene.store.IOContext; import org.apache.lucene.store.MockDirectoryWrapper; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.TestUtil; @@ -68,8 +69,13 @@ public class TestBoolean2 extends LuceneTestCase { // in some runs, test immediate adjacency of matches - in others, force a full bucket gap betwen docs NUM_FILLER_DOCS = random().nextBoolean() ? 0 : BooleanScorer.SIZE; PRE_FILLER_DOCS = TestUtil.nextInt(random(), 0, (NUM_FILLER_DOCS / 2)); + + if (NUM_FILLER_DOCS * PRE_FILLER_DOCS > 100000) { + directory = newFSDirectory(createTempDir()); + } else { + directory = newDirectory(); + } - directory = newDirectory(); RandomIndexWriter writer= new RandomIndexWriter(random(), directory, newIndexWriterConfig(new MockAnalyzer(random())).setMergePolicy(newLogMergePolicy())); Document doc = new Document(); @@ -92,7 +98,16 @@ public class TestBoolean2 extends LuceneTestCase { searcher.setSimilarity(new ClassicSimilarity()); // make a copy of our index using a single segment - singleSegmentDirectory = new MockDirectoryWrapper(random(), TestUtil.ramCopyOf(directory)); + if (NUM_FILLER_DOCS * PRE_FILLER_DOCS > 100000) { + singleSegmentDirectory = newFSDirectory(createTempDir()); + } else { + singleSegmentDirectory = newDirectory(); + } + + for (String fileName : directory.listAll()) { + singleSegmentDirectory.copyFrom(directory, fileName, fileName, IOContext.DEFAULT); + } + IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random())); // we need docID order to be preserved: iwc.setMergePolicy(newLogMergePolicy()); From 5193a05385280548bb58fba89ad273c930ca8612 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Sun, 19 Jun 2016 11:11:24 -0400 Subject: [PATCH 11/13] LUCENE-7345: fix test bug so jenkins isn't on fire anymore --- lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java index 8123addab84..075e62d59c8 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java @@ -19,6 +19,7 @@ package org.apache.lucene.search; import java.util.Arrays; +import java.util.Collections; import java.util.Random; import org.apache.lucene.analysis.MockAnalyzer; @@ -106,6 +107,7 @@ public class TestBoolean2 extends LuceneTestCase { for (String fileName : directory.listAll()) { singleSegmentDirectory.copyFrom(directory, fileName, fileName, IOContext.DEFAULT); + singleSegmentDirectory.sync(Collections.singleton(fileName)); } IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random())); From 331366a95ce9d5452d8454913247fe8c69ca33e7 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Sun, 19 Jun 2016 11:36:40 -0400 Subject: [PATCH 12/13] LUCENE-7345: Fix more bugs in horrible test --- .../core/src/test/org/apache/lucene/search/TestBoolean2.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java index 075e62d59c8..0a217e3354c 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java @@ -105,7 +105,11 @@ public class TestBoolean2 extends LuceneTestCase { singleSegmentDirectory = newDirectory(); } + // TODO: this test does not need to be doing this crazy stuff. please improve it! for (String fileName : directory.listAll()) { + if (fileName.startsWith("extra")) { + continue; + } singleSegmentDirectory.copyFrom(directory, fileName, fileName, IOContext.DEFAULT); singleSegmentDirectory.sync(Collections.singleton(fileName)); } From 097cffeba796f7c466d58bc501c5292614d69854 Mon Sep 17 00:00:00 2001 From: Uwe Schindler Date: Sun, 19 Jun 2016 21:27:34 +0200 Subject: [PATCH 13/13] LUCENE-7346: Update forbiddenapis to version 2.2 --- dev-tools/maven/pom.xml.template | 4 ++-- dev-tools/maven/solr/pom.xml.template | 6 ++---- lucene/CHANGES.txt | 3 +++ lucene/common-build.xml | 2 +- solr/common-build.xml | 3 +-- .../src/test/org/apache/solr/cloud/TestConfigSetsAPI.java | 4 ++-- .../org/apache/solr/cloud/TestConfigSetsAPIZkFailure.java | 2 +- .../apache/solr/cloud/TestMiniSolrCloudClusterKerberos.java | 3 ++- .../org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java | 3 ++- .../test/org/apache/solr/core/TestConfigSetImmutable.java | 3 ++- 10 files changed, 18 insertions(+), 15 deletions(-) diff --git a/dev-tools/maven/pom.xml.template b/dev-tools/maven/pom.xml.template index ccf22ca66ae..adfe5b639ca 100644 --- a/dev-tools/maven/pom.xml.template +++ b/dev-tools/maven/pom.xml.template @@ -44,7 +44,7 @@ @spec.version@ yyyy-MM-dd HH:mm:ss 8 - + 1.${java.compat.version} 9.3.8.v20160314 @@ -161,7 +161,7 @@ de.thetaphi forbiddenapis - 2.1 + 2.2 - commons-io-unsafe-2.4 + commons-io-unsafe-@commons-io:commons-io.version@ ${top-level}/lucene/tools/forbiddenApis/base.txt @@ -147,8 +146,7 @@ jdk-deprecated jdk-non-portable jdk-reflection - - commons-io-unsafe-2.4 + commons-io-unsafe-@commons-io:commons-io.version@ ${top-level}/lucene/tools/forbiddenApis/base.txt diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index a0c467eabbe..5ee814058af 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -54,6 +54,9 @@ Other * LUCENE-7334: Update ASM dependency to 5.1. (Uwe Schindler) +* LUCENE-7346: Update forbiddenapis to version 2.2. + (Uwe Schindler) + ======================= Lucene 6.1.0 ======================= New Features diff --git a/lucene/common-build.xml b/lucene/common-build.xml index 94b79103a07..0e588c69285 100644 --- a/lucene/common-build.xml +++ b/lucene/common-build.xml @@ -2330,7 +2330,7 @@ ${ant.project.name}.test.dependencies=${test.classpath.list} - diff --git a/solr/common-build.xml b/solr/common-build.xml index c6ff09224b0..235070ac359 100644 --- a/solr/common-build.xml +++ b/solr/common-build.xml @@ -504,8 +504,7 @@ - - + diff --git a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java index d7c590da890..e3870dcc250 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java @@ -135,7 +135,7 @@ public class TestConfigSetsAPI extends SolrTestCaseJ4 { FileUtils.copyDirectory(configDir, tmpConfigDir); if (oldProps != null) { FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME), - getConfigSetProps(oldProps)); + getConfigSetProps(oldProps), StandardCharsets.UTF_8); } solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName); } @@ -242,7 +242,7 @@ public class TestConfigSetsAPI extends SolrTestCaseJ4 { // Ensure ConfigSet is immutable FileUtils.copyDirectory(configDir, tmpConfigDir); FileUtils.write(new File(tmpConfigDir, "configsetprops.json"), - getConfigSetProps(ImmutableMap.of("immutable", "true"))); + getConfigSetProps(ImmutableMap.of("immutable", "true")), StandardCharsets.UTF_8); solrCluster.uploadConfigDir(tmpConfigDir, "configSet"); // no ConfigSet name diff --git a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPIZkFailure.java b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPIZkFailure.java index eaade283092..8fe9cb6e624 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPIZkFailure.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPIZkFailure.java @@ -134,7 +134,7 @@ public class TestConfigSetsAPIZkFailure extends SolrTestCaseJ4 { FileUtils.copyDirectory(configDir, tmpConfigDir); if (oldProps != null) { FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME), - getConfigSetProps(oldProps)); + getConfigSetProps(oldProps), StandardCharsets.UTF_8); } solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName); } diff --git a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterKerberos.java b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterKerberos.java index 48f17103cf6..37439b07b8f 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterKerberos.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterKerberos.java @@ -18,6 +18,7 @@ package org.apache.solr.cloud; import javax.security.auth.login.Configuration; import java.io.File; +import java.nio.charset.StandardCharsets; import java.util.Locale; import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters; @@ -113,7 +114,7 @@ public class TestMiniSolrCloudClusterKerberos extends TestMiniSolrCloudCluster { javax.security.auth.login.Configuration.setConfiguration(conf); String jaasFilePath = kdcDir+File.separator + "jaas-client.conf"; - FileUtils.write(new File(jaasFilePath), jaas); + FileUtils.write(new File(jaasFilePath), jaas, StandardCharsets.UTF_8); System.setProperty("java.security.auth.login.config", jaasFilePath); System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1"); System.setProperty("solr.kerberos.principal", principal); diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java index f4dc97de95b..7ee510e22b7 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java @@ -19,6 +19,7 @@ package org.apache.solr.cloud; import javax.security.auth.login.Configuration; import java.io.File; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Locale; import java.util.Properties; @@ -129,7 +130,7 @@ public class TestSolrCloudWithKerberosAlt extends LuceneTestCase { Configuration.setConfiguration(conf); String jaasFilePath = kdcDir+File.separator+"jaas-client.conf"; - FileUtils.write(new File(jaasFilePath), jaas); + FileUtils.write(new File(jaasFilePath), jaas, StandardCharsets.UTF_8); System.setProperty("java.security.auth.login.config", jaasFilePath); System.setProperty("solr.kerberos.jaas.appname", "SolrClient"); // Get this app name from the jaas file System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1"); diff --git a/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java b/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java index 7c47ab1c998..30fac6a29f3 100644 --- a/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java +++ b/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java @@ -18,6 +18,7 @@ package org.apache.solr.core; import java.io.File; import java.io.StringReader; +import java.nio.charset.StandardCharsets; import java.util.Map; import org.apache.commons.io.FileUtils; @@ -46,7 +47,7 @@ public class TestConfigSetImmutable extends RestTestBase { File tmpConfDir = new File(tmpSolrHome, confDir); FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile()); // make the ConfigSet immutable - FileUtils.write(new File(tmpConfDir, "configsetprops.json"), new StringBuilder("{\"immutable\":\"true\"}")); + FileUtils.write(new File(tmpConfDir, "configsetprops.json"), new StringBuilder("{\"immutable\":\"true\"}"), StandardCharsets.UTF_8); System.setProperty("managed.schema.mutable", "true");