Size: a a a

2020 June 09

A

Adv0cat in Rust Async
egoarka
Какая нафиг документация

Я говорю о реальном кейсе, вот взял я key value бд экзотическую, а там транзакций.. нема о_о

Но они как бы не очень то и нужны, но раз в в сто лет на уровне приложения используются

И про r2d2 я уже говорил, это фигня полная, она не нужна

В чате rust'а можно по поиску найти что я писал
Там нет транзакций именно потому, что их там и не должно быть. Все что не на уровне бд, это не транзакции, а обычная логика приложения. Про документацию как раз и было упомянуто, что или вы не увидели, и транзакии уже реализованы, или их нет и тогда это обычная логика.
А любую логику транзакций можно реализовать без мьютекса спокойно - на фьючах, например
источник

e

egoarka in Rust Async
Adv0cat
Там нет транзакций именно потому, что их там и не должно быть. Все что не на уровне бд, это не транзакции, а обычная логика приложения. Про документацию как раз и было упомянуто, что или вы не увидели, и транзакии уже реализованы, или их нет и тогда это обычная логика.
А любую логику транзакций можно реализовать без мьютекса спокойно - на фьючах, например
Можно пример логики транзакций на фьючах?
источник

A

Adv0cat in Rust Async
egoarka
Можно пример логики транзакций на фьючах?
Всмысле написанный код? или о чем вы конкретно спросили?)
источник

e

egoarka in Rust Async
Adv0cat
Всмысле написанный код? или о чем вы конкретно спросили?)
Ну да
Псевдокод хотя бы
источник

A

Adv0cat in Rust Async
egoarka
Ну да
Псевдокод хотя бы
Полу псевдо код:
async fn do_step_of_transaction<T>(success_future: impl Future<Output = bool>) -> bool {
   // Выполняем какую-то часть транзакции
   if /*все пошло замечательно*/ {
       success_future.await
   } else {
       // Отменяем эту транзакцию
       undo_step_of_transaction.await;
       false
   }
}
async fn undo_step_of_transaction() {
   // …
}

async fn do_2_step_of_transaction<T>(success_future: impl Future<Output = bool>) -> bool {
   // Выполняем какую-то часть 2-й транзакции
   if /*все пошло замечательно*/ {
       success_future.await
   } else {
       // Отменяем эту 2-ю транзакцию
       undo_2_step_of_transaction.await;
       false
   }
}
async fn undo_2_step_of_transaction() {
   // …
}

fn main() {
   let is_good_transaction = do_step_of_transaction(do_2_step_of_transaction).await;
}
источник

e

egoarka in Rust Async
Что то воды больше чем нужного кода
источник

A

Adv0cat in Rust Async
Ну это я по тупому сделал, так то реализация транзакций это обычная логика той же бизнес логики
источник

A

Adv0cat in Rust Async
Есть очень много подходов к транзакциям
источник

A

Adv0cat in Rust Async
egoarka
Ещё по секрету скажу

Удаленный ресурс - это не только бд, а то почему то все только в этом направлении думают
Ну т.е. я так и не понял, почему обычной логикой на фьючах не обойтись, типа писать много?) ну на мьютексе тоже будет не меньше) Хотя конечно я не предстаавляю, на что у вас фантазии хватило
источник

A

Adv0cat in Rust Async
#[solved]
Ребят, вопрос по tokio
Мне нужно с интервалом в сколько-то секунд вызывать асинхронную функцию, но если вдруг произошел сигнал SIGINT или что-то подобное, нужно прервать таймер. И есть нюанс, месте с таймером должна запуститься другая футура, по сути это actix-web server, но мне кажется разницы нет
источник

A

Adv0cat in Rust Async
В лоб не решилось, зависает на вечно
let a = tokio::spawn(async {
   let mut stream = tokio::time::interval(Duration::from_secs(1));
   loop {
       let item = stream.tick().await;
       println!("tick: {:?}", item);
   }
});
let server = HttpServer::new(…).run();
match futures::future::join(server, a).await {
   (a, b) => println!("a = {:?}, b = {:?}", a, b),
};
источник

A

Adv0cat in Rust Async
Если вместо loop поставить например 10 раз вызов stream.tick().await, то при Ctrl+C в консоли, только через 10 вызовов закроется все и вызовется println!("a = {:?}, b = {:?}", a, b)
источник

A

Adv0cat in Rust Async
Чувствую где-то туплю, и скорей всего нужно что-то не join запускать, а просто параллельно как-то, но чот не могу найти ничего такого в токио)
источник

ph

pl 🦑 hk in Rust Async
Так у тебя джойн, он ждет обеих
источник

r

red75prime in Rust Async
Adv0cat
Если вместо loop поставить например 10 раз вызов stream.tick().await, то при Ctrl+C в консоли, только через 10 вызовов закроется все и вызовется println!("a = {:?}, b = {:?}", a, b)
А ctrl+C как обрабатывается?
источник

A

Adv0cat in Rust Async
red75prime
А ctrl+C как обрабатывается?
ну actix-web мне как-то так в консоль пишет (actix_server::builder) SIGINT received, exiting
источник

ph

pl 🦑 hk in Rust Async
источник

r

red75prime in Rust Async
Эк. Они и обработку сигналов зачем-то втащили
источник

ph

pl 🦑 hk in Rust Async
Можно попробовать выключить и сделать через https://docs.rs/tokio/0.2.21/tokio/signal/index.html
источник

A

Adv0cat in Rust Async
Хм… Ну оно как бы работает, но... как-то не так)) Но мысль ясна)
источник