@@ -10,22 +10,15 @@ use std::{
10
10
time:: Duration ,
11
11
} ;
12
12
13
- use civet:: Server as CivetServer ;
14
13
use conduit_hyper:: Service ;
15
14
use futures_util:: future:: FutureExt ;
16
15
use reqwest:: blocking:: Client ;
17
16
use sentry:: { ClientOptions , IntoDsn } ;
17
+ use tokio:: io:: AsyncWriteExt ;
18
+ use tokio:: signal:: unix:: { signal, SignalKind } ;
18
19
19
20
const CORE_THREADS : usize = 4 ;
20
21
21
- #[ allow( clippy:: large_enum_variant) ]
22
- enum Server {
23
- Civet ( CivetServer ) ,
24
- Hyper ( tokio:: runtime:: Runtime , tokio:: task:: JoinHandle < ( ) > ) ,
25
- }
26
-
27
- use Server :: * ;
28
-
29
22
fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
30
23
let _sentry = dotenv:: var ( "SENTRY_DSN_API" )
31
24
. ok ( )
@@ -90,52 +83,41 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
90
83
}
91
84
} ) ;
92
85
93
- let server = if dotenv:: var ( "WEB_USE_CIVET" ) . is_err ( ) {
94
- use tokio:: io:: AsyncWriteExt ;
95
- use tokio:: signal:: unix:: { signal, SignalKind } ;
96
-
97
- println ! ( "Booting with a hyper based server" ) ;
98
-
99
- let rt = tokio:: runtime:: Builder :: new_multi_thread ( )
100
- . enable_all ( )
101
- . worker_threads ( CORE_THREADS )
102
- . max_blocking_threads ( threads as usize )
103
- . build ( )
104
- . unwrap ( ) ;
105
-
106
- let handler = Arc :: new ( conduit_hyper:: BlockingHandler :: new ( handler) ) ;
107
- let make_service =
108
- hyper:: service:: make_service_fn ( move |socket : & hyper:: server:: conn:: AddrStream | {
109
- let addr = socket. remote_addr ( ) ;
110
- let handler = handler. clone ( ) ;
111
- async move { Service :: from_blocking ( handler, addr) }
112
- } ) ;
113
-
114
- let addr = ( ip, port) . into ( ) ;
115
- #[ allow( clippy:: async_yields_async) ]
116
- let server = rt. block_on ( async { hyper:: Server :: bind ( & addr) . serve ( make_service) } ) ;
117
-
118
- let mut sig_int = rt. block_on ( async { signal ( SignalKind :: interrupt ( ) ) } ) ?;
119
- let mut sig_term = rt. block_on ( async { signal ( SignalKind :: terminate ( ) ) } ) ?;
120
-
121
- let server = server. with_graceful_shutdown ( async move {
122
- // Wait for either signal
123
- futures_util:: select! {
124
- _ = sig_int. recv( ) . fuse( ) => { } ,
125
- _ = sig_term. recv( ) . fuse( ) => { } ,
126
- } ;
127
- let mut stdout = tokio:: io:: stdout ( ) ;
128
- stdout. write_all ( b"Starting graceful shutdown\n " ) . await . ok ( ) ;
86
+ println ! ( "Booting with a hyper based server" ) ;
87
+
88
+ let rt = tokio:: runtime:: Builder :: new_multi_thread ( )
89
+ . enable_all ( )
90
+ . worker_threads ( CORE_THREADS )
91
+ . max_blocking_threads ( threads as usize )
92
+ . build ( )
93
+ . unwrap ( ) ;
94
+
95
+ let handler = Arc :: new ( conduit_hyper:: BlockingHandler :: new ( handler) ) ;
96
+ let make_service =
97
+ hyper:: service:: make_service_fn ( move |socket : & hyper:: server:: conn:: AddrStream | {
98
+ let addr = socket. remote_addr ( ) ;
99
+ let handler = handler. clone ( ) ;
100
+ async move { Service :: from_blocking ( handler, addr) }
129
101
} ) ;
130
102
131
- let server = rt. spawn ( async { server. await . unwrap ( ) } ) ;
132
- Hyper ( rt, server)
133
- } else {
134
- println ! ( "Booting with a civet based server" ) ;
135
- let mut cfg = civet:: Config :: new ( ) ;
136
- cfg. port ( port) . threads ( threads) . keep_alive ( true ) ;
137
- Civet ( CivetServer :: start ( cfg, handler) . unwrap ( ) )
138
- } ;
103
+ let addr = ( ip, port) . into ( ) ;
104
+ #[ allow( clippy:: async_yields_async) ]
105
+ let server = rt. block_on ( async { hyper:: Server :: bind ( & addr) . serve ( make_service) } ) ;
106
+
107
+ let mut sig_int = rt. block_on ( async { signal ( SignalKind :: interrupt ( ) ) } ) ?;
108
+ let mut sig_term = rt. block_on ( async { signal ( SignalKind :: terminate ( ) ) } ) ?;
109
+
110
+ let server = server. with_graceful_shutdown ( async move {
111
+ // Wait for either signal
112
+ futures_util:: select! {
113
+ _ = sig_int. recv( ) . fuse( ) => { } ,
114
+ _ = sig_term. recv( ) . fuse( ) => { } ,
115
+ } ;
116
+ let mut stdout = tokio:: io:: stdout ( ) ;
117
+ stdout. write_all ( b"Starting graceful shutdown\n " ) . await . ok ( ) ;
118
+ } ) ;
119
+
120
+ let server = rt. spawn ( async { server. await . unwrap ( ) } ) ;
139
121
140
122
println ! ( "listening on port {}" , port) ;
141
123
@@ -159,17 +141,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
159
141
}
160
142
161
143
// Block the main thread until the server has shutdown
162
- match server {
163
- Hyper ( rt, server) => {
164
- rt. block_on ( async { server. await . unwrap ( ) } ) ;
165
- }
166
- Civet ( server) => {
167
- let ( tx, rx) = channel :: < ( ) > ( ) ;
168
- ctrlc_handler ( move || tx. send ( ( ) ) . unwrap_or ( ( ) ) ) ;
169
- rx. recv ( ) . unwrap ( ) ;
170
- drop ( server) ;
171
- }
172
- }
144
+ rt. block_on ( async { server. await . unwrap ( ) } ) ;
173
145
174
146
println ! ( "Persisting remaining downloads counters" ) ;
175
147
if let Err ( err) = app. downloads_counter . persist_all_shards ( & app) {
0 commit comments