Appengine JS setting max_concurrent_request turns threadsafe to False - google-app-engine

I'm deploying my app to Appengine Standard JS. When I set the max_concurrent_request value, threadsafe becomes false on the console. Please clarify.
Attached is a screenshot for the same.

Node.JS is built to be thread safe by default, therefore the threadsafe element does not work for GAE applications serving in Node.JS, according to the documentation here.
However, Threadsafe should not be changed to False when setting max_concurrent_requests. We are currently working on this issue with the App Engine team and will let you know when I have any updates regarding this matter.
Edit:
Just as an update, the issue is actively being handled. No ETA at the moment.

Related

can't deploy Google Cloud Endpoints 2.0 on existing service

I have had a Python-based Google App Engine app working great using Cloud Endpoints 1.0 for several years without incident. I have had nothing but trouble migrating to Cloud Endpoints 2.0.
Currently I'm in the following state after already clearing many previous hurdles described in other similar questions:
I have one version of my service called gce1 which uses Endpoints 1.0 and is set as the default service receiving 100% of my traffic. I can point API clients and the APIs Explorer to both gce1-dot-myservice.appspot.com and the default myservice.appspot.com and everything works fine. I can verify in the logs that anything that goes through here is using GCE 1.0.
I have a second version of my service called gce2 which is not receiving any traffic by default, but if I point an API client or the APIs Explorer to gce2-dot-myservice.appspot.com it works just fine, and I can verify in the logs that anything that goes through here is using GCE 2.0.
Great, right? So it would seem that all I need to do is migrate all my traffic to gce2 and I'm done.
But... when I do that everything breaks! The default myservice.appspot.com serves up 405 POST Method Not Allowed responses to my existing clients, and if I look at the APIs Explorer, suddenly it now shows a bunch of obsolete methods that I think are from years ago and are no longer used in my current API. I can't tell where those are coming from (they are nowhere in my code, and haven't been for years), and I can't get the default service to serve the GCE 2.0 API no matter what I do.
The biggest problem is that I have thousands of users in the wild that all point to the default API URL, so it isn't so easy to just have them start pointing to gce2-dot-myservice, and besides, it doesn't make sense that I can't make the new default the new default. I've been working on this migration to GCE 2.0 for months, the deadline for getting off GCE 1.0 is getting closer by the day, and Google Support has not responded since late last year on this topic.
I should also mention I have tried:
Pushing a new service with the GCE2.0 code directly to default
Pushing a new service with no API at all (to maybe clear a cache or something)
Pushing services with all different sorts of version names
None of these have worked, although I haven't done any of them allowing a long delay since I'm working on a live service with real users.
This issue is now resolved, so for most people it should no longer occur. However, in my specific case, I had a legacy API that was getting in the way and had to be deleted, which did require specific attention from a Google engineer.
If you have similar issues, visit issuetracker.google.com/issues/76031966 and comment there.
Thanks to #saiyr for help tracking this down.

How to set my default version in Google App Engine

I'm working on a google app engine app that, after a lot of progress, has multiple versions deployed. I'd really like to switch the default version, which is the very first version of the app, to something more recent, but there doesn't seem to be any way to actually do that.
This article https://gae-php-tips.appspot.com/2013/06/25/harnessing-the-power-of-versions-on-app-engine/ claims there is a "Make Default" button under the version tab, but shows an older version of the console.
In the new version of the development console, there is no such button. This seems like an extremely key feature, and I'm not sure why they've obfuscated it.
Can anyone point me in the right direction?? Thanks!
Currently you can use "Migrate traffic" feature to tell App Engine which version should receive 100% of all requests.
If, at some point, you may want to test a new version, you have an option of splitting all incoming requests between two or more versions of your app.

IOException: Changed index specification

I am developing a GWT 2.5.1 and GAE/J 1.7.6 web app using Eclipse Juno/Google Plugin for Eclipse, and I am experimenting with the Search API. After an upgrade to the 1.7.6 GAE SDK the following started happening:
When the app is running in GAE Dev Mode and my index is populated,
it's subsequently programmatically accessible.
If the Dev Mode is
terminated and started again, programmatic access attempts fail (no results returned) as
follows:
SEVERE: Failed to access index
java.io.IOException: Changed index specification for description_index
at com.google.appengine.api.search.dev.LuceneDirectoryMap.getDirectory(LuceneDirectoryMap.java:198)
at com.google.appengine.api.search.dev.LuceneDirectoryMap$FileBased.getDirectory(LuceneDirectoryMap.java:64)
at com.google.appengine.api.search.dev.LocalSearchService.search(LocalSearchService.java:438)
Since the Search API is in development I would much rather use the SDK with the latest bugfixes and improvements. Does anyone have any suggestions regarding the cause of the exception?
Update
Fixed in App Engine SDK for Java release 1.7.7.1, available from the App Engine Downloads page.
Fix released in 1.7.7.1 SDK for Java. See here
Today, we found the same problem, our only possible fix on this moment was to change the appengine sdk for version 1.7.5 / 1.7.4.
I suppose there are significant changes coming, but until they're stable, we should not use or depend on it.
An issue has been opened for this in Google Code:
https://code.google.com/p/googleappengine/issues/detail?id=9088
If you believe this problem is important for you, and the workaround is not sufficient, then make sure to star the issue so that it gets escalated for repair.

Where are the GAE Backends logs?

As soon as I figured out how to invoke my app as a Backends app, my log messages stopped appearing.
I found this helpful post which says the Backends logs are kept separately and that I need to switch to Backends view by selecting the named backend from the dropdown at the top of the admin console, but I don't see anything Backends specific in that list to select.
Perhaps this is a clue... when I invoke my app via myapp.appspot.com/dostuff, in the log I see I'm getting the DeadlineExceededError after 60 secs, indicating it's not running as a Backends app. But when I invoke it via mybackend.myapp.appspot.com/dostuff, it continues running as needed, but no log entries!
Seems like I'm missing something. Thanks.
Somehow my app wasn't fully recognized by GAE as a Backend app. And therefore my backend instances weren't available in the drop-list. Seeing that others had similar trouble with a Python 2.7 app (ex.) that had been initially uploaded as a 2.5 app, I created a new app in GAE and uploaded to there and it worked. Sorry I don't have a more definitive answer.
Before all was working well, I also ended up creating an empty /_ah/start handler as suggested by someone in this thread. Also if you're deploying a multi-threaded backend, make sure to check this post out -- there's some important stuff I didn't run across in the docs.

PubSubHubBub Hubs

I'm currently building a live web application based upon the PubSubHubBub protocol. However, I encountered several issues.
First, I'm in search of a hub application that I can run on my server. There are several applications, but most of them are not mature yet, or they don't support the 0.3 spec. The official google hub runs on the Google App Engine and can even be executed locally. Unfortunately, "Tasks will not run automatically. Push the 'Run' button to execute each task." This behaviour is useful for debugging and understanding the workflow, but in some live tests, it would be nice not to invoke all tasks manually. Is there a way to tweak the local app engine due automatically run tasks?
Next, I have a question concerning the spec itself. The Google reference implementation provides the initial publish method bound to the outpoint uri + /publish. But this is not reflected in the specs.
So are there any mature hubs that can be run locally for debugging? Or are there ways to configure the offical google app engine hub to run locally and to execute tasks directly?
Thanks in advance
The new 1.3.4 App Engine SDK automatically runs tasks. Just upgrade your SDK to take advantage of it.
Next, I have a question concerning the spec itself. The Google reference implementation provides the initial publish method bound to the outpoint uri + /publish. But this is not reflected in the specs.
/publish is the only endpoint provided by the hub. As per the discovery section of the spec, that is the one you advertise.
Btw, https://github.com/pubsubhubbub/PubSubHubbub/wiki/Hubs lists all currently known hubs and software.
I also made my own hub that implements the 0.4 spec; see https://github.com/cweiske/phubb

Resources