fix: prevent thread panic on large tag values using postgres

Exceptionally large tag values (thousands of characters) can result in
an error from postgres: index row size exceeds btree version 4 maximum
2704 for index "tag_value_idx".  This panics the writer thread, and
prevents further writes from succeeding.

This change simply removes the unwrap, allowing the error to propagate
where it is sent as a write error back to the client.  The error
message could be improved.

https://github.com/scsibug/nostr-rs-relay/issues/196
This commit is contained in:
Greg Heartsfield 2024-06-06 17:32:13 -05:00
parent b04ab76e73
commit 4f518fd0e7

View File

@ -187,8 +187,7 @@ ON CONFLICT (id) DO NOTHING"#,
.bind(tag_name) .bind(tag_name)
.bind(hex::decode(tag_val).ok()) .bind(hex::decode(tag_val).ok())
.execute(&mut tx) .execute(&mut tx)
.await .await?;
.unwrap();
} else { } else {
sqlx::query("INSERT INTO tag (event_id, \"name\", value, value_hex) VALUES($1, $2, $3, NULL) \ sqlx::query("INSERT INTO tag (event_id, \"name\", value, value_hex) VALUES($1, $2, $3, NULL) \
ON CONFLICT (event_id, \"name\", value, value_hex) DO NOTHING") ON CONFLICT (event_id, \"name\", value, value_hex) DO NOTHING")
@ -196,8 +195,7 @@ ON CONFLICT (id) DO NOTHING"#,
.bind(tag_name) .bind(tag_name)
.bind(tag_val.as_bytes()) .bind(tag_val.as_bytes())
.execute(&mut tx) .execute(&mut tx)
.await .await?;
.unwrap();
} }
} }
None => {} None => {}