From beaaed661365a81122254530435ede4f44a3bae4 Mon Sep 17 00:00:00 2001
From: Geometrically <18202329+Geometrically@users.noreply.github.com>
Date: Wed, 12 Jun 2024 14:19:15 -0700
Subject: [PATCH] Use row level locking for payouts (#926)
---
...26271156754cabcaad1df7c0d9576b3273a6c.json | 22 +++++++++++++
...169cba3afed4b6c7d9b99fc2d6a0db853cc5c.json | 22 +++++++++++++
src/queue/payouts.rs | 4 +--
src/routes/v3/payouts.rs | 31 ++++++++++++++++---
4 files changed, 71 insertions(+), 8 deletions(-)
create mode 100644 .sqlx/query-67d494c0b8818b3df09d091400626271156754cabcaad1df7c0d9576b3273a6c.json
create mode 100644 .sqlx/query-a911bd1b5d19d305e5dae51941c169cba3afed4b6c7d9b99fc2d6a0db853cc5c.json
diff --git a/.sqlx/query-67d494c0b8818b3df09d091400626271156754cabcaad1df7c0d9576b3273a6c.json b/.sqlx/query-67d494c0b8818b3df09d091400626271156754cabcaad1df7c0d9576b3273a6c.json
new file mode 100644
index 000000000..c44c773d0
--- /dev/null
+++ b/.sqlx/query-67d494c0b8818b3df09d091400626271156754cabcaad1df7c0d9576b3273a6c.json
@@ -0,0 +1,22 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n SELECT balance FROM users WHERE id = $1 FOR UPDATE\n ",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "balance",
+ "type_info": "Numeric"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Int8"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "67d494c0b8818b3df09d091400626271156754cabcaad1df7c0d9576b3273a6c"
+}
diff --git a/.sqlx/query-a911bd1b5d19d305e5dae51941c169cba3afed4b6c7d9b99fc2d6a0db853cc5c.json b/.sqlx/query-a911bd1b5d19d305e5dae51941c169cba3afed4b6c7d9b99fc2d6a0db853cc5c.json
new file mode 100644
index 000000000..483cd7940
--- /dev/null
+++ b/.sqlx/query-a911bd1b5d19d305e5dae51941c169cba3afed4b6c7d9b99fc2d6a0db853cc5c.json
@@ -0,0 +1,22 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n SELECT balance FROM users WHERE id = $1 FOR UPDATE\n ",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "balance",
+ "type_info": "Numeric"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Int8"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "a911bd1b5d19d305e5dae51941c169cba3afed4b6c7d9b99fc2d6a0db853cc5c"
+}
diff --git a/src/queue/payouts.rs b/src/queue/payouts.rs
index eed9079e4..f3570963e 100644
--- a/src/queue/payouts.rs
+++ b/src/queue/payouts.rs
@@ -16,12 +16,11 @@ use serde_json::Value;
use sqlx::postgres::PgQueryResult;
use sqlx::PgPool;
use std::collections::HashMap;
-use tokio::sync::{Mutex, RwLock};
+use tokio::sync::RwLock;
pub struct PayoutsQueue {
credential: RwLock