[SCM] Akonadi packaging branch, master, updated. debian/1.13.0-2-3-g7ac96b1

Lisandro Damián Nicanor Pérez lisandro at moszumanska.debian.org
Tue Jun 30 15:03:16 UTC 2015


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-req/akonadi.git;a=commitdiff;h=7ac96b1

The following commit has been merged in the master branch:
commit 7ac96b1eaedf2b9420c18f1dbc1ed8532e72064d
Author: Lisandro Damián Nicanor Pérez Meyer <perezmeyer at gmail.com>
Date:   Tue Jun 30 12:02:46 2015 -0300

    Apply upstream_dont_leak_old_external_payload_files.patch
    
    Fixes a bug that let old files be kept when they should be removed.
---
 debian/changelog                                   |   4 +
 debian/patches/series                              |   1 +
 ...ream_dont_leak_old_external_payload_files.patch | 135 +++++++++++++++++++++
 3 files changed, 140 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index fdce07b..3c43d4d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,9 @@
 akonadi (1.13.0-3) UNRELEASED; urgency=medium
 
+  [ Lisandro Damián Nicanor Pérez Meyer ]
+  * Apply upstream_dont_leak_old_external_payload_files.patch which fixes a bug
+    that let old files be kept when they should be removed.
+
  -- Debian Qt/KDE Maintainers <debian-qt-kde at lists.debian.org>  Tue, 30 Jun 2015 12:00:16 -0300
 
 akonadi (1.13.0-2) unstable; urgency=medium
diff --git a/debian/patches/series b/debian/patches/series
index ff22ffc..584311c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@ upstream-fix_typo_in_if_condition
 upstream-fix_buffer_overflow_in_AKTEST_FAKESERVER_MAIN
 upstream-do_not_crash_when_setmntent_returns_NULL
 upstream_dont_call_insert_from_Q_ASSERT
+upstream_dont_leak_old_external_payload_files.patch
diff --git a/debian/patches/upstream_dont_leak_old_external_payload_files.patch b/debian/patches/upstream_dont_leak_old_external_payload_files.patch
new file mode 100644
index 0000000..227450d
--- /dev/null
+++ b/debian/patches/upstream_dont_leak_old_external_payload_files.patch
@@ -0,0 +1,135 @@
+From: Dan Vrátil <dvratil at redhat.com>
+Date: Mon, 29 Jun 2015 20:45:11 +0000
+Subject: Don't leak old external payload files
+X-Git-Url: http://quickgit.kde.org/?p=akonadi.git&a=commitdiff&h=9c0dc6b3f0826d32eac310b2e7ecd858ca3df681
+---
+Don't leak old external payload files
+
+Actually delete old payload files after we increase the payload revision or
+switch from external to internal payload. This caused ~/.local/share/akonadi/file_db_data
+to grow insanely for all users, leaving them with many duplicated files (just with
+different revisions).
+
+It is recommended that users run akonadictl fsck to clean up the leaked payload
+files.
+
+Note that there won't be any more releases of Akonadi 1.13 (and this has been
+fixed in master already), so I strongly recommend distributions to pick this
+patch into their packaging.
+
+BUG: 341884
+CCBUG: 338402
+---
+
+
+--- a/server/src/storage/partstreamer.cpp
++++ b/server/src/storage/partstreamer.cpp
+@@ -290,6 +290,12 @@
+         mDataChanged = true;
+     }
+ 
++    // If the part is external, remember it's current file name
++    QString originalFile;
++    if (part.isValid() && part.external()) {
++        originalFile = PartHelper::resolveAbsolutePath(part.data());
++    }
++
+     part.setPartType(partType);
+     part.setVersion(partVersion);
+     part.setPimItemId(mItem.id());
+@@ -306,6 +312,14 @@
+         *changed = mDataChanged;
+     }
+ 
++    if (!originalFile.isEmpty()) {
++        // If the part was external but is not anymore, or if it's still external
++        // but the filename has changed (revision update), remove the original file
++        if (!part.external() || (part.external() && originalFile != PartHelper::resolveAbsolutePath(part.data()))) {
++            PartHelper::removeFile(originalFile);
++        }
++    }
++
+     return ok;
+ }
+ 
+
+--- a/server/tests/unittest/partstreamertest.cpp
++++ b/server/tests/unittest/partstreamertest.cpp
+@@ -91,6 +91,7 @@
+         QTest::addColumn<qint64>("expectedPartSize");
+         QTest::addColumn<bool>("expectedChanged");
+         QTest::addColumn<bool>("isExternal");
++        QTest::addColumn<int>("version");
+         QTest::addColumn<PimItem>("pimItem");
+ 
+         PimItem item;
+@@ -101,22 +102,22 @@
+         QVERIFY(item.insert());
+ 
+         // Order of these tests matters!
+-        QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << item;
+-        QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << item;
+-        QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << item;
+-        QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << item;
+-        QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << item;
+-        QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << item;
++        QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << -1 << item;
++        QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << 0 << item;
++        QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << 1 << item;
++        QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << 2 << item;
++        QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << 2 << item;
++        QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << 2 << item;
+     }
+ 
+     void testStreamer()
+     {
+-        return;
+         QFETCH(QByteArray, expectedPartName);
+         QFETCH(QByteArray, expectedData);
+         QFETCH(qint64, expectedPartSize);
+         QFETCH(bool, expectedChanged);
+         QFETCH(bool, isExternal);
++        QFETCH(int, version);
+         QFETCH(PimItem, pimItem);
+ 
+         FakeConnection connection;
+@@ -160,17 +161,18 @@
+ 
+         PimItem item = PimItem::retrieveById(pimItem.id());
+         const QVector<Part> parts = item.parts();
+-        QVERIFY(parts.count() == 1);
++        QCOMPARE(parts.count(), 1);
+         const Part part = parts[0];
+         QCOMPARE(part.datasize(), expectedPartSize);
+         QCOMPARE(part.external(), isExternal);
++        qDebug() << part.version() << part.data();
+         const QByteArray data = part.data();
+         if (isExternal) {
+             QVERIFY(streamerSpy.count() == 1);
+             QVERIFY(streamerSpy.first().count() == 1);
+             const Response response = streamerSpy.first().first().value<Akonadi::Server::Response>();
+             const QByteArray str = response.asString();
+-            const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version()) + "]";
++            const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(version) + "]";
+             QCOMPARE(QString::fromUtf8(str), QString::fromUtf8(expectedResponse));
+ 
+             QFile file(PartHelper::resolveAbsolutePath(data));
+@@ -182,7 +184,7 @@
+             QCOMPARE(fileData, expectedData);
+ 
+             // Make sure no previous versions are left behind in file_db_data
+-            for (int i = 0; i < part.version(); ++i) {
++            for (int i = 0; i < version; ++i) {
+                 const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
+                 const QString filePath = PartHelper::resolveAbsolutePath(fileName);
+                 QVERIFY(!QFile::exists(filePath));
+@@ -194,7 +196,7 @@
+             QCOMPARE(data, expectedData);
+ 
+             // Make sure nothing is left behind in file_db_data
+-            for (int i = 0; i <= part.version(); ++i) {
++            for (int i = 0; i <= version; ++i) {
+                 const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
+                 const QString filePath = PartHelper::resolveAbsolutePath(fileName);
+                 QVERIFY(!QFile::exists(filePath));
+

-- 
Akonadi packaging



More information about the pkg-kde-commits mailing list