Skip to content

Commit 09c85f7

Browse files
committed
Merge branch 'master' into release/0.17
2 parents 9d851ea + 9b033ed commit 09c85f7

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

syncserver-common/src/lib.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,18 @@ impl BlockingThreadpool {
130130
T: Send + 'static,
131131
E: fmt::Debug + Send + InternalError + 'static,
132132
{
133-
self.spawned_tasks.fetch_add(1, Ordering::Relaxed);
133+
self.spawned_tasks.fetch_add(1, Ordering::SeqCst);
134134
// Ensure the counter's always decremented (whether the task completed,
135135
// was cancelled or panicked)
136136
scopeguard::defer! {
137-
self.spawned_tasks.fetch_sub(1, Ordering::Relaxed);
137+
self.spawned_tasks.fetch_sub(1, Ordering::SeqCst);
138138
}
139139

140140
let active_threads = Arc::clone(&self.active_threads);
141141
let f_with_metrics = move || {
142-
active_threads.fetch_add(1, Ordering::Relaxed);
142+
active_threads.fetch_add(1, Ordering::SeqCst);
143143
scopeguard::defer! {
144-
active_threads.fetch_sub(1, Ordering::Relaxed);
144+
active_threads.fetch_sub(1, Ordering::SeqCst);
145145
}
146146
f()
147147
};
@@ -154,8 +154,11 @@ impl BlockingThreadpool {
154154

155155
/// Return the pool's current metrics
156156
pub fn metrics(&self) -> BlockingThreadpoolMetrics {
157-
let spawned_tasks = self.spawned_tasks.load(Ordering::Relaxed);
158-
let active_threads = self.active_threads.load(Ordering::Relaxed);
157+
// active_threads is decremented on a separate thread so we need a
158+
// strong Ordering to ensure it's in sync w/ spawned_tasks (otherwise
159+
// it could underflow queued_tasks)
160+
let spawned_tasks = self.spawned_tasks.load(Ordering::SeqCst);
161+
let active_threads = self.active_threads.load(Ordering::SeqCst);
159162
BlockingThreadpoolMetrics {
160163
queued_tasks: spawned_tasks - active_threads,
161164
active_threads,

syncserver-common/src/middleware/sentry.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ use crate::{ReportableError, Taggable};
1414
#[derive(Clone)]
1515
pub struct SentryWrapper<E> {
1616
metrics: Arc<StatsdClient>,
17-
metric_label: String,
1817
phantom: PhantomData<E>,
1918
}
2019

2120
impl<E> SentryWrapper<E> {
22-
pub fn new(metrics: Arc<StatsdClient>, metric_label: String) -> Self {
21+
pub fn new(metrics: Arc<StatsdClient>) -> Self {
2322
Self {
2423
metrics,
25-
metric_label,
2624
phantom: PhantomData,
2725
}
2826
}
@@ -44,7 +42,6 @@ where
4442
ok(SentryWrapperMiddleware {
4543
service: Rc::new(RefCell::new(service)),
4644
metrics: self.metrics.clone(),
47-
metric_label: self.metric_label.clone(),
4845
phantom: PhantomData,
4946
})
5047
}
@@ -54,7 +51,6 @@ where
5451
pub struct SentryWrapperMiddleware<S, E> {
5552
service: Rc<RefCell<S>>,
5653
metrics: Arc<StatsdClient>,
57-
metric_label: String,
5854
phantom: PhantomData<E>,
5955
}
6056

@@ -81,7 +77,6 @@ where
8177

8278
// get the tag information
8379
let metrics = self.metrics.clone();
84-
let metric_label = self.metric_label.clone();
8580
let tags = sreq.get_tags();
8681
let extras = sreq.get_extras();
8782

@@ -100,7 +95,7 @@ where
10095
// capture it, and then turn it off before we run out of money.
10196
if let Some(label) = reportable_err.metric_label() {
10297
debug!("Sentry: Sending error to metrics: {:?}", reportable_err);
103-
let _ = metrics.incr(&format!("{}.{}", metric_label, label));
98+
let _ = metrics.incr(&label);
10499
}
105100
debug!("Sentry: Not reporting error (service error): {:?}", error);
106101
return Err(error);
@@ -122,7 +117,7 @@ where
122117
if !reportable_err.is_sentry_event() {
123118
if let Some(label) = reportable_err.metric_label() {
124119
debug!("Sentry: Sending error to metrics: {:?}", reportable_err);
125-
let _ = metrics.incr(&format!("{}.{}", metric_label, label));
120+
let _ = metrics.incr(&label);
126121
}
127122
debug!("Not reporting error (service error): {:?}", error);
128123
return Ok(response);

syncserver/src/server/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,7 @@ macro_rules! build_app {
8888
// These will wrap all outbound responses with matching status codes.
8989
.wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, ApiError::render_404))
9090
// These are our wrappers
91-
.wrap(SentryWrapper::<ApiError>::new(
92-
$metrics.clone(),
93-
"api_error".to_owned(),
94-
))
91+
.wrap(SentryWrapper::<ApiError>::new($metrics.clone()))
9592
.wrap_fn(middleware::weave::set_weave_timestamp)
9693
.wrap_fn(tokenserver::logging::handle_request_log_line)
9794
.wrap_fn(middleware::rejectua::reject_user_agent)
@@ -199,7 +196,6 @@ macro_rules! build_app_without_syncstorage {
199196
.wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, ApiError::render_404))
200197
.wrap(SentryWrapper::<tokenserver_common::TokenserverError>::new(
201198
$metrics.clone(),
202-
"api_error".to_owned(),
203199
))
204200
// These are our wrappers
205201
.wrap_fn(tokenserver::logging::handle_request_log_line)

syncserver/src/web/handlers.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ use std::collections::HashMap;
33
use std::convert::Into;
44
use std::time::{Duration, Instant};
55

6-
use actix_web::{http::StatusCode, web::Data, HttpRequest, HttpResponse, HttpResponseBuilder};
6+
use crate::server::user_agent::get_device_info;
7+
use actix_web::{
8+
http::{header, StatusCode},
9+
web::Data,
10+
HttpRequest, HttpResponse, HttpResponseBuilder,
11+
};
712
use serde::Serialize;
813
use serde_json::{json, Value};
914
use syncserver_common::{X_LAST_MODIFIED, X_WEAVE_NEXT_OFFSET, X_WEAVE_RECORDS};
@@ -32,6 +37,18 @@ pub async fn get_collections(
3237
db_pool: DbTransactionPool,
3338
request: HttpRequest,
3439
) -> Result<HttpResponse, ApiError> {
40+
// The values below, prefixed by `_`, are temporarily and intentionally ignored at present.
41+
// They will be passed to the Glean logic we will implement to emit metrics.
42+
// We'd like for the data to be ready and in place to pass to that logic.
43+
let _hashed_fxa_uid: String = meta.user_id.hashed_fxa_uid.clone();
44+
let _hashed_device_id: String = meta.user_id.hashed_device_id.clone();
45+
let user_agent = request
46+
.headers()
47+
.get(header::USER_AGENT)
48+
.and_then(|header| header.to_str().ok())
49+
.unwrap_or("none");
50+
let _device_info = get_device_info(user_agent);
51+
3552
db_pool
3653
.transaction_http(request, |db| async move {
3754
meta.emit_api_metric("request.get_collections");

0 commit comments

Comments
 (0)