martinrotter / rssguard

Feed reader (and podcast player) which supports RSS/ATOM/JSON and many web-based feed services.
GNU General Public License v3.0
1.63k stars 125 forks source link

Certain Feeds do not Reliably Automatically Update #148

Closed gourdcaptain closed 4 years ago

gourdcaptain commented 7 years ago

Brief description of the issue.

Some feeds in RSSGuard like http://kotaku.com/rss do not reliably automatically update - they will sometimes not update for hours unless manually updated.

How to reproduce the bug?

  1. Add feed to reader.
  2. Set automatic update interval

What is the expected result?

Feed will automatically update when new entries are added to it.

What actually happened?

No updates occur (or only partial ones) until the feed is manually updated with right click -> update selected items.

Other information (logs, see Wiki)

System: Arch Linux 64-bit, RSSGuard 3.5.0.

Logs are currently being looked for - this issue due to being irregularly occurring is hard to reproduce on command. Will post logs once acquired.

gourdcaptain commented 7 years ago

rssguard-log.txt Here's a log. Incident occured right before I closed it - I force updated the Kotaku feed and about two hours of articles missed by 30 minute interval updates showed up.

martinrotter commented 7 years ago

Does it happen with particular feeds only, or is this more general problem?

gourdcaptain commented 7 years ago

It happens with only certain feeds. That one (Kotaku) is the most drastic case by far, though.

martinrotter commented 7 years ago

Okay, that is interesting.

martinrotter commented 7 years ago

OK, I added the feed and set auto-update global per 5 minutes, let's see what happens.

martinrotter commented 7 years ago

First auto-run, obtained 24 messages.

What happens when you do not get messages? Does feeds'name in feeds list turn into red color? Is it possible that the feed has big ping? If so, try to increase max timeout for downloading - Settings - Feeds/messages - Timeout...., change it do XXXX miliseconds, for example 45000

gourdcaptain commented 7 years ago

When it has the error, it doesn't turn red. It just silently fails to add new messages until it's manually updated. EDIT: It is missing messages that timestamp-wise would be after an auto-update and other feeds have been updated to show messages from that time period.

martinrotter commented 7 years ago

OK, second run - 0 new messages. Will check your log.

gourdcaptain commented 7 years ago

Unfortunately, we're kind of at the mercy of the feed being updated with new posts by the site to test this...

On October 12, 2017 1:54:28 AM EDT, martinrotter notifications@github.com wrote:

OK, second run - 0 new messages. Will check your log.

-- You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_martinrotter_rssguard_issues_148-23issuecomment-2D336028257&d=DwICaQ&c=3buyMx9JlH1z22L_G5pM28wz_Ru6WjhVHwo-vpeS0Gk&r=0zQ8RN820LSg0alBA3zG9VWeCI6KR1FUJkKAfmvCcAs&m=7UikWgP4_UKVeYPx6vgKaftM1Zx-iei-MVSN_HoDidI&s=5g5byDvL8jfB-1pUXH64GRBWYzZzG43vEGdjv37zVQw&e=

-- Sent from my Android device with K-9 Mail. Please excuse my brevity.

martinrotter commented 7 years ago

Yes, I will have to debug this on Linux when I get home, my Windows debugger is somehow buggy. Initially, it seems to work fine, logs do not suggest anything wrong.

Can you maybe try with only single feed (the one) added in your RSS Guard? So that log is smaller and not so cluttered?

gourdcaptain commented 7 years ago

Is there a way to run rssguard from a different config temporarily so I don't have to mess with my (rather full) main configuration I'm using all the time? I can do a backup/restore if I have to, though.

martinrotter commented 7 years ago

No, I would recommend to check in about dialog, what user folder is used, and then quit rssguard, rename your folder (make backup) and start rssguard with clean folder.

martinrotter commented 7 years ago

