[
https://issues.apache.org/jira/browse/LUCENE-2373?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12861361#action_12861361
]
Andrzej Bialecki commented on LUCENE-2373:
-------------------------------------------
bq. I think that's a good plan - abstract the header write/read methods so that
another codec can easily subclass to change how/where these are written. I
think Lucene's default (standard) codec should continue to do what it does now?
And then HDFS can take the standard codec, and subclass
StandardTermsDictWriter/Reader to put the header at the end.
Assuming we add writeHeader/writeTrailer methods, the standard codec would
write the header as it does today using writeHeader(), and in writeTrailer() it
would just patch it the same way it does today.
{quote}bq. Codecs that operate on filesystems with unreliable fileLength
could write a sync marker before the trailer, and there could be a
back-tracking mechanism that starts from the reported fileLength and then tries
to find the sync marker (reading back, and/or ahead).
Can't we just use the current standard codec's approach by default?
Back-tracking seems dangerous. Eg what if .fileLength() is too small on such
filesystems?
{quote}
Yes, of course, I was just dreaming up a filesystem that is both append-only
and with unreliable fileLength ... not that I know of any off-hand :)
> Change StandardTermsDictWriter to work with streaming and append-only
> filesystems
> ---------------------------------------------------------------------------------
>
> Key: LUCENE-2373
> URL: https://issues.apache.org/jira/browse/LUCENE-2373
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Index
> Reporter: Andrzej Bialecki
> Fix For: 3.1
>
>
> Since early 2.x times Lucene used a skip/seek/write trick to patch the length
> of the terms dict into a place near the start of the output data file. This
> however made it impossible to use Lucene with append-only filesystems such as
> HDFS.
> In the post-flex trunk the following code in StandardTermsDictWriter
> initiates this:
> {code}
> // Count indexed fields up front
> CodecUtil.writeHeader(out, CODEC_NAME, VERSION_CURRENT);
> out.writeLong(0); // leave space for end
> index pointer
> {code}
> and completes this in close():
> {code}
> out.seek(CodecUtil.headerLength(CODEC_NAME));
> out.writeLong(dirStart);
> {code}
> I propose to change this layout so that this pointer is stored simply at the
> end of the file. It's always 8 bytes long, and we known the final length of
> the file from Directory, so it's a single additional seek(length - 8) to read
> it, which is not much considering the benefits.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]