[
https://issues.apache.org/jira/browse/HDFS-5175?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13762421#comment-13762421
]
Chris Nauroth commented on HDFS-5175:
-------------------------------------
Hi Lohit,
{{DFSClient}} currently allows configuration to specify the name of a
{{SocketFactory}} class. It will create an instance of this factory and use it
to create the sockets used for reading by {{DFSInputStream}} and writing by
{{DFSOutputStream}}.
{code}
public DFSClient(URI nameNodeUri, ClientProtocol rpcNamenode,
Configuration conf, FileSystem.Statistics stats)
throws IOException {
// Copy only the required DFSClient configuration
this.dfsClientConf = new Conf(conf);
this.shouldUseLegacyBlockReaderLocal =
this.dfsClientConf.useLegacyBlockReaderLocal;
if (this.dfsClientConf.useLegacyBlockReaderLocal) {
LOG.debug("Using legacy short-circuit local reads.");
}
this.conf = conf;
this.stats = stats;
this.socketFactory = NetUtils.getSocketFactory(conf, ClientProtocol.class);
{code}
>From {{NetUtils}}:
{code}
public static SocketFactory getSocketFactory(Configuration conf,
Class<?> clazz) {
SocketFactory factory = null;
String propValue =
conf.get("hadoop.rpc.socket.factory.class." + clazz.getSimpleName());
if ((propValue != null) && (propValue.length() > 0))
factory = getSocketFactoryFromProperty(conf, propValue);
if (factory == null)
factory = getDefaultSocketFactory(conf);
return factory;
}
{code}
I think you could potentially implement your requirement by writing a custom
subclass of {{SocketFactory}} that calls {{Socket#setTrafficClass}}. Then, in
your configuration, set {{hadoop.rpc.socket.factory.class.ClientProtocol}} to
the fully-qualified name of your class.
Does this help?
> Provide clients a way to set IP header bits on connections
> ----------------------------------------------------------
>
> Key: HDFS-5175
> URL: https://issues.apache.org/jira/browse/HDFS-5175
> Project: Hadoop HDFS
> Issue Type: Bug
> Affects Versions: 2.0.5-alpha
> Reporter: Lohit Vijayarenu
>
> It would be very helpful if we had ability for clients to set IP headers when
> they make socket connections for data transfers. We were looking into setting
> up QoS using DSCP bit and saw that there is no easy way to let clients pass
> down a specific value when clients make connection to DataNode.
> As a quick fix we did something similar to io.file.buffer.size where client
> could pass down DSCP integer value and when DFSClient opens a stream, it
> could set the value on socket using setTrafficClass
> Opening this JIRA to get more inputs from others who have had experience and
> might have already thought about this.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira