Re[13]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 22.07.09 07:28
Оценка:
Здравствуйте, _d_m_, Вы писали:

Чуть ближе к этому алгоритму:

___>
___>запросить сумму;
___>Tran.Begin();
___>try
___>{
___>    вычесть сумму в БД; // здесь может быть исключение
___>    выдать в купюроотдатчик; // и здесь
        дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика
        если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();
___>    Tran.Commit();
___>}
___>catch(...)
___>{
___>    Tran.Rollback();
___>    throw;  -- исключение полетело по иерархии выше
___>}
___>
Re[14]: Модульные тесты и "безопасные" языки - хорошо.
От: WFrag США  
Дата: 22.07.09 10:47
Оценка:
Здравствуйте, criosray, Вы писали:

C> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика

C> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();

А сколько он их заглотил? Может я одну купюру незаметно утянул?
Re[15]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 22.07.09 12:07
Оценка:
Здравствуйте, WFrag, Вы писали:

C>> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика

C>> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();

WF>А сколько он их заглотил? Может я одну купюру незаметно утянул?


А Вы попробуйте.
Re[13]: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.07.09 13:08
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Это уже съезжаешь с темы, юлишь.

___>Ведь мы рассматриваем разницу в софте так? Если конечно деньги застрянут в купюродтатчике (или как его там) — здесь софт не поможет. Хотя и там существуют какие-либо датчики, которые могут участвовать в транзакции.

Мы тут имеем дело не с софтом, а как минимум с двумя софтами, взаимодействующими по электрическим сетям связи

И то, что одна сторона поймает исключение и прервет транзакцию не означает, что другая сторона об этом узнает. С этим можно бороться всякими многоуровневыми хендшейками, но все равно кто-то должен сказать последнее слово, на которое уже не ожидается подтверждающий ответ.

Поэтому гарантировать можно что-то одно из двух: либо что операция случится не более одного раза, либо что не менее одного раза. Но невозможно гаратнировать одновременно и то и то.
Re[16]: Модульные тесты и "безопасные" языки - хорошо.
От: WFrag США  
Дата: 22.07.09 14:36
Оценка:
Здравствуйте, criosray, Вы писали:

C>>> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика

C>>> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();

WF>>А сколько он их заглотил? Может я одну купюру незаметно утянул?


C>А Вы попробуйте.


Не хочется с банком потом разбираться. Камера же ещё снимает. Не вижу проблем придержать пачку денег и дернуть одну купюру.

А вообще, если банкомат обратно заглатывает деньги, то на счёт-то он их не возвращает (надо писать заявление в банк). Так что по факту там нет rollback. Возможно, это зависит от банка/банкомата.
Re[8]: Вточку
От: Sheridan Россия  
Дата: 22.07.09 17:52
Оценка:
iHateLogins wrote:

> Нет, это не всё. Ты давай ответь по существу, что такого замечательного ты написал на (C#?

> java?), что ты говоришь о C++, как о "убогом" языке?

Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[9]: Вточку
От: criosray  
Дата: 22.07.09 18:59
Оценка:
Здравствуйте, Sheridan, Вы писали:

>> Нет, это не всё. Ты давай ответь по существу, что такого замечательного ты написал на (C#?

>> java?), что ты говоришь о C++, как о "убогом" языке?

S>Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку


Шеридан, Вы уже разобрались с тернарным оператором?
Re[10]: Вточку
От: Sheridan Россия  
Дата: 22.07.09 20:45
Оценка:
criosray wrote:

> S>Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку

> Шеридан, Вы уже разобрались с тернарным оператором?
Ой, и правда страшное слово. Рычащее, тупоносое...
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[14]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 23.07.09 02:02
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, _d_m_, Вы писали:


___>>Это уже съезжаешь с темы, юлишь.

___>>Ведь мы рассматриваем разницу в софте так? Если конечно деньги застрянут в купюродтатчике (или как его там) — здесь софт не поможет. Хотя и там существуют какие-либо датчики, которые могут участвовать в транзакции.

Pzz>Мы тут имеем дело не с софтом, а как минимум с двумя софтами, взаимодействующими по электрическим сетям связи


Это называется — распределенная транзакция. Ничего экстраординарного.

Pzz>И то, что одна сторона поймает исключение и прервет транзакцию не означает, что другая сторона об этом узнает. С этим можно бороться всякими многоуровневыми хендшейками, но все равно кто-то должен сказать последнее слово, на которое уже не ожидается подтверждающий ответ.


Нам хэндшейки нужны только на Commit-e. Больше нигде. Серверу вообще пофиг — что там у клиента исключение или что еще. Ему дали команду списать деньги, а дальше одно из двух — либо комит, либо ролбэк.
Всего-то надо:
— клиенту знать, что комит успешен;
— серверу, что клиент получил уведомление об успешности комита — вот тогда наступает реальный комит.

Pzz>Поэтому гарантировать можно что-то одно из двух: либо что операция случится не более одного раза, либо что не менее одного раза. Но невозможно гаратнировать одновременно и то и то.


Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
Re[15]: Модульные тесты и "безопасные" языки - хорошо.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.07.09 07:32
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.


Вроде существуют способы сделать 100% транзакционность в распределенной среде.
Re[16]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 23.07.09 08:23
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, _d_m_, Вы писали:


___>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.


G>Вроде существуют способы сделать 100% транзакционность в распределенной среде.


Не верю! Невозможно.
Re[17]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 23.07.09 09:45
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.


G>>Вроде существуют способы сделать 100% транзакционность в распределенной среде.


___>Не верю! Невозможно.


Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.
Re[18]: Модульные тесты и "безопасные" языки - хорошо.
От: WFrag США  
Дата: 23.07.09 09:54
Оценка:
Здравствуйте, criosray, Вы писали:

C>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.


Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.
Re[17]: Модульные тесты и "безопасные" языки - хорошо.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.07.09 09:59
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, _d_m_, Вы писали:


___>>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.


G>>Вроде существуют способы сделать 100% транзакционность в распределенной среде.


___>Не верю! Невозможно.


Координатор транзакций, которому доверяют все участники процесса, вроде как решает такую проблему.

http://en.wikipedia.org/wiki/Distributed_transaction
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: March_rabbit  
Дата: 23.07.09 10:08
Оценка:
Здравствуйте, Antikrot, Вы писали:

A>Здравствуйте, criosray, Вы писали:


C>>>>(подсказка: бесконечный цикл)

M_>>>садитесь, два.
M_>>>Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется.
C>>Опечатка конечно подразумевалось for (i = 0;
A>не-не, изначальный вариант тоже может вызвать зацикливание (при определенных условиях).
при каких?
Re[19]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 23.07.09 10:11
Оценка:
Здравствуйте, WFrag, Вы писали:

C>>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.


WF>Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.


А если подумать?
А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.
Re[20]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 23.07.09 10:12
Оценка:
Здравствуйте, criosray, Вы писали:

C>>>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.


WF>>Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.


C>А если подумать?

C>А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.
Имелось в виду при обрыве связи с банкоматом.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: March_rabbit  
Дата: 23.07.09 10:13
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, March_rabbit, Вы писали:



C>>>http://habrahabr.ru/blogs/lifehack/64627/


C>>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>>>
C>>>int i;
C>>>int array[4];
C>>>for (int i = 0; i <= 4; i++) { 
C>>>    array[i]=0;
C>>>}
C>>>



C>>>(подсказка: бесконечный цикл)

M_>>садитесь, два.
M_>>Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется.
C>Опечатка конечно подразумевалось for (i = 0;
C>Если Вам нравится цепляться к словам, то и я прицеплюсь к Вашим: в языке С конструкция for (int i;... синтаксически некорректна.
C>Садитесь, два.

не удалось перевести тему (смотрим выделенное). Так что, не сяду

Ну а насчет придирок к словам — если в результате ошибки в словах получается неверный вывод — то следует придираться. Не было бы далекоидущих выводов — я бы и времени на ответ тратить не стал.

Да и вообще, код безграмотный. С таким подходом в любом языке можно наваять фигню, послое чего смело утверждать, что язык — г....
Re[20]: Модульные тесты и "безопасные" языки - хорошо.
От: WFrag США  
Дата: 23.07.09 10:14
Оценка:
Здравствуйте, criosray, Вы писали:

C>А если подумать?

C>А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.

Тогда другой вариант. Из всей пачки денег клиент выдергивает 1 купюру из середины. Банкомат забирает деньги обратно, дальше что? Он их пересчитывать будет?
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 23.07.09 10:14
Оценка:
Здравствуйте, March_rabbit, Вы писали:

M_>Да и вообще, код безграмотный. С таким подходом в любом языке можно наваять фигню, послое чего смело утверждать, что язык — г....

С той разницей, что на С++ это гораздо легче сделать и сложнее отладить.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.