You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2014/04/08 18:21:42 UTC
svn commit: r1585774 - in /db/derby/code/trunk/java:
engine/org/apache/derby/loc/ optional/org/apache/derby/optional/lucene/
shared/org/apache/derby/shared/common/reference/
testing/org/apache/derbyTesting/functionTests/tests/lang/
Author: rhillegas
Date: Tue Apr 8 16:21:42 2014
New Revision: 1585774
URL: http://svn.apache.org/r1585774
Log:
DERBY-590: Prevent Derby from using an earlier version of Lucene to read an index created by a later version of Lucene; commit derby-590-21-aa-noTimeTravel.diff.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
db/derby/code/trunk/java/optional/org/apache/derby/optional/lucene/LuceneQueryVTI.java
db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/LuceneSupportPermsTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml?rev=1585774&r1=1585773&r2=1585774&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml Tue Apr 8 16:21:42 2014
@@ -2376,6 +2376,13 @@ Guide.
<arg>columnName</arg>
</msg>
+ <msg>
+ <name>42XBK</name>
+ <text>The current Lucene version '{0}' cannot read an index created by Lucene version '{1}'.</text>
+ <arg>luceneVersion</arg>
+ <arg>indexVersion</arg>
+ </msg>
+
<msg>
<name>42Y00</name>
<text>Class '{0}' does not implement org.apache.derby.iapi.db.AggregateDefinition and thus cannot be used as an aggregate expression.</text>
Modified: db/derby/code/trunk/java/optional/org/apache/derby/optional/lucene/LuceneQueryVTI.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/optional/org/apache/derby/optional/lucene/LuceneQueryVTI.java?rev=1585774&r1=1585773&r2=1585774&view=diff
==============================================================================
--- db/derby/code/trunk/java/optional/org/apache/derby/optional/lucene/LuceneQueryVTI.java (original)
+++ db/derby/code/trunk/java/optional/org/apache/derby/optional/lucene/LuceneQueryVTI.java Tue Apr 8 16:21:42 2014
@@ -432,6 +432,8 @@ public class LuceneQueryVTI extends Stri
String analyzerMaker = indexProperties.getProperty( LuceneSupport.ANALYZER_MAKER );
Analyzer analyzer = LuceneSupport.getAnalyzer( analyzerMaker );
+ vetLuceneVersion( indexProperties.getProperty( LuceneSupport.LUCENE_VERSION ) );
+
_indexReader = LuceneSupport.getIndexReader( new File( indexhome.toString() ) );
_searcher = new IndexSearcher(_indexReader);
@@ -465,8 +467,33 @@ public class LuceneQueryVTI extends Stri
/**
* <p>
+ * Make sure that the index wasn't created with a Lucene version from
+ * the future.
+ * </p>
+ */
+ private void vetLuceneVersion( String indexVersionString )
+ throws SQLException
+ {
+ Version currentVersion = LuceneUtils.currentVersion();
+ Version indexVersion = null;
+
+ try {
+ indexVersion = Version.valueOf( indexVersionString );
+ }
+ catch (Exception e) {}
+
+ if ( (indexVersion == null) || !currentVersion.onOrAfter( indexVersion ) )
+ {
+ throw LuceneSupport.newSQLException
+ ( SQLState.LUCENE_BAD_VERSION, currentVersion.toString(), indexVersionString );
+ }
+ }
+
+ /**
+ * <p>
* Make sure that the user has SELECT privilege on the text column and on all
* the key columns of the underlying table.
+ * </p>
*/
private void vetPrivileges() throws SQLException
{
Modified: db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java?rev=1585774&r1=1585773&r2=1585774&view=diff
==============================================================================
--- db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java (original)
+++ db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java Tue Apr 8 16:21:42 2014
@@ -1184,6 +1184,7 @@ public interface SQLState {
String LUCENE_ALREADY_UNLOADED = "42XBH";
String LUCENE_BAD_INDEX = "42XBI";
String LUCENE_BAD_COLUMN_NAME = "42XBJ";
+ String LUCENE_BAD_VERSION = "42XBK";
// org.apache.derby.impl.sql.execute.rts
String RTS_ATTACHED_TO = "43X00.U";
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/LuceneSupportPermsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/LuceneSupportPermsTest.java?rev=1585774&r1=1585773&r2=1585774&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/LuceneSupportPermsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/LuceneSupportPermsTest.java Tue Apr 8 16:21:42 2014
@@ -72,6 +72,9 @@ public class LuceneSupportPermsTest exte
//
///////////////////////////////////////////////////////////////////////////////////
+ private static final String LUCENE_VERSION_PROPERTY = "derby.tests.lucene.version";
+ private static String LUCENE_VERSION = "LUCENE_45";
+
private static final String TEST_DBO = "TEST_DBO";
private static final String RUTH = "RUTH";
private static final String ALICE = "ALICE";
@@ -105,7 +108,6 @@ public class LuceneSupportPermsTest exte
private static final long MILLIS_IN_HOUR = 1000L * 60L * 60L;
private static final long MILLIS_IN_DAY = MILLIS_IN_HOUR * 24L;
- private static final String LUCENE_VERSION = "LUCENE_45";
private static final String LANGUAGE = "en";
private static final String COUNTRY = "US";
@@ -142,6 +144,9 @@ public class LuceneSupportPermsTest exte
*/
public static Test suite()
{
+ String luceneVersion = getSystemProperty( LUCENE_VERSION_PROPERTY );
+ if ( luceneVersion != null ) { LUCENE_VERSION = luceneVersion; }
+
TestSuite suite = (TestSuite) TestConfiguration.embeddedSuite(LuceneSupportPermsTest.class);
Test localizedTest = new LocaleTestSetup( suite, new Locale( LANGUAGE, COUNTRY ) );