Как же меня достал этот глюк в LogOut...

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2578
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Как же меня достал этот глюк в LogOut...

Сообщение Губин Игорь »

При работе с LogOut наблюдается плавающе-постоянный глюк:

Внутри LogOut - Commit ключи в создаваемом файле создаются некорректно. Т.е. запись может быть добавлена (Add), а вот в ключах она не отразилась (Get даёт ошибку)...

В очередной раз наткнулся в старых кодах... Причём это может не проявляться годами, а в какой-то момент на каких-то определённых записях всё ломается.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5233
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

Как же меня достал этот глюк в LogOut...

Сообщение finsoftrz »

Ни разу не сталкивался на С6.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2578
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Как же меня достал этот глюк в LogOut...

Сообщение Губин Игорь »

finsoftrz писал(а): 17 Июнь 2025, 14:06 Ни разу не сталкивался на С6.
с10, с11
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8025
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 95 раз

Как же меня достал этот глюк в LogOut...

Сообщение Игорь Столяров »

Губин Игорь писал(а): 17 Июнь 2025, 13:26 а вот в ключах она не отразилась (Get даёт ошибку)
Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Скорее всего получится фигвам ... 🤷‍♀️ хотя может зависеть от конкретного драйвера БД.
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2578
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Как же меня достал этот глюк в LogOut...

Сообщение Губин Игорь »

Игорь Столяров писал(а): 17 Июнь 2025, 17:52 Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Файл открывается 12h, т.е. никаких посторонних влияний. Работает с файлом единственный процесс

Драйвер TopSpeed

В мануале никаких запретов
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5233
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

Как же меня достал этот глюк в LogOut...

Сообщение finsoftrz »

Игорь Столяров писал(а): 17 Июнь 2025, 17:52
Губин Игорь писал(а): 17 Июнь 2025, 13:26 а вот в ключах она не отразилась (Get даёт ошибку)
Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Скорее всего получится фигвам ... 🤷‍♀️ хотя может зависеть от конкретного драйвера БД.
Logout буферизует запись в оперативной памяти. В приведенном случае до commit get увидит новую запись только там, где выполняется операция. У всех остальных новые записи не видны, разумеется. Я тоже часто использую logout для ускорения работы. Только режу большие транзакции на порции по 50-100 тыс записей. Все нормально работает. Когда-то давно сталкивался, что если не резать транзакции, то начинало происходить торможение, видимо, своп или что-то подобное. Потом были проблемы с высвобождением памяти. Кто-то рекомендовал запускать очень большие транзакции отдельным exe, чтобы по завершении память возвращалась операционной системе. Это очень давно было. Все сказанное для topspeed, разумеется. В ряде случаев (если, например, мы конвертируем таблицы, то есть полностью создаем новый файл) ускорение дает append вместо add, с последующим build. Для btrieve быстрее было сразу add.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8025
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 95 раз

Как же меня достал этот глюк в LogOut...

Сообщение Игорь Столяров »

finsoftrz писал(а): 17 Июнь 2025, 18:43 Все сказанное для topspeed, то есть ускорение дает append вместо add, с последующим build.
Полностью согласен. Самое интересное, что на больших списках такая схема даёт хороший выигрышь и для драйвера In-Memory.
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2578
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Как же меня достал этот глюк в LogOut...

Сообщение Губин Игорь »

finsoftrz писал(а): 17 Июнь 2025, 18:43 Только режу большие транзакции на порции по 50-100 тыс записей. Все нормально работает. Когда-то давно сталкивался, что если не резать транзакции, то начинало происходить торможение, видимо, своп или что-то подобное
Тут о другом речь.

Файл не очень большой, но к нему шло постоянное обращение в процессе его же создания. Когда лимитировал жёсткий диск LogOut очень сильно ускорял процесс.

Дело в том, что ты добавил запись через Add с некоторым уникальным значением поля (единственное в ключе), потом проверил, есть ли запись с таким значением поля, а get сказал - нету, но если добавить ещё одну запись с таким значением, то вылетает по Duplicate.

Код: Выделить всё

AFile  File
AKey Key(AField),Primary
Recodd
AField Long
End
End

LogOut (.1,AFile)
AField = 1
Add(AFile)
.....
AField = 1
Get(AFile,AKey)
IF ErrorCode() Then
AFiled = 1
Add(AFile)
IF ErrorCode() <> 0 Then Stop('Что за фигня').
End

Commit
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5233
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

Как же меня достал этот глюк в LogOut...

Сообщение finsoftrz »

Похоже на баг. Во времена с6 такой вопрос обсуждался, и было сказано, что станция, которая добавляет записи в logout, сама их видит. То есть она делает get по буферу. Я обычно такое не использую, но, если правильно помню, то проверял, работало.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2578
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Как же меня достал этот глюк в LogOut...

Сообщение Губин Игорь »

finsoftrz писал(а): 17 Июнь 2025, 19:40 проверял, работало
Как правило :facepalm: работает. :dizzy:
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить