Skip to content

Commit cf008e0

Browse files
fix(playstation): Make feature flag organisation wide (#4736)
1 parent 2acce28 commit cf008e0

File tree

4 files changed

+74
-7
lines changed

4 files changed

+74
-7
lines changed

relay-dynamic-config/src/feature.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ pub enum Feature {
6363
OtelEndpoint,
6464
/// Enable playstation crash dump ingestion via the `/playstation/` endpoint.
6565
///
66-
/// Serialized as `project:relay-playstation-ingestion`.
67-
#[serde(rename = "projects:relay-playstation-ingestion")]
66+
/// Serialized as `organizations:relay-playstation-ingestion`.
67+
#[serde(rename = "organizations:relay-playstation-ingestion")]
6868
PlaystationIngestion,
6969
/// Discard transactions in a spans-only world.
7070
///

relay-server/src/services/processor.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,9 +1606,12 @@ impl EnvelopeProcessorService {
16061606
event_fully_normalized = inner_event_fully_normalized;
16071607
}
16081608
#[cfg(all(sentry, feature = "processing"))]
1609-
if let Some(inner_event_fully_normalized) =
1610-
playstation::process(managed_envelope, &mut event, &self.inner.config)?
1611-
{
1609+
if let Some(inner_event_fully_normalized) = playstation::process(
1610+
managed_envelope,
1611+
&mut event,
1612+
&self.inner.config,
1613+
&project_info,
1614+
)? {
16121615
event_fully_normalized = inner_event_fully_normalized;
16131616
}
16141617
if let Some(inner_event_fully_normalized) =

relay-server/src/services/processor/playstation.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! These functions are included only in the processing mode.
44
55
use relay_config::Config;
6+
use relay_dynamic_config::Feature;
67
use relay_event_schema::protocol::{
78
AppContext, Context, Contexts, DeviceContext, LenientString, OsContext, RuntimeContext, Tags,
89
};
@@ -13,6 +14,7 @@ use relay_protocol::{Annotated, Object};
1314
use crate::envelope::{AttachmentType, ContentType, Item, ItemType};
1415
use crate::services::processor::metric;
1516
use crate::services::processor::{ErrorGroup, EventFullyNormalized, ProcessingError};
17+
use crate::services::projects::project::ProjectInfo;
1618
use crate::statsd::RelayCounters;
1719
use crate::utils;
1820
use crate::utils::TypedEnvelope;
@@ -21,8 +23,14 @@ pub fn process(
2123
managed_envelope: &mut TypedEnvelope<ErrorGroup>,
2224
event: &mut Annotated<Event>,
2325
config: &Config,
26+
project_info: &ProjectInfo,
2427
) -> Result<Option<EventFullyNormalized>, ProcessingError> {
2528
let envelope = &mut managed_envelope.envelope_mut();
29+
30+
if !project_info.has_feature(Feature::PlaystationIngestion) {
31+
return Ok(None);
32+
}
33+
2634
if let Some(item) = envelope.take_item_by(|item| {
2735
item.ty() == &ItemType::Attachment
2836
&& item.attachment_type() == Some(&AttachmentType::Prosperodump)

tests/integration/test_playstation.py

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def test_playstation_with_feature_flag(
8282
playstation_dump = load_dump_file("playstation.prosperodmp")
8383
mini_sentry.add_full_project_config(
8484
PROJECT_ID,
85-
extra={"config": {"features": ["projects:relay-playstation-ingestion"]}},
85+
extra={"config": {"features": ["organizations:relay-playstation-ingestion"]}},
8686
)
8787
outcomes_consumer = outcomes_consumer()
8888
attachments_consumer = attachments_consumer()
@@ -150,7 +150,7 @@ def test_playstation_attachment(
150150
playstation_dump = load_dump_file("playstation.prosperodmp")
151151
mini_sentry.add_full_project_config(
152152
PROJECT_ID,
153-
extra={"config": {"features": ["projects:relay-playstation-ingestion"]}},
153+
extra={"config": {"features": ["organizations:relay-playstation-ingestion"]}},
154154
)
155155
outcomes_consumer = outcomes_consumer()
156156
attachments_consumer = attachments_consumer()
@@ -218,3 +218,59 @@ def test_playstation_attachment(
218218
assert "_metrics" in event_data
219219
assert event_data["_metrics"]["bytes.ingested.event.minidump"] > 0
220220
assert event_data["_metrics"]["bytes.ingested.event.attachment"] > 0
221+
222+
223+
def test_playstation_attachment_no_feature_flag(
224+
mini_sentry,
225+
relay_with_playstation,
226+
outcomes_consumer,
227+
attachments_consumer,
228+
):
229+
PROJECT_ID = 42
230+
playstation_dump = load_dump_file("playstation.prosperodmp")
231+
mini_sentry.add_full_project_config(
232+
PROJECT_ID,
233+
)
234+
outcomes_consumer = outcomes_consumer()
235+
attachments_consumer = attachments_consumer()
236+
relay = relay_with_playstation()
237+
238+
bogus_error = {
239+
"event_id": "cbf6960622e14a45abc1f03b2055b186",
240+
"type": "error",
241+
"exception": {"values": [{"type": "ValueError", "value": "Should not happen"}]},
242+
}
243+
envelope = Envelope()
244+
envelope.add_event(bogus_error)
245+
246+
# Add the PlayStation dump as an attachment
247+
envelope.add_item(
248+
Item(
249+
type="attachment",
250+
payload=PayloadRef(bytes=playstation_dump),
251+
headers={
252+
"attachment_type": "playstation.prosperodump",
253+
"filename": "playstation.prosperodmp",
254+
"content_type": "application/octet-stream",
255+
},
256+
)
257+
)
258+
relay.send_envelope(PROJECT_ID, envelope)
259+
260+
while True:
261+
_, message = attachments_consumer.get_message()
262+
if message is None or message["type"] != "attachment_chunk":
263+
event = message
264+
break
265+
266+
assert event
267+
268+
assert len(event["attachments"]) == 1
269+
attachment = event["attachments"][0]
270+
assert attachment["attachment_type"] == "playstation.prosperodump"
271+
272+
event_data = json.loads(event["payload"])
273+
assert event_data["type"] == "error"
274+
assert "exception" in event_data
275+
assert event_data["exception"]["values"][0]["type"] == "ValueError"
276+
assert event_data["exception"]["values"][0]["value"] == "Should not happen"

0 commit comments

Comments
 (0)