It's only if power is lost *after* the call to IndexWriter.commit() has successfully returned, that the guarantee holds.

commit() does not return until all newly written and referenced files in the index have been successfully fsync'd (and the OS does not return from fsync until all bytes are on stable storage).

If you lose power while commit() is still running, then the only guarantee is that the index will be consistent as of the last time you successfully ran commit (or, IndexWriter.close, which also calls commit).

In any event, as of 2.4, a power loss (or OS crash) should not corrupt your index (unlike pre-2.4), but, you will lose all changes since the last successful commit.

Mike

Dipen wrote:

hi michael,
 this is rather hard for me to understand, if a system loses power
(electricity), how can it be ensured that fsync() call will happen at all, this commit function relies on fsync() but what if OS doesnt have time or power in this case to actually call fsync() and synchronize. I read about
fsync() long time bacck and had this same question.

Is there anything like ultimate transaction preservation procedure as a state of no power is almost unpedictable and unplannable. This is rather silly question I know, but just coz you mentioned and I happened to read, I
wouldn loose this opportunity to ask this :)

thanks

On Tue, Sep 16, 2008 at 12:18 AM, Michael McCandless <
[EMAIL PROTECTED]> wrote:


There is no difference, unless your computer/OS crashes or loses power
shortly after you had call the method.

In that case, there's a big difference: commit() guarantees your index will be intact (assuming the storage system holding your index was not damaged) but with flush(), which doesn't sync() the index files it writes, it's entirely possible that the index will become corrupt because some files were
still in the OS's write cache when it crashed.

But the guarantee only holds if the underlying storage system is "honest" about fsync(), ie, it truly flushes all written bytes for that file to disk
before returning.

Mike


Cam Bazz wrote:

Hello,

What is the difference between flush in <2.4 and commit?

Also I have been looking over docs, and they mention commit(long) but
there is no commit(long) method but only commit()

Best.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to