DmitryMezhensky / Hadoop-and-Swift-integration

API to run Hadoop MapReduce programs over Swift

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.