MultipleObjectsReturned: get() returned more than one NetboxType

Bug #1458831 reported by Peter Gervai
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Network Administration Visualized
Invalid
Undecided
Morten Brekkevold

Bug Description

Found this one in the logs as well (uglier than the one before):

2015-05-26 12:49:24,639 [ERROR jobs.jobhandler] [inventory 10.257.1.140] Caught exception during save. Last manager = DefaultManager(<class 'nav.ipdevpoll.shadows.netbox.Netbox'>, 'ContainerRepository'(..
.)). Last model = <class 'nav.ipdevpoll.shadows.netbox.Netbox'>
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/jobs.py", line 413, in perform_save
    manager.save()
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 84, in save
    obj.save(self.containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 468, in save
    self.update(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 492, in update
    obj = self.convert_to_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 300, in convert_to_model
    value = value.convert_to_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 290, in convert_to_model
    model = self.get_existing_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 352, in get_existing_model
    model = self.__shadowclass__.objects.get(pk=pkey_value)
  File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 368, in get
    % (self.model._meta.object_name, num, kwargs))
MultipleObjectsReturned: get() returned more than one NetboxType -- it returned 2! Lookup parameters were {'pk': 98}
2015-05-26 12:49:24,641 [ERROR jobs.jobhandler] [inventory 10.257.1.140] Save stage failed with unhandled error
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap
    self.__bootstrap_inner()
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/python/threadpool.py", line 207, in _worker
    result = context.call(ctx, function, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/db.py", line 152, in _reset
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/db.py", line 111, in _autocommit
    result = func(*args, **kw)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/db.py", line 130, in _cleanup
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/jobs.py", line 368, in complete_save_cycle
    result = self.perform_save()
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/jobs.py", line 413, in perform_save
    manager.save()
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 84, in save
    obj.save(self.containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 468, in save
    self.update(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 492, in update
    obj = self.convert_to_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 300, in convert_to_model
    value = value.convert_to_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 290, in convert_to_model
    model = self.get_existing_model(containers)
  File "/usr/lib/python2.7/dist-packages/nav/ipdevpoll/storage.py", line 352, in get_existing_model
    model = self.__shadowclass__.objects.get(pk=pkey_value)
  File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 368, in get
    % (self.model._meta.object_name, num, kwargs))
nav.models.manage.MultipleObjectsReturned: get() returned more than one NetboxType -- it returned 2! Lookup parameters were {'pk': 98}

2015-05-26 12:49:24,642 [ERROR jobs.jobhandler] [inventory 10.257.1.140] Job 'inventory' for 10.257.1.140 aborted: Job aborted due to save failure (cause=MultipleObjectsReturned("get() returned more than one NetboxType -- it returned 2! Lookup parameters were {'pk': 98}",))
2015-05-26 12:49:24,643 [INFO schedule.netboxjobscheduler] [inventory 10.257.1.140] inventory for 10.257.1.140 failed in 0:00:01.316998. next run in 0:08:55.999954.

Revision history for this message
Morten Brekkevold (mbrekkevold) wrote : Re: [Bug 1458831] [NEW] MultipleObjectsReturned: get() returned more than one NetboxType

> nav.models.manage.MultipleObjectsReturned: get() returned more than one NetboxType -- it returned 2! Lookup parameters were {'pk': 98}

That looks pretty f-ed up.

This is a lookup into the "type" database table, using a primary key.
Primary keys must be unique. The table cannot hold two records with the
same primary key unless something has gone seriously wrong with your
database.

What do you get if you connect to the database using psql and issue this
SQL statement:

  SELECT * FROM type WHERE typeid=98;

Changed in nav:
status: New → Incomplete
assignee: nobody → Morten Brekkevold (mbrekkevold)
Revision history for this message
Peter Gervai (grin) wrote :

Indeed somehow psql was able to squeeze two equal id into a primary key. I found no visible reason for this treason, VACUUM was perfectly happy, but REINDEX complained. I see that the sequence was at a wrong counter but still it must not happen no matter whether it's coming from DEFAULT.
Anyway, manually incremented the entry and it should work now.
Closing as invalid, this was no NAV fault (or even if it was it must not be allowed by psql).

Changed in nav:
status: Incomplete → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.