SASGIS - SAS.Планета
View Issue Details
0001983SAS.Планета[All Projects] Хотелкаpublic27-06-2013 15:0722-11-2013 22:22
Papazol 
 
normalminorhave not tried
confirmedopen 
WindowsXPProfessional SP3
131111 
29xxxx 
0001983: Версионный кэш: переименовать версию
В некоторых тайлохранилищах для этого достаточно поменять одну строку в одном месте, но в общем случае это операция для менеджера кэша.
версионный кэш, управление кэшем
related to 0002121confirmed  Версионный кэш: удалить версию 
Issue History
27-06-2013 15:07PapazolNew Issue
27-06-2013 15:10vasketsovNote Added: 0011820
27-06-2013 15:12zedNote Added: 0011821
27-06-2013 15:13zedNote Edited: 0011821bug_revision_view_page.php?bugnote_id=11821#r5495
27-06-2013 15:25PapazolNote Added: 0011823
27-06-2013 15:36zedNote Added: 0011824
27-06-2013 15:39vasketsovNote Added: 0011825
27-06-2013 15:40vasketsovNote Added: 0011827
27-06-2013 15:44PapazolNote Added: 0011830
27-06-2013 15:48PapazolNote Edited: 0011830bug_revision_view_page.php?bugnote_id=11830#r5497
27-06-2013 15:49PapazolNote Edited: 0011830bug_revision_view_page.php?bugnote_id=11830#r5498
27-06-2013 15:55PapazolNote Edited: 0011830bug_revision_view_page.php?bugnote_id=11830#r5499
27-06-2013 15:56zedNote Added: 0011832
27-06-2013 16:05PapazolNote Added: 0011837
27-06-2013 16:15zedNote Added: 0011838
27-06-2013 16:27PapazolNote Added: 0011839
27-06-2013 16:30zedNote Added: 0011840
27-06-2013 20:19PapazolNote Added: 0011852
27-06-2013 21:18vasketsovNote Added: 0011853
27-06-2013 21:22vasketsovNote Edited: 0011853bug_revision_view_page.php?bugnote_id=11853#r5505
27-06-2013 21:32zedNote Added: 0011854
27-06-2013 21:44vasketsovNote Added: 0011855
27-06-2013 21:46PapazolNote Added: 0011856
27-06-2013 21:49zedNote Added: 0011857
27-06-2013 21:56vasketsovNote Added: 0011858
27-06-2013 22:04zedNote Added: 0011859
27-06-2013 22:09vasketsovNote Added: 0011860
27-06-2013 22:15zedNote Added: 0011861
27-06-2013 22:23vasketsovNote Added: 0011862
27-06-2013 22:26vasketsovNote Added: 0011863
27-06-2013 22:27zedNote Added: 0011864
27-06-2013 22:30vasketsovNote Added: 0011865
27-06-2013 22:37zedNote Added: 0011866
27-06-2013 22:42zedNote Edited: 0011866bug_revision_view_page.php?bugnote_id=11866#r5507
27-06-2013 22:42vasketsovNote Added: 0011867
28-06-2013 04:04GarlNote Added: 0011869
28-06-2013 04:04GarlNote Edited: 0011869bug_revision_view_page.php?bugnote_id=11869#r5511
28-06-2013 08:49vdemidovNote Added: 0011880
28-06-2013 08:55zedNote Added: 0011881
28-06-2013 09:02vdemidovNote Added: 0011882
28-06-2013 09:08zedNote Added: 0011883
28-06-2013 10:36PapazolNote Added: 0011889
28-06-2013 10:39zedNote Added: 0011893
01-07-2013 20:55PapazolNote Added: 0011965
02-07-2013 11:55vasketsovNote Added: 0011990
02-07-2013 11:57vasketsovNote Edited: 0011990bug_revision_view_page.php?bugnote_id=11990#r5555
02-07-2013 12:01vasketsovNote Edited: 0011990bug_revision_view_page.php?bugnote_id=11990#r5556
02-07-2013 12:03vasketsovNote Edited: 0011990bug_revision_view_page.php?bugnote_id=11990#r5557
28-08-2013 08:25vdemidovSummaryВерсионный кэш Беркли: переименовать и удалить версию => Версионный кэш: переименовать и удалить версию
28-08-2013 08:26vdemidovIssue cloned: 0002121
28-08-2013 08:26vdemidovRelationship addedrelated to 0002121
28-08-2013 08:28vdemidovSummaryВерсионный кэш: переименовать и удалить версию => Версионный кэш: переименовать версию
28-08-2013 08:28vdemidovDescription Updatedbug_revision_view_page.php?rev_id=5667#r5667
28-08-2013 08:28vdemidovStatusnew => confirmed
28-08-2013 08:28vdemidovTarget Version => 29xxxx
28-08-2013 08:31vdemidovTag Attached: версионный кэш
28-08-2013 09:19vdemidovTag Attached: управление кэшем
22-11-2013 22:22vdemidovProduct Version.Nightly => 131111