The logic which updates feeds is quite complicated (feed's data are downloaded simultaneously for higher speed, work with threading etc.) but right now, I just do not see the problem. I will wait for your simplified log with only that one particular feed added and in meanwhile I will try here.

gourdcaptain commented 7 years ago

rssguard-log.txt Here's the minimal log you asked for that managed to replicate the bug over about an hour and a half after I set it up. I tried to replicate the settings of the profile that had the bug on my main system (SQLite DB, in memory) and it worked with the one Kotaku feed only in the profile.

martinrotter commented 7 years ago

@gourdcaptain SO the issue is still present even when only single feed is added? Not sure if I understood your point correctly.

gourdcaptain commented 7 years ago

Yes, the issue occurs with only the one feed.

martinrotter commented 7 years ago

@gourdcaptain Just to mention, I managed AppImages generation to work.

https://github.com/martinrotter/rssguard/wiki/Linux-development-builds

I will investigate the log and let you know my detailed findings tomorrow.

gourdcaptain commented 7 years ago

Links there don't work - they've got an extra newline character "\n" in the URL. AppImages aren't really my thing, in part because there's an issue with QT5 and them for me I'm not sure if there's a good workaround/solution for. I use the qt5-styleplugins package on Arch to use the GTK2 theme for QT5 to make it match the theme of my XFCE environment (it's got a GTK3 version, but there isn't a GTK3 QT5 theme), and the AppImages don't include that theme, so AppImage'd QT5 apps turn out with a very ugly and poorly scaled for my monitor default theme.

martinrotter commented 7 years ago

Always try links on the bottom, they are newest.

martinrotter commented 7 years ago

Yes, AppImages are not very common thing on Arch either. I do not use them too, AUR is just much more native for Arch and superior.

I will release new RSS Guard with some bug fixed today.

So, I checked your log, line by line:

  1. You use SQLite in-memory working DB (no problem with that).
  2. You have active auto-update each 30 minutes.
  3. On the first run, 22 of messages for feed Kotaku was downloaded, 2 of them were added to database, 20 of them were probably already existing in the DB.
  4. On the second auto-update run, 22 messages were downloaded again, 1 of them was probably new and was added to RSS Guard database, other messages probably were not new.
  5. On the third auto-update run, 22 messages were downloaded, 2 of them were added to database, other messages were not new.
  6. You quit the app.

It seems like really standard application workflow, no errors in log. Also when I tried for myself to manually update feed like each 10 minutes, I also obtained like 0-2 new messages, so it seems that they add/change like 1 message in Kotaku feed per 30 minutes.

Were your observations the same as my findings from the log? Did you really see new two messages after first auto-update wave and 1 new in second wave and 2 new messages in third wave? It seems that Kotaku feed file is correctly downloaded and parsed each time.

So what exactly is the issue? You have impression that when auto-update is ran, not all messages are downloaded? Does this happen with other feeds? Does this happen more if you have many feeds in RSS Guard? Do you feel it is related to database size?

gourdcaptain commented 7 years ago

Yeah while there are new messages, the updates are not all grabbed automatically - some of the messages are backdated on a manual update prior to the last automatic update, meaning they were missed by the automatic update. They are all fetched in another RSS reader on my phone (Press) if it updates at the same time as the automatic update. It does occur with other feeds like this one, but rarer: https://www.techdirt.com/techdirt_rss.xml EDIT: It does not occur based on DB size, given it occured in a single feed DB created newly for that purpose.

martinrotter commented 7 years ago

So, if I keep auto-updates running for like two hours (and I get like 5 new messages) and then I will update feed manually, I should get many new messages (if the bug is present), yes?

gourdcaptain commented 7 years ago

You'll get a few? Usually? It's not 100% reliable, but that's the way it behaves.

martinrotter commented 7 years ago

I will perform testing with Inoreader, to get detailed information about that feed. Currently it says that LAST post to feed Kotaku was made 4 hours ago. To me, it really does not seem that Kotaku feed is getting major numbers of new messages often, but we will see, I will let it run for a few hours.

martinrotter commented 7 years ago

So, I let RSS Guard run for three hours and simultaneously I ran Inoreader. Both programs gathered same messages from your feed. screenshot 2017-10-16 12 48 20

Honestly, I do not know what to look for. Screenshot says that RSS Guard works, your latest log also says that RSS Guard works.

martinrotter commented 7 years ago

I can reliably say, that Kotaku feed is not getting any big amount of new messages in short time intervals, it seems to get max 1-2 new messages per hour, probably less and that is the situation I observed in both independet applications (RSS Guard, inoreader).

EDIT: Data from Inoreader are precise, it seems that there in average 10 - 30 new posts each day from the feed, so something like 1 new post per hour, this fits into my findings.

gourdcaptain commented 7 years ago

Anything I can do? Before and after database backups?

martinrotter commented 7 years ago

So, when you recorded the last log, how many new messages did you see in Kotaku feed in RSS Guard during that testing period (1 hour?)?

gourdcaptain commented 7 years ago

I don't remember beyond "there were a couple when I checked, and a few more filled in that were missed when I did the manual update."

On October 16, 2017 9:02:17 AM EDT, martinrotter notifications@github.com wrote:

So, when you recorded the last log, how many new messages did you see in Kotaku feed in RSS Guard during that testing period (1 hour?)?

-- You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_martinrotter_rssguard_issues_148-23issuecomment-2D336879679&d=DwICaQ&c=3buyMx9JlH1z22L_G5pM28wz_Ru6WjhVHwo-vpeS0Gk&r=0zQ8RN820LSg0alBA3zG9VWeCI6KR1FUJkKAfmvCcAs&m=at6FbQPKJ90LOejrBUJxofg5ghVQTeLeKdBqttNUODw&s=5rSlPY40_wqWxiDOXfLnzjzlOOnrxOywKgVcopVqtYQ&e=

-- Sent from my Android device with K-9 Mail. Please excuse my brevity.

martinrotter commented 7 years ago

I believe, the last part when you at the end manually updated the feed, is not in the log file you uploaded, it would be nice to have complete log from complete workflow:

  1. You have rssguard running with one feed for several hours.
  2. Your expected behavior is now visible (Kotaku feed auto-gets only some new messages).
  3. You now after few hours manually update.
  4. You see big number of new messages.
  5. You send log.

I believe that point 3 is not recorded in log, maybe you stopped too soon. Anyway, as I say, there is really nothing to solve because the log looks crisp clean. In every auto-update run (30 minutes) 1-2 new messages are downloaded. It would be completely different story if I saw that connection to feed file fails or messages are not inserted into DB, but no such thing happened according to uploaded log.

You can of course send DB backups before/after and I will check them, but I am not sure what I can find.

gourdcaptain commented 7 years ago

Well, I did do the number three bit before closing RSSGuard... But I can tell I'm either bad at communicating something or it's some weird particularity across both machines I have this issue on at this point. :(

On October 16, 2017 9:17:40 AM EDT, martinrotter notifications@github.com wrote:

I believe, the last part when you at the end manually updated the feed, is not in the log file you uploaded, it would be nice to have complete log from complete workflow:

  1. You have rssguard running with one feed for several hours.
  2. Your expected behavior is now visible (Kotaku feed auto-gets only some new messages).
  3. You now after few hours manually update.
  4. You see big number of new messages.
  5. You send log.

I believe that point 3 is not recorded in log, maybe you stopped too soon. Anyway, as I say, there is really nothing to solve because the log looks crisp clean. In every auto-update run (30 minutes) 1-2 new messages are downloaded. It would be completely different story if I saw that connection to feed file fails or messages are not inserted into DB, but no such thing happened according to uploaded log.

You can of course send DB backups before/after and I will check them, but I am not sure what I can find.

-- You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_martinrotter_rssguard_issues_148-23issuecomment-2D336883557&d=DwICaQ&c=3buyMx9JlH1z22L_G5pM28wz_Ru6WjhVHwo-vpeS0Gk&r=0zQ8RN820LSg0alBA3zG9VWeCI6KR1FUJkKAfmvCcAs&m=oparl8MdOQWr2yJCbhH7At8r7kH8a997retjo5dvV5c&s=xx2jYz8zV4r2KERv_78XnD8gR8jgsjIYV-ZpJaAfjdE&e=

-- Sent from my Android device with K-9 Mail. Please excuse my brevity.

martinrotter commented 7 years ago

Yes, I missed it. You manually update just before end of log file. During that update 22 messages were downloaded and 2 of them were new and were added to database, so from my point of view (from log perspective) everything works.

martinrotter commented 7 years ago

I made some adjustments to feed update process. Can you please:

  1. Download latest dev build.
  2. Start it with clean user data.
  3. Add feeds (kotaku and some others?).
  4. Configure auto-updates.
  5. Reproduce the bug.
  6. Send me log.

THANK YOU. :)

gourdcaptain commented 7 years ago

rssguard-log.txt Here you go. Didn't get around to this for a few days, and the log's a bit long because I left it going overnight even with just one feed in the setup. The bug still did occur with one entry popping in hours after it should have on a manual update at the end. Hope it helps. :)

