peeringdb / peeringdb-py

PeeringDB python client
BSD 2-Clause "Simplified" License
89 stars 22 forks source link

peeringdb sync exits on non-existent table #32

Closed Surfmobile closed 4 years ago

Surfmobile commented 4 years ago

latest version does not want to replicate the DB anymore, any ideas?

(pdbvenv) me@peeradmin:~$ peeringdb --version peeringdb 1.0.0 (pdbvenv) me@peeradmin:~$ peeringdb sync Syncing to https://www.peeringdb.com/api Updating resources: org fac net ix ixfac ixlan ixpfx netfac netixlan poc Fetching & updating all: org Traceback (most recent call last): File "/home/me/pdbvenv/bin/peeringdb", line 8, in sys.exit(main()) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/cli.py", line 62, in main return handler(config=cfg, vars(options)) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/commands.py", line 20, in _wrapped r = func(*a, *k) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/commands.py", line 219, in handle client.update_all(rs) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_update.py", line 66, in update_all self._atomic_update(lambda: ctx.sync_resource(r, since=since)) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_update.py", line 78, in _atomic_update sync_func() File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_update.py", line 66, in self._atomic_update(lambda: ctx.sync_resource(r, since=since)) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_tasks_sequential.py", line 76, in _wrapped gen = func(a, k) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_update.py", line 102, in sync_resource data, e = self.fetcher.fetch_all_latest(res, 0, since=since) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/_fetch.py", line 62, in fetch_all_latest since = backend.last_change(backend.get_concrete(R)) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/peeringdb/backend.py", line 26, in wrapped return fn(*args, kwargs) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django_peeringdb/client_adaptor/backend.py", line 89, in last_change upd = concrete.handleref.last_change() File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django_handleref/manager.py", line 101, in last_change return self.get_queryset().last_change(kwargs) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django_handleref/manager.py", line 23, in last_change cdt = self.latest('created') File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 561, in latest return self._earliest_or_latest(field_name=field_name, direction="-") File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 555, in _earliest_or_latest return obj.get() File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 374, in get num = len(clone) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 232, in len self._fetch_all() File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 1121, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 53, in iter results = compiler.execute_sql(chunked_fetch=self.chunked_fetch) File "/home/me/pdbvenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 899, in execute_sql raise original_exception django.db.utils.ProgrammingError: (1146, "Table 'peering.peeringdb_organization' doesn't exist")

config:

(pdbvenv) me@peeradmin:~/.peeringdb$ cat config.yaml orm: backend: django_peeringdb database: engine: mysql host: localhost name: peering password: [removed] port: 3306 user: peering migrate: true secret_key: '' sync: only: [] password: [removed] strip_tz: 1 timeout: 0 url: https://www.peeringdb.com/api user: [removed]

vegu commented 4 years ago

Cause here was an old (possibly added as a fake migration?) django_peeringdb migration entry in thedjango_migrations table in a mysql database that was used with an older version of the client a year or so ago.

It was also the last migration inserted there, and removing the row fixed the issue.

Surfmobile commented 4 years ago

I confirm that this was fixed:

mysql> select * from django_migrations -> ; +----+------------------+---------------------------------------+---------------------+ | id | app | name | applied | +----+------------------+---------------------------------------+---------------------+ | 1 | contenttypes | 0001_initial | 2016-04-13 19:22:40 | | 2 | auth | 0001_initial | 2016-04-13 19:22:40 | | 3 | admin | 0001_initial | 2016-04-13 19:22:40 | | 4 | contenttypes | 0002_remove_content_type_name | 2016-04-13 19:22:40 | | 5 | auth | 0002_alter_permission_name_max_length | 2016-04-13 19:22:40 | | 6 | auth | 0003_alter_user_email_max_length | 2016-04-13 19:22:40 | | 7 | auth | 0004_alter_user_username_opts | 2016-04-13 19:22:40 | | 8 | auth | 0005_alter_user_last_login_null | 2016-04-13 19:22:40 | | 9 | auth | 0006_require_contenttypes_0002 | 2016-04-13 19:22:40 | | 10 | sessions | 0001_initial | 2016-04-13 19:22:58 | | 11 | bgpsessions | 0001_initial | 2016-04-13 19:24:33 | | 12 | bgpsessions | 0002_auto_20160413_1927 | 2016-04-13 19:27:59 | | 13 | bgpsessions | 0003_auto_20160413_1931 | 2016-04-13 19:31:15 | | 14 | bgpsessions | 0004_auto_20160413_1936 | 2016-04-13 19:36:05 | | 15 | bgpsessions | 0005_locationrouter | 2016-04-13 19:36:24 | | 16 | bgpsessions | 0006_auto_20160413_1939 | 2016-04-13 19:39:06 | | 17 | bgpsessions | 0007_locationrouter | 2016-04-13 19:39:51 | | 18 | django_peeringdb | 0001_initial | 2018-04-10 16:48:19 | +----+------------------+---------------------------------------+---------------------+ 18 rows in set (0.00 sec)

mysql> delete from django_migrations where id=18; Query OK, 1 row affected (0.03 sec)

After that peeringdb sync ran succesfully:

(pdbvenv) me@peeradmin:~$ peeringdb sync Syncing to https://www.peeringdb.com/api Updating resources: org fac net ix ixfac ixlan ixpfx netfac netixlan poc Fetching & updating all: org Updates to be processed: 16834 Fetching & updating all: fac Updates to be processed: 3457 Fetching & updating all: net Updates to be processed: 17146 Fetching & updating all: ix Updates to be processed: 712 Fetching & updating all: ixfac Updates to be processed: 1859 Fetching & updating all: ixlan Updates to be processed: 751 Fetching & updating all: ixpfx Updates to be processed: 1379 Fetching & updating all: netfac Updates to be processed: 27639 Fetching & updating all: netixlan Updates to be processed: 30163 Fetching & updating all: poc Updates to be processed: 25231 Ignoring object updated after sync began: (poc-33787)

Thank you!