@@ -5,6 +5,8 @@ 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 } ;
@@ -70,31 +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
- let ( crate_name, vers) : ( String , String ) =
74
- match Version :: record_readme_rendering ( job. version_id , conn)
75
- . await
76
- . and (
77
- versions:: table
78
- . find ( job. version_id )
79
- . inner_join ( crates:: table)
80
- . select ( ( crates:: name, versions:: num) )
81
- . first ( conn)
82
- . await ,
83
- ) {
84
- Ok ( r) => r,
85
- Err ( diesel:: result:: Error :: DatabaseError (
86
- diesel:: result:: DatabaseErrorKind :: ForeignKeyViolation ,
87
- ..,
88
- ) )
89
- | Err ( diesel:: result:: Error :: NotFound ) => {
90
- warn ! (
91
- "Skipping rendering README for version {}: no version found" ,
92
- job. version_id
93
- ) ;
94
- return Ok ( ( ) ) ;
95
- }
96
- Err ( err) => return Err ( err. into ( ) ) ,
97
- } ;
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
94
+ . find ( job. version_id )
95
+ . inner_join ( crates:: table)
96
+ . select ( ( crates:: name, versions:: num) )
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
+ } ;
98
108
99
109
tracing:: Span :: current ( ) . record ( "krate.name" , tracing:: field:: display ( & crate_name) ) ;
100
110
0 commit comments