danowar2k commented 7 years ago

I've got a similar issue and filed it. Maybe I will be able to pinpoint it...

danowar2k commented 7 years ago

Reading the log, it would probably be helpful if the debugging lines wouldn't only contain the ID of feeds but also the URLs. Then people could point at lines where they think the error happens...

martinrotter commented 7 years ago

"would probably be helpful if the debugging lines wouldn't only contain the ID of feeds but also the URLs"

Which lines exactly could be that, send those lines, I will add URLs to them.

danowar2k commented 7 years ago

Let's see...going by the log above, it would probably be good if...

It would be good if the following lines contained the URL of the feed, or rather more info to identify what is meant:

Here a list of feeds would be good maybe:

Or instead of the feed URL, the feed title perhaps...

Which files contain the logic for updating a feed? Maybe more eyes than two will help?

danowar2k commented 7 years ago

Ah, found the method, it seems.... https://github.com/martinrotter/rssguard/blob/master/src/miscellaneous/feedreader.cpp

danowar2k commented 7 years ago

Perhaps additional debug messages...

if (m_feedDownloader == nullptr) {
    qDebug("Initializing FeedDownloader...");
    m_feedDownloader = new FeedDownloader();

or here: https://github.com/martinrotter/rssguard/blob/master/src/core/feeddownloader.cpp in the "updateAvailableFeeds" method...

 while (!m_feeds.isEmpty()) {
    connect(m_feeds.first(), &Feed::messagesObtained, this, &FeedDownloader::oneFeedUpdateFinished,
            (Qt::ConnectionType)(Qt::UniqueConnection | Qt::AutoConnection));

    if (m_threadPool->tryStart(m_feeds.first())) {
      m_feeds.removeFirst();
      m_feedsUpdating++;
    }
    else {
      // We want to start update of some feeds but all working threads are occupied.
      break;
    }
  }

If you can't update the feeds because all threads are occupied you wait until you can. So that doesn't seem to be a problem because the app would just hang after some time if it were....You could add a timeout for updating the feeds after which you log a message that you couldn't update the feeds...

Where is the method "connect" defined? Oh, wait, it's a qt method: https://doc.qt.io/qt-5/qobject.html

danowar2k commented 7 years ago

Next up: https://github.com/martinrotter/rssguard/blob/master/src/services/abstract/feed.cpp

Let's see...Feeds update when run. As you have multiple feed classes inheriting from Feed, you could add additional debug information about a specific feed in the update message (e.g. feed type, standard or Gmail or whatever)

if (m_networkError != QNetworkReply::NoError) {
    qWarning("Error during fetching of new messages for feed '%s' (id %d).", qPrintable(url()), id());
    setStatus(NetworkError);
    *error_during_obtaining = true;
    return QList<Message>();
  } else if (status() != NewMessages) {
    *error_during_obtaining = false;
  }

I see that the enum for the status can be normal, NewMessages and various errors. Here it seems they are ignored? Are all errors catched by the block? Or can there be a time where there was no network error but some other error so you don't return here?

If there are no new messages, is "feed_contents" empty? You don't seem to check for that at that point, but just parse the contents. But of course I'm not seeing or knowing the big picture...

danowar2k commented 7 years ago

I just checked, after returning from energy saving I can't seem to update my Spiegel feed.

Also, you add debug messages containing URLs to article thumbnails. It would help for debugging to have the title of the article for reference. At the moment I can't see which 30 articles are downloaded by the feed.

[rssguard] DEBUG: Starting feed updates from worker in thread: '0x2760'. (17/09/11 22:31:30)
[rssguard] DEBUG: Downloading new messages for feed "48" in thread: '0xd5c'. (17/09/11 22:31:30)
[rssguard] DEBUG: Settings of BaseNetworkAccessManager loaded. (17/09/11 22:31:30)
[rssguard] DEBUG: Destroying SilentNetworkAccessManager instance. (17/09/11 22:31:30)
[rssguard] DEBUG: Adding enclosure 'http://www.spiegel.de/images/image-1211932-thumbsmall-fzde.jpg' for the message. (17/09/11 22:31:30)
[...]
[rssguard] DEBUG: Adding enclosure 'http://www.spiegel.de/images/image-1211610-thumbsmall-fdkg.jpg' for the message. (17/09/11 22:31:30)
[rssguard] DEBUG: Downloaded 30 messages for feed "48" in thread: '0xd5c'. (17/09/11 22:31:30)
[rssguard] DEBUG: Saving messages of feed "48" in thread: '0x2760'. (17/09/11 22:31:30)
[rssguard] DEBUG: Updating messages in DB. Main thread: 'false'. (17/09/11 22:31:30)
[rssguard] DEBUG: 0 messages for feed 48 stored in DB. (17/09/11 22:31:30)

By reading the rss feed in a browser, I know I am missing one new article. But I don't know if the article was downloaded or missed.

martinrotter commented 7 years ago

If you can't update the feeds because all threads are occupied you wait until you can.

Method to update rest of feeds in the queue is re-triggered when some feed's update finishes see method:

void FeedDownloader::oneFeedUpdateFinished(const QList<Message>& messages, bool error_during_obtaining)

martinrotter commented 7 years ago

Virtual method Feed::obtainNewMessages(bool* error_during_obtaining) always downloads all messages from feed source XML online file.

The lines

  else if (status() != NewMessages) {
    *error_during_obtaining = false;
  }

are there to ensure that if feed already contains new messages (and has blue color in the list of feeds) then make sure that you do not set the feed to error state (color would turn to red) ---> I removed this code now, it is confusing a bit - if there is error during feed update, feed will now turn red in all cases (but will be bold red if there are any unread messages).

martinrotter commented 7 years ago

lso, you add debug messages containing URLs to article thumbnails

Not currently possible because the logic which parses individual XML chunks and retrieves attachments from it is completely separate from message logic, but you can easily now see which feed it belongs to because in this inserting of messages to DB is synchronous. SO if you see this in the log:

[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/R8q5WACGZPM/ITotD-334-Array.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/h_imBKPukfQ/ITotD-333-Audium.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/3ZG1NwRSirM/ITotD-332-Flywheel.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Downloaded 15 messages for feed ID "4" URL: "http://feeds.feedburner.com/InterestingThingOfTheDay" title: "Interesting Thing of the Day" in thread: '0x54'. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\abstract\feed.cpp (line 174)
  Function: void __cdecl Feed::run(void)
[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/R8q5WACGZPM/ITotD-334-Array.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/h_imBKPukfQ/ITotD-333-Audium.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Adding enclosure 'http://feedproxy.google.com/~r/InterestingThingOfTheDay/~5/3ZG1NwRSirM/ITotD-332-Flywheel.mp3' for the message. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\standard\rssparser.cpp (line 61)
  Function: class Message __cdecl RssParser::extractMessage(const class QDomElement &,class QDateTime) const

[rssguard] Downloaded 15 messages for feed ID "4" URL: "http://feeds.feedburner.com/InterestingThingOfTheDay" title: "Interesting Thing of the Day" in thread: '0x54'. (17/10/11 07:14:34)
  Type: DEBUG
  File: ..\rssguard\src\services\abstract\feed.cpp (line 174)
  Function: void __cdecl Feed::run(void)

Then you know that these enclosures were obtained for feed ID "4". I also fixed now the string "Adding enclosure..." which actually means that the enclosure was decoded/obtained from feed XML (it does not mean it was added to DB). When any message is added/updated in DB, all its enclosures are automatically overwritten too.

So, I commited it.

Please test it when the development build gets compiled - see wiki/development builds. :) THANK YOU.

martinrotter commented 7 years ago

Btw, according to your log it seems that after wake from suspend, messages were actually downloaded

[rssguard] DEBUG: Adding enclosure 'http://www.spiegel.de/images/image-1211610-thumbsmall-fdkg.jpg' for the message. (17/09/11 22:31:30) [rssguard] DEBUG: Downloaded 30 messages for feed "48" in thread: '0xd5c'. (17/09/11 22:31:30) [rssguard] DEBUG: Saving messages of feed "48" in thread: '0x2760'. (17/09/11 22:31:30) [rssguard] DEBUG: Updating messages in DB. Main thread: 'false'. (17/09/11 22:31:30) [rssguard] DEBUG: 0 messages for feed 48 stored in DB. (17/09/11 22:31:30)

but not updated in DB (same message probably already existed in DB).

OR Maybe only some little detail about message has changed (currently, messages are uniquely identified with CONTENTS and CREATION DATE) so if any of these attributes is updated in online XML, it should also update itself in RSS Guard. If for example title or author is different, then RSS Guard treats the message as completely new message.

martinrotter commented 7 years ago

One more question from: Do you feel that big number of messages is not updated when the issue occurs? Or are we talking about some small number of individual messages? I am asking to determine in which subsystem the issue might be (if it is in actual feed XML file downloading/parsing or in saving of individual new/updated messages into DB).

So try to reproduce with latest version which has more debugging output in those sections of code you proposed and some more.

https://github.com/martinrotter/rssguard/commit/a93c14ddc51bb7ffbbf4e25b31808c985b05fc2d

danowar2k commented 7 years ago

First: It seems we may have a language problem: English isn't my first language (but German is). I can't speak Dutch (I thought I saw somewhere you are from the Netherlands), but we could try German if you'd like. If not, doesn't matter, I'll try to write more careful from now on...

martinrotter commented 7 years ago

I am from Czech Republic. :).

Why do you think we have language problem?

danowar2k commented 7 years ago

If you can't update the feeds because all threads are occupied you wait until you can.

Method to update rest of feeds in the queue is re-triggered when some feed's update finishes see method:

I'll look into that method, but I seem to have phrased it wrong. What I meant: Looking at your code, if one feed cannot update because the feed can get no thread, the feed will wait until it can secure a thread for itself.

Ah, so obtainNewMessages always downloads all articles contained in the feed and doesn't just parse each item and check if download is necessary (don't know if any of the two methods would cause more overhead, though).

Quick idea: If feeds turn red, an error happened during update. Could you add a context menu item to a red feed that shows the last error message?

Why do you think we have language problem?

but you can easily now which feed it belongs because in this inserting of messages to DB is synchronous

Because I didn't understand this, for example. It seems sometimes there are words missing? What is meant by "this" and "it"?

Also, I'm not careful enough when I write comments. Programming is precise and I seem to overlook stuff like writing "feeds" instead of "feed".

Also, you add debug messages containing URLs to article thumbnails. It would help for debugging to have the title of the article for reference. At the moment I can't see which 30 articles are downloaded by the feed.

Not currently possible because the logic which parses individual XML chunks and retrieves attachments from it is completely separate from message logic

When you display the message

[rssguard] Downloaded 15 messages for feed ID "4" URL: "http://feeds.feedburner.com/InterestingThingOfTheDay" title: "Interesting Thing of the Day" in thread: '0x54'. (17/10/11 07:14:34)

you know the number of downloaded messages. Can't you iterate over them and display the titles at that moment?