Notes
(0011820)
vasketsov   
27-06-2013 15:10   
Что понимается под переименованием версии?
Что понимается под удалением версии?
(0011821)
zed   
27-06-2013 15:12   
(edited on: 27-06-2013 15:13)
Так что конкретно: переименовать или удалить? Один тикет - одна хотелка.

(0011823)
Papazol   
27-06-2013 15:25   
1. Переименование - изменение имени (названия) версии. Например, изначально (при создании) версия была названа "Пробная", а затем возникла нужда дать ей имя "Тестовая".
2. Удаление версии - удаление всех тайлов, которые указанная версия содержит, и самого названия этой версии, как будто она не была создана.
3. Операции с версиями - как с файлами/каталогами. Сейчас можно только создать. А нужно и создать, и удалить, и переименовать. Version Commander. Как одно от другого отделить? Давайте назовём это операциями с версиями?
(0011824)
zed   
27-06-2013 15:36   
Так операция Удалить с выделенной областью прекрасно решает задачу удаления. Главное иметь ввиду 0001965 и не переключать версии, пока операция не завершится.

А по поводу "переименования" - есть тикет 0001968

Или хочется проводить все эти операции сразу над всем кэшем, через Управление кэшем?
(0011825)
vasketsov   
27-06-2013 15:39   
>изменение имени (названия) версии
Такое возможно, если версия - самостоятельная сущность.
Если же это не так, и версия - лишь атрибут тайла, то каждый тайл версии придётся для этой операции обновить, изменив значение со старой версии на новую.
В этом случае это отлично делается прямо сейчас через менеджер кэша (исходное хранилище равно целевому), после того как zed сделал там возможно указания версии для исходного и целевого хранилища.

>Удаление версии - удаление всех тайлов, которые указанная версия содержит
Есть подозрение, что это проще всего сделать в менеджере кэша, как перенос в дев нулл (ну или в RAM). Хотя это zed-у виднее как автору концепции менеджера кэша.
(0011827)
vasketsov   
27-06-2013 15:40   
>сразу над всем кэшем, через Управление кэшем?
Я понял что "да".
(0011830)
Papazol   
27-06-2013 15:44   
(edited on: 27-06-2013 15:55)
>Если же это не так, и версия - лишь атрибут тайла<
Это важное замечание, и оно требует либо подтверждения, либо опровержения. Я рассматривал версию как папку, содержащую файлы. Если всё не так, то дело в корне меняется. Получается так, что, если нет ни одного тайла, числящегося под этой версией, то и самОй версии нет?

И всё же, интуитивно понятный инструмент должен быть. Хотя бы для переименования. Не каждый догадается подставить одно и то же как источник и цель.

