#1742 assigned defect

Error during POST: 500 Internal Server Error

Reported by: killyourtv Owned by: daira
Priority: major Milestone: soon
Component: code-mutable Version: 1.9.1
Keywords: i2p mutable availability preservation Cc:
Launchpad Bug:

Description (last modified by zooko)

Using tahoe from the 1.9.2 darcs branch on I2P, I received the following copying files to the grid [edited for formatting]:

Error during POST: 500 Internal Server Error
"Traceback (most recent call last):
  File \"/usr/lib/python2.7/dist-packages/twisted/internet/base.py\", line 800, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File \"/usr/lib/pymodules/python2.7/foolscap/eventual.py\", line 26, in _turn
    cb(*args, **kwargs)
  File \"/usr/lib/python2.7/dist-packages/twisted/internet/defer.py\", line 362, in callback
    self._startRunCallbacks(result)
  File \"/usr/lib/python2.7/dist-packages/twisted/internet/defer.py\", line 458, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File \"/usr/lib/python2.7/dist-packages/twisted/internet/defer.py\", line 545, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/filenode.py\", line 859, in <lambda>
    self._modify_once(modifier, first_time))
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/filenode.py\", line 885, in _modify_once
    d = self._try_to_download_data()
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/filenode.py\", line 963, in _try_to_download_data
    d = self._read(c, fetch_privkey=True)
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/filenode.py\", line 985, in _read
    d = r.download(consumer, offset, size)
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/retrieve.py\", line 244, in download
    self._setup_download()
  File \"$HOME/i2p-tahoe/tahoe-lafs-i2p/src/allmydata/mutable/retrieve.py\", line 301, in _setup_download
    assert len(self.remaining_sharemap) >= k
exceptions.AssertionError: 
"
allmydata-tahoe: 1.9.0-r5497,
foolscap: 0.6.3,
pycryptopp: 0.6.0.1206569328141510525648634803928199668821045408958,
zfec: 1.4.24,
Twisted: 11.1.0,
Nevow: 0.10.0,
zope.interface: unknown,
python: 2.7.3rc2,
platform: Linux-debian_wheezy/sid-x86_64-64bit_ELF,
pyOpenSSL: 0.13,
simplejson: 2.5.2,
pycrypto: 2.5,
pyasn1: unknown,
mock: 0.8.0,
sqlite3: 2.6.0 [sqlite 3.7.11],
setuptools: 0.6c16dev3

Attachments (2)

incident-2012-05-17--19-17-46Z-kkjrsvq.flog.bz2 (73.9 KB) - added by killyourtv at 2012-05-17T19:50:17Z.
possibly relevant incident
active.png (39.7 KB) - added by killyourtv at 2012-05-17T19:56:43Z.
The top two operations failed over 12 hours ago

Download all attachments as: .zip

Change History (23)

Changed at 2012-05-17T19:50:17Z by killyourtv

possibly relevant incident

comment:1 Changed at 2012-05-17T19:51:44Z by killyourtv

Of course, retrying the put operation completed successfully.

Changed at 2012-05-17T19:56:43Z by killyourtv

The top two operations failed over 12 hours ago

comment:2 Changed at 2012-05-17T20:02:14Z by killyourtv

In the image below are four "active" operations:

The top two operations failed over 12 hours ago

The top two failed around twelve hours earlier but remain in the list.

comment:3 Changed at 2012-07-16T20:53:02Z by killyourtv

FWIW, I have not seen this with the released v1.9.2---yet.

comment:4 Changed at 2013-05-02T23:51:05Z by zooko

I just got a report from a customer (TV of Sv) with a matching stack trace, using 1.9.2 [edited for formatting]:

# time tahoe backup TestFiles1M tahoe:Ss1
Traceback (most recent call last):
  File "/root/allmydata-tahoe-1.9.2/support/bin/tahoe", line 9, in <module>
    load_entry_point('allmydata-tahoe==1.9.2', 'console_scripts', 'tahoe')()
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/runner.py", line 113, in run
    rc = runner(sys.argv[1:], install_node_control=install_node_control)
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/runner.py", line 99, in runner
    rc = cli.dispatch[command](so)
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/cli.py", line 569, in backup
    rc = tahoe_backup.backup(options)
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/tahoe_backup.py", line 325, in backup
    return bu.run()
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/tahoe_backup.py", line 123, in run
    put_child(archives_url, now, new_backup_dircap)
  File "/root/allmydata-tahoe-1.9.2/src/allmydata/scripts/tahoe_backup.py", line 57, in put_child
    raise HTTPError("Error during put_child", resp)
allmydata.scripts.common_http.HTTPError: Error during put_child: 500 Internal Server Error
"Traceback (most recent call last):
  File \"/root/allmydata-tahoe-1.9.2/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/base.py\", line 800, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File \"/root/allmydata-tahoe-1.9.2/support/lib/python2.6/site-packages/foolscap-0.6.4-py2.6.egg/foolscap/eventual.py\", line 26, in _turn\
    cb(*args, **kwargs)\x0a  File \"/root/allmydata-tahoe-1.9.2/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py\", line 368, in callback
    self._startRunCallbacks(result)
  File \"/root/allmydata-tahoe-1.9.2/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py\", line 464, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File \"/root/allmydata-tahoe-1.9.2/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py\", line 551, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/filenode.py\", line 859, in <lambda>
    self._modify_once(modifier, first_time))
  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/filenode.py\", line 885, in _modify_once
    d = self._try_to_download_data()\x0a  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/filenode.py\", line 963, in _try_to_download_data
    d = self._read(c, fetch_privkey=True)
  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/filenode.py\", line 985, in _read
    d = r.download(consumer, offset, size)
  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/retrieve.py\", line 244, in download
    self._setup_download()
  File \"/root/allmydata-tahoe-1.9.2/src/allmydata/mutable/retrieve.py\", line 301, in _setup_download
    assert len(self.remaining_sharemap) >= k
exceptions.AssertionError: 
"
Last edited at 2013-05-03T00:47:15Z by daira (previous) (diff)

comment:5 Changed at 2013-05-03T00:50:28Z by daira

  • Component changed from unknown to code-mutable
  • Description modified (diff)
  • Keywords mutable added
  • Owner changed from davidsarah to daira
  • Status changed from new to assigned

comment:6 Changed at 2013-05-03T00:55:39Z by daira

  • Description modified (diff)

Similar traceback at https://tahoe-lafs.org/pipermail/tahoe-dev/2012-April/007273.html, where it occurred in conjunction with #1670 (but that could be a coincidence).

comment:7 Changed at 2013-05-04T00:06:35Z by daira

  • Keywords availability preservation added
  • Priority changed from normal to major

comment:8 Changed at 2013-05-07T22:27:42Z by zooko

  • Description modified (diff)

Tv of Sv carefully and repeatdly confirmed, at my request, that after he gets this exception that the new child does exist in the directory! So this exception is somehow not preventing the directory from being updated!

He wrote:

Yeah, I confirmed it again just now. I took a file already backed up, 100k11, reversed it with tac, saved it a different dir in TestFiles1M as 100k12, did tahoe backup, and got the error message. I did tahoe ls -l and can see 100k12 in the correct location, and can successfully see its contents with tahoe get.

Here's tahoe ls -l after and before:

[root@ls-126 ~]# tahoe ls -l Ss1/Archives/2013-05-07_21:26:17Z
-r-- 104726 May 01 10:26  100k1
-r-- 104433 May 07 14:23 100k12
-r-- 103983 May 01 10:26  100k2
-r-- 104187 May 01 10:26  100k3
-r-- 104850 May 01 10:26  100k4
-r-- 104699 May 03 11:42  100k5
dr-x      - May 01 10:26     d1
dr-x      - May 01 10:26     d2
dr-x      - May 01 10:27     d3
[root@ls-126 ~]# tahoe ls -l Ss1/Archives/2013-05-07_00:28:11Z
-r-- 104726 May 01 10:26 100k1
-r-- 103983 May 01 10:26 100k2
-r-- 104187 May 01 10:26 100k3
-r-- 104850 May 01 10:26 100k4
-r-- 104699 May 03 11:42 100k5
dr-x      - May 01 10:26    d1
dr-x      - May 01 10:26    d2
dr-x      - May 01 10:27    d3

