View Issue Details

IDProjectCategoryView StatusLast Update
0003447SAS.ПланетаБаг / Bugpublic27-05-2019 13:52
Reporterzed Assigned Tozed  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product Version181221 
Target Version190707Fixed in Version190707 
Summary0003447: TStorageStateInternal игнорирует опцию AllowScan
DescriptionПри создании хранилища с единственной целью - сканирование тайлов, получаем невалидный стейт, у которого нету доступа ни к чему.

Воспроизводится на тайловом хранилище, с ForceAbilities созданными таким образом:
TTileStorageAbilities.Create([tsatScan]).
TagsNo tags attached.

Activities

zed

23-05-2019 20:03

manager   ~0018709

И ещё мне кажется очень странным использование 3-х состояний TAccesState. Какой вообще смысл в использовании asUnknown?

По-моему, тут надо упростить, перейти на Boolean и по дефолту разрешать доступ ко всему, а уже ForceAbilities будут решать, что конкретно оставить.

Так же есть сомнение о необходимости свойств WriteAccess и IsReadOnly (у ITileStorageAbilities) - это вспомогательные свойства, которые могут быть получены из имеющихся. Их наличие усложняет код и по хорошему их надо либо убрать, либо заменить на одно свойство типа enum (возможно, даже только для чтения), со значениями (ReadOnly, WriteOnly, ReadWrite).

vdemidov

24-05-2019 01:55

manager   ~0018710

Б.я. Пол часа писал, а оно ничго не сохранило, ибо долго писал.

vdemidov

24-05-2019 04:59

manager   ~0018711

Last edited: 24-05-2019 05:35

Пишу еще раз

> При создании хранилища с единственной целью - сканирование тайлов, получаем невалидный стейт, у которого нету доступа ни к чему.
А к чему там должен быть доступ. Вроде бы там и должен быть доступ только к скану. Но может быть и ошибка где-то.

Подразумевается, что это открытие только на один или несколько проходов сканирования всех тайлов, без возможности получения доступа к произвольному тайлу и без любых прав на изменение. Пример - проход по tar архиву.

>И ещё мне кажется очень странным использование 3-х состояний TAccesState. Какой вообще смысл в использовании asUnknown?
Смысл в том, что бы если запущена закачка, а доступа на запись в тайлохранилище нет, то что бы она могла понять, что запись не доступна и не качала тайлы без записи. И что бы инициализация была ленивая, тоесть оно не пытается узнать есть ли возможность записи пока не получит первую команду на запись. Но возможно, это действительно стоит выбросить и сделать только ленивую инициализацию всего тайлохранилища, а уже в ней сразу проверять и чтение, и запись.

>Так же есть сомнение о необходимости свойств WriteAccess и IsReadOnly (у ITileStorageAbilities)
Возможно. Скорее всего перемудрил. Поясню зачем это нужно. В первую очередь это нужно для типа тайлохранилища, что бы можно было указать какие типы операций оно поволяет. Причем все они практически ортогональны. И где ты наше WriteAccess у ITileStorageAbilities? Там есть:
AllowScan - проход по всем тайлам в тайлохранилище (например импорт tar архива)
AllowRead - произвольный доступ к тайлу - не обязательно подразумевает наличие AllowScan, так как это может быть какая-то база с АПИ позволяющим только одиночные запросы к тайлам
AllowAdd - возможность добавлять тайлы - может быть без любых других возможностей, например запись в tar - исключительно потоковый экспорт.
AllowDelete - возможность удялить тайлы - можно представить тайлохранилище даже просто в файловой системе, где есть право добавлять файлы, но нет права удалять. ХЗ надо ли оно такое.
AllowReplace - можно ли заменять тайлы. Кажется что можно заменить парой Add и Delete, но это только если обе возможности есть. Могу представить как случаи когда можно удалять и заменять существующие тайлы, но нельзя добавлять новые, так и случаи, когда можно добавлять новые и заменять существующие, но нельзя удалять (хотья, конечно это сомнительно)
IsReadOnly - добавлена, что бы можно было в параметрах тайлохранилища одной настройкой полностью отключить возможность изменения, но, думаю, можно было бы оставить ее чисто виртуальной на время чтения/записи настроек, а в рантайме хранить как отключение всех возможностей изменения.

zed

24-05-2019 06:33

manager   ~0018713

Должен быть доступ к скану, но по факту его нету. И нет даже свойства ScanAccess, вместо которого от безысходности проверяется ReadAccess.

WriteAccess я в стейте нашёл. Просто оно такой же придаток, как и IsReadOnly.

vdemidov

24-05-2019 06:42

manager   ~0018714

> Должен быть доступ к скану, но по факту его нету. И нет даже свойства ScanAccess, вместо которого от безысходности проверяется ReadAccess.
Значит нужно допиливать что-то. Когда это хозяйство писалось, тайлохранилищ только со сканом еще не было. Ты их вроде только недавно добавил. Вот и не учел я что-то.

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

zed

24-05-2019 18:59

manager   ~0018715

А самое интересное, что этот WriteAccess повсеместно ошибочно используется там, где надо проверять AddAccess. Видимо, название оказалось неудачным.

Займусь, наверное, небольшим рефакторингом этого класса на следующей неделе.

Issue History

Date Modified Username Field Change
23-05-2019 19:42 zed New Issue
23-05-2019 20:03 zed Note Added: 0018709
24-05-2019 01:55 vdemidov Note Added: 0018710
24-05-2019 04:59 vdemidov Note Added: 0018711
24-05-2019 05:35 vdemidov Note Edited: 0018711
24-05-2019 06:33 zed Note Added: 0018713
24-05-2019 06:42 vdemidov Note Added: 0018714
24-05-2019 18:59 zed Note Added: 0018715
24-05-2019 19:02 zed Assigned To => zed
24-05-2019 19:02 zed Status new => assigned
24-05-2019 19:05 zed Target Version => 190707
27-05-2019 13:51 zed Status assigned => resolved
27-05-2019 13:51 zed Fixed in Version => 190707
27-05-2019 13:51 zed Resolution open => fixed
08-08-2025 13:22 zed Category Баг => Баг / Bug