(0011832)
zed   
27-06-2013 15:56   
>Если всё не так, то дело в корне меняется
Всё не так. Версия, это свойство файла, такое же как, к примеру, дата создания тайла.
(0011837)
Papazol   
27-06-2013 16:05   
Ну вот, когда знаешь устройство, глупые мысли реже возникают. Закрываем?
(0011838)
zed   
27-06-2013 16:15   
Изменить версию через Управление кэшем сейчас не получится. Сработает защита по CRC. Да и удалить версию всему кэшу сейчас тоже нельзя - только через выделенную область. Так что по-моему хотелку нужно переименовать и разбить на задачи переименования и удаления, а так же конкретизировать, как это делать - через выделенную область или через Управление кэшем.
(0011839)
Papazol   
27-06-2013 16:27   
>Изменить версию через Управление кэшем сейчас не получится. Сработает защита по CRC.<
У меня не получилось сделать это и через выделенную область. Хотел перекинуть один снимок из общей кучи в отдельную версию. И всё вроде сработало, ни ошибок, ни предупреждений. А версии той, что я указал, просто не появилось. Тайлы ушли в никуда.

Если для переименования версии потребуется столько же времени, сколько для копирования, лучше уж пускай остаётся старая.
С удалением всё попроще, как я понял. Удаляем тайлы любым способом, и версия пропадает.
(0011840)
zed   
27-06-2013 16:30   
>У меня не получилось сделать это и через выделенную область.
Ну так да. Никак не получится.

>Если для переименования версии потребуется столько же времени, сколько для копирования
Если сделать это отдельной операцией, то меньше, но всё упирается в 0001968
(0011852)
Papazol   
27-06-2013 20:19   
>Ну так да. Никак не получится.<
С этим надо что-то делать. Блокировку что ли от перемещения тайлов внутри одного кэша. Иначе легко потерять много инфы.
(0011853)
vasketsov   
27-06-2013 21:18   
(edited on: 27-06-2013 21:22)
>Блокировку что ли от перемещения тайлов внутри одного кэша
Нельзя. Защита по CRC - фича исключительно беркли.

Тогда уж надо наоборот отключать проверку CRC, если юзер заставляет программу переносить тайлы внутри одного кэша, заодно и галочку сделать типа Same as Source в менеджере кэша, по которой серить настройку (путь+тип) целевого кэша (точнее даже получается 3 варианта: 1 - такой же как источник, 2 - определённый руками, 3 - RAM для выпиливания определённой версии из всего исходного кэша).

(0011854)
zed   
27-06-2013 21:32   
>Защита по CRC - фича исключительно беркли.
В СУБД же есть аналогичная защита, только там идентичность тайлов проверяется по их размеру. Или опция DontKeepIfSameAsPrevVersion это что-то другое?
(0011855)
vasketsov   
27-06-2013 21:44   
Это проверка только относительно одной предыдущей версии исходя из алгоритма сравнимости версий (в SQlite и файловом при VersionInCache тоже реализовано, но без настраиваемого алгоритма сравнимости, то есть у яндекса 3.102<3.99 будет везде, и только для СУБД можно сделать правильно).
Используется для проверки наличия обновления покрытия.
(0011856)
Papazol   
27-06-2013 21:46   
Не вдаваясь в глубокие подробности строения, я понимаю проблему следующим образом: программа берёт очередной тайл из исходного кэша, зная его тайловые координаты, проходится по базе в поисках тайла с такими же тайловыми координатами. И находит этот же тайл. Раз он существует, то "новый" тайл сохранять не нужно, а вот старый нужно удалить, ведь было задано перемещение.
Если несколько изменить последовательность операций, то проблема может решиться. Нужно перед поиском существующих тайлов удалить тайл-источник, тогда программа с чистой совестью сохранит новый тайл под нужной версией.
А вот копирование из кэша в него же смысла не имеет совсем.
(0011857)
zed   
27-06-2013 21:49   
Удалять что, не убедившись сперва что это что-то записалось куда надо, не очень хорошая идея.
(0011858)
vasketsov   
27-06-2013 21:56   
>Нужно перед поиском существующих тайлов удалить тайл-источник
И в случае краха тайл будет потерян отовсюду (((

>копирование из кэша в него же смысла не имеет совсем
Ещё как имеет, именно при этой операции можно заменить версию у тайла.
На примере изменения версии "Пробная" на версию "Тестовая" картина следующая.

Сейчас при переносе в тот же кэш (кроме кэша типа беркли):
1. Берётся тайл версии "Пробная".
2. Сохраняется как тайл версии "Тестовая".
3. Удаляется тайл версии "Пробная".

В беркли на шаге 2 происходит облом по CRC.

Если в менеджер кэша явно передать признак, что это тот же самый кэш, то возможно будет прямо изменить версию у тайла. Если не передать признак - надо отключить проверку на шаге 2, но тогда это будет сильно медленнее по скорости.
(0011859)
zed   
27-06-2013 22:04   
>то возможно будет прямо изменить версию у тайла
Этот "флаг" нужно как-то передать в хранилище, но vdemidov почему-то сильно против того, чтобы я изменял интерфейс хранилища, добавляя туда нужные методы 0001968:0011727 Поэтому, если кому-то сильно приспичит изменять версию, нужно будет экспортировать эти тайлы в другой кэш, удалять их из текущего, а затем уже импортировать под новой версией.
(0011860)
vasketsov   
27-06-2013 22:09   
>vdemidov почему-то сильно против
Вообще-то vdemidov был против z-order для версий потайлово.
Проца типа SetTileVersion(xy, zoom, old_version, new_version, remove_old_if_new_version_exists_flags) представляется вполне безобидной, понятной, нужной и несложной.
(0011861)
zed   
27-06-2013 22:15   
>Вообще-то vdemidov был против z-order для версий потайлово.
Я понял его совсем иначе. И процедуру я предлагал общую, чтобы через неё можно было изменять вообще любое свойство тайла, а не конкретно версию или z-order. Т.е. в качестве параметра передавать какой-то общий интерфейс, а уже внутри смотреть, какое конкретно свойство тайла просят поменять.
(0011862)
vasketsov   
27-06-2013 22:23   
>процедуру я предлагал общую
Смысла не вижу в одной общей. Это только усложнит реализацию и привнесёт лишние тормоза. Ну будет внутри неё новый switch по этому интерфейсу-параметру, где выиграем-то? Что нет лишней процедуры SetTileVersion в интерфейсе? Да пофигу сколько их, пока меньше чем 255, на скорости работы это не скажется.
(0011863)
vasketsov   
27-06-2013 22:26   
>какое конкретно свойство тайла просят поменять
А какие свойства тайла можно менять в приниципе? Тело (nil для TNE). Версию.
И всё (в предположении отказа от z-order)?
(0011864)
zed   
27-06-2013 22:27   
Да смысл не в том, какая там будет процедура, а в том, что было сказано "Только не меняй интерфейс тайлохранилища". И этим всё сказано.
(0011865)
vasketsov   
27-06-2013 22:30   
Разве этим было всё сказано, если дальше было "то можно"?
Товарищ же прямо написал, что считает достаточным (а следовательно допустимым) z-order для версий. А как его реализовать без внесения изменений в хранилище - ума не приложу ))). Так что я понял его именно в контексте избыточности потайлового z-order-а.
(0011866)
zed   
27-06-2013 22:37   
(edited on: 27-06-2013 22:42)
>Товарищ же прямо написал
Ну да, прямо написал - переделай весь существующий интерфейс, унифицируй методы Save/SaveTne/Del, перелопать 100500 строк кода, а потом можешь и свою хотелку там сбоку реализовать. Это я считаю маразмом и пускай он сам это реализует хоть в 20-м году.

>Так что я понял его именно в контексте избыточности потайлового z-order-а.
Да его фиг поймёшь. Но баба с возу - кобыле легче. Я теперь на любые вопросы "как поменять версию у тайлов", буду отправлять в тот тикет - пускай ждут.

(0011867)
vasketsov   
27-06-2013 22:42   
>Это я считаю маразмом
Угу.
Но я всё же сделаю у себя процу типа SetTileVersion, заодно разберёмся с тем, какие ей флаги надо передавать в общем случае, для каких хранилищ она будет актуальна (например для файлового это будет простой перенос тайла между папками, а вот для СУБД будет в общем случае сложнее), и т.п. А там уж поглядим, может передумает.
(0011869)
Garl   
28-06-2013 04:04   
>"как поменять версию у тайлов", буду отправлять в тот тикет - пускай ждут.
ну так экспорт в файловый кэш и загрузка обратно в версионный с принудительной установкой версии...

у мну был даже не глюк а фича (проверка CRC):
были тайлы с неверной версией, и я никак не мог записать точно такой же тайл в эти же координаты, но с другой (правильной) версией,
можно сделать хоть какую-либо индикацию?

(0011880)
vdemidov   
28-06-2013 08:49   
Vasketsov меня понял абсолютно правильно — я против добавления z-order для каждого тайла. А про
>переделай весь существующий интерфейс, унифицируй методы Save/SaveTne/Del, перелопать 100500 строк кода, а потом можешь и свою хотелку там сбоку реализовать
Я имел в виду, что если хочешь сделать универсальный метод — то незачем оставлять частные. Или один общий или несколько специализированных. А 100500 строк кода — ну что поделаешь. А ты ты сразу без слов закрыл тикет и все.
(0011881)
zed   
28-06-2013 08:55   
>Я имел в виду, что если хочешь сделать универсальный метод
Я хотел сделать универсальную функцию изменения свойств тайл. Ты ответил, что можно, но только если я переделаю все остальные функции. И сейчас это подтверждаешь. Так в чём вопрос. Как я тебя неправильно понял?
(0011882)
vdemidov   
28-06-2013 09:02   
если хочешь сделать универсальный метод — то незачем оставлять частные. Или один общий или несколько специализированных
(0011883)
zed   
28-06-2013 09:08   
Значит надо было так и написать. Я не телепат. А теперь я уже вообще ничего не хочу. Ни частных методов, ни универсальных. Спасибо.
(0011889)
Papazol   
28-06-2013 10:36   
>И в случае краха тайл будет потерян отовсюду (((<
Сейчас даже без краха тайл теряется, причём безвозвратно. Никакой защиты от этого, кроме самого пользователя, нет. Всё происходит так же, как и при закачке. Только вот при закачке тайл всё-таки остаётся на сервере.
(0011893)
zed   
28-06-2013 10:39   
>Сейчас даже без краха тайл теряется, причём безвозвратно
Не понял. Каким образом?
(0011965)
Papazol   
01-07-2013 20:55   
Таким:
>программа берёт очередной тайл из исходного кэша, зная его тайловые координаты, проходится по базе в поисках тайла с такими же тайловыми координатами. И находит этот же тайл. Раз он существует, то "новый" тайл сохранять не нужно, а вот старый нужно удалить, ведь было задано перемещение<
И всё вроде "по закону", а данные исчезают.
(0011990)
vasketsov   
02-07-2013 11:55   
(edited on: 02-07-2013 12:03)
>>Сейчас даже без краха тайл теряется, причём безвозвратно
>Не понял. Каким образом?
Смотри TThreadCacheConverter.Process.
Выход на FSourceRemoveTiles не зависит от того, был ли реально сохранён тайл в целевом хранилище.
зы. Я щас у себя сделаю флаг в виде переменной out, в неё и буду пихать результат SaveTile, тогда полечится.
ззы. Считаю, что нельзя удалять тайл, если он не записался.
ззы. Хм. А если указана версия, а она не та, тайл тоже удалится?