Donate, share, manage, control, and track resources
This is an archival version of the now defunct Seattle clearinghouse website. Please do not use it for any purpose without first applying security fixes to dependent libraries.
Donate, share, manage, control, and track resources
License: MIT License
Current geni code and node state transitions scripts use the keygen database for fresh keys. This code needs to use the improved keydaemon: /seattle/trunk/keydaemon.
Note that this ticket is blocked by #449 -- a ticket to deploy the keygen daemon.
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.
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.
Fix the seattlegeni test mechanism so that we can test our webfacing code without changing the production front end.
Give users the option to delete their GENI account.
Maintain generated keys in a process (not database). Communicate with this process over a socket to request new keys.
select nodes where you want 'em:
http://code.djangoproject.com/wiki/django-gmap
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.
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.
Add expiration script so that vessels are returned to the unused pool.
Lots of bug-fixes in this django release -- this is also a good point to perfect the art of upgrading django before things are not allowed to break.. ever.
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.
Has some interesting features:
http://bitbucket.org/ubernostrum/django-registration/src/tip/docs/overview.txt
Show this information in both the admin interface as well as on the My Vessels page.
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).
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?
Add real time tips beside the registration fields
IE7 shows "object expected" error on the bottom of the page for seattlegeni.cs.washington.edu
Make the count in drop down be correct when adding resources
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.
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.
The count is incorrect after the first add/remove of resource. But if adding more than a single resource it decrements/increments correctly.
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))
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 '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 '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 '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 "(request information omitted)...
'Aww' not 'aww' throughout: ps aww | grep nmmain.py | grep -v grep
WARNING: cannot verify seattle.cs.washington.edu's certificate, issued
by `/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com,
Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure
Certification Authority/serialNumber=07969287':
Unable to locally verify the issuer's authority.
[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
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.
Finally a logging solution for output generated by a django app:
http://code.google.com/p/django-logging/wiki/Overview
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
I can get lots of resources by clicking add quickly. Check that there is no race condition in django in adding resources.
At the moment GENI runs in debug mode and shows output not useful to the user. We need to (1) make geni_production run in DEBUG=false mode and (2) Handle HTTP errors in urls with a view function that will generate a prettier screen for the user.
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.
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.
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.).
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).
Give the user the ability to renew some or all of their vessels. With some maximum number of renewal times.
Current geni portal displays the donation.status field. This doesn't make sense, especially since the field will be used to store node state pub key. We need to show the geni user the donation.active field value instead.
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.
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.
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').
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.
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'
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
A user should be able to change their public key on the Seattle GENI website. Right now, it seems there is no way to do that.
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.
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.
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)
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.