Uploaded image for project: 'jclouds'
  1. jclouds
  2. JCLOUDS-1159

Failure to parse https://api.digitalocean.com/v2/sizes when slug is Null

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.9.2
    • None
    • jclouds-compute

    Description

      The following exception was received when trying to run org.jclouds.compute.internal.BaseComputeService.listNodesDetailsMatching for Digitalocean2:

      17:50:29.374 [pool-1-thread-1] DEBUG jclouds.headers - >> GET https://api.digitalocean.com/v2/sizes HTTP/1.1
      17:50:29.555 [pool-1-thread-1] DEBUG o.j.h.i.JavaUrlHttpCommandExecutorService - Receiving response 6566944: HTTP/1.1 200 OK
      
      17:50:29.565 [pool-1-thread-1] DEBUG jclouds.wire - << "{"sizes":[{"slug":"512mb","memory":512,"vcpus":1,"disk":20,"transfer":1.0,"price_monthly":5.0,"price_hourly":0.00744,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":"1gb","memory":1024,"vcpus":1,"disk":30,"transfer":2.0,"price_monthly":10.0,"price_hourly":0.01488,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":"2gb","memory":2048,"vcpus":2,"disk":40,"transfer":3.0,"price_monthly":20.0,"price_hourly":0.02976,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":"4gb","memory":4096,"vcpus":2,"disk":60,"transfer":4.0,"price_monthly":40.0,"price_hourly":0.05952,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":"8gb","memory":8192,"vcpus":4,"disk":80,"transfer":5.0,"price_monthly":80.0,"price_hourly":0.11905,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":"16gb","memory":16384,"vcpus":8,"disk":160,"transfer":6.0,"price_monthly":160.0,"price_hourly":0.2381,"regions":["ams1","ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":true},{"slug":null,"memory":16384,"vcpus":2,"disk":30,"transfer":6.0,"price_monthly":120.0,"price_hourly":0.17857,"regions":[],"available":true},{"slug":"32gb","memory":32768,"vcpus":12,"disk":320,"transfer":7.0,"price_monthly":320.0,"price_hourly":0.47619,"regions":["ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":false},{"slug":null,"memory":32768,"vcpus":4,"disk":90,"transfer":7.0,"price_monthly":240.0,"price_hourly":0.35714,"regions":[],"available":false},{"slug":"48gb","memory":49152,"vcpus":16,"disk":480,"transfer":8.0,"price_monthly":480.0,"price_hourly":0.71429,"regions":["ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":false},{"slug":null,"memory":65536,"vcpus":8,"disk":200,"transfer":8.0,"price_monthly":480.0,"price_hourly":0.71429,"regions":[],"available":false},{"slug":"64gb","memory":65536,"vcpus":20,"disk":640,"transfer":9.0,"price_monthly":640.0,"price_hourly":0.95238,"regions":["ams2","ams3","blr1","fra1","lon1","nyc1","nyc2","nyc3","sfo1","sfo2","sgp1","tor1"],"available":false},{"slug":null,"memory":131072,"vcpus":16,"disk":340,"transfer":9.0,"price_monthly":960.0,"price_hourly":0.42857,"regions":[],"available":true},{"slug":null,"memory":229376,"vcpus":32,"disk":500,"transfer":10.0,"price_monthly":1680.0,"price_hourly":2.5,"regions":[],"available":true}],"links":{},"meta":{"total":14}}"
      17:51:26.075 [pool-1-thread-1] ERROR o.j.d.features.SizeApi$ParseSizes - Error parsing input: Null slug
      java.lang.NullPointerException: Null slug
      	at org.jclouds.digitalocean2.domain.AutoValue_Size.<init>(AutoValue_Size.java:31) ~[digitalocean2-1.9.2.jar:na]
      	at org.jclouds.digitalocean2.domain.Size.create(Size.java:42) ~[digitalocean2-1.9.2.jar:na]
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80]
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_80]
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80]
      	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80]
      	at com.google.common.reflect.Invokable$MethodInvokable.invokeInternal(Invokable.java:197) ~[guava-18.0.jar:na]
      	at com.google.common.reflect.Invokable.invoke(Invokable.java:102) ~[guava-18.0.jar:na]
      	at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.newInstance(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:224) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:204) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactories.java:90) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:82) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:61) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:272) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:184) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at com.google.gson.Gson.fromJson(Gson.java:803) ~[gson-2.2.4.jar:na]
      	at com.google.gson.Gson.fromJson(Gson.java:768) ~[gson-2.2.4.jar:na]
      	at com.google.gson.Gson.fromJson(Gson.java:717) ~[gson-2.2.4.jar:na]
      	at org.jclouds.json.internal.GsonWrapper.fromJson(GsonWrapper.java:42) ~[jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:83) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:77) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:62) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:42) [jclouds-core-1.9.2.jar:1.9.2]
      	at com.google.common.base.Functions$FunctionComposition.apply(Functions.java:216) [guava-18.0.jar:na]
      	at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:90) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117) [jclouds-core-1.9.2.jar:1.9.2]
      	at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87) [guava-18.0.jar:na]
      	at com.sun.proxy.$Proxy67.list(Unknown Source) [na:na]
      	at org.jclouds.digitalocean2.compute.DigitalOcean2ComputeServiceAdapter.listHardwareProfiles(DigitalOcean2ComputeServiceAdapter.java:158) [digitalocean2-1.9.2.jar:na]
      	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$1.get(ComputeServiceAdapterContextModule.java:101) [jclouds-compute-1.9.0.jar:1.9.0]
      	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$1.get(ComputeServiceAdapterContextModule.java:98) [jclouds-compute-1.9.0.jar:1.9.0]
      	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:73) [jclouds-core-1.9.2.jar:1.9.2]
      	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:57) [jclouds-core-1.9.2.jar:1.9.2]
      	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache.get(LocalCache.java:3937) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) [guava-18.0.jar:na]
      	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) [guava-18.0.jar:na]
      	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:119) [jclouds-core-1.9.2.jar:1.9.2]
      	at com.google.common.base.Suppliers$SupplierComposition.get(Suppliers.java:67) [guava-18.0.jar:na]
      	at org.jclouds.digitalocean2.compute.functions.DropletToNodeMetadata.getHardware(DropletToNodeMetadata.java:149) [digitalocean2-1.9.2.jar:na]
      	at org.jclouds.digitalocean2.compute.functions.DropletToNodeMetadata.apply(DropletToNodeMetadata.java:94) [digitalocean2-1.9.2.jar:na]
      	at org.jclouds.digitalocean2.compute.functions.DropletToNodeMetadata.apply(DropletToNodeMetadata.java:1) [digitalocean2-1.9.2.jar:na]
      	at com.google.common.base.Functions$FunctionComposition.apply(Functions.java:216) [guava-18.0.jar:na]
      	at com.google.common.collect.Iterators$8.transform(Iterators.java:799) [guava-18.0.jar:na]
      	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) [guava-18.0.jar:na]
      	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:651) [guava-18.0.jar:na]
      	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) [guava-18.0.jar:na]
      	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) [guava-18.0.jar:na]
      	at com.google.common.collect.Iterators.addAll(Iterators.java:361) [guava-18.0.jar:na]
      	at com.google.common.collect.Iterables.addAll(Iterables.java:354) [guava-18.0.jar:na]
      	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:328) [guava-18.0.jar:na]
      	at org.jclouds.compute.internal.BaseComputeService.listNodesDetailsMatching(BaseComputeService.java:359) [jclouds-compute-1.9.0.jar:1.9.0]
      

      This is the json it threw an exception on:

      {
          "links": {},
          "meta": {
              "total": 14
          },
          "sizes": [
              {
                  "available": true,
                  "disk": 20,
                  "memory": 512,
                  "price_hourly": 0.00744,
                  "price_monthly": 5.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "512mb",
                  "transfer": 1.0,
                  "vcpus": 1
              },
              {
                  "available": true,
                  "disk": 30,
                  "memory": 1024,
                  "price_hourly": 0.01488,
                  "price_monthly": 10.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "1gb",
                  "transfer": 2.0,
                  "vcpus": 1
              },
              {
                  "available": true,
                  "disk": 40,
                  "memory": 2048,
                  "price_hourly": 0.02976,
                  "price_monthly": 20.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "2gb",
                  "transfer": 3.0,
                  "vcpus": 2
              },
              {
                  "available": true,
                  "disk": 60,
                  "memory": 4096,
                  "price_hourly": 0.05952,
                  "price_monthly": 40.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "4gb",
                  "transfer": 4.0,
                  "vcpus": 2
              },
              {
                  "available": true,
                  "disk": 80,
                  "memory": 8192,
                  "price_hourly": 0.11905,
                  "price_monthly": 80.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "8gb",
                  "transfer": 5.0,
                  "vcpus": 4
              },
              {
                  "available": true,
                  "disk": 160,
                  "memory": 16384,
                  "price_hourly": 0.2381,
                  "price_monthly": 160.0,
                  "regions": [
                      "ams1",
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "16gb",
                  "transfer": 6.0,
                  "vcpus": 8
              },
              {
                  "available": true,
                  "disk": 30,
                  "memory": 16384,
                  "price_hourly": 0.17857,
                  "price_monthly": 120.0,
                  "regions": [],
                  "slug": null,
                  "transfer": 6.0,
                  "vcpus": 2
              },
              {
                  "available": false,
                  "disk": 320,
                  "memory": 32768,
                  "price_hourly": 0.47619,
                  "price_monthly": 320.0,
                  "regions": [
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "32gb",
                  "transfer": 7.0,
                  "vcpus": 12
              },
              {
                  "available": false,
                  "disk": 90,
                  "memory": 32768,
                  "price_hourly": 0.35714,
                  "price_monthly": 240.0,
                  "regions": [],
                  "slug": null,
                  "transfer": 7.0,
                  "vcpus": 4
              },
              {
                  "available": false,
                  "disk": 480,
                  "memory": 49152,
                  "price_hourly": 0.71429,
                  "price_monthly": 480.0,
                  "regions": [
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "48gb",
                  "transfer": 8.0,
                  "vcpus": 16
              },
              {
                  "available": false,
                  "disk": 200,
                  "memory": 65536,
                  "price_hourly": 0.71429,
                  "price_monthly": 480.0,
                  "regions": [],
                  "slug": null,
                  "transfer": 8.0,
                  "vcpus": 8
              },
              {
                  "available": false,
                  "disk": 640,
                  "memory": 65536,
                  "price_hourly": 0.95238,
                  "price_monthly": 640.0,
                  "regions": [
                      "ams2",
                      "ams3",
                      "blr1",
                      "fra1",
                      "lon1",
                      "nyc1",
                      "nyc2",
                      "nyc3",
                      "sfo1",
                      "sfo2",
                      "sgp1",
                      "tor1"
                  ],
                  "slug": "64gb",
                  "transfer": 9.0,
                  "vcpus": 20
              },
              {
                  "available": true,
                  "disk": 340,
                  "memory": 131072,
                  "price_hourly": 0.42857,
                  "price_monthly": 960.0,
                  "regions": [],
                  "slug": null,
                  "transfer": 9.0,
                  "vcpus": 16
              },
              {
                  "available": true,
                  "disk": 500,
                  "memory": 229376,
                  "price_hourly": 2.5,
                  "price_monthly": 1680.0,
                  "regions": [],
                  "slug": null,
                  "transfer": 10.0,
                  "vcpus": 32
              }
          ]
      }
      

      It looks like the code will need to be able to handle null slugs. First time I've seen it and I've been running on 1.9.2 for several months without an issue.

      Attachments

        Activity

          People

            Unassigned Unassigned
            chjurado Chava Jurado
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: