GithubHelp home page GithubHelp logo

seattletestbed / clearinghouse Goto Github PK

View Code? Open in Web Editor NEW
0.0 17.0 11.0 858 KB

Donate, share, manage, control, and track resources

License: MIT License

Python 87.01% Shell 1.28% JavaScript 2.81% CSS 2.12% HTML 6.77%

clearinghouse's Issues

old installs are being listed as active

previous installs on nodes (IP / port) have their active time and epoch updated in the genidb. This causes really old versions to look like they are current.

always order the blocks correctly

The order should be:
in mycredits:
[myshares:
[people..](me][people..][others]
in)[others][me][free]

the ajax call should return in this order, and the javascript should add new blocks in this order.

handle vessel expirations gracefully even when nodes are unresponsive

Currently the expire_vessels script skips over vessels that it cannot contact. As a result, if a user acquires a vessel on a node that goes offline before the vessel expires, the user is stuck with the vessel and will be charged for it until the vessel comes back online and the expire_vessel script removes the VesselMap entry association.

This needs to be fixed so that (1) the user is never charged for a vessel that expired, but (2) the vessel does change its state to not include the previous user once the node comes back online.

The simplest way of doing this is to modify the expired vessels counting code in models.User so that it ignores vessel that expired in the past and does not charge users for them. However, this solution assumes that the expire_vessel script is dependable and will clean these vessels up shortly after the node comes back online.

extra vessels under jctest...

There are problems with the seattlegeni website. Somehow it sometimes gives out extra vessels. I believe this is a "multiclick" problem where I'm able to fire off multiple acquires before the first returns (but am unsure).

My Internet connection is horrid so I haven't been able to peek at the database and figure out what it says I (jctest) have.

Exclude blackbox machine IPs from genidb

In blackbox testing the seattle install, the machine performing the test is added to the geni database. This is a problem because then someone could potentially acquire this machine. It is best to not have that machine ever touch the database and leave no state on the server. Or perhaps it is most prudent to mark it in the database as inactive and have it be deleted by the state transition scripts.

merge django user and auth user records in geni db

Right now geni db uses two separate records to maintain user information. Since the auth user record can hold all of geni user information (and more), merge them. For extra profile information, use internal django functions to map an auth record to the profile record when the need arises.

Windows Geni installers have no vessel directories

I downloaded the Windows installers from Geni (the old version, not the new one), and there were no vessel directories. These seem to exist in the installers for the other operating systems, but not for Windows.

LAN nodes are LAN nodes?

When I get LAN nodes one at a time, I get some odd results:

128.195.54.161:1224:v6
137.189.98.30:1224:v6

Why are these LAN nodes?

Creating a SeattleGENI account returns an error about needing to convert a public key.

Reported by Huy Dang. (see IRC transcript).

I could replicate the problem.

huydang: I tried to create user using GENI
[justincappos_: okay, did you have a problem?
9:08pm huydang: but there was an error as following
[huydang: "Cannot convert key. Please generate your public key using Seash."
9:09pm justincappos_: did you try to upload a key?
[huydang: I think I have no key to upload
9:09pm justincappos_: okay, so you told it to generate keys for you?
[huydang: yep
9:09pm justincappos_: okay, one sec
[9:10pm] justincappos_: thank you for reporting this. I'll fix the problem ASAP

key generating daemon

Maintain generated keys in a process (not database). Communicate with this process over a socket to request new keys.

geni temporary vmap changes does not play well with vessel release

In www/geni/control/vessel_operations.mix, a call to release_vessels will subsequently call acquire_vessels with a null key.. this will attempt to create a temporary vmap entry with an invalid geni_user... should there be a special case here to not create a vmap entry here and let the current implementation remove the vmap entry.

This needs to be fixed before a GENI implementation is run.

database connection cleanup in geni

GENI should always release all of its db connections once it handles a user request.

Right now, some db connections persist, leading to OperationalError: (1040, 'Too many connections').

popup boxes don't work as they do in ie6 & 7

The appearance is not synonymous with Firefox's display of the popup display.

Attached are the IE6 screenshots; in IE7 the popup box is in the correct place but the alpha isn't set correctly (defaults to 1; completely opaque).

Problem downloading public key from SeattleGENI

We received an email stating:

Sir,
  I was able to create an account in seattle but I was not able to
download private key from server.can you please look at that issue.

Thank you,
Ravi.

I dug into this and saw this user seems to have made 3 seattlegeni accounts. One of these has no private key listed. I sent a follow up email as follows:

I just tried creating an account where it generated keys for me.   I
was able to download those keys without problems.

What sort of error message occurs when you try to download your private key?

I assume you're using the 'raviravula' account because I see the
private key listed under your other accounts.   On the 'raviravula'
account, it seems the private key has been deleted.   Did you download
it first?

If you forgot to download the key, go ahead and use one of your other
accounts instead.   Let me know if you see the problem there.

Thanks,
Justin

Determine what the root cause of Zachary's problem was...

[justincappos: so here is the set of occurrences as I understand it:
6:02pm justincappos: Zachary (a new undergrad) generates a public key using seash or similar
[justincappos: Zachary registers an account on seattlegeni and uploads his public key
6:03pm justincappos: Zachary can't browse and find vessels on seash because he isn't using the right public key
[justincappos: Can you help us figure out where the root problem is?
6:04pm alpers: what do you mean by right public key?
[alpers: does he have multiple public keys?
6:04pm justincappos: He told me what his key is and it's not the one stored in the db on seattlegeni
[6:04pm] justincappos: when I used that key I could browse

extra vessels under jctest...

There are problems with the seattlegeni website. Somehow it sometimes gives out extra vessels. I believe this is a "multiclick" problem where I'm able to fire off multiple acquires before the first returns (but am unsure).

My Internet connection is horrid so I haven't been able to peek at the database and figure out what it says I (jctest) have.

Validate SSL Certs in XMLRPC Client Library

The SeattleGENI XMLRPC Client Library (https://seattle.cs.washington.edu/wiki/SeattleGeniClientLib) currently talks to our XMLRPC frontend server over HTTPS (SSL), but does not validate nor check the server's SSL certificate. This is very insecure, as it allows for man-in-the-middle attacks via self-signed certs.

A possible solution would be to use a 3rd-party package, such as M2Crypto to handle SSL certificate checking. Or, python 2.6+ also supports SSL cert verification. The tricky part will be finding where SSL root certs exist on the system; in order to verify the cert chain.

Extra vessels under my account...

I have a bunch of extra vessels. They don't show up in the GENI DB or on my geni page.

Here are a list of vessels that I should not have but I do. I have significantly more than this (browse using my public key to find them).

'164.73.47.242:1224:v6', '150.140.140.91:1224:v6', '198.82.160.220:1224:v6', '151.100.59.10:1224:v10', '141.24.33.192:1224:v8', '128.223.8.111:1224:v112', '87.84.153.114:1224:v4', '128.208.1.214:1224:v6', '130.83.166.200:1224:v10', '192.6.26.32:1224:v29', '195.116.60.212:1224:v12', '152.66.244.48:1224:v8', '163.221.11.71:1224:v4', '140.247.60.123:1224:v8', '132.170.3.33:1224:v12', '136.145.115.196:1224:v10', '192.33.90.69:1224:v8', '128.163.142.20:1224:v8', '147.102.3.117:1224:v4', '193.54.192.41:1224:v12', '128.112.139.97:1224:v14', '147.83.30.166:1224:v4', '158.130.6.253:1224:v6', '195.116.53.23:1224:v6', '198.128.56.11:1224:v8', '131.188.44.101:1224:v8', '195.116.53.22:1224:v10'

Check that uploaded key is valid...

Use rsa_is_valid_publickey(key) to check the uploaded data. You'll likely need to use rsa_string_to_publickey(data) first. This should be a trivial amount of work.

geni backend isn't restartable...

Some of the state of the geni backend will be lost on a restart. Namely the cleanuplist is lost, which may give users access to resources for a much longer time than is desirable.

This should be persisted and restored.

(Note, this component will be rewritten with the new SeattleGENI backend)

XML RPC for GENI portal...

The functionality of the GENI portal should be callable by users without requiring they use the web interface. An easy way to do this is XMLRPC.

We could also use this interface as a test interface for the website. One could capture all of the XMLRPC requests from the production server and replay them on the test server for testing purposes.

vessel_operations.mix ununsed import

In trunk/www/geni/control/vessel_operations.mix, the following import (in '''bold''') was unneeded (as no code actually referenced anything from the import):

import random
import time
import xmlrpclib
import traceback

from django.db import connection
from django.contrib.auth.models import User as DjangoUser

from geni.control.models import Vessel, Donation
'''import geni.control.resource_operations'''
from geni.control.repy_dist.changeusers import changeusers

from repyportability import *
include parallelize.repy

It is causing strange import problems with the SeattleGENI XMLRPC Frontend Server (geni_xmlrpc_server.py).

remove race condition in geni node acquisition/release code

Ticket #303, #293 are due to a problem in the code that acquires/releases vessels. This code needs to (1) minimize the transaction block to acquire a node in the database, (2) remove races between multiple users by setting a flag in the database for pending transaction and (3) commit and only then attempt to acquire the node.

Vessel records in db with status typo 'Intialized'

There are 167 vessel records in the geni portal database that have a status field containing the typo 'Intialized' instead of 'Initialized'. They appear to all be extra vessels. I don't see the string 'Intialized' in the code anywhere so these may be old. The source of the problem should be identified and these database records cleaned up however appropriate (e.g. typo corrected in these records, the records removed if they are old and left behind because of the typo, etc.).

Donation model field incorrectly named `last_heard` ("Last time machine responded")

There is a field in the current geni Donation model named last_heard with the label "Last time machine responded" which is shown in the django admin area. This is not what the field is. The field is actually the date the database row was last modified. It's common to keep such fields in databases, but they should be called something like date_modified.

The important part to remember until this is fixed is that the label in the django admin does not mean the last date the node was successfully communicated with. I don't believe that information is being stored in the database at the moment.

Need feedback when acquiring resources

Right now when one clicks to acquire or release resources on the GENI portal, no feedback is given. At a minimum there needs to be some spinning indicator to show that "something" is happening.

Adding / removing vessels sometimes locks database...

Sometimes after adding or removing vessels, the database becomes locked (?). If you view the "My GENI" tab, the resources aren't displayed. Instead you see:

The information is taking too long to load. Try refreshing the page and contact us if you have further problems.

If you click on the "My Vessels" tab, it takes a long time to load. The end result is an error page that says:

OperationalError at /geni/control/myvessels

(1205, 'Lock wait timeout exceeded; try restarting transaction')

Request Method: GET
Request URL: https://seattlegeni.cs.washington.edu/geni/control/myvessels
Exception Type: OperationalError
Exception Value:

(1205, 'Lock wait timeout exceeded; try restarting transaction')

Exception Location: /var/lib/python-support/python2.5/MySQLdb/connections.py in defaulterrorhandler, line 35
Python Executable: /usr/bin/python
Python Version: 2.5.2
Python Path: '/home/geni/', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/var/lib/python-support/python2.5'
Server time: Sat, 21 Mar 2009 20:30:20 -0700
Traceback Switch to copy-and-paste view

* /usr/lib/python2.5/site-packages/django/core/handlers/base.py in get_response
    79. # Apply view middleware
    80. for middleware_method in self._view_middleware:
    81. response = middleware_method(request, callback, callback_args, callback_kwargs)
    82. if response:
    83. return response
    84.
    85. try:
    86. response = callback(request, *callback_args, **callback_kwargs) ...
    87. except Exception, e:
    88. # If the view raised an exception, run it through exception
    89. # middleware, and if the exception middleware returns a
    90. # response, use that. Otherwise, reraise the exception.
    91. for middleware_method in self._exception_middleware:
    92. response = middleware_method(request, e)
   Local vars
  Variable  Value
  callback  
  <django.contrib.auth.decorators._CheckLogin object at 0x14f0890>
  callback_args     
  ()
  callback_kwargs   
  {}
  e     
  OperationalError(1205, 'Lock wait timeout exceeded; try restarting transaction')
  exc_info  
  (<class '_mysql_exceptions.OperationalError'>, OperationalError(1205, 'Lock wait timeout exceeded; try restarting transaction'), <traceback object at 0x1fa7b48>)
  exceptions    
  <module 'django.core.exceptions' from '/usr/lib/python2.5/site-packages/django/core/exceptions.pyc'>
  middleware_method     
  <bound method AuthenticationMiddleware.process_request of <django.contrib.auth.middleware.AuthenticationMiddleware object at 0x1eff190>>
  receivers     
  [_rollback_on_exception at 0x1080a28>, None)]((<function)
  request   
  <ModPythonRequest path:/geni/control/myvessels, GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{'__utma': '80390417.2340364318866585000.1229466863.1232725670.1236393215.3', '__utmz': '80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php', 'csenetid_l': 'iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'sessionid': '3c08a17b8563db13bbc2a0c86d6a3ada'}, META:{'AUTH_TYPE': None, 'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': '__utma=80390417.2340364318866585000.1229466863.1232725670.1236393215.3; __utmz=80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php; sessionid=3c08a17b8563db13bbc2a0c86d6a3ada; csenetid_l=iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'HTTP_HOST': 'seattlegeni.cs.washington.edu', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'https://seattlegeni.cs.washington.edu/geni/control/mygeni', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7', 'PATH_INFO': u'/geni/control/myvessels', 'PATH_TRANSLATED': None, 'QUERY_STRING': None, 'REMOTE_ADDR': '128.208.61.11', 'REMOTE_HOST': None, 'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '', 'SERVER_NAME': 'seattlegeni.cs.washington.edu', 'SERVER_PORT': 443, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'mod_python'}>
  resolver  
  <RegexURLResolver geni.urls ^/>
  response  
  None
  self  
  <django.core.handlers.modpython.ModPythonHandler object at 0x1f79a50>
  settings  
  <django.conf.LazySettings object at 0xc02cd0>
  urlconf   
  'geni.urls'
  urlresolvers  
  <module 'django.core.urlresolvers' from '/usr/lib/python2.5/site-packages/django/core/urlresolvers.pyc'>
* /usr/lib/python2.5/site-packages/django/contrib/auth/decorators.py in __call__
    60.
    61. def __get__(self, obj, cls=None):
    62. view_func = self.view_func.__get__(obj, cls)
    63. return _CheckLogin(view_func, self.test_func, self.login_url, self.redirect_field_name)
    64.
    65. def __call__(self, request, *args, **kwargs):
    66. if self.test_func(request.user):
    67. return self.view_func(request, *args, **kwargs) ...
    68. path = urlquote(request.get_full_path())
    69. tup = self.login_url, self.redirect_field_name, path
    70. return HttpResponseRedirect('%s?%s=%s' % tup)
   Local vars
  Variable  Value
  args  
  ()
  kwargs    
  {}
  request   
  <ModPythonRequest path:/geni/control/myvessels, GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{'__utma': '80390417.2340364318866585000.1229466863.1232725670.1236393215.3', '__utmz': '80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php', 'csenetid_l': 'iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'sessionid': '3c08a17b8563db13bbc2a0c86d6a3ada'}, META:{'AUTH_TYPE': None, 'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': '__utma=80390417.2340364318866585000.1229466863.1232725670.1236393215.3; __utmz=80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php; sessionid=3c08a17b8563db13bbc2a0c86d6a3ada; csenetid_l=iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'HTTP_HOST': 'seattlegeni.cs.washington.edu', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'https://seattlegeni.cs.washington.edu/geni/control/mygeni', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7', 'PATH_INFO': u'/geni/control/myvessels', 'PATH_TRANSLATED': None, 'QUERY_STRING': None, 'REMOTE_ADDR': '128.208.61.11', 'REMOTE_HOST': None, 'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '', 'SERVER_NAME': 'seattlegeni.cs.washington.edu', 'SERVER_PORT': 443, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'mod_python'}>
  self  
  <django.contrib.auth.decorators._CheckLogin object at 0x14f0890>
* /home/geni/geni_production/geni/control/views.py in used_resources
   320. ret,success = __validate_guser__(request)
   321. if not success:
   322. return ret
   323. geni_user = ret
   324.
   325. # generate a new 'get resources' form if none is supplied
   326. if get_form is False:
   327. get_form = forms.gen_get_form(geni_user) ...
   328.
   329. # shared vessels that are used by others but which belong to this user (TODO)
   330. shvessels = [      331.
   332. # this user's used vessels
   333. my_vessels = VesselMap.objects.filter(user = geni_user).order_by('expiration')
   Local vars
  Variable  Value
  action_explanation    
  ''
  action_summary    
  ''
  geni_user     
  <User: justincappos>
  get_form  
  False
  remove_explanation    
  ''
  request   
  <ModPythonRequest path:/geni/control/myvessels, GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{'__utma': '80390417.2340364318866585000.1229466863.1232725670.1236393215.3', '__utmz': '80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php', 'csenetid_l': 'iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'sessionid': '3c08a17b8563db13bbc2a0c86d6a3ada'}, META:{'AUTH_TYPE': None, 'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': '__utma=80390417.2340364318866585000.1229466863.1232725670.1236393215.3; __utmz=80390417.1236393215.3.2.utmcsr=guide.opendns.com|utmccn=(referral)|utmcmd=referral|utmcct=/controller.php; sessionid=3c08a17b8563db13bbc2a0c86d6a3ada; csenetid_l=iQBVAgUAScSAymRdR96Ps/ZZAQE3UgH+Nd8Zd+PBoZsS4Ig9XUu1G81/2T1Ic7Fphp1zi0XqtUs207d63+8L+qaSjSvfTjevXgBy95eu+vh2brycGEQgCGp1c3RpbmMAALD9t+i1/beAuP23AAAAAKiLBQjKgMRJAAAAAAAAAAAAADAwMQAAAAAAAAAAAAAAEemfTwAAAAAgdJ9PfM3uvwAAAAAAAAAAAAAAc8BfAE8AAAAAoMnuv4DJ7r9F6p9PCAAAABQAAADAX6BPAAAAAAAAAAAAAAAAA6cOlxIAAAAgAAAAAAAAAMqAxEnKgMRJ9oHESQAAAAAAAAAAAABAAAAAAAACpw6XFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IsFCHiLBQhwhQUIAAB+fgAAAABJxIDKScUpig==', 'HTTP_HOST': 'seattlegeni.cs.washington.edu', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'https://seattlegeni.cs.washington.edu/geni/control/mygeni', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7', 'PATH_INFO': u'/geni/control/myvessels', 'PATH_TRANSLATED': None, 'QUERY_STRING': None, 'REMOTE_ADDR': '128.208.61.11', 'REMOTE_HOST': None, 'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '', 'SERVER_NAME': 'seattlegeni.cs.washington.edu', 'SERVER_PORT': 443, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'mod_python'}>
  ret   
  <User: justincappos>
  success   
  True
* /home/geni/geni_production/geni/control/forms.py in gen_get_form
    59.
    60. <Returns>
    61. A GetVesselsForm object that is instantiated with a req_post
    62. (if given). None is returned if the user cannot acquire any
    63. more vessels.
    64. """
    65. # the total number of vessels a user may acquire
    66. max_num = geni_user.vessel_credit_remaining() ...
    67. if max_num == 0:
    68. return None
    69.
    70. # dynamically generate the get vessels form
    71. get_vessel_choices = zip(range(1,max_num+1),range(1,max_num+1))
  1. Local vars
    Variable Value
    geni_user
    <User: justincappos>
    req_post
    None
    * /home/geni/geni_production/geni/control/models.py in vessel_credit_remaining
    204.
    205. None
    206.
    207. None
    208.
    209. The number of vessels this user may acquire >= 0.
    210. """
    211. remaining = self.vessel_credit_limit() - self.num_acquired_vessels ...
    212. if remaining < 0:
    213. # this may happen when the vessels are in expiration mode
    214. # but aren't expired yet
    215. return 0
    216. return remaining
  2. Local vars
    Variable Value
    self
    <User: justincappos>
    * /home/geni/geni_production/geni/control/models.py in vessel_credit_limit
    231. num_donations = Donation.objects.filter(user=self).filter(active=1).count()
    232.
    233. # TODO: TEMP (this code should really be in the node state transitions)
    234. # or not??
    235.
    236. self.num_acquired_vessels = VesselMap.objects.filter(user = self).count()
    237. self.vcount_via_donations = 10 * (num_donations)
    238. self.save() ...
    239.
    240. percent_credits, total_vessels = self.get_user_credits()
    241. free_percent = self.get_user_free_percent()
    242. total_vessels_free = int((total_vessels * free_percent * 1.0) / 100.0)
    243.
    244. # TODO: this should be :
    Local vars
    Variable Value
    num_donations
    0
    self
    <User: justincappos>
    * /usr/lib/python2.5/site-packages/django/db/models/base.py in save
    305. The 'force_insert' and 'force_update' parameters can be used to insist
    306. that the "save" must be an SQL insert or update (or equivalent for
    307. non-SQL backends), respectively. Normally, they should not be set.
    308. """
    309. if force_insert and force_update:
    310. raise ValueError("Cannot force both insert and updating in "
    311. "model saving.")
    312. self.save_base(force_insert=force_insert, force_update=force_update) ...
    313.
    314. save.alters_data = True
    315.
    316. def save_base(self, raw=False, cls=None, force_insert=False,
    317. force_update=False):
    318. """
    Local vars
    Variable Value
    force_insert
    False
    force_update
    False
    self
    <User: justincappos>
    * /usr/lib/python2.5/site-packages/django/db/models/base.py in save_base
    356. if pk_set:
    357. # Determine whether a record with the primary key already exists.
    358. if (force_update or (not force_insert and
    359. manager.filter(pk=pk_val).extra(select={'a': 1}).values('a').order_by())):
    360. # It does already exist, so do an UPDATE.
    361. if force_update or non_pks:
    362. values = (f, None, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, False))) for f in non_pks
    363. rows = manager.filter(pk=pk_val)._update(values) ...
    364. if force_update and not rows:
    365. raise DatabaseError("Forced update did not affect any rows.")
    366. else:
    367. record_exists = False
    368. if not pk_set or not record_exists:
    369. if not pk_set:
    Local vars
    Variable Value
    cls
    <class 'geni.control.models.User'>
    f
    <django.db.models.fields.IntegerField object at 0x1322fd0>
    force_insert
    False
    force_update
    False
    manager
    <django.db.models.manager.Manager object at 0x1398390>
    meta

    non_pks
    object at 0x1322cd0>, <django.db.models.fields.IntegerField object at 0x1322d90>, <django.db.models.fields.CharField object at 0x1322dd0>, <django.db.models.fields.CharField object at 0x1322e10>, <django.db.models.fields.CharField object at 0x1322e50>, <django.db.models.fields.CharField object at 0x1322e90>, <django.db.models.fields.CharField object at 0x1322ed0>, <django.db.models.fields.IntegerField object at 0x1322f10>, <django.db.models.fields.IntegerField object at 0x1322f50>, <django.db.models.fields.IntegerField object at 0x1322f90>, <django.db.models.fields.IntegerField object at 0x1322fd0>
    pk_set
    True
    pk_val
    24L
    raw
    False
    record_exists
    True
    self
    <User: justincappos>
    signal
    True
    values
    [object at 0x1322cd0>, None, 25), (<django.db.models.fields.IntegerField object at 0x1322d90>, None, 63155), (<django.db.models.fields.CharField object at 0x1322dd0>, None, u'UW'), (<django.db.models.fields.CharField object at 0x1322e10>, None, u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697'), (<django.db.models.fields.CharField object at 0x1322e50>, None, u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813'), (<django.db.models.fields.CharField object at 0x1322e90>, None, u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569'), (<django.db.models.fields.CharField object at 0x1322ed0>, None, u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039'), (<django.db.models.fields.IntegerField object at 0x1322f10>, None, 0), (<django.db.models.fields.IntegerField object at 0x1322f50>, None, 10), (<django.db.models.fields.IntegerField object at 0x1322f90>, None, 0), (<django.db.models.fields.IntegerField object at 0x1322fd0>, None, 0)](%28<django.db.models.fields.related.ForeignKey%29
    * /usr/lib/python2.5/site-packages/django/db/models/query.py in _update
    428. useful at that level).
    429. """
    430. assert self.query.can_filter(),
    431. "Cannot update a query once a slice has been taken."
    432. query = self.query.clone(sql.UpdateQuery)
    433. query.add_update_fields(values)
    434. self._result_cache = None
    435. return query.execute_sql(None) ...
    436. _update.alters_data = True
    437.
    438. ##################################################
    439. # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #
    440. ##################################################
  3. Local vars
    Variable Value
    query
    <django.db.models.sql.subqueries.UpdateQuery object at 0x1c37250>
    self
    justincappos>
    values
    [object at 0x1322cd0>, None, 25), (<django.db.models.fields.IntegerField object at 0x1322d90>, None, 63155), (<django.db.models.fields.CharField object at 0x1322dd0>, None, u'UW'), (<django.db.models.fields.CharField object at 0x1322e10>, None, u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697'), (<django.db.models.fields.CharField object at 0x1322e50>, None, u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813'), (<django.db.models.fields.CharField object at 0x1322e90>, None, u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569'), (<django.db.models.fields.CharField object at 0x1322ed0>, None, u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039'), (<django.db.models.fields.IntegerField object at 0x1322f10>, None, 0), (<django.db.models.fields.IntegerField object at 0x1322f50>, None, 10), (<django.db.models.fields.IntegerField object at 0x1322f90>, None, 0), (<django.db.models.fields.IntegerField object at 0x1322fd0>, None, 0)](%28<django.db.models.fields.related.ForeignKey%29
    * /usr/lib/python2.5/site-packages/django/db/models/sql/subqueries.py in execute_sql
    110.
    111. def execute_sql%28self, result_type=None%29:
    112. """
    113. Execute the specified update. Returns the number of rows affected by
    114. the primary update query %28there could be other updates on related
    115. tables, but their rowcounts are not returned).
    116. """
    117. cursor = super(UpdateQuery, self).execute_sql(result_type) ...
    118. rows = cursor.rowcount
    119. del cursor
    120. for query in self.get_related_updates():
    121. query.execute_sql(result_type)
    122. return rows
  4. Local vars
    Variable Value
    result_type
    None
    self
    <django.db.models.sql.subqueries.UpdateQuery object at 0x1c37250>
    * /usr/lib/python2.5/site-packages/django/db/models/sql/query.py in execute_sql
    1727. except EmptyResultSet:
    1728. if result_type == MULTI:
    1729. return empty_iter()
    1730. else:
    1731. return
    1732.
    1733. cursor = self.connection.cursor()
    1734. cursor.execute(sql, params) ...
    1735.
    1736. if not result_type:
    1737. return cursor
    1738. if result_type == SINGLE:
    1739. if self.ordering_aliases:
    1740. return cursor.fetchone()[ Local vars
    Variable Value
    cursor
    <django.db.backends.util.CursorDebugWrapper object at 0x1f9dc90>
    params
    (25, 63155, u'UW', u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697', u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813', u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569', u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039', 0, 10, 0, 0, 24)
    result_type
    None
    self
    <django.db.models.sql.subqueries.UpdateQuery object at 0x1c37250>
    sql
    'UPDATE control_user SET www_user_id = %s, port = %s, affiliation = %s, pubkey = %s, privkey = %s, donor_pubkey = %s, donor_privkey = %s, num_acquired_vessels = %s, vcount_base = %s, vcount_via_shares = %s, vcount_via_donations = %s WHERE control_user.id = %s '
    * /usr/lib/python2.5/site-packages/django/db/backends/util.py in execute
    12. def init(self, cursor, db):
    13. self.cursor = cursor
    14. self.db = db # Instance of a BaseDatabaseWrapper subclass
    15.
    16. def execute(self, sql, params=()):
    17. start = time()
    18. try:
    19. return self.cursor.execute(sql, params) ...
    20. finally:
    21. stop = time()
    22. sql = self.db.ops.last_executed_query(self.cursor, sql, params)
    23. self.db.queries.append({
    24. 'sql': sql,
    25. 'time': "%.3f" % (stop - start),
    Local vars
    Variable Value
    params
    (25, 63155, u'UW', u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697', u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813', u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569', u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039', 0, 10, 0, 0, 24)
    self
    <django.db.backends.util.CursorDebugWrapper object at 0x1f9dc90>
    sql
    u'UPDATE control_user SET www_user_id = 25, port = 63155, affiliation = UW, pubkey = 64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697, privkey = 634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813, donor_pubkey = 93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569, donor_privkey = 64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039, num_acquired_vessels = 0, vcount_base = 10, vcount_via_shares = 0, vcount_via_donations = 0 WHERE control_user.id = 24 '
    start
    1237692568.0884211
    stop
    1237692619.992101
    * /usr/lib/python2.5/site-packages/django/db/backends/mysql/base.py in execute
    76. codes_for_integrityerror = (1048,)
    77.
    78. def init(self, cursor):
    79. self.cursor = cursor
    80.
    81. def execute(self, query, args=None):
    82. try:
    83. return self.cursor.execute(query, args) ...
    84. except Database.OperationalError, e:
    85. # Map some error codes to IntegrityError, since they seem to be
    86. # misclassified and Django would prefer the more logical place.
    87. if e0 in self.codes_for_integrityerror:
    88. raise Database.IntegrityError(tuple(e))
    89. raise
    Local vars
    Variable Value
    args
    (25, 63155, u'UW', u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697', u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813', u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569', u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039', 0, 10, 0, 0, 24)
    e
    OperationalError(1205, 'Lock wait timeout exceeded; try restarting transaction')
    query
    'UPDATE control_user SET www_user_id = %s, port = %s, affiliation = %s, pubkey = %s, privkey = %s, donor_pubkey = %s, donor_privkey = %s, num_acquired_vessels = %s, vcount_base = %s, vcount_via_shares = %s, vcount_via_donations = %s WHERE control_user.id = %s '
    self
    <django.db.backends.mysql.base.CursorWrapper object at 0x1f9dad0>
    * /var/lib/python-support/python2.5/MySQLdb/cursors.py in execute
    159. else:
    160. self.messages.append((TypeError, m))
    161. self.errorhandler(self, TypeError, m)
    162. except:
    163. exc, value, tb = exc_info()
    164. del tb
    165. self.messages.append((exc, value))
    166. self.errorhandler(self, exc, value) ...
    167. self._executed = query
    168. if not self._defer_warnings: self._warning_check()
    169. return r
    170.
    171. def executemany(self, query, args):
  5. Local vars
    Variable Value
    ListType
    <type 'list'>
    TupleType
    <type 'tuple'>
    args
    (25, 63155, u'UW', u'64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697', u'634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813', u'93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569', u'64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039', 0, 10, 0, 0, 24)
    charset
    'utf8'
    db
    <weakproxy at 0x1a63cb0 to Connection at 0x1f0a310>
    exc
    <class '_mysql_exceptions.OperationalError'>
    exc_info

    query
    "UPDATE control_user SET www_user_id = 25, port = 63155, affiliation = 'UW', pubkey = '64670285459070825128617683698677097965285604353993735217187825873696440199031 5557137169049044090427651043001464701401530101259184062195762643006285546651672518726517347339294409773272397327002345251561608508674678909724267629143957009428190915862147739542405522173099454191550918294910789538276749745846278690228380595269501011252935599611361274139282597893810011106837914306759664697', privkey = '634838468203220350583018786253044811480255148567303870707885184531820255672553365719442218890946086136202312349732253548038115551117491364931987742760439574098515300439652015007232543624441506981837458084940289254194171648745889253420632688515718426448837300675887147412390386356648896647787536713082212055 13296585244164061353856670750949994647352765353643466720490771410297941317698691634219840520925738320054855938896257169802611652598467463981847862175156269 417937167099958972967586845552544989073366474504227499274591990060394062622291261187633557720234443434378277405890921361267153786293515933459157331322813', donor_pubkey = '93071954189950373425108556604445687708148311919015322976892151961195212180719 141732680739991177756037550745773956692781519788485645739084804527046084299162776758626437993441429151939353290507748645037507902137280443347269891744666500214197943203020630103816434193139462126100042933581087773907588586512962079427198058357426098733951116696899093009750474495320134186681141112912059101569', donor_privkey = '64388143338532557449886866660519383050287929332832494903200886335044669988860839358344505759290584742707800727337238460961430408936548281267609395511902949566125015702602688238080565290966140502565253457209396369780850382447595234856316300614993309419674689161223455378054500727993174368358300281166076417599 11073080186468184266915697721651539204025066113498665824470569125117130072995717873331672197987300186120163947496442990277223552851208872944431169045366271 12799752043085090617535157207783460445793931605283515416124291772798740411701364468095599152875824872767875985291086831033663433584246766514853353215527039', num_acquired_vessels = 0, vcount_base = 10, vcount_via_shares = 0, vcount_via_donations = 0 WHERE control_user.id = 24 "
    self
    <MySQLdb.cursors.Cursor object at 0x1c37590>
    value
    OperationalError(1205, 'Lock wait timeout exceeded; try restarting transaction')
    * /var/lib/python-support/python2.5/MySQLdb/connections.py in defaulterrorhandler
    28. error = errorclass, errorvalue
    29. if cursor:
    30. cursor.messages.append(error)
    31. else:
    32. connection.messages.append(error)
    33. del cursor
    34. del connection
    35. raise errorclass, errorvalue ...
    36.
    37.
    38. class Connection(_mysql.connection):
    39.
    40. """MySQL Database Connection Object"""
  6. Local vars

(request information omitted)...

geni admin interface enhancements

  1. show date added on admin interface as well as last seen time.
  2. adding search, etc. to admin interface.
  3. make all components searchable

Add logging to production GENI

Production GENI can log to Apache's error log. Currently this is hacked up on the production GENI but is not in SVN and it breaks testing server GENI which does not run under Apache.

This type of logging needs to be enabled only if we are running under mod_python or if DEBUG=false.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.