Plone Migrate Blob Data в пушистый макет IOError Errno 21

Я пытаюсь перенести наше хранилище больших двоичных объектов (используя Plone 4.3.2 и ZODB3 3.10.5) с «лужайки» на «кустарник». При запуске скрипта я получаю следующую трассировку:

(11719) Blob directory `var/blobstorage-lawn/` has layout marker set. Selected `lawn` layout.
(11719) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
Migrating blob data from `var/blobstorage-lawn/` (lawn) to `var/blobstorage` (bushy)
Traceback (most recent call last):
  File "bin/migrateblobs", line 19, in <module>
    sys.exit(ZODB.scripts.migrateblobs.main())
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux- x86_64.egg/ZODB/scripts/migrateblobs.py", line 77, in main
    migrate(source, dest, options.layout)
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/scripts/migrateblobs.py", line 52, in migrate
    link_or_copy(source_file, dest_file)
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/scripts/migrateblobs.py", line 30, in link_or_copy
    shutil.copy(f1, f2)
  File "/var/db/zope/plone43_dev/Python-2.7/lib/python2.7/shutil.py", line 119, in copy
    copyfile(src, dst)
  File "/var/db/zope/plone43_dev/Python-2.7/lib/python2.7/shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 21] Is a directory: '/var/db/zope/plone43_dev/zeocluster/var/blobstorage-lawn/0x00/0x00'

Я не понимаю, почему он пытается скопировать каталог. Это ошибка в продукте? Или мое хранилище больших двоичных объектов может быть повреждено? Это среда разработки, и у меня были некоторые другие проблемы с хранилищем больших двоичных объектов, поэтому я пытаюсь перейти на кустистый в надежде, что это решит некоторые проблемы.

Мысли или решения?


person rain2o    schedule 08.09.2014    source источник
comment
Какой продукт/скрипт вы используете для миграции?   -  person keul    schedule 09.09.2014
comment
@keul: migrateblobs скрипт, который приходит с ЗОДБ. Это ясно из трассировки.   -  person Martijn Pieters    schedule 09.09.2014


Ответы (1)


Похоже, что у вас есть кустарник, смешанный с вашим макетом лужайки.

В макете лужайки используется плоская структура; каталоги называются в соответствии с OID, причем в каждом каталоге только ревизии файлов больших двоичных объектов. Макет кустарниковый использует один каталог на байт в OID, что приводит к дереву каталогов.

При перемещении с лужайки на кустарник скрипт берет каталоги, предполагая, что они являются допустимыми OID, и для каждого предполагает, что все, что он найдет в каталоге это файлы ревизий.

Однако у вас уже есть густая структура макета. Сценарий пытается переместить каталог 0x00 из каталога верхнего уровня 0x00. Это именно те каталоги, которые вы найдете в макете с кустарником, а не с макетом лужайки. Ваша структура действительно повреждена.

Возможно, все дело в файле маркера; если все, что у вас есть на верхнем уровне, это каталоги с 0xhh 2-значными шестнадцатеричными номерами, то у вас есть просто кустарник, замаскированный под лужайку. Затем вы можете попробовать изменить файл .layout в каталоге var/blobstorage-lawn с lawn на bushy и посмотреть, работает ли ваш ZODB. Если нет, то, вероятно, ремонту не подлежит.

Если у вас есть сочетание 0xhh и более длинных 0xhhhhhhhhh шестнадцатеричных каталогов (последний содержит только файлы, а не каталоги), то вам удалось поместить в макет как лужайку, так и кустарник. одно хранилище BLOB-объектов. Если макет помечен как лужайка, то густая часть, скорее всего, устарела. Вы можете попытаться переместить все каталоги всего с двумя шестнадцатеричными цифрами в новый каталог blobstorage (и добавить в него новый файл .layout с содержимым bushy), но я не слишком уверен, что в нем содержится что-то полезное.

person Martijn Pieters    schedule 09.09.2014
comment
Я понимаю что ты имеешь ввиду. Есть только один каталог 0x00 с таким форматом, все остальные имеют более длинный шестнадцатеричный формат. Я изменил .layout на bushy и смог запустить сайт без ошибок и предупреждений. Это может быть не связано, но у меня проблема с содержимым типа blob, которое не находит blobs. Получение ошибки POSKeyError: 'No blob file' при попытке просмотреть изображение или файл, которые были перенесены. Есть ли способ исправить это? - person rain2o; 09.09.2014
comment
Один верхний каталог с 0x00 просто указывает, что ваши идентификаторы объектов еще не достигли всего этого; вы получите 0x01 только тогда, когда получите большое количество объектов (например, иногда после нескольких лет транзакций). Если вы получаете POSKeyErrors, то ваш франкен-монстр с густой лужайкой, вероятно, на самом деле был макетом лужайки со случайной наложенной копией куста. Вернитесь на газон, удалите каталог верхнего уровня 0x00 и перенесите остальные. - person Martijn Pieters; 09.09.2014
comment
Это сделало это! Большое спасибо за ваш ответ, как всегда! - person rain2o; 09.09.2014