Teevity / ice

AWS Usage Tool
2.85k stars 434 forks source link

ICE crashes due to missing regions and availability zones. #222

Closed Observer99 closed 7 years ago

Observer99 commented 8 years ago

Hi,

Our ICE was redeployed after accident EC2 instance termination, and failed to run due to missing new regions and availability zones. The following are missing:

Region AP_NORTHEAST_2:

Region AP_SOUTH_1:

In addition, the availability zone ap-southeast-2c is missing in the Region AP_SOUTHEAST_2

I fixed this issue by adding missing regions and availability zones in Zone.java and Region.java files and now our ICE is working properly.

This is the error that I got before fix:

| Error 2016-09-22 08:41:24,790 [localhost-startStop-1] ERROR basic.BasicReservationService - failed to poll reservation prices Message: null Line | Method ->> 333 | hash in java.util.concurrent.ConcurrentHashMap


| 988 | get in '' | 130 | getZone . . . . . . . . . . . . in com.netflix.ice.tag.Zone | 175 | pollAPI in com.netflix.ice.basic.BasicReservationService | 106 | init . . . . . . . . . . . . . . in '' | 95 | in com.netflix.ice.processor.ProcessorConfig | 186 | doCall . . . . . . . . . . . . . in BootStrap$_closure1 | 327 | evaluateEnvironmentSpecificBlock in grails.util.Environment | 320 | executeForEnvironment . . . . . in '' | 296 | executeForCurrentEnvironment in '' | 262 | run . . . . . . . . . . . . . . in java.util.concurrent.FutureTask | 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor | 615 | run . . . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | run in java.lang.Thread | Error java.lang.RuntimeException: failed to poll reservation prices for null | Error at com.netflix.ice.basic.BasicReservationService.init(BasicReservationService.java:110) | Error at com.netflix.ice.processor.ProcessorConfig.(ProcessorConfig.java:95) | Error at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) | Error at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) | Error at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) | Error at java.lang.reflect.Constructor.newInstance(Constructor.java:526) | Error at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77) | Error at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182) | Error at BootStrap$_closure1.doCall(BootStrap.groovy:186) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:606) | Error at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) | Error at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) | Error at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) | Error at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) | Error at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016) | Error at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1081) | Error at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) | Error at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016) | Error at groovy.lang.Closure.call(Closure.java:423) | Error at groovy.lang.Closure.call(Closure.java:417) | Error at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:327) | Error at grails.util.Environment.executeForEnvironment(Environment.java:320) | Error at grails.util.Environment.executeForCurrentEnvironment(Environment.java:296) | Error at org.codehaus.groovy.grails.commons.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:60) | Error at org.codehaus.groovy.grails.web.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:78) | Error at org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener.initWebApplicationContext(GrailsContextLoaderListener.java:110) | Error at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) | Error at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728) | Error at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) | Error at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) | Error at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) | Error at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) | Error at java.util.concurrent.FutureTask.run(FutureTask.java:262) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) | Error at java.lang.Thread.run(Thread.java:745) | Error 2016-09-22 08:41:24,816 [localhost-startStop-1] ERROR BootStrap - Startup failed Message: failed to poll reservation prices for null Line | Method ->> 110 | init in com.netflix.ice.basic.BasicReservationService


| 95 | in com.netflix.ice.processor.ProcessorConfig | 186 | doCall . . . . . . . . . . . . . in BootStrap$_closure1 | 327 | evaluateEnvironmentSpecificBlock in grails.util.Environment | 320 | executeForEnvironment . . . . . in '' | 296 | executeForCurrentEnvironment in '' | 262 | run . . . . . . . . . . . . . . in java.util.concurrent.FutureTask | 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor | 615 | run . . . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | run in java.lang.Thread

kadern0 commented 7 years ago

Hello @Observer99 I've run into the same issue. I've added the AP_SOUTH_1 Region, but it doesn't show up within any selection box. Although I can find the ap-south-1, ap-south-1a and ap-south-1b as Zones. Any idea?

Observer99 commented 7 years ago

Hello @kadern0,

Have you added AP_SOUTH_1 Region and Zones configuration properly to both Zone.java and Region.java files? I also deleted ICE output data and started ICE from scratch. It took several hours to recreate our data but now it's working well and all new Regions including AP_SOUTH_1 is show up within "Region" selection box (although we don't use them).

Regards, Michael H.

kadern0 commented 7 years ago

I think I've added them correctly. On Region.java: public static final Region AP_SOUTH_1 = new Region("ap-south-1", "AS1"); regionsByShortName.put(AP_SOUTH_1.shortName, AP_SOUTH_1); regionsByName.put(AP_SOUTH_1.name, AP_SOUTH_1);

On Zone.java:

public static final Zone AP_SOUTH_1A = new Zone(Region.AP_SOUTH_1, "ap-south-1a");
public static final Zone AP_SOUTH_1B = new Zone(Region.AP_SOUTH_1, "ap-south-1b");
zonesByName.put(AP_SOUTH_1A.name, AP_SOUTH_1A);
zonesByName.put(AP_SOUTH_1B.name, AP_SOUTH_1B);

Do you have anything different ?

Regards, Kaderno.

Observer99 commented 7 years ago

Yes, you should replace "AS1" to "APS3" In Region.java like this:

public static final Region AP_SOUTH_1 = new Region("ap-south-1", "APS3");