From mboxrd@z Thu Jan 1 00:00:00 1970 From: rlane@club.cc.cmu.edu (Rich Lane) Date: Sun, 16 Aug 2009 16:28:56 -0400 Subject: [sup-talk] [PATCH 2/2] xapian index format versioning In-Reply-To: <20090816200116.GA17272@chistera.yi.org> References: <1250451331-16070-1-git-send-email-rlane@club.cc.cmu.edu> <1250451331-16070-2-git-send-email-rlane@club.cc.cmu.edu> <20090816200116.GA17272@chistera.yi.org> Message-ID: <1250453934-sup-9651@zyrg.net> --- How's this wording? I've been thinking about a label log that would store every label modification along with the timestamp, etc. This would make the awkward downgrade-dump-upgrade step unnecessary. We could also flush it to disk more often than the full index. lib/sup/xapian_index.rb | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-) diff --git a/lib/sup/xapian_index.rb b/lib/sup/xapian_index.rb index 825e7a3..18b5050 100644 --- a/lib/sup/xapian_index.rb +++ b/lib/sup/xapian_index.rb @@ -8,6 +8,7 @@ module Redwood # for searching due to precomputing thread membership. class XapianIndex < BaseIndex STEM_LANGUAGE = "english" + INDEX_VERSION = '1' ## dates are converted to integers for xapian, and are used for document ids, ## so we must ensure they're reasonably valid. this typically only affect @@ -22,7 +23,18 @@ class XapianIndex < BaseIndex end def load_index - @xapian = Xapian::WritableDatabase.new(File.join(@dir, "xapian"), Xapian::DB_CREATE_OR_OPEN) + path = File.join(@dir, 'xapian') + if File.exists? path + @xapian = Xapian::WritableDatabase.new(path, Xapian::DB_OPEN) + db_version = @xapian.get_metadata 'version' + db_version = '0' if db_version.empty? + if db_version != INDEX_VERSION + fail "This Sup version expects a v#{INDEX_VERSION} index, but you have an existing v#{db_version} index. Please downgrade to your previous version and dump your labels before upgrading to this version (then run sup-sync --restore)." + end + else + @xapian = Xapian::WritableDatabase.new(path, Xapian::DB_CREATE) + @xapian.set_metadata 'version', INDEX_VERSION + end @term_generator = Xapian::TermGenerator.new() @term_generator.stemmer = Xapian::Stem.new(STEM_LANGUAGE) @enquire = Xapian::Enquire.new @xapian -- 1.6.4