Your message dated Sat, 04 Jun 2016 14:54:37 +0100
with message-id <[email protected]>
and subject line Closing bugs for fixed included in 7.11
has caused the Debian Bug report #821757,
regarding wheezy-pu: package xapian-core/1.2.12-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
821757: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=821757
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: wheezy
User: [email protected]
Usertags: pu

I'd like to update xapian-core in wheezy to fix a bug which can cause
database corruption.  This is triggered by certain usage patterns, and
the recoll package is known to be affected:

https://bugs.debian.org/808610

I've attached a debdiff for the proposed upload.  The patch added is
from the upstream git repo - it's been on git master since 2015-04-28,
and in upstream stable releases since 2015-05-20.

There's already a pending request to address this in jessie:

https://bugs.debian.org/820059

The patch for wheezy is exactly the same as that for jessie, except with
a "quilt refresh" to adjust the line numbers of some of the hunks.

Cheers,
    Olly
diff -Nru xapian-core-1.2.12/debian/changelog 
xapian-core-1.2.12/debian/changelog
--- xapian-core-1.2.12/debian/changelog 2012-12-11 17:22:23.000000000 +1300
+++ xapian-core-1.2.12/debian/changelog 2016-04-19 13:14:15.000000000 +1200
@@ -1,3 +1,10 @@
+xapian-core (1.2.12-2+deb7u1) oldstable; urgency=medium
+
+  * New patch increment-cursor-version-on-cancel-or-reopen.patch fixing
+    possible database corruption, especially with recoll.  (Closes: #808610)
+
+ -- Olly Betts <[email protected]>  Tue, 19 Apr 2016 13:13:31 +1200
+
 xapian-core (1.2.12-2) unstable; urgency=low
 
   * New patch fix-db-write-lock.patch which fixes database write locking to
diff -Nru 
xapian-core-1.2.12/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch
 
xapian-core-1.2.12/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch
--- 
xapian-core-1.2.12/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch
        1970-01-01 12:00:00.000000000 +1200
+++ 
xapian-core-1.2.12/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch
        2016-04-19 13:13:25.000000000 +1200
@@ -0,0 +1,197 @@
+Description: Increment cursor version of cancel or reopen
+ Potentially increment the cursor version on cancel() or when the database is
+ reopened, and flag the current cursor version as used when a cursor is
+ rebuilt.
+ .
+ Fixes database corruption issues with certain usage patterns, which recoll
+ can trigger.
+Author: Olly Betts <[email protected]>
+Origin: upstream, 
https://trac.xapian.org/changeset/826d1a19cc356e7bf66c1681626e70af32967447/git 
and 
https://trac.xapian.org/changeset/d784290ce015958474f965817f7a41f1483c3e03/git
+Bug: https://trac.xapian.org/ticket/675
+Bug-Debian: https://bugs.debian.org/808610
+Forwarded: https://trac.xapian.org/ticket/675
+Last-Update: 2016-04-19
+
+--- a/backends/brass/brass_cursor.cc
++++ b/backends/brass/brass_cursor.cc
+@@ -1,7 +1,7 @@
+ /* brass_cursor.cc: Btree cursor implementation
+  *
+  * Copyright 1999,2000,2001 BrightStation PLC
+- * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012 Olly Betts
++ * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012,2015 Olly Betts
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License as
+@@ -99,6 +99,7 @@
+     C[level].n = B->C[level].n;
+     C[level].p = B->C[level].p;
+     version = B->cursor_version;
++    B->cursor_created_since_last_modification = true;
+ }
+ 
+ BrassCursor::~BrassCursor()
+--- a/backends/brass/brass_table.cc
++++ b/backends/brass/brass_table.cc
+@@ -1435,6 +1435,11 @@
+ 
+     base_letter = ch;
+ 
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
++
+     /* ready to open the main file */
+ 
+     RETURN(true);
+@@ -1975,6 +1980,11 @@
+     changed_n = 0;
+     changed_c = DIR_START;
+     seq_count = SEQ_START_POINT;
++
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
+ }
+ 
+ /************ B-tree reading ************/
+--- a/backends/chert/chert_cursor.cc
++++ b/backends/chert/chert_cursor.cc
+@@ -1,7 +1,7 @@
+ /* chert_cursor.cc: Btree cursor implementation
+  *
+  * Copyright 1999,2000,2001 BrightStation PLC
+- * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012 Olly Betts
++ * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012,2015 Olly Betts
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License as
+@@ -97,6 +97,7 @@
+     C[level].n = B->C[level].n;
+     C[level].p = B->C[level].p;
+     version = B->cursor_version;
++    B->cursor_created_since_last_modification = true;
+ }
+ 
+ ChertCursor::~ChertCursor()
+--- a/backends/chert/chert_table.cc
++++ b/backends/chert/chert_table.cc
+@@ -1438,6 +1438,11 @@
+ 
+     base_letter = ch;
+ 
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
++
+     /* ready to open the main file */
+ 
+     RETURN(true);
+@@ -1994,6 +1999,11 @@
+     changed_n = 0;
+     changed_c = DIR_START;
+     seq_count = SEQ_START_POINT;
++
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
+ }
+ 
+ /************ B-tree reading ************/
+--- a/backends/flint/flint_cursor.cc
++++ b/backends/flint/flint_cursor.cc
+@@ -1,7 +1,7 @@
+ /* flint_cursor.cc: Btree cursor implementation
+  *
+  * Copyright 1999,2000,2001 BrightStation PLC
+- * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012 Olly Betts
++ * Copyright 2002,2003,2004,2005,2006,2007,2008,2009,2010,2012,2015 Olly Betts
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License as
+@@ -97,6 +97,7 @@
+     C[level].n = B->C[level].n;
+     C[level].p = B->C[level].p;
+     version = B->cursor_version;
++    B->cursor_created_since_last_modification = true;
+ }
+ 
+ FlintCursor::~FlintCursor()
+--- a/backends/flint/flint_table.cc
++++ b/backends/flint/flint_table.cc
+@@ -1427,6 +1427,11 @@
+ 
+     base_letter = ch;
+ 
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
++
+     /* ready to open the main file */
+ 
+     return true;
+@@ -1976,6 +1981,11 @@
+     changed_n = 0;
+     changed_c = DIR_START;
+     seq_count = SEQ_START_POINT;
++
++    if (cursor_created_since_last_modification) {
++      cursor_created_since_last_modification = false;
++      ++cursor_version;
++    }
+ }
+ 
+ /************ B-tree reading ************/
+--- a/tests/api_backend.cc
++++ b/tests/api_backend.cc
+@@ -788,3 +788,45 @@
+                  Xapian::Auto::open_stub("nosuchdirectory", Xapian::DB_OPEN));
+     return true;
+ }
++
++/// Regression test for #675, fixed in 1.3.3 and 1.2.21.
++DEFINE_TESTCASE(cursorbug1, brass || chert || flint) {
++    Xapian::WritableDatabase wdb = get_writable_database();
++    Xapian::Database db = get_writable_database_as_database();
++    Xapian::Enquire enq(db);
++    enq.set_query(Xapian::Query::MatchAll);
++    Xapian::MSet mset;
++    // The original problem triggers for chert and glass on repeat==7.
++    for (int repeat = 0; repeat < 10; ++repeat) {
++      tout.str(string());
++      tout << "iteration #" << repeat << endl;
++
++      const int ITEMS = 10;
++      int free_id = db.get_doccount();
++      int offset = max(free_id, ITEMS * 2) - (ITEMS * 2);
++      int limit = offset + (ITEMS * 2);
++
++      mset = enq.get_mset(offset, limit);
++      for (Xapian::MSetIterator m1 = mset.begin(); m1 != mset.end(); ++m1) {
++          (void)m1.get_document().get_value(0);
++      }
++
++      for (int i = free_id; i <= free_id + ITEMS; ++i) {
++          Xapian::Document doc;
++          const string & id = str(i);
++          string qterm = "Q" + id;
++          doc.add_value(0, id);
++          doc.add_boolean_term(qterm);
++          wdb.replace_document(qterm, doc);
++      }
++      wdb.commit();
++
++      db.reopen();
++      mset = enq.get_mset(offset, limit);
++      for (Xapian::MSetIterator m2 = mset.begin(); m2 != mset.end(); ++m2) {
++          (void)m2.get_document().get_value(0);
++      }
++    }
++
++    return true;
++}
diff -Nru xapian-core-1.2.12/debian/patches/series 
xapian-core-1.2.12/debian/patches/series
--- xapian-core-1.2.12/debian/patches/series    2012-12-11 17:22:00.000000000 
+1300
+++ xapian-core-1.2.12/debian/patches/series    2016-04-19 13:12:53.000000000 
+1200
@@ -1,2 +1,3 @@
 fix-db-write-lock.patch
 replication-above-32GB.patch
+increment-cursor-version-on-cancel-or-reopen.patch

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Version: 7.11

Hi,

The fixes referred to in each of these bugs were included in today's
7.11 point release.

Regards,

Adam

--- End Message ---

Reply via email to