Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
erp5 erp5
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 140
    • Merge requests 140
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • erp5erp5
  • Merge requests
  • !247

Merged
Created Mar 31, 2017 by Jérome Perrin@jeromeOwner

upgrader: upgrade catalog schema right after installing BTs

  • Overview 2
  • Commits 1
  • Changes 1

93e30e5e introduce a new user table that is listed as a search table, so until this table is created all catalog queries are failing, and alarm tool, which relies on catalog fail with such a traceback:

ERROR TimerService Process timer error                                                                                                                                                                                                     
Traceback (most recent call last):                                                                                                                                                                                                                                 
  File "parts/erp5/product/TimerService/TimerService.py", line 102, in process_timer                                                                                                 
    DateTime(prev_tick), DateTime(next_tick))                                                                                                                                                                                                                      
  File "parts/erp5/product/ERP5/Tool/AlarmTool.py", line 175, in process_timer                                                                                                       
    self.tic()                                                                                                                                                                                                                                                     
  File "parts/erp5/product/ERP5/Tool/AlarmTool.py", line 135, in tic                                                                                                                 
    for alarm in self.getAlarmList(to_active=1):                                                                                                                                                                                                                   
  File "parts/erp5/product/ERP5/Tool/AlarmTool.py", line 111, in getAlarmList                                                                                                        
    alarm_date={'query':now,'range':'ngt'}                                                                                                                                                                                                                         
  File "parts/erp5/product/ERP5Catalog/CatalogTool.py", line 702, in unrestrictedSearchResults                                                                                       
    return ZCatalog.searchResults(self, **kw)                                                                                                                                                                                                                      
  File "parts/erp5/product/ZSQLCatalog/ZSQLCatalog.py", line 1091, in searchResults                                                                                                  
    return catalog.searchResults(REQUEST, **kw)                                                                                                                                                                                                                    
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2585, in searchResults                                                                                                   
    **kw                                                                                                                                                                                                                                                           
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2554, in queryResults                                                                                                    
    **kw                                                                                                                                                                                                                                                           
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2418, in buildSQLQuery                                                                                                   
    ignore_unknown_columns=ignore_unknown_columns,                                                                                                                                                                                                                 
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2394, in buildEntireQuery                                                                                                
    query=self.buildQuery(kw, ignore_empty_string=ignore_empty_string, ignore_unknown_columns=ignore_unknown_columns),                                                                                                                                             
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2295, in buildQuery                                                                                                      
    result = self.buildSingleQuery(key, value)                                                                                                                                                                                                                     
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2087, in buildSingleQuery                                                                                                
    search_key, related_key_definition = self.getColumnSearchKey(key, search_key_name)                                                                                                                                                                             
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 2049, in getColumnSearchKey                                                                                              
    related_key_definition = self.getRelatedKeyDefinition(key)                                                                                                                                                                                                     
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 1999, in getRelatedKeyDefinition                                                                                         
    for entire_definition in self.getSQLCatalogRelatedKeyList([key]):                                                                                                                                                                                              
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 1935, in getSQLCatalogRelatedKeyList                                                                                     
    column_map = self._getSQLCatalogRelatedKeySet()                                                                                                                                                                                                                
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 130, in wrapper                                                                                                          
    result = transactional_cache[cache_id] = method(wrapped_self)                                                                                                                                                                                                  
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 1908, in _getSQLCatalogRelatedKeySet                                                                                     
    column_map = self.getColumnMap()                                                                                                                                                                                                                               
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 130, in wrapper                                                                                                          
    result = transactional_cache[cache_id] = method(wrapped_self)                                                                                                                                                                                                  
  File "parts/erp5/product/ZSQLCatalog/SQLCatalog.py", line 1146, in getColumnMap                                                                                                    
    for field in table_dict[table]:                                                                                                                                                                                                                                
KeyError: 'user'  

This means that even if upgrader's post upgrade constraint are supposed to fix this by calling portal_catalog.upgradeSchema, because this constraint rely on alarm tool, it's already too late.

The suggested way to fix this is to also call portal_catalog.upgradeSchema in the same transaction that the transaction upgrading business templates.

I have not completely removed TemplateToolTableConsistencyConstraint, because maybe there will be cases where just call post upgrade alarm to execute data migration steps after installing a business template manually. But you guys think it's better to completely merge TemplateToolTableConsistencyConstraint with TemplateToolBusinessTemplateInstallationConstraint I would be OK with that too.

Of course, we cannot just make TemplateToolTableConsistencyConstraint an upgrade constraint, because there would be no guarantee that it's called after TemplateToolBusinessTemplateInstallationConstraint.

Also, I have not considered making getColumnMap and friends resilient to the case where a table listed in search tables does not exist, because it's would just have been failing later anyway and it's better to fail early in such case.

cc: @vpelletier @jm @seb @tiwariayush @gabriel

Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: fix/upgrader_upgradeSite_upgradeSchema_same_transaction
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7