plonegovbr / brasil.gov.portal

Implementação em Plone do Portal Padrão da Identidade Digital de Governo

Home Page:https://plone.org.br/gov/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Erro: WrongContainedType: ([ConstraintNotSatisfied(u'poll')], 'value') ao atualizar uma instalação 1.1.4 para 1.5.2

idgserpro opened this issue · comments

Durante a execução dos upgradeSteps de collective.cover, em:

Upgrade Step Group
-> Register calendar tile
Register calendar tile and make it available for inmediate use. (13 → 14)
-> Register calendar script
Register script to deal with tile's next/prev events. (13 → 14)
-> Cook CSS resources
There were changes in the CSS files, so we need to cook the resources. (13 → 14)
-> Cook JS resources
There were changes in the JS files, so we need to cook the resources. (13 → 14)

Recebemos o seguinte erro:

Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module Products.GenericSetup.tool, line 1053, in manage_doUpgrades
  Module Products.GenericSetup.upgrade, line 166, in doStep
  Module collective.cover.upgrades.v14, line 21, in register_calendar_tile
  Module plone.api.portal, line 2, in set_registry_record
  Module plone.api.validation, line 70, in wrapped
  Module plone.api.portal, line 367, in set_registry_record
  Module plone.registry.registry, line 47, in __setitem__
  Module plone.registry.record, line 82, in _set_value
  Module zope.schema._bootstrapfields, line 182, in validate
  Module zope.schema._field, line 478, in _validate
WrongContainedType: ([ConstraintNotSatisfied(u'poll')], 'value')

Não sabemos se é um alguma peculiaridade da instalação ou erro mesmo da solução IDG. Fato é que se você rodar 3x o upgradeStep, ele pára de dar o erro, portanto, a principal motivação da abertura desse relato é para ter a documentação desse paliativo caso mais pessoas atualizando o IDG nesse cenário também recebam esse erro.

acho que isso está relacionado a ordem que vocês rodaram os upgrade steps; confiram a ordem certa em: https://github.com/plonegovbr/portal.buildout/releases/tag/1.5.3

aliás, vocês tem que atualizar à última versão do branch 1.x.

O erro ocorre mesmo executando upgradeSteps na ordem especificada do link e também para a versão 1.5.3.

Para simular, crie um portal na versão 1.1.4, e nas configurações da capa, coloque como disponível o tipo "Enquete". Atualize para 1.5.2 ou 1.5.3, atualizando na ordem proposta em https://github.com/plonegovbr/portal.buildout/releases/tag/1.5.3: ocorre o erro descrito nesse relato.

O erro é similar ao que foi feito em plonegovbr/brasil.gov.tiles#250, mas teria de ser feito no collective.cover, no upgradeStep v14. Por isso fiz o comentário em plonegovbr/brasil.gov.tiles@399159f#r31123366. Mas não sei se é o mais correto pois esse erro não ocorreria se fosse só o collective.cover instalado.

Outra forma de evitar o erro é de, antes de atualizar, ir no painel de controle do collective.cover e clicar em "Salvar" antes de rodar os upgradeSteps (e lembrar de readicionar o tipo "enquete" novamente), ou rodar os upgradeSteps de brasil.gov.tiles (ver https://github.com/plonegovbr/brasil.gov.tiles/blob/1.x/src/brasil/gov/tiles/upgrades/v4004/__init__.py#L35) antes de rodar do collective.cover. Mas não sei se mudar essa ordem poderia causar outros impactos.

Na verdade foi outra coisa que me preocupou: antes de rodar o upgradeStep, o registro collective.cover.controlpanel.ICoverSettings.available_tiles continha:

[u'agenda', u'audio', u'audiogallery', u'collective.cover.banner', u'collective.cover.carousel', u'collective.cover.collection', u'collective.cover.list', u'collective.cover.richtext', u'em_destaque', u'mediacarousel', u'nitf', u'social', u'standaloneheader', u'video', u'videogallery', u'banner_rotativo', u'poll']

Após rodar o upgradeStep, que falha lançando uma exceção, o registro passa a ser esse, com o collective.cover.calendar adicionado:

[u'agenda', u'audio', u'audiogallery', u'collective.cover.banner', u'collective.cover.carousel', u'collective.cover.collection', u'collective.cover.list', u'collective.cover.richtext', u'em_destaque', u'mediacarousel', u'nitf', u'social', u'standaloneheader', u'video', u'videogallery', u'banner_rotativo', u'poll', u'collective.cover.calendar']

Ou seja, houve persistência no ZODB mesmo com falha no request, sendo que o esperado a meu ver era o rollback da transação.

Por isso que "rodar mais de uma vez" o upgradeStep funciona: o poll problemático continua no registro, mas como o collective.cover.calendar foi persistido, não entra mais no if do upgradeStep que dá o problema, e, rodando os upgradeSteps de brasil.gov.tiles, esse poll passa a ser collective.polls:

[u'agenda', u'audio', u'audiogallery', u'collective.cover.banner', u'collective.cover.carousel', u'collective.cover.collection', u'collective.cover.list', u'collective.cover.richtext', u'em_destaque', u'mediacarousel', u'nitf', u'social', u'standaloneheader', u'video', u'videogallery', u'banner_rotativo', u'collective.cover.calendar', u'collective.polls']

@hvelarde você já viu erro parecido com esse do registry?

eu acho que isso tem que ser solucionado rodando o upgrade step que remove esse tile (plonegovbr/brasil.gov.tiles#215) antes de rodar os upgrades steps do collective.cover; isso ai complica um pouco a migração e tal vez precise ser feito algum ajuste para evitar o problema.

@hvelarde talvez seria melhor remover todas as titles que estão em available_tiles e não estão em registered_tiles, antes de adicionar a tile collective.cover.calendar em available_tiles.