"Found more than 100 URLMap entries"

266 views
Skip to first unread message

Joshua Fox

unread,
Feb 23, 2017, 4:53:29 AM2/23/17
to google-a...@googlegroups.com
Where can I find documentation on URLMap count, as reflected in this error in deployment to GAE?

          "app.yaml... Found more than 100 URLMap entries in application configuration"

What is included in the URLMap count?

Which elements in web.xml are included? servlet-mapping, security-constraint, filter-mapping, or something else? 

Which elements in appengine-web.xml ? 

For some reason, removing <include path="**"/> from appengine-web.xml actually allows deployment for us. Does that path count as a single URLMap? Or as one per static  file? Per JSP?

Nicholas (Google Cloud Support)

unread,
Feb 24, 2017, 4:02:13 PM2/24/17
to Google App Engine
There does not seem to be any explicit documentation about the URLMap limitations for GAE nor a breakdown of which XML elements count towards this limit.  The most relevant documentation I could find is the HTTP/S load balancer documentation about URL Maps and the URLMap resource definition.  These are documented in the context of the a load balancer and not an App Engine application.  The load balancer documentation does not describe which XML elements <filter-mapping>, <servlet-mapping>, etc. nor which app.yaml handlers count as a URLMap.

I can't define what constitutes a URLMap until I dig into this a little deeper.  I suspect this will lead to feedback for our documentation team.  For the time being, perhaps we can help identify opportunities to reduce the number of maps you have using more comprehensive regular expressions and such.  If sensitive and not redacted, feel free to reply privately to me here with your web.xml and I'll see what I can do to help.

Nicholas (Google Cloud Support)

unread,
Feb 27, 2017, 4:21:18 PM2/27/17
to Google App Engine
Hey there,

Thanks for providing me with your appengine-web.xml and web.xml.  At the moment, the platform limits the number of URLMap handlers to 100.  This can be found in the appinfo.py file in your own gcloud SDK installation (<your-cloud-sdk-dir>/platform/google_appengine/google/appengine/api/appinfo.py on line 2089).  The definition of URLMap can be found in the same find with a helpful description on line 917.

When it comes to Java applications, filter mappings, servlet mappings are the main contributors to URLMap handlers.  Basically, any entry that maps a URL to an endpoint will be a URLMap.  Looking at some of your servlet mappings, you may be able to save some maps in the following ways
  • Break down the application into many smaller services.  Your REST API servlet(s) for instance could be deploy as a separate service, thus taking advantage of the subdomain URL-naming scheme of App Engine services like api.your-domain.com/v1/useful-method.  Essentially, the change requires that part of the URL be moved from the path to the subdomain.
  • Use a CDN or Cloud Storage to serve static resources.  In your appengine-web.xml, I could see several <include>.  Cloud Storage is an excellent service for serving static resources.
  • In some cases, a single servlet could serve related paths such as /_ah/*.  This example can save you from having 3 single endpoints mappings for /_ah/start, /_ah/health, /_ah/stop.
I hope this addresses your questions and helps you trim down some URL mappings.

Joshua Fox

unread,
Feb 28, 2017, 3:50:12 AM2/28/17
to google-a...@googlegroups.com
Thank you. What is the role of 

             <include path="**"/>

Does that count as one URLMap or does that somehow expand so that every JSP and/or every  file gets counted as one URLMap?

--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscribe@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-appengine/b08cff4d-b9f6-4a7b-b42a-0adc3eda0d51%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
JOSHUA FOX
Principal Software Architect | Freightos


 (Israel): +972-545691165 |  (US):  +1-3123400953 | Skypejoshuafox.freightos
Smoother shipping with the world's online freight marketplace.

Nicholas (Google Cloud Support)

unread,
Mar 1, 2017, 3:44:37 PM3/1/17
to Google App Engine
Servlet and filter mappings in web.xml are converted to handlers as they are represented in app.yaml by other runtimes.  Static includes/excludes in appengine-web.xml are also converted to handlers of a similar format.  The source code showing how these are processed can by found in <gcloud-sdk-dir>/platform/google_appengine/google/appengine/tools/handler.py.
  • Line 181 defines OverlappedHandler which shows how some of the paths found in both xml files can be combined into a single handler.
  • Line 245 defines GetOrderedIntersection which explains how mappings in web.xml are converted into an ordered list of handler objects.
Depending on what includes and mappings exist in your configuration xml files, the conversion into app.yaml-like handlers may not be a 1:1 ratio.  I'd recommend reading through that source if the details of how paths are combined is the information you seek.  Nevertheless, given the config files you've provided, my standing recommendation remains to break down your service into small "microservices" to have more URLMap "breathing room" and to take advantage of independent scaling/load balancing.


On Tuesday, February 28, 2017 at 3:50:12 AM UTC-5, Joshua Fox wrote:
Thank you. What is the role of 

             <include path="**"/>

Does that count as one URLMap or does that somehow expand so that every JSP and/or every  file gets counted as one URLMap?
Reply all
Reply to author
Forward
0 new messages