You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by vi...@apache.org on 2013/10/30 23:22:15 UTC
svn commit: r1537330 [6/7] - in
/hadoop/common/branches/YARN-321/hadoop-common-project: ./
hadoop-annotations/ hadoop-auth/ hadoop-common/ hadoop-common/dev-support/
hadoop-common/src/ hadoop-common/src/main/bin/ hadoop-common/src/main/conf/
hadoop-com...
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java Wed Oct 30 22:21:59 2013
@@ -216,13 +216,13 @@ public class TestIPC {
}
}
- @Test
+ @Test(timeout=60000)
public void testSerial() throws IOException, InterruptedException {
- testSerial(3, false, 2, 5, 100);
- testSerial(3, true, 2, 5, 10);
+ internalTestSerial(3, false, 2, 5, 100);
+ internalTestSerial(3, true, 2, 5, 10);
}
- public void testSerial(int handlerCount, boolean handlerSleep,
+ public void internalTestSerial(int handlerCount, boolean handlerSleep,
int clientCount, int callerCount, int callCount)
throws IOException, InterruptedException {
Server server = new TestServer(handlerCount, handlerSleep);
@@ -249,7 +249,7 @@ public class TestIPC {
server.stop();
}
- @Test
+ @Test(timeout=60000)
public void testStandAloneClient() throws IOException {
Client client = new Client(LongWritable.class, conf);
InetSocketAddress address = new InetSocketAddress("127.0.0.1", 10);
@@ -383,7 +383,7 @@ public class TestIPC {
}
}
- @Test
+ @Test(timeout=60000)
public void testIOEOnClientWriteParam() throws Exception {
doErrorTest(IOEOnWriteWritable.class,
LongWritable.class,
@@ -391,7 +391,7 @@ public class TestIPC {
LongWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testRTEOnClientWriteParam() throws Exception {
doErrorTest(RTEOnWriteWritable.class,
LongWritable.class,
@@ -399,7 +399,7 @@ public class TestIPC {
LongWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testIOEOnServerReadParam() throws Exception {
doErrorTest(LongWritable.class,
IOEOnReadWritable.class,
@@ -407,7 +407,7 @@ public class TestIPC {
LongWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testRTEOnServerReadParam() throws Exception {
doErrorTest(LongWritable.class,
RTEOnReadWritable.class,
@@ -416,7 +416,7 @@ public class TestIPC {
}
- @Test
+ @Test(timeout=60000)
public void testIOEOnServerWriteResponse() throws Exception {
doErrorTest(LongWritable.class,
LongWritable.class,
@@ -424,7 +424,7 @@ public class TestIPC {
LongWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testRTEOnServerWriteResponse() throws Exception {
doErrorTest(LongWritable.class,
LongWritable.class,
@@ -432,7 +432,7 @@ public class TestIPC {
LongWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testIOEOnClientReadResponse() throws Exception {
doErrorTest(LongWritable.class,
LongWritable.class,
@@ -440,7 +440,7 @@ public class TestIPC {
IOEOnReadWritable.class);
}
- @Test
+ @Test(timeout=60000)
public void testRTEOnClientReadResponse() throws Exception {
doErrorTest(LongWritable.class,
LongWritable.class,
@@ -453,7 +453,7 @@ public class TestIPC {
* that a ping should have been sent. This is a reproducer for a
* deadlock seen in one iteration of HADOOP-6762.
*/
- @Test
+ @Test(timeout=60000)
public void testIOEOnWriteAfterPingClient() throws Exception {
// start server
Client.setPingInterval(conf, 100);
@@ -481,7 +481,7 @@ public class TestIPC {
* Test that, if the socket factory throws an IOE, it properly propagates
* to the client.
*/
- @Test
+ @Test(timeout=60000)
public void testSocketFactoryException() throws IOException {
SocketFactory mockFactory = mock(SocketFactory.class);
doThrow(new IOException("Injected fault")).when(mockFactory).createSocket();
@@ -503,7 +503,7 @@ public class TestIPC {
* failure is handled properly. This is a regression test for
* HADOOP-7428.
*/
- @Test
+ @Test(timeout=60000)
public void testRTEDuringConnectionSetup() throws IOException {
// Set up a socket factory which returns sockets which
// throw an RTE when setSoTimeout is called.
@@ -544,7 +544,7 @@ public class TestIPC {
}
}
- @Test
+ @Test(timeout=60000)
public void testIpcTimeout() throws IOException {
// start server
Server server = new TestServer(1, true);
@@ -566,7 +566,7 @@ public class TestIPC {
addr, null, null, 3*PING_INTERVAL+MIN_SLEEP_TIME, conf);
}
- @Test
+ @Test(timeout=60000)
public void testIpcConnectTimeout() throws IOException {
// start server
Server server = new TestServer(1, true);
@@ -670,31 +670,31 @@ public class TestIPC {
return FD_DIR.list().length;
}
- @Test
+ @Test(timeout=60000)
public void testIpcFromHadoop_0_18_13() throws IOException {
doIpcVersionTest(NetworkTraces.HADOOP_0_18_3_RPC_DUMP,
NetworkTraces.RESPONSE_TO_HADOOP_0_18_3_RPC);
}
- @Test
+ @Test(timeout=60000)
public void testIpcFromHadoop0_20_3() throws IOException {
doIpcVersionTest(NetworkTraces.HADOOP_0_20_3_RPC_DUMP,
NetworkTraces.RESPONSE_TO_HADOOP_0_20_3_RPC);
}
- @Test
+ @Test(timeout=60000)
public void testIpcFromHadoop0_21_0() throws IOException {
doIpcVersionTest(NetworkTraces.HADOOP_0_21_0_RPC_DUMP,
NetworkTraces.RESPONSE_TO_HADOOP_0_21_0_RPC);
}
- @Test
+ @Test(timeout=60000)
public void testHttpGetResponse() throws IOException {
doIpcVersionTest("GET / HTTP/1.0\r\n\r\n".getBytes(),
Server.RECEIVED_HTTP_REQ_RESPONSE.getBytes());
}
- @Test
+ @Test(timeout=60000)
public void testConnectionRetriesOnSocketTimeoutExceptions() throws IOException {
Configuration conf = new Configuration();
// set max retries to 0
@@ -720,7 +720,7 @@ public class TestIPC {
* (1) the rpc server uses the call id/retry provided by the rpc client, and
* (2) the rpc client receives the same call id/retry from the rpc server.
*/
- @Test
+ @Test(timeout=60000)
public void testCallIdAndRetry() throws IOException {
final CallInfo info = new CallInfo();
@@ -772,7 +772,7 @@ public class TestIPC {
/**
* Test the retry count while used in a retry proxy.
*/
- @Test
+ @Test(timeout=60000)
public void testRetryProxy() throws IOException {
final Client client = new Client(LongWritable.class, conf);
@@ -785,7 +785,9 @@ public class TestIPC {
}
};
- final int totalRetry = 256;
+ // try more times, so it is easier to find race condition bug
+ // 10000 times runs about 6s on a core i7 machine
+ final int totalRetry = 10000;
DummyProtocol proxy = (DummyProtocol) Proxy.newProxyInstance(
DummyProtocol.class.getClassLoader(),
new Class[] { DummyProtocol.class }, new TestInvocationHandler(client,
@@ -807,7 +809,7 @@ public class TestIPC {
/**
* Test if the rpc server gets the default retry count (0) from client.
*/
- @Test
+ @Test(timeout=60000)
public void testInitialCallRetryCount() throws IOException {
// Override client to store the call id
final Client client = new Client(LongWritable.class, conf);
@@ -838,7 +840,7 @@ public class TestIPC {
/**
* Test if the rpc server gets the retry count from client.
*/
- @Test
+ @Test(timeout=60000)
public void testCallRetryCount() throws IOException {
final int retryCount = 255;
// Override client to store the call id
@@ -873,7 +875,7 @@ public class TestIPC {
* even if multiple threads are using the same client.
* @throws InterruptedException
*/
- @Test
+ @Test(timeout=60000)
public void testUniqueSequentialCallIds()
throws IOException, InterruptedException {
int serverThreads = 10, callerCount = 100, perCallerCallCount = 100;
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/filter/TestPatternFilter.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/filter/TestPatternFilter.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/filter/TestPatternFilter.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/filter/TestPatternFilter.java Wed Oct 30 22:21:59 2013
@@ -23,9 +23,11 @@ import java.util.List;
import org.apache.commons.configuration.SubsetConfiguration;
import org.junit.Test;
+
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import org.apache.hadoop.metrics2.MetricsFilter;
import org.apache.hadoop.metrics2.MetricsRecord;
import org.apache.hadoop.metrics2.MetricsTag;
import org.apache.hadoop.metrics2.impl.ConfigBuilder;
@@ -53,7 +55,7 @@ public class TestPatternFilter {
.add("p.include.tags", "foo:f").subset("p");
shouldAccept(wl, "foo");
shouldAccept(wl, Arrays.asList(tag("bar", "", ""),
- tag("foo", "", "f")));
+ tag("foo", "", "f")), new boolean[] {false, true});
shouldAccept(wl, mockMetricsRecord("foo", Arrays.asList(
tag("bar", "", ""), tag("foo", "", "f"))));
shouldReject(wl, "bar");
@@ -78,7 +80,7 @@ public class TestPatternFilter {
tag("bar", "", ""))));
shouldReject(bl, "foo");
shouldReject(bl, Arrays.asList(tag("bar", "", ""),
- tag("foo", "", "f")));
+ tag("foo", "", "f")), new boolean[] {true, false});
shouldReject(bl, mockMetricsRecord("foo", Arrays.asList(
tag("bar", "", ""))));
shouldReject(bl, mockMetricsRecord("bar", Arrays.asList(
@@ -125,15 +127,61 @@ public class TestPatternFilter {
shouldAccept(c, mockMetricsRecord("foo", Arrays.asList(
tag("foo", "", "f"))));
}
-
+
static void shouldAccept(SubsetConfiguration conf, String s) {
assertTrue("accepts "+ s, newGlobFilter(conf).accepts(s));
assertTrue("accepts "+ s, newRegexFilter(conf).accepts(s));
}
+ // Version for one tag:
static void shouldAccept(SubsetConfiguration conf, List<MetricsTag> tags) {
- assertTrue("accepts "+ tags, newGlobFilter(conf).accepts(tags));
- assertTrue("accepts "+ tags, newRegexFilter(conf).accepts(tags));
+ shouldAcceptImpl(true, conf, tags, new boolean[] {true});
+ }
+ // Version for multiple tags:
+ static void shouldAccept(SubsetConfiguration conf, List<MetricsTag> tags,
+ boolean[] expectedAcceptedSpec) {
+ shouldAcceptImpl(true, conf, tags, expectedAcceptedSpec);
+ }
+
+ // Version for one tag:
+ static void shouldReject(SubsetConfiguration conf, List<MetricsTag> tags) {
+ shouldAcceptImpl(false, conf, tags, new boolean[] {false});
+ }
+ // Version for multiple tags:
+ static void shouldReject(SubsetConfiguration conf, List<MetricsTag> tags,
+ boolean[] expectedAcceptedSpec) {
+ shouldAcceptImpl(false, conf, tags, expectedAcceptedSpec);
+ }
+
+ private static void shouldAcceptImpl(final boolean expectAcceptList,
+ SubsetConfiguration conf, List<MetricsTag> tags, boolean[] expectedAcceptedSpec) {
+ final MetricsFilter globFilter = newGlobFilter(conf);
+ final MetricsFilter regexFilter = newRegexFilter(conf);
+
+ // Test acceptance of the tag list:
+ assertEquals("accepts "+ tags, expectAcceptList, globFilter.accepts(tags));
+ assertEquals("accepts "+ tags, expectAcceptList, regexFilter.accepts(tags));
+
+ // Test results on each of the individual tags:
+ int acceptedCount = 0;
+ for (int i=0; i<tags.size(); i++) {
+ MetricsTag tag = tags.get(i);
+ boolean actGlob = globFilter.accepts(tag);
+ boolean actRegex = regexFilter.accepts(tag);
+ assertEquals("accepts "+tag, expectedAcceptedSpec[i], actGlob);
+ // Both the filters should give the same result:
+ assertEquals(actGlob, actRegex);
+ if (actGlob) {
+ acceptedCount++;
+ }
+ }
+ if (expectAcceptList) {
+ // At least one individual tag should be accepted:
+ assertTrue("No tag of the following accepted: " + tags, acceptedCount > 0);
+ } else {
+ // At least one individual tag should be rejected:
+ assertTrue("No tag of the following rejected: " + tags, acceptedCount < tags.size());
+ }
}
/**
@@ -152,11 +200,6 @@ public class TestPatternFilter {
assertTrue("rejects "+ s, !newRegexFilter(conf).accepts(s));
}
- static void shouldReject(SubsetConfiguration conf, List<MetricsTag> tags) {
- assertTrue("rejects "+ tags, !newGlobFilter(conf).accepts(tags));
- assertTrue("rejects "+ tags, !newRegexFilter(conf).accepts(tags));
- }
-
/**
* Asserts that filters with the given configuration reject the given record.
*
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/StaticMapping.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/StaticMapping.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/StaticMapping.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/StaticMapping.java Wed Oct 30 22:21:59 2013
@@ -152,4 +152,10 @@ public class StaticMapping extends Abstr
// reloadCachedMappings does nothing for StaticMapping; there is
// nowhere to reload from since all data is in memory.
}
+
+ @Override
+ public void reloadCachedMappings(List<String> names) {
+ // reloadCachedMappings does nothing for StaticMapping; there is
+ // nowhere to reload from since all data is in memory.
+ }
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestSwitchMapping.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestSwitchMapping.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestSwitchMapping.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestSwitchMapping.java Wed Oct 30 22:21:59 2013
@@ -120,5 +120,9 @@ public class TestSwitchMapping extends A
@Override
public void reloadCachedMappings() {
}
+
+ @Override
+ public void reloadCachedMappings(List<String> names) {
+ }
}
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java Wed Oct 30 22:21:59 2013
@@ -16,11 +16,21 @@
*/
package org.apache.hadoop.security;
-import static org.junit.Assert.*;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.ipc.TestSaslRPC;
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
+import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
+import org.apache.hadoop.security.authentication.util.KerberosName;
+import org.apache.hadoop.security.token.Token;
+import org.apache.hadoop.security.token.TokenIdentifier;
+import org.apache.hadoop.util.Shell;
import org.junit.*;
-import static org.mockito.Mockito.*;
-
+import javax.security.auth.Subject;
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.LoginContext;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -29,21 +39,13 @@ import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
-import javax.security.auth.Subject;
-import javax.security.auth.login.AppConfigurationEntry;
-import javax.security.auth.login.LoginContext;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.io.Text;
-import org.apache.hadoop.metrics2.MetricsRecordBuilder;
-import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
-import org.apache.hadoop.security.authentication.util.KerberosName;
-import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.security.token.TokenIdentifier;
-import static org.apache.hadoop.test.MetricsAsserts.*;
-import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTH_TO_LOCAL;
-import org.apache.hadoop.util.Shell;
+import static org.apache.hadoop.ipc.TestSaslRPC.*;
+import static org.apache.hadoop.security.token.delegation.TestDelegationToken.TestDelegationTokenIdentifier;
+import static org.apache.hadoop.test.MetricsAsserts.*;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class TestUserGroupInformation {
final private static String USER_NAME = "user1@HADOOP.APACHE.ORG";
@@ -750,4 +752,29 @@ public class TestUserGroupInformation {
UserGroupInformation.setLoginUser(ugi);
assertEquals(ugi, UserGroupInformation.getLoginUser());
}
+
+ /**
+ * In some scenario, such as HA, delegation tokens are associated with a
+ * logical name. The tokens are cloned and are associated with the
+ * physical address of the server where the service is provided.
+ * This test ensures cloned delegated tokens are locally used
+ * and are not returned in {@link UserGroupInformation#getCredentials()}
+ */
+ @Test
+ public void testPrivateTokenExclusion() throws Exception {
+ UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
+ TestTokenIdentifier tokenId = new TestTokenIdentifier();
+ Token<TestTokenIdentifier> token = new Token<TestTokenIdentifier>(
+ tokenId.getBytes(), "password".getBytes(),
+ tokenId.getKind(), null);
+ ugi.addToken(new Text("regular-token"), token);
+
+ // Now add cloned private token
+ ugi.addToken(new Text("private-token"), new Token.PrivateToken<TestTokenIdentifier>(token));
+ ugi.addToken(new Text("private-token1"), new Token.PrivateToken<TestTokenIdentifier>(token));
+
+ // Ensure only non-private tokens are returned
+ Collection<Token<? extends TokenIdentifier>> tokens = ugi.getCredentials().getAllTokens();
+ assertEquals(1, tokens.size());
+ }
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/KeyStoreTestUtil.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/KeyStoreTestUtil.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/KeyStoreTestUtil.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/KeyStoreTestUtil.java Wed Oct 30 22:21:59 2013
@@ -145,6 +145,28 @@ public class KeyStoreTestUtil {
saveKeyStore(ks, filename, password);
}
+ /**
+ * Creates a keystore with a single key and saves it to a file.
+ *
+ * @param filename String file to save
+ * @param password String store password to set on keystore
+ * @param keyPassword String key password to set on key
+ * @param alias String alias to use for the key
+ * @param privateKey Key to save in keystore
+ * @param cert Certificate to use as certificate chain associated to key
+ * @throws GeneralSecurityException for any error with the security APIs
+ * @throws IOException if there is an I/O error saving the file
+ */
+ public static void createKeyStore(String filename,
+ String password, String keyPassword, String alias,
+ Key privateKey, Certificate cert)
+ throws GeneralSecurityException, IOException {
+ KeyStore ks = createEmptyKeyStore();
+ ks.setKeyEntry(alias, privateKey, keyPassword.toCharArray(),
+ new Certificate[]{cert});
+ saveKeyStore(ks, filename, password);
+ }
+
public static void createTrustStore(String filename,
String password, String alias,
Certificate cert)
@@ -178,6 +200,19 @@ public class KeyStoreTestUtil {
f.delete();
}
+ /**
+ * Performs complete setup of SSL configuration in preparation for testing an
+ * SSLFactory. This includes keys, certs, keystores, truststores, the server
+ * SSL configuration file, the client SSL configuration file, and the master
+ * configuration file read by the SSLFactory.
+ *
+ * @param keystoresDir String directory to save keystores
+ * @param sslConfDir String directory to save SSL configuration files
+ * @param conf Configuration master configuration to be used by an SSLFactory,
+ * which will be mutated by this method
+ * @param useClientCert boolean true to make the client present a cert in the
+ * SSL handshake
+ */
public static void setupSSLConfig(String keystoresDir, String sslConfDir,
Configuration conf, boolean useClientCert)
throws Exception {
@@ -213,58 +248,115 @@ public class KeyStoreTestUtil {
KeyStoreTestUtil.createTrustStore(trustKS, trustPassword, certs);
- Configuration clientSSLConf = new Configuration(false);
- clientSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.CLIENT,
- FileBasedKeyStoresFactory.SSL_KEYSTORE_LOCATION_TPL_KEY), clientKS);
- clientSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.CLIENT,
- FileBasedKeyStoresFactory.SSL_KEYSTORE_PASSWORD_TPL_KEY), clientPassword);
- clientSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.CLIENT,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_LOCATION_TPL_KEY), trustKS);
- clientSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.CLIENT,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_PASSWORD_TPL_KEY), trustPassword);
- clientSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.CLIENT,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_RELOAD_INTERVAL_TPL_KEY), "1000");
+ Configuration clientSSLConf = createClientSSLConfig(clientKS, clientPassword,
+ clientPassword, trustKS);
+ Configuration serverSSLConf = createServerSSLConfig(serverKS, serverPassword,
+ serverPassword, trustKS);
- Configuration serverSSLConf = new Configuration(false);
- serverSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.SERVER,
- FileBasedKeyStoresFactory.SSL_KEYSTORE_LOCATION_TPL_KEY), serverKS);
- serverSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.SERVER,
- FileBasedKeyStoresFactory.SSL_KEYSTORE_PASSWORD_TPL_KEY), serverPassword);
- serverSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.SERVER,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_LOCATION_TPL_KEY), trustKS);
- serverSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.SERVER,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_PASSWORD_TPL_KEY), trustPassword);
- serverSSLConf.set(FileBasedKeyStoresFactory.resolvePropertyName(
- SSLFactory.Mode.SERVER,
- FileBasedKeyStoresFactory.SSL_TRUSTSTORE_RELOAD_INTERVAL_TPL_KEY), "1000");
+ saveConfig(sslClientConfFile, clientSSLConf);
+ saveConfig(sslServerConfFile, serverSSLConf);
- Writer writer = new FileWriter(sslClientConfFile);
- try {
- clientSSLConf.writeXml(writer);
- } finally {
- writer.close();
+ conf.set(SSLFactory.SSL_HOSTNAME_VERIFIER_KEY, "ALLOW_ALL");
+ conf.set(SSLFactory.SSL_CLIENT_CONF_KEY, sslClientConfFile.getName());
+ conf.set(SSLFactory.SSL_SERVER_CONF_KEY, sslServerConfFile.getName());
+ conf.setBoolean(SSLFactory.SSL_REQUIRE_CLIENT_CERT_KEY, useClientCert);
+ }
+
+ /**
+ * Creates SSL configuration for a client.
+ *
+ * @param clientKS String client keystore file
+ * @param password String store password, or null to avoid setting store
+ * password
+ * @param keyPassword String key password, or null to avoid setting key
+ * password
+ * @param trustKS String truststore file
+ * @return Configuration for client SSL
+ */
+ public static Configuration createClientSSLConfig(String clientKS,
+ String password, String keyPassword, String trustKS) {
+ Configuration clientSSLConf = createSSLConfig(SSLFactory.Mode.CLIENT,
+ clientKS, password, keyPassword, trustKS);
+ return clientSSLConf;
+ }
+
+ /**
+ * Creates SSL configuration for a server.
+ *
+ * @param serverKS String server keystore file
+ * @param password String store password, or null to avoid setting store
+ * password
+ * @param keyPassword String key password, or null to avoid setting key
+ * password
+ * @param trustKS String truststore file
+ * @return Configuration for server SSL
+ */
+ public static Configuration createServerSSLConfig(String serverKS,
+ String password, String keyPassword, String trustKS) throws IOException {
+ Configuration serverSSLConf = createSSLConfig(SSLFactory.Mode.SERVER,
+ serverKS, password, keyPassword, trustKS);
+ return serverSSLConf;
+ }
+
+ /**
+ * Creates SSL configuration.
+ *
+ * @param mode SSLFactory.Mode mode to configure
+ * @param keystore String keystore file
+ * @param password String store password, or null to avoid setting store
+ * password
+ * @param keyPassword String key password, or null to avoid setting key
+ * password
+ * @param trustKS String truststore file
+ * @return Configuration for SSL
+ */
+ private static Configuration createSSLConfig(SSLFactory.Mode mode,
+ String keystore, String password, String keyPassword, String trustKS) {
+ String trustPassword = "trustP";
+
+ Configuration sslConf = new Configuration(false);
+ if (keystore != null) {
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_KEYSTORE_LOCATION_TPL_KEY), keystore);
+ }
+ if (password != null) {
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_KEYSTORE_PASSWORD_TPL_KEY), password);
}
+ if (keyPassword != null) {
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_KEYSTORE_KEYPASSWORD_TPL_KEY),
+ keyPassword);
+ }
+ if (trustKS != null) {
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_TRUSTSTORE_LOCATION_TPL_KEY), trustKS);
+ }
+ if (trustPassword != null) {
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_TRUSTSTORE_PASSWORD_TPL_KEY),
+ trustPassword);
+ }
+ sslConf.set(FileBasedKeyStoresFactory.resolvePropertyName(mode,
+ FileBasedKeyStoresFactory.SSL_TRUSTSTORE_RELOAD_INTERVAL_TPL_KEY), "1000");
- writer = new FileWriter(sslServerConfFile);
+ return sslConf;
+ }
+
+ /**
+ * Saves configuration to a file.
+ *
+ * @param file File to save
+ * @param conf Configuration contents to write to file
+ * @throws IOException if there is an I/O error saving the file
+ */
+ public static void saveConfig(File file, Configuration conf)
+ throws IOException {
+ Writer writer = new FileWriter(file);
try {
- serverSSLConf.writeXml(writer);
+ conf.writeXml(writer);
} finally {
writer.close();
}
-
- conf.set(SSLFactory.SSL_HOSTNAME_VERIFIER_KEY, "ALLOW_ALL");
- conf.set(SSLFactory.SSL_CLIENT_CONF_KEY, sslClientConfFile.getName());
- conf.set(SSLFactory.SSL_SERVER_CONF_KEY, sslServerConfFile.getName());
- conf.setBoolean(SSLFactory.SSL_REQUIRE_CLIENT_CERT_KEY, useClientCert);
}
-
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/TestSSLFactory.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/TestSSLFactory.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/TestSSLFactory.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/ssl/TestSSLFactory.java Wed Oct 30 22:21:59 2013
@@ -29,12 +29,19 @@ import javax.net.ssl.HttpsURLConnection;
import java.io.File;
import java.net.URL;
import java.security.GeneralSecurityException;
+import java.security.KeyPair;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.Map;
public class TestSSLFactory {
private static final String BASEDIR =
System.getProperty("test.build.dir", "target/test-dir") + "/" +
TestSSLFactory.class.getSimpleName();
+ private static final String KEYSTORES_DIR =
+ new File(BASEDIR).getAbsolutePath();
+ private String sslConfsDir;
@BeforeClass
public static void setUp() throws Exception {
@@ -46,18 +53,16 @@ public class TestSSLFactory {
private Configuration createConfiguration(boolean clientCert)
throws Exception {
Configuration conf = new Configuration();
- String keystoresDir = new File(BASEDIR).getAbsolutePath();
- String sslConfsDir = KeyStoreTestUtil.getClasspathDir(TestSSLFactory.class);
- KeyStoreTestUtil.setupSSLConfig(keystoresDir, sslConfsDir, conf, clientCert);
+ KeyStoreTestUtil.setupSSLConfig(KEYSTORES_DIR, sslConfsDir, conf,
+ clientCert);
return conf;
}
@After
@Before
public void cleanUp() throws Exception {
- String keystoresDir = new File(BASEDIR).getAbsolutePath();
- String sslConfsDir = KeyStoreTestUtil.getClasspathDir(TestSSLFactory.class);
- KeyStoreTestUtil.cleanupSSLConfig(keystoresDir, sslConfsDir);
+ sslConfsDir = KeyStoreTestUtil.getClasspathDir(TestSSLFactory.class);
+ KeyStoreTestUtil.cleanupSSLConfig(KEYSTORES_DIR, sslConfsDir);
}
@Test(expected = IllegalStateException.class)
@@ -181,4 +186,90 @@ public class TestSSLFactory {
}
}
+ @Test
+ public void testServerDifferentPasswordAndKeyPassword() throws Exception {
+ checkSSLFactoryInitWithPasswords(SSLFactory.Mode.SERVER, "password",
+ "keyPassword", "password", "keyPassword");
+ }
+
+ @Test
+ public void testServerKeyPasswordDefaultsToPassword() throws Exception {
+ checkSSLFactoryInitWithPasswords(SSLFactory.Mode.SERVER, "password",
+ "password", "password", null);
+ }
+
+ @Test
+ public void testClientDifferentPasswordAndKeyPassword() throws Exception {
+ checkSSLFactoryInitWithPasswords(SSLFactory.Mode.CLIENT, "password",
+ "keyPassword", "password", "keyPassword");
+ }
+
+ @Test
+ public void testClientKeyPasswordDefaultsToPassword() throws Exception {
+ checkSSLFactoryInitWithPasswords(SSLFactory.Mode.CLIENT, "password",
+ "password", "password", null);
+ }
+
+ /**
+ * Checks that SSLFactory initialization is successful with the given
+ * arguments. This is a helper method for writing test cases that cover
+ * different combinations of settings for the store password and key password.
+ * It takes care of bootstrapping a keystore, a truststore, and SSL client or
+ * server configuration. Then, it initializes an SSLFactory. If no exception
+ * is thrown, then initialization was successful.
+ *
+ * @param mode SSLFactory.Mode mode to test
+ * @param password String store password to set on keystore
+ * @param keyPassword String key password to set on keystore
+ * @param confPassword String store password to set in SSL config file, or null
+ * to avoid setting in SSL config file
+ * @param confKeyPassword String key password to set in SSL config file, or
+ * null to avoid setting in SSL config file
+ * @throws Exception for any error
+ */
+ private void checkSSLFactoryInitWithPasswords(SSLFactory.Mode mode,
+ String password, String keyPassword, String confPassword,
+ String confKeyPassword) throws Exception {
+ String keystore = new File(KEYSTORES_DIR, "keystore.jks").getAbsolutePath();
+ String truststore = new File(KEYSTORES_DIR, "truststore.jks")
+ .getAbsolutePath();
+ String trustPassword = "trustP";
+
+ // Create keys, certs, keystore, and truststore.
+ KeyPair keyPair = KeyStoreTestUtil.generateKeyPair("RSA");
+ X509Certificate cert = KeyStoreTestUtil.generateCertificate("CN=Test",
+ keyPair, 30, "SHA1withRSA");
+ KeyStoreTestUtil.createKeyStore(keystore, password, keyPassword, "Test",
+ keyPair.getPrivate(), cert);
+ Map<String, X509Certificate> certs = Collections.singletonMap("server",
+ cert);
+ KeyStoreTestUtil.createTrustStore(truststore, trustPassword, certs);
+
+ // Create SSL configuration file, for either server or client.
+ final String sslConfFileName;
+ final Configuration sslConf;
+ if (mode == SSLFactory.Mode.SERVER) {
+ sslConfFileName = "ssl-server.xml";
+ sslConf = KeyStoreTestUtil.createServerSSLConfig(keystore, confPassword,
+ confKeyPassword, truststore);
+ } else {
+ sslConfFileName = "ssl-client.xml";
+ sslConf = KeyStoreTestUtil.createClientSSLConfig(keystore, confPassword,
+ confKeyPassword, truststore);
+ }
+ KeyStoreTestUtil.saveConfig(new File(sslConfsDir, sslConfFileName), sslConf);
+
+ // Create the master configuration for use by the SSLFactory, which by
+ // default refers to the ssl-server.xml or ssl-client.xml created above.
+ Configuration conf = new Configuration();
+ conf.setBoolean(SSLFactory.SSL_REQUIRE_CLIENT_CERT_KEY, true);
+
+ // Try initializing an SSLFactory.
+ SSLFactory sslFactory = new SSLFactory(mode, conf);
+ try {
+ sslFactory.init();
+ } finally {
+ sslFactory.destroy();
+ }
+ }
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml Wed Oct 30 22:21:59 2013
@@ -69,4 +69,13 @@
<value>simple</value>
</property>
+<property>
+ <name>nfs3.server.port</name>
+ <value>2079</value>
+</property>
+
+<property>
+ <name>nfs3.mountd.port</name>
+ <value>4272</value>
+</property>
</configuration>
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml Wed Oct 30 22:21:59 2013
@@ -601,16 +601,28 @@
<comparators>
<comparator>
<type>RegexpComparator</type>
- <expected-output>^-setrep \[-R\] \[-w\] <rep> <path/file> \.\.\.:( |\t)*Set the replication level of a file.( )*</expected-output>
+ <expected-output>^-setrep \[-R\] \[-w\] <rep> <path> \.\.\.:( |\t)*Set the replication level of a file. If <path> is a directory( )*</expected-output>
</comparator>
<comparator>
<type>RegexpComparator</type>
- <expected-output>^( |\t)*The -R flag requests a recursive change of replication level( )*</expected-output>
+ <expected-output>^( |\t)*then the command recursively changes the replication factor of( )*</expected-output>
</comparator>
<comparator>
<type>RegexpComparator</type>
- <expected-output>^( |\t)*for an entire tree.( )*</expected-output>
+ <expected-output>^( |\t)*all files under the directory tree rooted at <path>\.( )*</expected-output>
</comparator>
+ <comparator>
+ <type>RegexpComparator</type>
+ <expected-output>^( |\t)*The -w flag requests that the command wait for the replication( )*</expected-output>
+ </comparator>
+ <comparator>
+ <type>RegexpComparator</type>
+ <expected-output>^( |\t)*to complete. This can potentially take a very long time\.( )*</expected-output>
+ </comparator>
+ <comparator>
+ <type>RegexpComparator</type>
+ <expected-output>^( |\t)*The -R flag is accepted for backwards compatibility\. It has no effect\.( )*</expected-output>
+ </comparator>
</comparators>
</test>
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/pom.xml
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/pom.xml?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/pom.xml (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/pom.xml Wed Oct 30 22:21:59 2013
@@ -86,13 +86,11 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
- <version>3.6.2.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
- <version>11.0.2</version>
</dependency>
</dependencies>
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/mount/MountResponse.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/mount/MountResponse.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/mount/MountResponse.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/mount/MountResponse.java Wed Oct 30 22:21:59 2013
@@ -19,10 +19,11 @@ package org.apache.hadoop.mount;
import java.util.List;
-import org.apache.hadoop.nfs.security.NfsExports;
+import org.apache.hadoop.nfs.NfsExports;
import org.apache.hadoop.oncrpc.RpcAcceptedReply;
import org.apache.hadoop.oncrpc.XDR;
-import org.apache.hadoop.oncrpc.RpcAuthInfo.AuthFlavor;
+import org.apache.hadoop.oncrpc.security.VerifierNone;
+import org.apache.hadoop.oncrpc.security.RpcAuthInfo.AuthFlavor;
/**
* Helper class for sending MountResponse
@@ -37,11 +38,10 @@ public class MountResponse {
/** Response for RPC call {@link MountInterface.MNTPROC#MNT} */
public static XDR writeMNTResponse(int status, XDR xdr, int xid,
byte[] handle) {
- RpcAcceptedReply.voidReply(xdr, xid);
+ RpcAcceptedReply.getAcceptInstance(xid, new VerifierNone()).write(xdr);
xdr.writeInt(status);
if (status == MNT_OK) {
- xdr.writeInt(handle.length);
- xdr.writeFixedOpaque(handle);
+ xdr.writeVariableOpaque(handle);
// Only MountV3 returns a list of supported authFlavors
xdr.writeInt(1);
xdr.writeInt(AuthFlavor.AUTH_SYS.getValue());
@@ -51,7 +51,7 @@ public class MountResponse {
/** Response for RPC call {@link MountInterface.MNTPROC#DUMP} */
public static XDR writeMountList(XDR xdr, int xid, List<MountEntry> mounts) {
- RpcAcceptedReply.voidReply(xdr, xid);
+ RpcAcceptedReply.getAcceptInstance(xid, new VerifierNone()).write(xdr);
for (MountEntry mountEntry : mounts) {
xdr.writeBoolean(true); // Value follows yes
xdr.writeString(mountEntry.host());
@@ -66,7 +66,7 @@ public class MountResponse {
List<NfsExports> hostMatcher) {
assert (exports.size() == hostMatcher.size());
- RpcAcceptedReply.voidReply(xdr, xid);
+ RpcAcceptedReply.getAcceptInstance(xid, new VerifierNone()).write(xdr);
for (int i = 0; i < exports.size(); i++) {
xdr.writeBoolean(true); // Value follows - yes
xdr.writeString(exports.get(i));
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/IdUserGroup.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/IdUserGroup.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/IdUserGroup.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/IdUserGroup.java Wed Oct 30 22:21:59 2013
@@ -147,8 +147,10 @@ public class IdUserGroup {
synchronized public String getUserName(int uid, String unknown) {
checkAndUpdateMaps();
- String uname = uidNameMap.get(Integer.valueOf(uid));
+ String uname = uidNameMap.get(uid);
if (uname == null) {
+ LOG.warn("Can't find user name for uid " + uid
+ + ". Use default user name " + unknown);
uname = unknown;
}
return uname;
@@ -156,8 +158,10 @@ public class IdUserGroup {
synchronized public String getGroupName(int gid, String unknown) {
checkAndUpdateMaps();
- String gname = gidNameMap.get(Integer.valueOf(gid));
+ String gname = gidNameMap.get(gid);
if (gname == null) {
+ LOG.warn("Can't find group name for gid " + gid
+ + ". Use default group name " + unknown);
gname = unknown;
}
return gname;
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java Wed Oct 30 22:21:59 2013
@@ -19,15 +19,11 @@ package org.apache.hadoop.nfs.nfs3;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mount.MountdBase;
-import org.apache.hadoop.oncrpc.RpcFrameDecoder;
import org.apache.hadoop.oncrpc.RpcProgram;
import org.apache.hadoop.oncrpc.SimpleTcpServer;
-import org.apache.hadoop.oncrpc.SimpleTcpServerHandler;
import org.apache.hadoop.portmap.PortmapMapping;
-import org.jboss.netty.channel.ChannelPipeline;
-import org.jboss.netty.channel.ChannelPipelineFactory;
-import org.jboss.netty.channel.Channels;
/**
* Nfs server. Supports NFS v3 using {@link RpcProgram}.
@@ -38,6 +34,7 @@ public abstract class Nfs3Base {
public static final Log LOG = LogFactory.getLog(Nfs3Base.class);
private final MountdBase mountd;
private final RpcProgram rpcProgram;
+ private final int nfsPort;
public MountdBase getMountBase() {
return mountd;
@@ -47,9 +44,17 @@ public abstract class Nfs3Base {
return rpcProgram;
}
+ protected Nfs3Base(MountdBase mountd, RpcProgram program, Configuration conf) {
+ this.mountd = mountd;
+ this.rpcProgram = program;
+ this.nfsPort = conf.getInt("nfs3.server.port", Nfs3Constant.PORT);
+ LOG.info("NFS server port set to: "+nfsPort);
+ }
+
protected Nfs3Base(MountdBase mountd, RpcProgram program) {
this.mountd = mountd;
this.rpcProgram = program;
+ this.nfsPort = Nfs3Constant.PORT;
}
public void start(boolean register) {
@@ -61,19 +66,8 @@ public abstract class Nfs3Base {
}
private void startTCPServer() {
- SimpleTcpServer tcpServer = new SimpleTcpServer(Nfs3Constant.PORT,
- rpcProgram, 0) {
- @Override
- public ChannelPipelineFactory getPipelineFactory() {
- return new ChannelPipelineFactory() {
- @Override
- public ChannelPipeline getPipeline() {
- return Channels.pipeline(new RpcFrameDecoder(),
- new SimpleTcpServerHandler(rpcProgram));
- }
- };
- }
- };
+ SimpleTcpServer tcpServer = new SimpleTcpServer(nfsPort,
+ rpcProgram, 0);
tcpServer.run();
}
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Constant.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Constant.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Constant.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Constant.java Wed Oct 30 22:21:59 2013
@@ -205,4 +205,7 @@ public class Nfs3Constant {
public static final String FILE_DUMP_DIR_DEFAULT = "/tmp/.hdfs-nfs";
public static final String ENABLE_FILE_DUMP_KEY = "dfs.nfs3.enableDump";
public static final boolean ENABLE_FILE_DUMP_DEFAULT = true;
+
+ public final static String UNKNOWN_USER = "nobody";
+ public final static String UNKNOWN_GROUP = "nobody";
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3FileAttributes.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3FileAttributes.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3FileAttributes.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3FileAttributes.java Wed Oct 30 22:21:59 2013
@@ -72,19 +72,18 @@ public class Nfs3FileAttributes {
}
public Nfs3FileAttributes() {
- this(false, 0, (short)0, 0, 0, 0, 0, 0, 0, 0);
+ this(NfsFileType.NFSREG, 0, (short)0, 0, 0, 0, 0, 0, 0, 0);
}
- public Nfs3FileAttributes(boolean isDir, int nlink, short mode, int uid,
+ public Nfs3FileAttributes(NfsFileType nfsType, int nlink, short mode, int uid,
int gid, long size, long fsid, long fileid, long mtime, long atime) {
- this.type = isDir ? NfsFileType.NFSDIR.toValue() : NfsFileType.NFSREG
- .toValue();
+ this.type = nfsType.toValue();
this.mode = mode;
- this.nlink = isDir ? (nlink + 2) : 1;
+ this.nlink = (type == NfsFileType.NFSDIR.toValue()) ? (nlink + 2) : 1;
this.uid = uid;
this.gid = gid;
this.size = size;
- if(isDir) {
+ if(type == NfsFileType.NFSDIR.toValue()) {
this.size = getDirSize(nlink);
}
this.used = this.size;
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Interface.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Interface.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Interface.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Interface.java Wed Oct 30 22:21:59 2013
@@ -20,67 +20,83 @@ package org.apache.hadoop.nfs.nfs3;
import java.net.InetAddress;
import org.apache.hadoop.nfs.nfs3.response.NFS3Response;
-import org.apache.hadoop.oncrpc.RpcAuthSys;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.SecurityHandler;
import org.jboss.netty.channel.Channel;
/**
* RPC procedures as defined in RFC 1813.
*/
public interface Nfs3Interface {
-
+
/** NULL: Do nothing */
public NFS3Response nullProcedure();
-
+
/** GETATTR: Get file attributes */
- public NFS3Response getattr(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response getattr(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** SETATTR: Set file attributes */
- public NFS3Response setattr(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response setattr(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** LOOKUP: Lookup filename */
- public NFS3Response lookup(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** ACCESS: Check access permission */
- public NFS3Response access(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response lookup(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** ACCESS: Check access permission */
+ public NFS3Response access(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** READ: Read from file */
- public NFS3Response read(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response read(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** WRITE: Write to file */
public NFS3Response write(XDR xdr, Channel channel, int xid,
- RpcAuthSys authSys, InetAddress client);
-
- /** CREATE: Create a file */
- public NFS3Response create(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** MKDIR: Create a directory */
- public NFS3Response mkdir(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** REMOVE: Remove a file */
- public NFS3Response remove(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** RMDIR: Remove a directory */
- public NFS3Response rmdir(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ SecurityHandler securityHandler, InetAddress client);
+
+ /** CREATE: Create a file */
+ public NFS3Response create(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** MKDIR: Create a directory */
+ public NFS3Response mkdir(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** REMOVE: Remove a file */
+ public NFS3Response remove(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** RMDIR: Remove a directory */
+ public NFS3Response rmdir(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** RENAME: Rename a file or directory */
- public NFS3Response rename(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** SYMLINK: Create a symbolic link */
- public NFS3Response symlink(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response rename(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** SYMLINK: Create a symbolic link */
+ public NFS3Response symlink(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** READDIR: Read From directory */
- public NFS3Response readdir(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** FSSTAT: Get dynamic file system information */
- public NFS3Response fsstat(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response readdir(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** FSSTAT: Get dynamic file system information */
+ public NFS3Response fsstat(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** FSINFO: Get static file system information */
- public NFS3Response fsinfo(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
+ public NFS3Response fsinfo(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
/** PATHCONF: Retrieve POSIX information */
- public NFS3Response pathconf(XDR xdr, RpcAuthSys authSys, InetAddress client);
-
- /** COMMIT: Commit cached data on a server to stable storage */
- public NFS3Response commit(XDR xdr, RpcAuthSys authSys, InetAddress client);
+ public NFS3Response pathconf(XDR xdr, SecurityHandler securityHandler,
+ InetAddress client);
+
+ /** COMMIT: Commit cached data on a server to stable storage */
+ public NFS3Response commit(XDR xdr, Channel channel, int xid,
+ SecurityHandler securityHandler, InetAddress client);
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/SYMLINK3Request.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/SYMLINK3Request.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/SYMLINK3Request.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/SYMLINK3Request.java Wed Oct 30 22:21:59 2013
@@ -25,9 +25,9 @@ import org.apache.hadoop.oncrpc.XDR;
* SYMLINK3 Request
*/
public class SYMLINK3Request extends RequestWithHandle {
- private final String name;
+ private final String name; // The name of the link
private final SetAttr3 symAttr;
- private final String symData;
+ private final String symData; // It contains the target
public SYMLINK3Request(XDR xdr) throws IOException {
super(xdr);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/WRITE3Request.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/WRITE3Request.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/WRITE3Request.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/request/WRITE3Request.java Wed Oct 30 22:21:59 2013
@@ -28,8 +28,8 @@ import org.apache.hadoop.oncrpc.XDR;
* WRITE3 Request
*/
public class WRITE3Request extends RequestWithHandle {
- private final long offset;
- private final int count;
+ private long offset;
+ private int count;
private final WriteStableHow stableHow;
private final ByteBuffer data;
@@ -54,10 +54,18 @@ public class WRITE3Request extends Reque
return this.offset;
}
+ public void setOffset(long offset) {
+ this.offset = offset;
+ }
+
public int getCount() {
return this.count;
}
+ public void setCount(int count) {
+ this.count = count;
+ }
+
public WriteStableHow getStableHow() {
return this.stableHow;
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/ACCESS3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/ACCESS3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/ACCESS3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/ACCESS3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* ACCESS3 Response
@@ -43,8 +44,8 @@ public class ACCESS3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true);
postOpAttr.serialize(out);
if (this.getStatus() == Nfs3Status.NFS3_OK) {
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/COMMIT3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/COMMIT3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/COMMIT3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/COMMIT3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3Constant;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* COMMIT3 Response
@@ -47,8 +48,8 @@ public class COMMIT3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
fileWcc.serialize(out);
if (getStatus() == Nfs3Status.NFS3_OK) {
out.writeLongAsHyper(verf);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/CREATE3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/CREATE3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/CREATE3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/CREATE3Response.java Wed Oct 30 22:21:59 2013
@@ -21,6 +21,7 @@ import org.apache.hadoop.nfs.nfs3.FileHa
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* CREATE3 Response
@@ -55,8 +56,8 @@ public class CREATE3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (getStatus() == Nfs3Status.NFS3_OK) {
out.writeBoolean(true); // Handle follows
objHandle.serialize(out);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSINFO3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSINFO3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSINFO3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSINFO3Response.java Wed Oct 30 22:21:59 2013
@@ -21,6 +21,7 @@ import org.apache.hadoop.nfs.NfsTime;
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* FSINFO3 Response
@@ -109,8 +110,8 @@ public class FSINFO3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true);
postOpAttr.serialize(out);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSSTAT3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSSTAT3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSSTAT3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/FSSTAT3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* FSSTAT3 Response
@@ -90,8 +91,8 @@ public class FSSTAT3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true);
if (postOpAttr == null) {
postOpAttr = new Nfs3FileAttributes();
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/GETATTR3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/GETATTR3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/GETATTR3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/GETATTR3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* GETATTR3 Response
@@ -40,8 +41,8 @@ public class GETATTR3Response extends NF
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (getStatus() == Nfs3Status.NFS3_OK) {
postOpAttr.serialize(out);
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/LOOKUP3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/LOOKUP3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/LOOKUP3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/LOOKUP3Response.java Wed Oct 30 22:21:59 2013
@@ -23,6 +23,7 @@ import org.apache.hadoop.nfs.nfs3.FileHa
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* LOOKUP3 Response
@@ -61,8 +62,8 @@ public class LOOKUP3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (this.status == Nfs3Status.NFS3_OK) {
fileHandle.serialize(out);
out.writeBoolean(true); // Attribute follows
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/MKDIR3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/MKDIR3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/MKDIR3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/MKDIR3Response.java Wed Oct 30 22:21:59 2013
@@ -21,6 +21,7 @@ import org.apache.hadoop.nfs.nfs3.FileHa
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* MKDIR3 Response
@@ -55,8 +56,8 @@ public class MKDIR3Response extends NFS3
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (getStatus() == Nfs3Status.NFS3_OK) {
out.writeBoolean(true); // Handle follows
objFileHandle.serialize(out);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/NFS3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/NFS3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/NFS3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/NFS3Response.java Wed Oct 30 22:21:59 2013
@@ -19,11 +19,13 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.oncrpc.RpcAcceptedReply;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
- * Abstract class for a NFSv3 response
+ * Base class for a NFSv3 response. This class and its subclasses contain
+ * the response from NFSv3 handlers.
*/
-abstract public class NFS3Response {
+public class NFS3Response {
protected int status;
public NFS3Response(int status) {
@@ -38,8 +40,13 @@ abstract public class NFS3Response {
this.status = status;
}
- public XDR send(XDR out, int xid) {
- RpcAcceptedReply.voidReply(out, xid);
+ /**
+ * Write the response, along with the rpc header (including verifier), to the
+ * XDR.
+ */
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ RpcAcceptedReply reply = RpcAcceptedReply.getAcceptInstance(xid, verifier);
+ reply.write(out);
out.writeInt(this.getStatus());
return out;
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/PATHCONF3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/PATHCONF3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/PATHCONF3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/PATHCONF3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* PATHCONF3 Response
@@ -77,8 +78,8 @@ public class PATHCONF3Response extends N
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true);
postOpAttr.serialize(out);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READ3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READ3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READ3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READ3Response.java Wed Oct 30 22:21:59 2013
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* READ3 Response
@@ -62,8 +63,8 @@ public class READ3Response extends NFS3R
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true); // Attribute follows
postOpAttr.serialize(out);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIR3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIR3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIR3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIR3Response.java Wed Oct 30 22:21:59 2013
@@ -24,6 +24,9 @@ import java.util.List;
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
+
+import com.google.common.annotations.VisibleForTesting;
/**
* READDIR3 Response
@@ -48,7 +51,8 @@ public class READDIR3Response extends NF
return fileId;
}
- String getName() {
+ @VisibleForTesting
+ public String getName() {
return name;
}
@@ -65,6 +69,11 @@ public class READDIR3Response extends NF
this.entries = Collections.unmodifiableList(Arrays.asList(entries));
this.eof = eof;
}
+
+ @VisibleForTesting
+ public List<Entry3> getEntries() {
+ return this.entries;
+ }
}
public READDIR3Response(int status) {
@@ -96,8 +105,8 @@ public class READDIR3Response extends NF
}
@Override
- public XDR send(XDR xdr, int xid) {
- super.send(xdr, xid);
+ public XDR writeHeaderAndResponse(XDR xdr, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(xdr, xid, verifier);
xdr.writeBoolean(true); // Attributes follow
postOpDirAttr.serialize(xdr);
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIRPLUS3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIRPLUS3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIRPLUS3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READDIRPLUS3Response.java Wed Oct 30 22:21:59 2013
@@ -25,6 +25,9 @@ import org.apache.hadoop.nfs.nfs3.FileHa
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
+
+import com.google.common.annotations.VisibleForTesting;
/**
* READDIRPLUS3 Response
@@ -50,6 +53,11 @@ public class READDIRPLUS3Response exten
this.objFileHandle = objFileHandle;
}
+ @VisibleForTesting
+ public String getName() {
+ return name;
+ }
+
void seralize(XDR xdr) {
xdr.writeLongAsHyper(fileId);
xdr.writeString(name);
@@ -70,7 +78,8 @@ public class READDIRPLUS3Response exten
this.eof = eof;
}
- List<EntryPlus3> getEntries() {
+ @VisibleForTesting
+ public List<EntryPlus3> getEntries() {
return entries;
}
@@ -79,6 +88,11 @@ public class READDIRPLUS3Response exten
}
}
+ @VisibleForTesting
+ public DirListPlus3 getDirListPlus() {
+ return dirListPlus;
+ }
+
public READDIRPLUS3Response(int status) {
this(status, null, 0, null);
}
@@ -92,8 +106,8 @@ public class READDIRPLUS3Response exten
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true); // attributes follow
if (postOpDirAttr == null) {
postOpDirAttr = new Nfs3FileAttributes();
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READLINK3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READLINK3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READLINK3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/READLINK3Response.java Wed Oct 30 22:21:59 2013
@@ -20,6 +20,7 @@ package org.apache.hadoop.nfs.nfs3.respo
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* READLINK3 Response
@@ -41,12 +42,12 @@ public class READLINK3Response extends N
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
out.writeBoolean(true); // Attribute follows
postOpSymlinkAttr.serialize(out);
if (getStatus() == Nfs3Status.NFS3_OK) {
- out.writeFixedOpaque(path, path.length);
+ out.writeVariableOpaque(path);
}
return out;
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/REMOVE3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/REMOVE3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/REMOVE3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/REMOVE3Response.java Wed Oct 30 22:21:59 2013
@@ -18,6 +18,7 @@
package org.apache.hadoop.nfs.nfs3.response;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* REMOVE3 Response
@@ -35,8 +36,8 @@ public class REMOVE3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (dirWcc == null) {
dirWcc = new WccData(null, null);
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RENAME3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RENAME3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RENAME3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RENAME3Response.java Wed Oct 30 22:21:59 2013
@@ -18,6 +18,7 @@
package org.apache.hadoop.nfs.nfs3.response;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* RENAME3 Response
@@ -45,8 +46,8 @@ public class RENAME3Response extends NFS
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
fromDirWcc.serialize(out);
toDirWcc.serialize(out);
return out;
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RMDIR3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RMDIR3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RMDIR3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/RMDIR3Response.java Wed Oct 30 22:21:59 2013
@@ -18,6 +18,7 @@
package org.apache.hadoop.nfs.nfs3.response;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* RMDIR3 Response
@@ -39,8 +40,8 @@ public class RMDIR3Response extends NFS3
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
dirWcc.serialize(out);
return out;
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SETATTR3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SETATTR3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SETATTR3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SETATTR3Response.java Wed Oct 30 22:21:59 2013
@@ -18,6 +18,7 @@
package org.apache.hadoop.nfs.nfs3.response;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* SETATTR3 Response
@@ -39,8 +40,8 @@ public class SETATTR3Response extends NF
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
wccData.serialize(out);
return out;
}
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SYMLINK3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SYMLINK3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SYMLINK3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/SYMLINK3Response.java Wed Oct 30 22:21:59 2013
@@ -21,6 +21,7 @@ import org.apache.hadoop.nfs.nfs3.FileHa
import org.apache.hadoop.nfs.nfs3.Nfs3FileAttributes;
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* SYMLINK3 Response
@@ -55,14 +56,14 @@ public class SYMLINK3Response extends NF
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
if (this.getStatus() == Nfs3Status.NFS3_OK) {
out.writeBoolean(true);
objFileHandle.serialize(out);
+ out.writeBoolean(true);
objPostOpAttr.serialize(out);
}
- out.writeBoolean(true);
dirWcc.serialize(out);
return out;
Modified: hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/WRITE3Response.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/WRITE3Response.java?rev=1537330&r1=1537329&r2=1537330&view=diff
==============================================================================
--- hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/WRITE3Response.java (original)
+++ hadoop/common/branches/YARN-321/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/response/WRITE3Response.java Wed Oct 30 22:21:59 2013
@@ -21,6 +21,7 @@ import org.apache.hadoop.nfs.nfs3.Nfs3Co
import org.apache.hadoop.nfs.nfs3.Nfs3Status;
import org.apache.hadoop.nfs.nfs3.Nfs3Constant.WriteStableHow;
import org.apache.hadoop.oncrpc.XDR;
+import org.apache.hadoop.oncrpc.security.Verifier;
/**
* WRITE3 Response
@@ -58,8 +59,8 @@ public class WRITE3Response extends NFS3
}
@Override
- public XDR send(XDR out, int xid) {
- super.send(out, xid);
+ public XDR writeHeaderAndResponse(XDR out, int xid, Verifier verifier) {
+ super.writeHeaderAndResponse(out, xid, verifier);
fileWcc.serialize(out);
if (getStatus() == Nfs3Status.NFS3_OK) {
out.writeInt(count);