SASGIS - SAS.Планета
View Issue Details
0001023SAS.Планета[All Projects] Багpublic26-10-2011 13:5610-10-2012 11:43
Garl 
vdemidov 
urgentmajorsometimes
closedfixed 
Windows7Professional
110418 
120808120808 
0001023: При одновременном запуске двух копий программы удаляются все метки
по пунктам:
1) из quicklaunch запускается по двойному клику 2 копии программы.

естественно файл с метками огромный и машина загружена конвертированием и файловыми операциями по самые гланды
обе копии запускаются крайне медленно порядка 10-15 секунд
в иотоге запускаются обе

2) закрываем первую копию. открываем во второй копии параметры меток и видим что метки исчезли..

и вот тут одно но:

файл с метками пока не закрыть программу , всё ещё содержит данные, а как только мы программу закрываем, она перезаписывает метки!
предложение или задавать вопрос при закрытии программы с пустыми метками и наличием "набитого" marks.sml
или не перезаписывать его(что неправильно)
или создавать что нибудь типа .loc файла на время монопольной работы с файлом меток
или не давать запускать вторую копию программы из одного и того же места с одним и тем же названием .exe

предложения рассматриваются.
подтверждения бага ожидаются.
доступ
Issue History
26-10-2011 13:56GarlNew Issue
26-10-2011 14:51bk99Note Added: 0004185
26-10-2011 15:55GarlNote Added: 0004186
26-10-2011 16:42zedNote Added: 0004187
26-10-2011 16:54GarlNote Added: 0004188
26-10-2011 17:11FetserNote Added: 0004189
26-10-2011 17:15GarlNote Edited: 0004188bug_revision_view_page.php?bugnote_id=4188#r2118
26-10-2011 17:36vasketsovNote Added: 0004190
26-10-2011 17:54GarlNote Added: 0004191
26-10-2011 19:32vasketsovNote Added: 0004192
27-10-2011 06:37TolikNote Added: 0004193
27-10-2011 06:57SnakeNote Added: 0004194
27-10-2011 07:00zedNote Added: 0004196
27-10-2011 08:08TolikNote Added: 0004203
27-10-2011 08:33GarlNote Added: 0004204
27-10-2011 08:38vdemidovNote Added: 0004205
27-10-2011 11:51zedNote Added: 0004207
27-10-2011 11:52zedNote Edited: 0004207bug_revision_view_page.php?bugnote_id=4207#r2122
27-10-2011 12:23FetserNote Added: 0004208
29-10-2011 08:28gpsMaxSummaryпри одновременном запуске двух копий программы удаляются все метки => При одновременном запуске двух копий программы удаляются все метки
29-10-2011 08:33gpsMaxAdditional Information Updatedbug_revision_view_page.php?rev_id=2136#r2136
28-06-2012 22:09vdemidovStatusnew => resolved
28-06-2012 22:09vdemidovFixed in Version => 120808
28-06-2012 22:09vdemidovResolutionopen => fixed
28-06-2012 22:09vdemidovAssigned To => vdemidov
28-06-2012 22:10vdemidovProduct Version.Nightly => 110418
28-06-2012 22:10vdemidovTarget Version => 120808
07-07-2012 11:56gpsMaxTag Attached: доступ
10-10-2012 11:43TolikStatusresolved => closed

Notes
(0004185)
bk99   
26-10-2011 14:51   
Во ты попал!
И что - все свои метки похерил?!
Сочувствую!

Примерил ситуёвину на себя и содрогнулся!
(Проверить не решился)
(0004186)
Garl   
26-10-2011 15:55   
это уже воспроизведение бага к которому был готов.
ситуацию спасло то что метку были заблаговременно скопированы на домашний комп.
(0004187)
zed   
26-10-2011 16:42   
>не давать запускать вторую копию программы
Сделать в виде опции, включённой по умолчанию. Причём, не просто с одним и тем же именем exe или одной и той же папки, а глобально: http://www.delphisources.ru/pages/faq/base/only_one_app_instance2.html
(0004188)
Garl   
26-10-2011 16:54   
(edited on: 26-10-2011 17:15)
глобально не сильно вариант. очень часто нужно 2-3 копии запущенных их разных мест
да и разные версии с разным именем живут в одной папке и юзают один кэш.

