Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Newer Dolt Versions Break Plugin #175

Open
Tracked by #176
nniehoff opened this issue Mar 14, 2022 · 11 comments
Open
Tracked by #176

Newer Dolt Versions Break Plugin #175

nniehoff opened this issue Mar 14, 2022 · 11 comments

Comments

@nniehoff
Copy link
Contributor

nniehoff commented Mar 14, 2022

Dolt version 0.37.3 breaks this plugin:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 254, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1105, 'expecting evaluation of IN expression right hand side to be a tuple, but it is int8')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/nautobot/core/cli.py", line 177, in <module>
    main()
  File "/usr/local/lib/python3.9/site-packages/nautobot/core/cli.py", line 54, in main
    run_app(
  File "/usr/local/lib/python3.9/site-packages/nautobot/core/runner/runner.py", line 266, in run_app
    management.execute_from_command_line([runner_name, command] + command_args)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/test.py", line 23, in run_from_argv
    super().run_from_argv(argv)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/test.py", line 53, in handle
    failures = test_runner.run_tests(test_labels)
  File "/usr/local/lib/python3.9/site-packages/django/test/runner.py", line 697, in run_tests
    old_config = self.setup_databases(aliases=databases)
  File "/usr/local/lib/python3.9/site-packages/django/test/runner.py", line 616, in setup_databases
    return _setup_databases(
  File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 170, in setup_databases
    connection.creation.create_test_db(
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/creation.py", line 72, in create_test_db
    call_command(
  File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 168, in call_command
    return command.execute(*args, **defaults)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 243, in handle
    post_migrate_state = executor.migrate(
  File "/usr/local/lib/python3.9/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.9/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.9/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python3.9/site-packages/django/db/migrations/migration.py", line 121, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python3.9/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/usr/local/lib/python3.9/site-packages/nautobot/extras/management/__init__.py", line 60, in populate_status_choices
    create_custom_statuses(app_config, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/nautobot/extras/management/__init__.py", line 172, in create_custom_statuses
    obj.content_types.add(content_type)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 950, in add
    self._add_items(
  File "/usr/local/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 1[139](https://github.com/nautobot/nautobot-plugin-version-control/runs/5540037657?check_suite_focus=true#step:10:139), in _add_items
    missing_target_ids = self._get_missing_target_ids(
  File "/usr/local/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 1087, in _get_missing_target_ids
    return target_ids.difference(vals)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 287, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.9/site-packages/cacheops/query.py", line 273, in _fetch_all
    return self._no_monkey._fetch_all(self)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 1308, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 180, in __iter__
    for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
  File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1108, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1[156](https://github.com/nautobot/nautobot-plugin-version-control/runs/5540037657?check_suite_focus=true#step:10:156), in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/cacheops/transaction.py", line 93, in execute
    result = self._no_monkey.execute(self, sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/cursors.py", line [206](https://github.com/nautobot/nautobot-plugin-version-control/runs/5540037657?check_suite_focus=true#step:10:206), in execute
    res = self._query(query)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 254, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1105, 'expecting evaluation of IN expression right hand side to be a tuple, but it is int8')
@bryanculver bryanculver changed the title Dolt 0.37.3 breaks plugin Newer Dolt Versions Break Plugin Apr 22, 2022
@bryanculver
Copy link
Member

It seems newer versions of Dolt break this plugin. @nniehoff Output above is with 0.37.3. I was able to recreate that with our published Gizmo container.

I pulled down said Gizmo-dolt container and rebuilt with the latest version of Dolt (0.39.0) and it's broken but with a different error:

sandbox-nautobot on  nn_nautobot_13 [!]
➜ INVOKE_SANDBOX_PYPROJECT_SRC=dolt INVOKE_SANDBOX_DATABASE=dolt invoke sandbox.migrate
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" ps --services --filter status=running"
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" run --entrypoint 'nautobot-server migrate' nautobot"
[+] Running 2/0
 ⠿ Container sandbox-redis-1     Running                                                                                                            0.0s
 ⠿ Container sandbox-database-1  Running                                                                                                            0.0s
Operations to perform:
  Apply all migrations: admin, auth, circuits, contenttypes, database, dcim, django_celery_beat, extras, ipam, nautobot_version_control, sessions, social_django, taggit, tenancy, users, virtualization
Running migrations:
  Applying auth.0002_alter_permission_name_max_length...Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1105, 'unable to change type of column `name` as it is used by foreign keys')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/nautobot-server", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/cli.py", line 61, in main
    initializer=_configure_settings,  # Called after defaults
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/runner/runner.py", line 266, in run_app
    management.execute_from_command_line([runner_name, command] + command_args)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 245, in handle
    fake_initial=fake_initial,
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/operations/fields.py", line 236, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 572, in alter_field
    old_db_params, new_db_params, strict)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 726, in _alter_field
    params,
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 142, in execute
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/cacheops/transaction.py", line 93, in execute
    result = self._no_monkey.execute(self, sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1105, 'unable to change type of column `name` as it is used by foreign keys')

sandbox-nautobot on  nn_nautobot_13 [!]

➜ INVOKE_SANDBOX_PYPROJECT_SRC=dolt INVOKE_SANDBOX_DATABASE=dolt invoke sandbox.cli -c database
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" exec database bash"
root@0af4a1f391d3:/var/lib/nautobot# do
do          dolt        domainname  done
root@0af4a1f391d3:/var/lib/nautobot# dolt version
dolt version 0.39.0
root@0af4a1f391d3:/var/lib/nautobot#

@timsehn
Copy link

timsehn commented Apr 22, 2022

CEO of DoltHub here. This looks like we broke something in 0.39.0. There was a big prepared statement change in that release so I suspect that will be the cause.

We will look at this first thing tomorrow PST tomorrow and provide an ETA for a fix as quick as we can. When we get a fix, we’ll make a patch release and update this issue.

@bryanculver
Copy link
Member

Thanks for the prompt response @timsehn! Trying to get a lot of things updated here and bumping into little bugs. I can try 0.38.0 as well in the morning. We also updated a lot of dependencies in Nautobot with the release of 1.3.

@bryanculver
Copy link
Member

I tried again with 0.38.0 and same as my output for 0.39.0. The migration it fails on is from Django core: https://github.com/django/django/blob/3.2.13/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py

@bryanculver
Copy link
Member

Rebuilt a container running 0.39.0 starting with trace.

➜ INVOKE_SANDBOX_PYPROJECT_SRC=dolt INVOKE_SANDBOX_DATABASE=dolt invoke sandbox.migrate
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" ps --services --filter status=running"
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" run --entrypoint 'nautobot-server migrate' nautobot"
[+] Running 4/4
 ⠿ Network sandbox_default       Created                                                    0.0s
 ⠿ Volume "sandbox_dolt_data"    Created                                                    0.0s
 ⠿ Container sandbox-database-1  Created                                                    0.1s
 ⠿ Container sandbox-redis-1     Created                                                    0.1s
[+] Running 2/2
 ⠿ Container sandbox-redis-1     Started                                                    0.3s
 ⠿ Container sandbox-database-1  Started                                                    0.4s
2022-04-22 15:03:17,018 WARNING Wrapping model clean methods for custom validators failed because the ContentType table was not available or populated. This is normal during the execution of the migration command for the first time. - nautobot.extras.apps - apps - /usr/local/lib/python3.7/site-packages/nautobot/extras/apps.py:38
2022-04-22 15:03:17,018 WARNING Wrapping model clean methods for custom validators failed because the ContentType table was not available or populated. This is normal during the execution of the migration command for the first time. - nautobot.extras.apps - apps - /usr/local/lib/python3.7/site-packages/nautobot/extras/apps.py:38
Operations to perform:
  Apply all migrations: admin, auth, circuits, contenttypes, database, dcim, django_celery_beat, extras, ipam, nautobot_version_control, sessions, social_django, taggit, tenancy, users, virtualization
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length...Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1105, 'unable to change type of column `name` as it is used by foreign keys')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/nautobot-server", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/cli.py", line 61, in main
    initializer=_configure_settings,  # Called after defaults
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/runner/runner.py", line 266, in run_app
    management.execute_from_command_line([runner_name, command] + command_args)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 245, in handle
    fake_initial=fake_initial,
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/operations/fields.py", line 236, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 572, in alter_field
    old_db_params, new_db_params, strict)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 726, in _alter_field
    params,
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 142, in execute
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/cacheops/transaction.py", line 93, in execute
    result = self._no_monkey.execute(self, sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1105, 'unable to change type of column `name` as it is used by foreign keys')
➜ INVOKE_SANDBOX_PYPROJECT_SRC=dolt INVOKE_SANDBOX_DATABASE=dolt invoke sandbox.cli -c database
1.2.11
Running docker-compose command "docker-compose --project-name sandbox --project-directory "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.redis.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.base.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dev.yml" -f "/Users/bryanculver/Developer/repos/sandbox-nautobot/environments/local/docker-compose.dolt.yml" exec database bash"
root@8da88841ccbf:/var/lib/nautobot# dolt version
dolt version 0.39.0
gizmo-dolt-nautobot on  main [!]
➜ docker logs sandbox-database-1
Starting server with Config HP="0.0.0.0:3306"|U="nautobot"|P="***"|T="28800000"|R="false"|L="info"
2022-04-22T15:03:16Z INFO [conn 1] NewConnection {DisableClientMultiStatements=false}
2022-04-22T15:03:17Z WARN [conn 1] error running query {connectTime=2022-04-22T15:03:16Z, error=table not found: django_content_type, query=SELECT `django_content_type`.`id`, `django_content_type`.`app_label`, `django_content_type`.`model` FROM `django_content_type` WHERE ((`django_content_type`.`app_label` = 'extras' AND `django_content_type`.`model` IN ('status', 'tag', 'configcontextschema', 'secret', 'secretsgroup')) OR (`django_content_type`.`app_label` = 'dcim' AND `django_content_type`.`model` IN ('consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'devicerole', 'platform', 'device', 'virtualchassis', 'cable', 'consoleporttemplate', 'consoleserverporttemplate', 'powerporttemplate', 'poweroutlettemplate', 'interfacetemplate', 'frontporttemplate', 'rearporttemplate', 'devicebaytemplate', 'powerpanel', 'powerfeed', 'rackgroup', 'rackrole', 'rack', 'rackreservation', 'region', 'site')) OR (`django_content_type`.`app_label` = 'circuits' AND `django_content_type`.`model` IN ('provider', 'circuittype', 'circuit', 'circuittermination')) OR (`django_content_type`.`app_label` = 'virtualization' AND `django_content_type`.`model` IN ('clustertype', 'clustergroup', 'cluster', 'virtualmachine', 'vminterface')) OR (`django_content_type`.`app_label` = 'ipam' AND `django_content_type`.`model` IN ('vrf', 'routetarget', 'rir', 'aggregate', 'role', 'prefix', 'ipaddress', 'vlangroup', 'vlan', 'service')) OR (`django_content_type`.`app_label` = 'tenancy' AND `django_content_type`.`model` IN ('tenantgroup', 'tenant')))}
2022-04-22T15:03:18Z INFO [conn 2] NewConnection {DisableClientMultiStatements=false}
2022-04-22T15:03:23Z WARN [conn 2] error running query {connectTime=2022-04-22T15:03:18Z, error=unable to change type of column `name` as it is used by foreign keys, query=ALTER TABLE `auth_permission` MODIFY `name` varchar(255) NOT NULL}
2022-04-22T15:03:23Z INFO [conn 2] ConnectionClosed {}
2022-04-22T15:03:23Z INFO [conn 1] ConnectionClosed {}

@timsehn
Copy link

timsehn commented Apr 22, 2022

https://github.com/dolthub/dolt/releases/tag/v0.39.1

This release should fix the above issues. Please test and let us know if something else breaks. Thanks for the report.

@bryanculver
Copy link
Member

bryanculver commented Apr 22, 2022

Progressing further but new issue now:

...
    Added 19, linked 29 status records
 OK
  Applying extras.0005_configcontext_device_types... OK
  Applying extras.0006_graphqlquery... OK
  Applying extras.0007_configcontextschema... OK
  Applying extras.0008_jobresult__custom_field_data... OK
  Applying extras.0009_computedfield... OK
  Applying extras.0010_change_cf_validation_max_min_field_to_bigint...Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1105, 'unable to change type of column `validation_maximum` as it is used by foreign keys')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/nautobot-server", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/cli.py", line 61, in main
    initializer=_configure_settings,  # Called after defaults
  File "/usr/local/lib/python3.7/site-packages/nautobot/core/runner/runner.py", line 266, in run_app
    management.execute_from_command_line([runner_name, command] + command_args)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 245, in handle
    fake_initial=fake_initial,
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/operations/fields.py", line 236, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 572, in alter_field
    old_db_params, new_db_params, strict)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 726, in _alter_field
    params,
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 142, in execute
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/cacheops/transaction.py", line 93, in execute
    result = self._no_monkey.execute(self, sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1105, 'unable to change type of column `validation_maximum` as it is used by foreign keys')

Relevant trace from container:

2022-04-22T22:55:48Z WARN [conn 2] error running query {connectTime=2022-04-22T22:49:23Z, error=unable to change type of column `validation_maximum` as it is used by foreign keys, query=ALTER TABLE `extras_customfield` MODIFY `validation_maximum` bigint NULL}
2022-04-22T22:55:48Z INFO [conn 2] ConnectionClosed

@bryanculver
Copy link
Member

@bryanculver
Copy link
Member

Current table schema

mysql> DESCRIBE extras_customfield;
+--------------------+-------------------+------+-----+---------+-------+
| Field              | Type              | Null | Key | Default | Extra |
+--------------------+-------------------+------+-----+---------+-------+
| id                 | char(32)          | NO   | PRI |         |       |
| type               | varchar(50)       | NO   |     |         |       |
| name               | varchar(50)       | NO   | UNI |         |       |
| label              | varchar(50)       | NO   |     |         |       |
| description        | varchar(200)      | NO   |     |         |       |
| required           | tinyint           | NO   |     |         |       |
| filter_logic       | varchar(50)       | NO   |     |         |       |
| default            | json              | YES  |     |         |       |
| weight             | smallint unsigned | NO   |     |         |       |
| validation_minimum | int unsigned      | YES  |     |         |       |
| validation_maximum | int unsigned      | YES  |     |         |       |
| validation_regex   | varchar(500)      | NO   |     |         |       |
+--------------------+-------------------+------+-----+---------+-------+

@Hydrocharged
Copy link

We’ve got another release out, which should fix the above issue!
https://github.com/dolthub/dolt/releases/tag/v0.39.2

@bryanculver
Copy link
Member

Migrations are succeeding again with Dolt version 0.39.2. Performing our other test suites now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants