I was running into a lot of issues recently with the PGA returning cached copies of pages. Is there any way to disable the cache for development or shorten the time-to-live for cached pages?
Thanks! On Jun 17, 2015 3:19 PM, "Douglas Chau" <[email protected]> wrote: > Hello Devs, > > Nothing that requires immediate attention, but I thought I would document > some of my hurdles while working on adding a feature to the PGA in case > anyone else encounters similar issues. So there are two takeaways: be wary > of PGA caching results, and be careful of boolean variables passed through > AJAX being treated as strings in PHP. > > I was working on the admin interface that allows a gateway admin to turn > on/off the visibility of a resource to regular users. The page before was > only a dummy page with a bunch of buttons for each resource. I added some > AJAX functionality to the current buttons so that when one is switched > on/off a call is made to a PHP controller method that resides in > AdminController.php; that call then invokes a utility function within > CRUtilities.php which does the actual calling to the the Airavata API to > update the compute resource description with the new boolean value that > reflects the button's on/off state. So basically, the button just updates a > boolean field in the compute resource description. Sounds simple enough. > > To make sure everything was working, I wrote some sanity checks to print > the before and after states of the compute resource description to the > browser (using javascript's console.log() function). For the record, I used > the *CRUtilities::register_or_update_compute_resource *method to do the > actual updating of the compute resource and then the > *CRUtilities::get_compute_resource* method to check the results. So > strangely and surely, when I got the results back and printed them to the > screen, the changes were not reflected; the compute resource object’s > fields were completely unchanged. But, the even stranger thing was that > after periods of time, the object fields would change. Huh?... This lead me > on a wild goose chase to see if there was something I forgot in the > airavata backend code, or if there was some composer command I forgot to > call, and so on. I looked through the CRUtilities code more carefully and > found that the *CRUtilities::**register_or_update_compute_resource* method > actually returns the compute resource when it succeeds. I tried printing > this return value to the screen and discovered that the changes were > happily reflected in these results but still not in the results of the > other *CRUtilities::get_compute_resource *method. Why? With some more > stumbling around, I discovered that the > *CRUtilities::register_or_update_compute_resource* method actually gets > it’s resulting resource description by calling the > *Airavata::getComputeResource* method and not the getter method already > provided in CRUtilities; so the succeeding results actually come directly > from the airavata backend. And finally, after looking carefully at the > *CRUtilities::get_compute_resource* method, I found that this method > actually returns a cached version of the resource if available, which > explains why none of the changes were immediately reflected but did after a > period of time. > > If you did not follow all that, the takeaway is, > *CRUtilities::get_compute_resource* returns a cached version of the > resource, so if you ever make an update and are trying to check the results > to see if they have changed, use the return value of the > *CRUtilities::**register_or_update_compute_resource > *instead; the results of *CRUtilities::get_compute_resource* will deceive > you into thinking the change did not go through. I guess that makes sense, > but may not be so apparent to newcomers to the PGA code. > > Also, if any of you ever try passing boolean values from AJAX to PHP, when > PHP get’s the POST/GET results, it will take your original boolean types > and covert them to strings. So if you passed in boolean true, PHP will get > it as string “true”. And of course, if you are eventually setting a boolean > field to the string “true”, PHP always evaluates a string to boolean true > unless it is something that is considered empty by PHP (i.e. “” or “0”). So > if you need to do this, make sure the values are converted back to boolean. > See these links for more detail: > > http://stackoverflow.com/questions/3654454/boolean-variables-posted-through-ajax-being-treated-as-strings-in-server-side > > http://stackoverflow.com/questions/7336861/how-to-convert-string-to-boolean-php > > I hope this was all somewhat clear. And at the least, I hope this helps > anyone who may eventually work on the PGA code. > > Thanks, > Doug > >