(0004189)
Fetser   
26-10-2011 17:11   
Совершенно верно метки удаляются если две копии закрывать в том же порядке что и запускаешь. Если сначала закрыть вторую копию потом первую метки остаются и такая неприятность только в последней ночной сборке.
в версии 111022.4467 всё нормально
(0004190)
vasketsov   
26-10-2011 17:36   
А какие именно операции при запуске программы требуют монопольный доступ к меткам и почему? Налицо два читателя меток, которые по идее не должны друг другу гадить. Мало ли какое приложение ещё захочет вычитать из-под саса метки.
(0004191)
Garl   
26-10-2011 17:54   
ну по идее пока одна читает(считай монопольно) вторая не дожидается файла с метками и думает что меток нету. закрываем первую (с метками) она записывает свои метки, закрываем вторую (без меток) и нате получите!
вот тут бы проверка на занятость фала бы не помешала.
(0004192)
vasketsov   
26-10-2011 19:32   
>читает(считай монопольно)
не вижу логики в монопольном чтении меток при старте программы

>проверка на занятость фала бы не помешала
ну в общем случае конечно не помешала бы, но это как бы уже немного другой вопрос (не вторичный, не первичный, а просто ортогональный ненужной блокировке меток от параллельного чтения)
(0004193)
Tolik   
27-10-2011 06:37   
Надо запрещать запуск двух программ (даже с разным именем) из одной папки, а из разных папок запрещать не надо.
(0004194)
Snake   
27-10-2011 06:57   
Одновременное использование файла с метками может произвести к путанице.
Например две программы №1 и №2 прочитали файл с метками.
Далее в программе №1 добавили метку, после чего закрываем программу №1 и она сохраняет "свои" метки, а программа №2 об добавленой метке ничего не знает и при закрытии перезапишет файл "своими" метками. Таким образом добавленая метка пропала.
А если добавлялись и удалялись метки в обоих программах, то вообще кошмар.
Тут на мой взгляд нужно:
1.либо существенно усложнять программу, назначать главную копию программы (сервер) и она будет обрабатывать сообщения об добавлении/удалении/изменении метки и предавать информацию в другие копии программы (клиенты).(усложнение это всегда новые ошибки, а иногда переписывание огромной части программы, что в свою очередь опять приводит к новым ошибкам)
2.либо все изменения сохранять в дополнительный временный файл котрый будет доступен всем копиям, а копия программы которая будет закрыта последней "решает", какие изменения записать в конечный файл.(тоже достаточное усложнение)
3.либо первая программа имеет полный доступ к метка, а все копии только чтение. (самый простой вариант), только решить вопрос с проверкой на занятость файла и дождатся пока освободится.
(0004196)
zed   
27-10-2011 07:00   
4. Либо хранить метки в базе данных, поддерживающей многопользовательский доступ к меткам.
(0004203)
Tolik   
27-10-2011 08:08   
№3 вполне достаточно.
(0004204)
Garl   
27-10-2011 08:33   
4 интереснее.
(0004205)
vdemidov   
27-10-2011 08:38   
>4 интереснее.
И какой сервер баз данных ставить пользователю? Вообще подсистему меток нужно выносить в плагины. Я в последнее много делал в этом направлении, но пока далеко не все что нужно для этого.
(0004207)
zed   
27-10-2011 11:51   
(edited on: 27-10-2011 11:52)
>сервер баз данных
Если метки в сети и это некая корпоративная сеть, то однозначно MySQL, если просто нужно запускать несколько копий на одном компе, то можно и без сервера - BerkeleyDB. Кстати, начал эту берклевскую базу подробнее изучать и буду наверное пробовать делать кэш на ней.
 
>Вообще подсистему меток нужно выносить в плагины
Да, это лучше всего, так же как и подсистему кэша с подсистемой качалки :)

(0004208)
Fetser   
27-10-2011 12:23   
После реализации хотелки 0000033 (Загрузка меток через командную строку) Возможно хранение меток в виде файлов KMZ сортируя их по папкам. Конечно при возможности импорта сразу нескольких KMZ одновременно. Тогда необходимость в самой базе меток становится не так актуальна.
Выигрыш и в скорости работы с метками и в многопользовательском доступе (если разные пользователи одновременно работают с разными KMZ они не мешают друг другу.)вероятность одновременного сохранения KMZ с одним именем снижается в разы.