The new version is out for testing!
Description
Details
Status | Subtype | Assigned | Task | ||
---|---|---|---|---|---|
Resolved | odimitrijevic | T211706 Superset Updates | |||
Resolved | elukey | T249495 Upgrade to Superset 0.36.0 |
Event Timeline
Change 586328 had a related patch set uploaded (by Elukey; owner: Elukey):
[operations/puppet@production] superset: handle upgrade to 0.36.0
Opened https://github.com/apache/incubator-superset/issues/9468 to upstream to fix a bug found in 0.36.0rc3
Change 586328 merged by Elukey:
[operations/puppet@production] superset: handle upgrade to 0.36.0
Change 591440 had a related patch set uploaded (by Elukey; owner: Elukey):
[analytics/superset/deploy@master] Release upstream version 0.36.0
Differences that I noticed when checking the staging Superset:
- http://localhost:9080/superset/dashboard/externalsearch/ contains a lot of `Since and Until time bounds should be specified when using the Time Shift feature.`, but I think it is due to the fact that the time range is not specified and something might have changed in Superset 0.36.0 about it. Setting a time range does solve the problem.
- http://localhost:9080/superset/dashboard/16 doesn't display a lot, again I think it is due to some new defaults added to time ranges. If I adjust the time range (for example, granularity month and last 7 months) it works.
- http://localhost:9080/superset/dashboard/72/ seems to show errors like "None of [Index(['country_code'], dtype='object')] are in the [columns]", meanwhile the correspondent prod dashboard shows "No data". I think this is a bug like https://github.com/apache/incubator-superset/issues/9468, due to the fact that we are not using SQLAlchemy-based druid datasources.
Created https://github.com/apache/incubator-superset/pull/9671 to upstream, it should fix some weird errors returned. Will wait until upstream reviews/merges before applying it to our Superset version.
The above patch was reverted for a little bug, and https://github.com/apache/incubator-superset/pull/9789 was sent and merged afterwards.
I have rebuilt superset 0.36 to include the last two patched filed to upstream (and only in master, not released with 0.36), currently under testing in staging.
Filed also https://github.com/apache/incubator-superset/issues/9855 this morning, it seems a little visualization issue only happening with Druid datasources (and not with Druid Tables, namely the ones defined using sqlalchemy). I think it is a minor bug that shouldn't prevent us deploying 0.36.
Change 597991 had a related patch set uploaded (by Elukey; owner: Elukey):
[operations/puppet@production] superset: upgrade gunicorn app name for all envs
Change 597991 merged by Elukey:
[operations/puppet@production] superset: upgrade gunicorn app name for all envs
Change 591440 merged by Elukey:
[analytics/superset/deploy@master] Release upstream version 0.36.0
For some strange reason, when I attempted the upgrade I have got the following error during the db upgrade step (not got when doing the same in staging):
Loaded your LOCAL configuration at [/etc/superset/superset_config.py] logging was configured successfully INFO:superset.utils.logging_configurator:logging was configured successfully /srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask_caching/__init__.py:189: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled. "Flask-Caching: CACHE_TYPE is set to null, " INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. INFO [alembic.runtime.migration] Running upgrade cca2f5d568c8 -> c2acd2cf3df2, alter type of dbs encrypted_extra Traceback (most recent call last): File "bin/superset", line 21, in <module> superset() File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask/cli.py", line 586, in main return super(FlaskGroup, self).main(*args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func return f(get_current_context(), *args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask/cli.py", line 426, in decorator return __ctx.invoke(f, *args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask_migrate/cli.py", line 134, in upgrade _upgrade(directory, revision, sql, tag, x_arg) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask_migrate/__init__.py", line 96, in wrapped f(*args, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/flask_migrate/__init__.py", line 271, in upgrade command.upgrade(config, revision, sql=sql, tag=tag) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/command.py", line 298, in upgrade script.run_env() File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/script/base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/util/compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/superset/migrations/env.py", line 115, in <module> run_migrations_online() File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/superset/migrations/env.py", line 107, in run_migrations_online context.run_migrations() File "<string>", line 8, in run_migrations File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/runtime/environment.py", line 846, in run_migrations self.get_context().run_migrations(**kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/runtime/migration.py", line 518, in run_migrations step.migration_fn(**kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/superset/migrations/versions/c2acd2cf3df2_alter_type_of_dbs_encrypted_extra.py", line 53, in upgrade existing_nullable=True, File "/usr/lib/python3.7/contextlib.py", line 119, in __exit__ next(self.gen) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/operations/base.py", line 325, in batch_alter_table impl.flush() File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/operations/batch.py", line 79, in flush fn(*arg, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/ddl/mysql.py", line 98, in alter_column else existing_comment, File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/ddl/impl.py", line 134, in _exec return conn.execute(construct, *multiparams, **params) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1020, in execute return meth(self, multiparams, params) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/ddl.py", line 72, in _execute_on_connection return connection._execute_ddl(self, multiparams, params) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1075, in _execute_ddl else None, File "<string>", line 1, in <lambda> File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 476, in compile return self._compiler(dialect, bind=bind, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/ddl.py", line 29, in _compiler return dialect.ddl_compiler(dialect, self, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 319, in __init__ self.string = self.process(self.statement, **compile_kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 350, in process return obj._compiler_dispatch(self, **kwargs) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/ext/compiler.py", line 441, in <lambda> lambda *arg, **kw: existing(*arg, **kw), File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/ext/compiler.py", line 486, in __call__ return fn(element, compiler, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/ddl/mysql.py", line 367, in _mysql_modify_column comment=element.comment, File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/alembic/ddl/mysql.py", line 400, in _mysql_colspec compiler.dialect.type_compiler.process(type_), File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 400, in process return type_._compiler_dispatch(self, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/visitors.py", line 95, in _compiler_dispatch return meth(self, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 3440, in visit_type_decorator return self.process(type_.type_engine(self.dialect), **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 400, in process return type_._compiler_dispatch(self, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/visitors.py", line 95, in _compiler_dispatch return meth(self, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/sql/compiler.py", line 3418, in visit_string return self.visit_VARCHAR(type_, **kw) File "/srv/deployment/analytics/superset/venv/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/base.py", line 2061, in visit_VARCHAR "VARCHAR requires a length on dialect %s" % self.dialect.name sqlalchemy.exc.CompileError: VARCHAR requires a length on dialect mysql
I found https://github.com/apache/incubator-superset/issues/9878, that seems to point out to something in sqlalchemy, but it is an old bug and doesn't match our config. Will try to repro in staging, very weird.
The #9878 is not an old bug right? The version of mysql used by the fellow reporting is, but this is an issue with alchemy running the migration for some tables:
INFO [alembic.runtime.migration] Running upgrade cca2f5d568c8 -> c2acd2cf3df2, alter type of dbs encrypted_extra
We can possibly modify the migration file?
I think this is the migration bit that is throwing an error cause the text filed might require a specific length that is not specified.
try:
- Postgres migration batch_op.alter_column( "encrypted_extra", existing_type=sa.Text(), type_=EncryptedType(sa.Text()), postgresql_using="encrypted_extra::bytea", existing_nullable=True, )
@Nuria we don't have postgres, the problem comes from the except part of the migration script that fails IIUC from the stacktrace. I had already tried to add length to various type fields but didn't work :(
Upstream answered https://github.com/apache/incubator-superset/pull/8493#issuecomment-632738195 and the solution seems to work, will re-build again pinning sqlalchemy-utils to that version (note: we have only one minor version more than what fixes the problem, sigh..)
Ok I think I know what went wrong, and... drum roll... it is of course my fault :D
What I did to test this version has been:
- pick 0.36 and attempt the db migration
- repackage two times 0.36 with custom patches (pull requests to fix visualization issues), but every time avoiding to drop the staging db, re-create it, upgrade the db etc.. The assumption was that nothing should have changed in deps to cause troubles.
Enter https://github.com/kvesteri/sqlalchemy-utils/pull/426, in which sqlalchemy-utils introduced a change causing problems, releasing it with version 0.36.5. In 1) I used 0.36.4, that did not carry the bug, and the database migration that I tested of course succeeded.
During 2), the last version of sqlalchemy-utils was pulled in, and it landed in production breaking the db upgrade step.
Lesson learned: always drop the database, re-create it as exact copy of the production one and test the db upgrade step.
Really sorry, will create another build on Monday for staging.
The "fix" is to pin sqlalchemy-utils==0.36.4 in the requirements (just tested it manually via pip in staging, it works).
Change 598423 had a related patch set uploaded (by Elukey; owner: Elukey):
[analytics/superset/deploy@master] Release upstream version 0.36.0
New version deployed in staging, waiting for another round of tests before releasing to production.
Change 598423 merged by Elukey:
[analytics/superset/deploy@master] Release upstream version 0.36.0
Change 598914 had a related patch set uploaded (by Elukey; owner: Elukey):
[operations/puppet@production] superset: set default gunicorn app name
Change 598914 merged by Elukey:
[operations/puppet@production] superset: set default gunicorn app name