Question

I'm using the code below to slug the link to a couchDb instance, so I can test what happens to the GUI if the database is slow.

# coding=utf8   slowCoach.py - a server that delays every message 
#      thus making the database crawl. 
import eventlet
from time import sleep
def closed_callback():
    print "called back"
def forward(source, dest, cb = lambda: None):
    """Forwards bytes unidirectionally from source to dest"""
    while True:
        d = source.recv(32384)
        if d == '':
            cb()
            break
        sleep(0.3)    
        dest.sendall(d)
listener = eventlet.listen(('localhost', 5981 ))
while True:
    client, addr = listener.accept()
    server = eventlet.connect(('192.168.0.1',5984))
    # two unidirectional forwarders make a bidirectional one
    eventlet.spawn_n(forward, client, server, closed_callback)
    eventlet.spawn_n(forward, server, client)

The code is based upon the port forwarder example.

It works as expected when I read, delete, and update a document, but when I insert the GUI hangs. When I link direct, missing out the code above, inserts work just fine!

The Python code that is talking to the database is couchDB-python (http://code.google.com/p/couchdb-python/) and BOTH save and insert execute the following statement

    try: 
        self.db.save(dic)
    except couchdb.ResourceConflict: # wrong _rev - updated by someone else
        return False
    for fld in ['_id','_rev']:  # set id and rev to current values 
        value = dic[fld]
        setattr(self, fld, value)
    self._status = CouchObject.CLEAN
    return self

Yet one works and the other doesn't. Does anyone have any hint on how to debug this, or what might be going wrong?

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top