HADOOP-14091. AbstractFileSystem implementaion for 'wasbs' scheme. Contributed Varada Hemeswari.
(cherry picked from commit 82607fce39
)
This commit is contained in:
parent
a82480c7d4
commit
b0f8de184a
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.hadoop.fs.azure;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.fs.DelegateToFileSystem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WASB implementation of AbstractFileSystem for wasbs scheme.
|
||||||
|
* This impl delegates to the old FileSystem
|
||||||
|
*/
|
||||||
|
@InterfaceAudience.Public
|
||||||
|
@InterfaceStability.Evolving
|
||||||
|
public class Wasbs extends DelegateToFileSystem {
|
||||||
|
|
||||||
|
Wasbs(final URI theUri, final Configuration conf) throws IOException,
|
||||||
|
URISyntaxException {
|
||||||
|
super(theUri, new NativeAzureFileSystem(), conf, "wasbs", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getUriDefaultPort() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,6 +44,7 @@ import org.apache.hadoop.fs.AbstractFileSystem;
|
||||||
import org.apache.hadoop.fs.FileContext;
|
import org.apache.hadoop.fs.FileContext;
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
|
import org.apache.hadoop.fs.UnsupportedFileSystemException;
|
||||||
import org.apache.hadoop.fs.azure.AzureBlobStorageTestAccount.CreateOptions;
|
import org.apache.hadoop.fs.azure.AzureBlobStorageTestAccount.CreateOptions;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
@ -471,6 +472,62 @@ public class TestWasbUriAndConfiguration {
|
||||||
assertTrue(afs instanceof Wasb);
|
assertTrue(afs instanceof Wasb);
|
||||||
assertEquals(-1, afs.getUri().getPort());
|
assertEquals(-1, afs.getUri().getPort());
|
||||||
} finally {
|
} finally {
|
||||||
|
testAccount.cleanup();
|
||||||
|
FileSystem.closeAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the cases when the scheme specified is 'wasbs'.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testAbstractFileSystemImplementationForWasbsScheme() throws Exception {
|
||||||
|
try {
|
||||||
|
testAccount = AzureBlobStorageTestAccount.createMock();
|
||||||
|
Configuration conf = testAccount.getFileSystem().getConf();
|
||||||
|
String authority = testAccount.getFileSystem().getUri().getAuthority();
|
||||||
|
URI defaultUri = new URI("wasbs", authority, null, null, null);
|
||||||
|
conf.set(FS_DEFAULT_NAME_KEY, defaultUri.toString());
|
||||||
|
conf.set("fs.AbstractFileSystem.wasbs.impl", "org.apache.hadoop.fs.azure.Wasbs");
|
||||||
|
conf.addResource("azure-test.xml");
|
||||||
|
|
||||||
|
FileSystem fs = FileSystem.get(conf);
|
||||||
|
assertTrue(fs instanceof NativeAzureFileSystem);
|
||||||
|
assertEquals("wasbs", fs.getScheme());
|
||||||
|
|
||||||
|
AbstractFileSystem afs = FileContext.getFileContext(conf)
|
||||||
|
.getDefaultFileSystem();
|
||||||
|
assertTrue(afs instanceof Wasbs);
|
||||||
|
assertEquals(-1, afs.getUri().getPort());
|
||||||
|
assertEquals("wasbs", afs.getUri().getScheme());
|
||||||
|
} finally {
|
||||||
|
testAccount.cleanup();
|
||||||
|
FileSystem.closeAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNoAbstractFileSystemImplementationSpecifiedForWasbsScheme() throws Exception {
|
||||||
|
try {
|
||||||
|
testAccount = AzureBlobStorageTestAccount.createMock();
|
||||||
|
Configuration conf = testAccount.getFileSystem().getConf();
|
||||||
|
String authority = testAccount.getFileSystem().getUri().getAuthority();
|
||||||
|
URI defaultUri = new URI("wasbs", authority, null, null, null);
|
||||||
|
conf.set(FS_DEFAULT_NAME_KEY, defaultUri.toString());
|
||||||
|
|
||||||
|
FileSystem fs = FileSystem.get(conf);
|
||||||
|
assertTrue(fs instanceof NativeAzureFileSystem);
|
||||||
|
assertEquals("wasbs", fs.getScheme());
|
||||||
|
|
||||||
|
// should throw if 'fs.AbstractFileSystem.wasbs.impl'' is not specified
|
||||||
|
try{
|
||||||
|
FileContext.getFileContext(conf).getDefaultFileSystem();
|
||||||
|
fail("Should've thrown.");
|
||||||
|
}catch(UnsupportedFileSystemException e){
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
testAccount.cleanup();
|
||||||
FileSystem.closeAll();
|
FileSystem.closeAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue