View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003447SAS.Планета[All Projects] Багpublic23-05-2019 19:4227-05-2019 13:52
Reporterzed 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
PlatformOSOS Version
Product Version181221 
Target Version190707Fixed in Version190707 
Summary0003447: TStorageStateInternal игнорирует опцию AllowScan
DescriptionПри создании хранилища с единственной целью - сканирование тайлов, получаем невалидный стейт, у которого нету доступа ни к чему.

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

- Relationships

-  Notes
(0018709)
zed (manager)
23-05-2019 20:03

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

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

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

Б.я. Пол часа писал, а оно ничго не сохранило, ибо долго писал.
(0018711)
vdemidov (manager)
24-05-2019 04:59
edited on: 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 - добавлена, что бы можно было в параметрах тайлохранилища одной настройкой полностью отключить возможность изменения, но, думаю, можно было бы оставить ее чисто виртуальной на время чтения/записи настроек, а в рантайме хранить как отключение всех возможностей изменения.

(0018713)
zed (manager)
24-05-2019 06:33

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

WriteAccess я в стейте нашёл. Просто оно такой же придаток, как и IsReadOnly.
(0018714)
vdemidov (manager)
24-05-2019 06:42

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

> WriteAccess я в стейте нашёл. Просто оно такой же придаток, как и IsReadOnly.
Возможно в стейте стоит действительно сделать энам с несколькими состояниями. Смотри сам. Свои соображения я изложил. По хорошему, было бы неплохо в возможности тайлохранилища еще поддержку tne указывать, что бы можно было включать/отключать не на всю программу, а и для конкретной карты. И при операциях перемещения-копирования это учитывать и явно настраивать.
(0018715)
zed (manager)
24-05-2019 18:59

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

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

- Users who viewed this issue
User List Anonymous (373x), ingener (1x), zed (12x), vdemidov (14x)
Total Views 400
Last View 15-08-2020 13:09

- 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 View Revisions
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



Copyright © 2007 - 2020 SAS.Planet Team