comment:9 Changed at 2013-05-09T21:07:44Z by zooko

At my request, Tv of Sv reproduced it with Tahoe-LAFS v1.10.0 gateway:

Traceback (most recent call last):
  File "/home/sv1/.local/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/base.py", line 800, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/home/sv1/.local/lib/python2.6/site-packages/foolscap-0.6.4-py2.6.egg/foolscap/eventual.py", line 26, in _turn
    cb(*args, **kwargs)
  File "/home/sv1/.local/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py", line 368, in callback
    self._startRunCallbacks(result)
  File "/home/sv1/.local/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py", line 464, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "/home/sv1/.local/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py", line 551, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/filenode.py", line 854, in <lambda>
    self._modify_once(modifier, first_time))
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/filenode.py", line 880, in _modify_once
    d = self._try_to_download_data()
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/filenode.py", line 958, in _try_to_download_data
    d = self._read(c, fetch_privkey=True)
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/filenode.py", line 980, in _read
    d = r.download(consumer, offset, size)
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/retrieve.py", line 244, in download
    self._setup_download()
  File "/root/allmydata-tahoe-1.10.0/src/allmydata/mutable/retrieve.py", line 299, in _setup_download
    assert len(self.remaining_sharemap) >= k
exceptions.AssertionError: 

comment:11 Changed at 2013-05-15T03:34:06Z by Daira Hopwood <david-sarah@…>

In e821c9e23dd286734e7ebf0fbd17fa1fa5f4ff31/trunk:

Add a test for raising NotEnoughSharesError? when a Retrieve object is created with an insufficient servermap. refs #1742

Signed-off-by: Daira Hopwood <david-sarah@…>

comment:12 Changed at 2013-05-15T03:49:08Z by Daira Hopwood <david-sarah@…>

In e821c9e23dd286734e7ebf0fbd17fa1fa5f4ff31/trunk:

Add a test for raising NotEnoughSharesError? when a Retrieve object is created with an insufficient servermap. refs #1742

Signed-off-by: Daira Hopwood <david-sarah@…>

comment:13 Changed at 2013-05-15T13:15:28Z by Daira Hopwood <david-sarah@…>

In 705c47f9e92c4dfc010ccc124a8c814ebeabb197/trunk:

Improvements to test refs #1742

Signed-off-by: Daira Hopwood <david-sarah@…>

comment:14 Changed at 2013-05-15T13:15:41Z by Daira Hopwood <david-sarah@…>

In 705c47f9e92c4dfc010ccc124a8c814ebeabb197/trunk:

Improvements to test refs #1742

Signed-off-by: Daira Hopwood <david-sarah@…>

comment:15 Changed at 2013-05-15T13:20:19Z by daira

Hmm, we seem to be getting a trac notification for each github branch that a patch is pushed to (the above patches were pushed to both master and 1742-error-during-post on the official repo), but the branch name shown by trac is always /trunk.

[filed as #1970]

Last edited at 2013-05-15T13:27:11Z by daira (previous) (diff)

comment:16 Changed at 2013-05-15T13:34:52Z by daira

As shown by the test, the assertion was triggered when a version obtained by, e.g. servermap.best_recoverable_version() is used with a (different) new or updated servermap, created after shares of that version have been lost.

Note that using the version obtained by calling best_recoverable_version() on the new/updated servermap would not trigger the assertion. This may explain why it triggered relatively rarely, or why it was coded as an assertion.

comment:17 Changed at 2015-01-29T19:50:52Z by daira

  • Milestone changed from undecided to 1.12.0

comment:18 Changed at 2016-03-22T05:02:25Z by warner

  • Milestone changed from 1.12.0 to 1.13.0

Milestone renamed

comment:19 Changed at 2016-06-28T18:17:14Z by warner

  • Milestone changed from 1.13.0 to 1.14.0

renaming milestone

comment:20 Changed at 2020-06-30T14:45:13Z by exarkun

  • Milestone changed from 1.14.0 to 1.15.0

Moving open issues out of closed milestones.

comment:21 Changed at 2021-03-30T18:40:19Z by meejah

  • Milestone changed from 1.15.0 to soon

Ticket retargeted after milestone closed

Note: See TracTickets for help on using tickets.