Authentication Broken in HPCloud
smith1511 opened this issue · comments
HPCloud has added a new field to the service catalog endpoints: PublicURL2 which breaks the JSON -> Object mapping in the Swift impl. (see exception below).
Maybe setting '@JsonIgnoreProperties(ignoreUnknown = true)' would be sufficient?
java.lang.RuntimeException: Error generating response
at org.apache.hadoop.fs.swift.util.JSONUtil.toObject(JSONUtil.java:76)
at org.apache.hadoop.fs.swift.http.SwiftRestClient$10.extractResult(SwiftRestClient.java:1051)
at org.apache.hadoop.fs.swift.http.SwiftRestClient$10.extractResult(SwiftRestClient.java:1013)
at org.apache.hadoop.fs.swift.http.SwiftRestClient.perform(SwiftRestClient.java:1301)
at org.apache.hadoop.fs.swift.http.SwiftRestClient.authenticate(SwiftRestClient.java:1013)
at org.apache.hadoop.fs.swift.http.SwiftRestClient.authIfNeeded(SwiftRestClient.java:1230)
at org.apache.hadoop.fs.swift.http.SwiftRestClient.preRemoteCommand(SwiftRestClient.java:1247)
at org.apache.hadoop.fs.swift.http.SwiftRestClient.headRequest(SwiftRestClient.java:950)
at org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystemStore.getObjectMetadata(SwiftNativeFileSystemStore.java:163)
at org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem.getFileStatus(SwiftNativeFileSystem.java:155)
at org.apache.hadoop.fs.FileSystem.getFileStatus(FileSystem.java:1388)
at org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1057)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:998)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:976)
at org.apache.hadoop.tools.distcp2.GlobbedCopyListing.doBuildListing(GlobbedCopyListing.java:77)
at org.apache.hadoop.tools.distcp2.CopyListing.buildListing(CopyListing.java:81)
at org.apache.hadoop.tools.distcp2.DistCp.createInputFileListing(DistCp.java:325)
at org.apache.hadoop.tools.distcp2.DistCp.execute(DistCp.java:146)
at org.apache.hadoop.tools.distcp2.DistCp.run(DistCp.java:114)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.tools.distcp2.DistCp.main(DistCp.java:371)
Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "publicURL2" (Class org.apache.hadoop.fs.swift.auth.entities.Endpoint), not marked as ignorable
at [Source: java.io.StringReader@7a9300cc; line: 76, column: 24](through reference chain: org.apache.hadoop.fs.swift.auth.AuthenticationWrapper["access"]->org.apache.hadoop.fs.swift.auth.AuthenticationResponse["serviceCatalog"]->org.apache.hadoop.fs.swift.auth.entities.Catalog["endpoints"]->org.apache.hadoop.fs.swift.auth.entities.Endpoint["publicURL2"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:246)
at org.codehaus.jackson.map.deser.StdDeserializer.reportUnknownProperty(StdDeserializer.java:604)
at org.codehaus.jackson.map.deser.StdDeserializer.handleUnknownProperty(StdDeserializer.java:590)
at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:689)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:514)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:120)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:97)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:258)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:362)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:494)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:120)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:97)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:258)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:362)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:494)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:258)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:362)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:494)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2402)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1602)
at org.apache.hadoop.fs.swift.util.JSONUtil.toObject(JSONUtil.java:72)
... 20 more
I should add that I don't believe publicURL2 is valid in the service/endpoint schema so technically HP should fix their implementation.
However being realistic it might make sense to relax the client restrictions, ensuring that required fields are present, but ignoring any additional.