[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#821757: marked as done (wheezy-pu: package xapian-core/1.2.12-2)



Your message dated Sat, 04 Jun 2016 14:54:37 +0100
with message-id <1465048477.7545.10.camel@adam-barratt.org.uk>
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 owner@bugs.debian.org
immediately.)


-- 
821757: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=821757
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: wheezy
User: release.debian.org@packages.debian.org
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 <olly@survex.com>  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 <olly@survex.com>
+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 to: