Java Code Examples for org.apache.lucene.codecs.CodecUtil#checkFooter()
The following examples show how to use
org.apache.lucene.codecs.CodecUtil#checkFooter() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BloomFilteringPostingsFormat.java From lucene-solr with Apache License 2.0 | 5 votes |
public BloomFilteredFieldsProducer(SegmentReadState state) throws IOException { String bloomFileName = IndexFileNames.segmentFileName( state.segmentInfo.name, state.segmentSuffix, BLOOM_EXTENSION); ChecksumIndexInput bloomIn = null; boolean success = false; try { bloomIn = state.directory.openChecksumInput(bloomFileName, state.context); CodecUtil.checkIndexHeader(bloomIn, BLOOM_CODEC_NAME, VERSION_START, VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); // // Load the hash function used in the BloomFilter // hashFunction = HashFunction.forName(bloomIn.readString()); // Load the delegate postings format PostingsFormat delegatePostingsFormat = PostingsFormat.forName(bloomIn .readString()); this.delegateFieldsProducer = delegatePostingsFormat .fieldsProducer(state); int numBlooms = bloomIn.readInt(); for (int i = 0; i < numBlooms; i++) { int fieldNum = bloomIn.readInt(); FuzzySet bloom = FuzzySet.deserialize(bloomIn); FieldInfo fieldInfo = state.fieldInfos.fieldInfo(fieldNum); bloomsByFieldName.put(fieldInfo.name, bloom); } CodecUtil.checkFooter(bloomIn); IOUtils.close(bloomIn); success = true; } finally { if (!success) { IOUtils.closeWhileHandlingException(bloomIn, delegateFieldsProducer); } } }
Example 2
Source File: CompletionFieldsProducer.java From lucene-solr with Apache License 2.0 | 5 votes |
CompletionFieldsProducer(String codecName, SegmentReadState state, FSTLoadMode fstLoadMode) throws IOException { String indexFile = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, INDEX_EXTENSION); delegateFieldsProducer = null; boolean success = false; try (ChecksumIndexInput index = state.directory.openChecksumInput(indexFile, state.context)) { // open up dict file containing all fsts String dictFile = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, DICT_EXTENSION); dictIn = state.directory.openInput(dictFile, state.context); CodecUtil.checkIndexHeader(dictIn, codecName, COMPLETION_CODEC_VERSION, COMPLETION_VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); // just validate the footer for the dictIn CodecUtil.retrieveChecksum(dictIn); // open up index file (fieldNumber, offset) CodecUtil.checkIndexHeader(index, codecName, COMPLETION_CODEC_VERSION, COMPLETION_VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); // load delegate PF PostingsFormat delegatePostingsFormat = PostingsFormat.forName(index.readString()); delegateFieldsProducer = delegatePostingsFormat.fieldsProducer(state); // read suggest field numbers and their offsets in the terms file from index int numFields = index.readVInt(); readers = new HashMap<>(numFields); for (int i = 0; i < numFields; i++) { int fieldNumber = index.readVInt(); long offset = index.readVLong(); long minWeight = index.readVLong(); long maxWeight = index.readVLong(); byte type = index.readByte(); FieldInfo fieldInfo = state.fieldInfos.fieldInfo(fieldNumber); // we don't load the FST yet readers.put(fieldInfo.name, new CompletionsTermsReader(dictIn, offset, minWeight, maxWeight, type, fstLoadMode)); } CodecUtil.checkFooter(index); success = true; } finally { if (success == false) { IOUtils.closeWhileHandlingException(delegateFieldsProducer, dictIn); } } }
Example 3
Source File: Lucene50LiveDocsFormat.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public Bits readLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) throws IOException { long gen = info.getDelGen(); String name = IndexFileNames.fileNameFromGeneration(info.info.name, EXTENSION, gen); final int length = info.info.maxDoc(); try (ChecksumIndexInput input = dir.openChecksumInput(name, context)) { Throwable priorE = null; try { CodecUtil.checkIndexHeader(input, CODEC_NAME, VERSION_START, VERSION_CURRENT, info.info.getId(), Long.toString(gen, Character.MAX_RADIX)); long data[] = new long[FixedBitSet.bits2words(length)]; for (int i = 0; i < data.length; i++) { data[i] = input.readLong(); } FixedBitSet fbs = new FixedBitSet(data, length); if (fbs.length() - fbs.cardinality() != info.getDelCount()) { throw new CorruptIndexException("bits.deleted=" + (fbs.length() - fbs.cardinality()) + " info.delcount=" + info.getDelCount(), input); } return fbs.asReadOnlyBits(); } catch (Throwable exception) { priorE = exception; } finally { CodecUtil.checkFooter(input, priorE); } } throw new AssertionError(); }
Example 4
Source File: Lucene50CompoundReader.java From lucene-solr with Apache License 2.0 | 5 votes |
/** Helper method that reads CFS entries from an input stream */ private Map<String, FileEntry> readEntries(byte[] segmentID, Directory dir, String entriesFileName) throws IOException { Map<String,FileEntry> mapping = null; try (ChecksumIndexInput entriesStream = dir.openChecksumInput(entriesFileName, IOContext.READONCE)) { Throwable priorE = null; try { version = CodecUtil.checkIndexHeader(entriesStream, Lucene50CompoundFormat.ENTRY_CODEC, Lucene50CompoundFormat.VERSION_START, Lucene50CompoundFormat.VERSION_CURRENT, segmentID, ""); final int numEntries = entriesStream.readVInt(); mapping = new HashMap<>(numEntries); for (int i = 0; i < numEntries; i++) { final FileEntry fileEntry = new FileEntry(); final String id = entriesStream.readString(); FileEntry previous = mapping.put(id, fileEntry); if (previous != null) { throw new CorruptIndexException("Duplicate cfs entry id=" + id + " in CFS ", entriesStream); } fileEntry.offset = entriesStream.readLong(); fileEntry.length = entriesStream.readLong(); } } catch (Throwable exception) { priorE = exception; } finally { CodecUtil.checkFooter(entriesStream, priorE); } } return Collections.unmodifiableMap(mapping); }
Example 5
Source File: Lucene80NormsProducer.java From lucene-solr with Apache License 2.0 | 5 votes |
Lucene80NormsProducer(SegmentReadState state, String dataCodec, String dataExtension, String metaCodec, String metaExtension) throws IOException { maxDoc = state.segmentInfo.maxDoc(); String metaName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, metaExtension); int version = -1; // read in the entries from the metadata file. try (ChecksumIndexInput in = state.directory.openChecksumInput(metaName, state.context)) { Throwable priorE = null; try { version = CodecUtil.checkIndexHeader(in, metaCodec, VERSION_START, VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); readFields(in, state.fieldInfos); } catch (Throwable exception) { priorE = exception; } finally { CodecUtil.checkFooter(in, priorE); } } String dataName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, dataExtension); data = state.directory.openInput(dataName, state.context); boolean success = false; try { final int version2 = CodecUtil.checkIndexHeader(data, dataCodec, VERSION_START, VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); if (version != version2) { throw new CorruptIndexException("Format versions mismatch: meta=" + version + ",data=" + version2, data); } // NOTE: data file is too costly to verify checksum against all the bytes on open, // but for now we at least verify proper structure of the checksum footer: which looks // for FOOTER_MAGIC + algorithmID. This is cheap and can detect some forms of corruption // such as file truncation. CodecUtil.retrieveChecksum(data); success = true; } finally { if (!success) { IOUtils.closeWhileHandlingException(this.data); } } }
Example 6
Source File: FieldsIndexReader.java From lucene-solr with Apache License 2.0 | 5 votes |
FieldsIndexReader(Directory dir, String name, String suffix, String extensionPrefix, String codecName, byte[] id) throws IOException { try (ChecksumIndexInput metaIn = dir.openChecksumInput(IndexFileNames.segmentFileName(name, suffix, extensionPrefix + FIELDS_META_EXTENSION_SUFFIX), IOContext.READONCE)) { Throwable priorE = null; try { CodecUtil.checkIndexHeader(metaIn, codecName + "Meta", VERSION_START, VERSION_CURRENT, id, suffix); maxDoc = metaIn.readInt(); blockShift = metaIn.readInt(); numChunks = metaIn.readInt(); docsStartPointer = metaIn.readLong(); docsMeta = DirectMonotonicReader.loadMeta(metaIn, numChunks, blockShift); docsEndPointer = startPointersStartPointer = metaIn.readLong(); startPointersMeta = DirectMonotonicReader.loadMeta(metaIn, numChunks, blockShift); startPointersEndPointer = metaIn.readLong(); maxPointer = metaIn.readLong(); } finally { CodecUtil.checkFooter(metaIn, priorE); } } indexInput = dir.openInput(IndexFileNames.segmentFileName(name, suffix, extensionPrefix + FIELDS_INDEX_EXTENSION_SUFFIX), IOContext.READ); boolean success = false; try { CodecUtil.checkIndexHeader(indexInput, codecName + "Idx", VERSION_START, VERSION_CURRENT, id, suffix); CodecUtil.retrieveChecksum(indexInput); success = true; } finally { if (success == false) { indexInput.close(); } } final RandomAccessInput docsSlice = indexInput.randomAccessSlice(docsStartPointer, docsEndPointer - docsStartPointer); final RandomAccessInput startPointersSlice = indexInput.randomAccessSlice(startPointersStartPointer, startPointersEndPointer - startPointersStartPointer); docs = DirectMonotonicReader.getInstance(docsMeta, docsSlice); startPointers = DirectMonotonicReader.getInstance(startPointersMeta, startPointersSlice); }
Example 7
Source File: OfflinePointReader.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public void close() throws IOException { try { if (countLeft == 0 && in instanceof ChecksumIndexInput && checked == false) { //System.out.println("NOW CHECK: " + name); checked = true; CodecUtil.checkFooter((ChecksumIndexInput) in); } } finally { in.close(); } }
Example 8
Source File: Lucene80DocValuesProducer.java From lucene-solr with Apache License 2.0 | 4 votes |
/** expert: instantiates a new reader */ Lucene80DocValuesProducer(SegmentReadState state, String dataCodec, String dataExtension, String metaCodec, String metaExtension) throws IOException { String metaName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, metaExtension); this.maxDoc = state.segmentInfo.maxDoc(); ramBytesUsed = RamUsageEstimator.shallowSizeOfInstance(getClass()); // read in the entries from the metadata file. try (ChecksumIndexInput in = state.directory.openChecksumInput(metaName, state.context)) { Throwable priorE = null; try { version = CodecUtil.checkIndexHeader(in, metaCodec, Lucene80DocValuesFormat.VERSION_START, Lucene80DocValuesFormat.VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); readFields(in, state.fieldInfos); } catch (Throwable exception) { priorE = exception; } finally { CodecUtil.checkFooter(in, priorE); } } String dataName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, dataExtension); this.data = state.directory.openInput(dataName, state.context); boolean success = false; try { final int version2 = CodecUtil.checkIndexHeader(data, dataCodec, Lucene80DocValuesFormat.VERSION_START, Lucene80DocValuesFormat.VERSION_CURRENT, state.segmentInfo.getId(), state.segmentSuffix); if (version != version2) { throw new CorruptIndexException("Format versions mismatch: meta=" + version + ", data=" + version2, data); } // NOTE: data file is too costly to verify checksum against all the bytes on open, // but for now we at least verify proper structure of the checksum footer: which looks // for FOOTER_MAGIC + algorithmID. This is cheap and can detect some forms of corruption // such as file truncation. CodecUtil.retrieveChecksum(data); success = true; } finally { if (!success) { IOUtils.closeWhileHandlingException(this.data); } } }
Example 9
Source File: Lucene80DocValuesConsumer.java From lucene-solr with Apache License 2.0 | 4 votes |
void writeMetaData() throws IOException { if (totalChunks == 0) { return; } long startDMW = data.getFilePointer(); meta.writeLong(startDMW); meta.writeVInt(totalChunks); meta.writeVInt(Lucene80DocValuesFormat.BINARY_BLOCK_SHIFT); meta.writeVInt(maxUncompressedBlockLength); meta.writeVInt(DIRECT_MONOTONIC_BLOCK_SHIFT); CodecUtil.writeFooter(tempBinaryOffsets); IOUtils.close(tempBinaryOffsets); //write the compressed block offsets info to the meta file by reading from temp file try (ChecksumIndexInput filePointersIn = state.directory.openChecksumInput(tempBinaryOffsets.getName(), IOContext.READONCE)) { CodecUtil.checkHeader(filePointersIn, Lucene80DocValuesFormat.META_CODEC + "FilePointers", Lucene80DocValuesFormat.VERSION_CURRENT, Lucene80DocValuesFormat.VERSION_CURRENT); Throwable priorE = null; try { final DirectMonotonicWriter filePointers = DirectMonotonicWriter.getInstance(meta, data, totalChunks, DIRECT_MONOTONIC_BLOCK_SHIFT); long fp = blockAddressesStart; for (int i = 0; i < totalChunks; ++i) { filePointers.add(fp); fp += filePointersIn.readVLong(); } if (maxPointer < fp) { throw new CorruptIndexException("File pointers don't add up ("+fp+" vs expected "+maxPointer+")", filePointersIn); } filePointers.finish(); } catch (Throwable e) { priorE = e; } finally { CodecUtil.checkFooter(filePointersIn, priorE); } } // Write the length of the DMW block in the data meta.writeLong(data.getFilePointer() - startDMW); }
Example 10
Source File: Lucene86PointsReader.java From lucene-solr with Apache License 2.0 | 4 votes |
/** Sole constructor */ public Lucene86PointsReader(SegmentReadState readState) throws IOException { this.readState = readState; String metaFileName = IndexFileNames.segmentFileName(readState.segmentInfo.name, readState.segmentSuffix, Lucene86PointsFormat.META_EXTENSION); String indexFileName = IndexFileNames.segmentFileName(readState.segmentInfo.name, readState.segmentSuffix, Lucene86PointsFormat.INDEX_EXTENSION); String dataFileName = IndexFileNames.segmentFileName(readState.segmentInfo.name, readState.segmentSuffix, Lucene86PointsFormat.DATA_EXTENSION); boolean success = false; try { indexIn = readState.directory.openInput(indexFileName, readState.context); CodecUtil.checkIndexHeader(indexIn, Lucene86PointsFormat.INDEX_CODEC_NAME, Lucene86PointsFormat.VERSION_START, Lucene86PointsFormat.VERSION_CURRENT, readState.segmentInfo.getId(), readState.segmentSuffix); dataIn = readState.directory.openInput(dataFileName, readState.context); CodecUtil.checkIndexHeader(dataIn, Lucene86PointsFormat.DATA_CODEC_NAME, Lucene86PointsFormat.VERSION_START, Lucene86PointsFormat.VERSION_CURRENT, readState.segmentInfo.getId(), readState.segmentSuffix); long indexLength = -1, dataLength = -1; try (ChecksumIndexInput metaIn = readState.directory.openChecksumInput(metaFileName, readState.context)) { Throwable priorE = null; try { CodecUtil.checkIndexHeader(metaIn, Lucene86PointsFormat.META_CODEC_NAME, Lucene86PointsFormat.VERSION_START, Lucene86PointsFormat.VERSION_CURRENT, readState.segmentInfo.getId(), readState.segmentSuffix); while (true) { int fieldNumber = metaIn.readInt(); if (fieldNumber == -1) { break; } else if (fieldNumber < 0) { throw new CorruptIndexException("Illegal field number: " + fieldNumber, metaIn); } BKDReader reader = new BKDReader(metaIn, indexIn, dataIn); readers.put(fieldNumber, reader); } indexLength = metaIn.readLong(); dataLength = metaIn.readLong(); } catch (Throwable t) { priorE = t; } finally { CodecUtil.checkFooter(metaIn, priorE); } } // At this point, checksums of the meta file have been validated so we // know that indexLength and dataLength are very likely correct. CodecUtil.retrieveChecksum(indexIn, indexLength); CodecUtil.retrieveChecksum(dataIn, dataLength); success = true; } finally { if (success == false) { IOUtils.closeWhileHandlingException(this); } } }
Example 11
Source File: OfflineSorter.java From lucene-solr with Apache License 2.0 | 4 votes |
/** Called on exception, to check whether the checksum is also corrupt in this source, and add that * information (checksum matched or didn't) as a suppressed exception. */ private void verifyChecksum(Throwable priorException, ByteSequencesReader reader) throws IOException { try (ChecksumIndexInput in = dir.openChecksumInput(reader.name, IOContext.READONCE)) { CodecUtil.checkFooter(in, priorException); } }