From d131c279b961baf40e7eae477e8c37a73bcb6043 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sat, 3 Feb 2018 16:02:42 +0200 Subject: [PATCH] Add batch indexing fallback. If an RSS feed triggered a unique constrains violation, none of it's items would be indexed resulting in a Podcast without episodes. This adds a fallback that indexes each item individually if the batch index fails. --- hammond-data/src/feed.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/hammond-data/src/feed.rs b/hammond-data/src/feed.rs index 9c8f28e..9f39cd0 100644 --- a/hammond-data/src/feed.rs +++ b/hammond-data/src/feed.rs @@ -6,7 +6,7 @@ use rss; use dbqueries; use errors::*; -use models::{IndexState, Update}; +use models::{Index, IndexState, Update}; use models::{NewEpisode, NewPodcast, Podcast}; use pipeline::*; @@ -47,7 +47,16 @@ impl Feed { .and_then(|(insert, update)| { if !insert.is_empty() { info!("Indexing {} episodes.", insert.len()); - dbqueries::index_new_episodes(insert.as_slice())?; + if let Err(err) = dbqueries::index_new_episodes(insert.as_slice()) { + error!("Failed batch indexng, Fallign back to individual indexing."); + error!("Error: {}", err); + insert.iter().for_each(|ep| { + if let Err(err) = ep.index() { + error!("Failed to index episode: {:?}.", ep.title()); + error!("Error msg: {}", err); + }; + }) + } } Ok((insert, update)) })