lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael McCandless (JIRA)" <>
Subject [jira] Commented: (LUCENE-2373) Create a Codec to work with streaming and append-only filesystems
Date Sun, 04 Jul 2010 11:54:50 GMT


Michael McCandless commented on LUCENE-2373:

bq. DefaultCodecProvider does exactly this. Or do you mean instead of using abstract methods
in CodecProvider?

Right, I meant move the default impls into CodecProvider, so an app with a custom CodecProvider
need not implement the defaults.

bq. The reading is already factored out, but the writing ... Well, it's just 8 bytes per segment
... the reason I didn't factor it out is that it would require additional before/after delegation,
or a replication of larger sections of code...

I hear you, but it looks sort of hackish to factor out one part (seeking to the dir) but not
the other part (writing/reading the dirOffset); but I'm fine w/ committing it like this. 
Maybe just add a comment in AppendingTermsDictReader.seekDir that dirOffset, which the writer
had written into header of file, is ignored?

> Create a Codec to work with streaming and append-only filesystems
> -----------------------------------------------------------------
>                 Key: LUCENE-2373
>                 URL:
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Andrzej Bialecki 
>             Fix For: 4.0
>         Attachments: appending.patch
> 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.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

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:
For additional commands, e-mail:

View raw message