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

Bug#820059: jessie-pu: package xapian-core/1.2.19-1



Control: tags -1 + patch
Control: tags -1 - moreinfo
 
On Wed, Apr 06, 2016 at 09:35:46PM +0100, Adam D. Barratt wrote:
> On Tue, 2016-04-05 at 17:06 +1200, Olly Betts wrote:
> > The attached patch 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.
> 
> In isolation the patch looks okay, but in order to confirm a upload
> please can we have a debdiff of the proposed source package, as built
> and tested on Jessie?

Attached.

Cheers,
    Olly
diff -Nru xapian-core-1.2.19/debian/changelog xapian-core-1.2.19/debian/changelog
--- xapian-core-1.2.19/debian/changelog	2014-10-22 00:52:12.000000000 +1300
+++ xapian-core-1.2.19/debian/changelog	2016-04-19 12:09:08.000000000 +1200
@@ -1,3 +1,10 @@
+xapian-core (1.2.19-1+deb8u1) stable; 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 11:49:06 +1200
+
 xapian-core (1.2.19-1) unstable; urgency=low
 
   * New upstream release.
diff -Nru xapian-core-1.2.19/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch xapian-core-1.2.19/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch
--- xapian-core-1.2.19/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch	1970-01-01 12:00:00.000000000 +1200
+++ xapian-core-1.2.19/debian/patches/increment-cursor-version-on-cancel-or-reopen.patch	2016-04-05 16:53:19.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-05
+
+--- 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
+@@ -1446,6 +1446,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);
+@@ -1985,6 +1990,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
+@@ -1449,6 +1449,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);
+@@ -2007,6 +2012,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
+@@ -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;
+@@ -1989,6 +1994,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
+@@ -958,3 +958,45 @@
+     TEST_EQUAL(mset.size(), 1);
+     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.19/debian/patches/series xapian-core-1.2.19/debian/patches/series
--- xapian-core-1.2.19/debian/patches/series	2014-10-22 00:46:45.000000000 +1300
+++ xapian-core-1.2.19/debian/patches/series	2016-04-05 16:31:28.000000000 +1200
@@ -1 +1,2 @@
 force-serial-tests.patch
+increment-cursor-version-on-cancel-or-reopen.patch

Reply to: