You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Adrien Grand (Jira)" <ji...@apache.org> on 2020/02/12 19:05:00 UTC

[jira] [Created] (LUCENE-9222) Detect upgrades with non-default formats

Adrien Grand created LUCENE-9222:
------------------------------------

             Summary: Detect upgrades with non-default formats
                 Key: LUCENE-9222
                 URL: https://issues.apache.org/jira/browse/LUCENE-9222
             Project: Lucene - Core
          Issue Type: Wish
            Reporter: Adrien Grand


Lucene doesn't give any backward-compatibility guarantees with non-default formats, but doesn't try to detect such misuse either, and a couple users fell in this trap over the years, see e.g. SOLR-14254.

What about dynamically creating the version number of the index format based on the current Lucene version, so that Lucene would fail with an IndexFormatTooOldException with non-default formats instead of a confusing CorruptIndexException. The change would consist of doing something like that for all our non-default index formats:

{code}
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsWriter.java
index fcc0d00a593..18b35760aec 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsWriter.java
@@ -41,6 +41,7 @@ import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.IntsRefBuilder;
+import org.apache.lucene.util.Version;
 import org.apache.lucene.util.fst.FSTCompiler;
 import org.apache.lucene.util.fst.FST;
 import org.apache.lucene.util.fst.Util;
@@ -123,7 +124,7 @@ import org.apache.lucene.util.fst.Util;
 public class FSTTermsWriter extends FieldsConsumer {
   static final String TERMS_EXTENSION = "tfp";
   static final String TERMS_CODEC_NAME = "FSTTerms";
-  public static final int TERMS_VERSION_START = 2;
+  public static final int TERMS_VERSION_START = (Version.LATEST.major << 16) | (Version.LATEST.minor << 8) | Version.LATEST.bugfix;
   public static final int TERMS_VERSION_CURRENT = TERMS_VERSION_START;
   
   final PostingsWriterBase postingsWriter;
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org