@@ -5,11 +5,13 @@ use crate::tasks::spawn_blocking;
55use crate :: worker:: Environment ;
66use crates_io_markdown:: text_to_html;
77use crates_io_worker:: BackgroundJob ;
8+ use diesel:: result:: DatabaseErrorKind ;
9+ use diesel:: result:: Error :: DatabaseError ;
810use diesel_async:: AsyncConnection ;
911use diesel_async:: scoped_futures:: ScopedFutureExt ;
1012use serde:: { Deserialize , Serialize } ;
1113use std:: sync:: Arc ;
12- use tracing:: { info, instrument} ;
14+ use tracing:: { info, instrument, warn } ;
1315
1416#[ derive( Clone , Serialize , Deserialize ) ]
1517pub struct RenderAndUploadReadme {
@@ -70,13 +72,39 @@ impl BackgroundJob for RenderAndUploadReadme {
7072 let mut conn = env. deadpool . get ( ) . await ?;
7173 conn. transaction ( |conn| {
7274 async move {
73- Version :: record_readme_rendering ( job. version_id , conn) . await ?;
74- let ( crate_name, vers) : ( String , String ) = versions:: table
75+ match Version :: record_readme_rendering ( job. version_id , conn) . await {
76+ Ok ( _) => { }
77+ Err ( DatabaseError ( DatabaseErrorKind :: ForeignKeyViolation , ..) ) => {
78+ warn ! (
79+ "Skipping README rendering recording for version {}: version not found" ,
80+ job. version_id
81+ ) ;
82+ return Ok ( ( ) ) ;
83+ }
84+ Err ( err) => {
85+ warn ! (
86+ "Failed to record README rendering for version {}: {err}" ,
87+ job. version_id,
88+ ) ;
89+ return Err ( err. into ( ) ) ;
90+ }
91+ }
92+
93+ let result = versions:: table
7594 . find ( job. version_id )
7695 . inner_join ( crates:: table)
7796 . select ( ( crates:: name, versions:: num) )
78- . first ( conn)
79- . await ?;
97+ . first :: < ( String , String ) > ( conn)
98+ . await
99+ . optional ( ) ?;
100+
101+ let Some ( ( crate_name, vers) ) = result else {
102+ warn ! (
103+ "Skipping README rendering for version {}: version not found" ,
104+ job. version_id
105+ ) ;
106+ return Ok ( ( ) ) ;
107+ } ;
80108
81109 tracing:: Span :: current ( ) . record ( "krate.name" , tracing:: field:: display ( & crate_name) ) ;
82110
0 commit comments