@@ -5,11 +5,13 @@ use crate::tasks::spawn_blocking;
5
5
use crate :: worker:: Environment ;
6
6
use crates_io_markdown:: text_to_html;
7
7
use crates_io_worker:: BackgroundJob ;
8
+ use diesel:: result:: DatabaseErrorKind ;
9
+ use diesel:: result:: Error :: DatabaseError ;
8
10
use diesel_async:: AsyncConnection ;
9
11
use diesel_async:: scoped_futures:: ScopedFutureExt ;
10
12
use serde:: { Deserialize , Serialize } ;
11
13
use std:: sync:: Arc ;
12
- use tracing:: { info, instrument} ;
14
+ use tracing:: { info, instrument, warn } ;
13
15
14
16
#[ derive( Clone , Serialize , Deserialize ) ]
15
17
pub struct RenderAndUploadReadme {
@@ -70,13 +72,39 @@ impl BackgroundJob for RenderAndUploadReadme {
70
72
let mut conn = env. deadpool . get ( ) . await ?;
71
73
conn. transaction ( |conn| {
72
74
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
75
94
. find ( job. version_id )
76
95
. inner_join ( crates:: table)
77
96
. 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
+ } ;
80
108
81
109
tracing:: Span :: current ( ) . record ( "krate.name" , tracing:: field:: display ( & crate_name) ) ;
82
110
0 commit comments