Skip to content

Commit 6fef6fc

Browse files
xiaoyuyaoajayydv
authored andcommitted
HDDS-1183. Override getDelegationToken API for OzoneFileSystem. Contributed by Xiaoyu Yao.
1 parent 4a3cdde commit 6fef6fc

File tree

5 files changed

+95
-13
lines changed

5 files changed

+95
-13
lines changed

hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/OzoneBlockTokenIdentifier.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.hadoop.io.Text;
2929
import org.apache.hadoop.security.UserGroupInformation;
3030
import org.apache.hadoop.security.token.TokenIdentifier;
31+
import org.apache.hadoop.security.token.Token.TrivialRenewer;
3132

3233
import java.io.DataInput;
3334
import java.io.DataInputStream;
@@ -195,5 +196,17 @@ void writeProtobuf(DataOutput out) throws IOException {
195196
}
196197
out.write(builder.build().toByteArray());
197198
}
199+
200+
/**
201+
* Default TrivialRenewer.
202+
*/
203+
@InterfaceAudience.Private
204+
public static class Renewer extends TrivialRenewer {
205+
206+
@Override
207+
protected Text getKind() {
208+
return KIND_NAME;
209+
}
210+
}
198211
}
199212

hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/security/OzoneTokenIdentifier.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,6 @@ public Text getKind() {
6868
return KIND_NAME;
6969
}
7070

71-
/**
72-
* Default TrivialRenewer.
73-
*/
74-
@InterfaceAudience.Private
75-
public static class Renewer extends Token.TrivialRenewer {
76-
77-
@Override
78-
protected Text getKind() {
79-
return KIND_NAME;
80-
}
81-
}
82-
8371
/**
8472
* Overrides default implementation to write using Protobuf.
8573
*

hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
*/
1818
package org.apache.hadoop.fs.ozone;
1919

20+
import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
21+
import org.apache.hadoop.security.token.Token;
22+
2023
import java.io.IOException;
2124
import java.io.InputStream;
2225
import java.util.Iterator;
@@ -52,4 +55,6 @@ public interface OzoneClientAdapter {
5255

5356
Iterator<BasicKeyInfo> listKeys(String pathKey);
5457

58+
Token<OzoneTokenIdentifier> getDelegationToken(String renewer)
59+
throws IOException;
5560
}

hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapterImpl.java

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
import java.util.HashMap;
2323
import java.util.Iterator;
2424

25+
import org.apache.hadoop.classification.InterfaceAudience;
26+
import org.apache.hadoop.conf.Configuration;
2527
import org.apache.hadoop.hdds.client.ReplicationFactor;
2628
import org.apache.hadoop.hdds.client.ReplicationType;
2729
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
30+
import org.apache.hadoop.io.Text;
2831
import org.apache.hadoop.ozone.OzoneConfigKeys;
2932
import org.apache.hadoop.ozone.client.ObjectStore;
3033
import org.apache.hadoop.ozone.client.OzoneBucket;
@@ -35,6 +38,10 @@
3538
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
3639

3740
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
41+
42+
import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
43+
import org.apache.hadoop.security.token.Token;
44+
import org.apache.hadoop.security.token.TokenRenewer;
3845
import org.slf4j.Logger;
3946
import org.slf4j.LoggerFactory;
4047

@@ -251,8 +258,64 @@ public Iterator<BasicKeyInfo> listKeys(String pathKey) {
251258
return new IteratorAdapter(bucket.listKeys(pathKey));
252259
}
253260

261+
@Override
262+
public Token<OzoneTokenIdentifier> getDelegationToken(String renewer)
263+
throws IOException {
264+
Token<OzoneTokenIdentifier> token =
265+
ozoneClient.getObjectStore().getDelegationToken(new Text(renewer));
266+
token.setKind(OzoneTokenIdentifier.KIND_NAME);
267+
return token;
268+
}
269+
270+
/**
271+
* Ozone Delegation Token Renewer.
272+
*/
273+
@InterfaceAudience.Private
274+
public static class Renewer extends TokenRenewer {
275+
276+
//Ensure that OzoneConfiguration files are loaded before trying to use
277+
// the renewer.
278+
static {
279+
OzoneConfiguration.activate();
280+
}
281+
282+
public Text getKind() {
283+
return OzoneTokenIdentifier.KIND_NAME;
284+
}
285+
286+
@Override
287+
public boolean handleKind(Text kind) {
288+
return getKind().equals(kind);
289+
}
290+
291+
@Override
292+
public boolean isManaged(Token<?> token) throws IOException {
293+
return true;
294+
}
295+
296+
@Override
297+
public long renew(Token<?> token, Configuration conf)
298+
throws IOException, InterruptedException {
299+
Token<OzoneTokenIdentifier> ozoneDt =
300+
(Token<OzoneTokenIdentifier>) token;
301+
OzoneClient ozoneClient =
302+
OzoneClientFactory.getRpcClient(conf);
303+
return ozoneClient.getObjectStore().renewDelegationToken(ozoneDt);
304+
}
305+
306+
@Override
307+
public void cancel(Token<?> token, Configuration conf)
308+
throws IOException, InterruptedException {
309+
Token<OzoneTokenIdentifier> ozoneDt =
310+
(Token<OzoneTokenIdentifier>) token;
311+
OzoneClient ozoneClient =
312+
OzoneClientFactory.getRpcClient(conf);
313+
ozoneClient.getObjectStore().cancelDelegationToken(ozoneDt);
314+
}
315+
}
316+
254317
/**
255-
* Adapter to conver OzoneKey to a safe and simple Key implementation.
318+
* Adapter to convert OzoneKey to a safe and simple Key implementation.
256319
*/
257320
public static class IteratorAdapter implements Iterator<BasicKeyInfo> {
258321

hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
import org.apache.hadoop.fs.GlobalStorageStatistics;
4949
import org.apache.hadoop.fs.permission.FsPermission;
5050
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
51+
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
5152
import org.apache.hadoop.security.UserGroupInformation;
53+
import org.apache.hadoop.security.token.Token;
5254
import org.apache.hadoop.util.Progressable;
5355

5456
import com.google.common.base.Preconditions;
@@ -84,6 +86,7 @@ public class OzoneFileSystem extends FileSystem {
8486
private Path workingDir;
8587

8688
private OzoneClientAdapter adapter;
89+
private boolean securityEnabled;
8790

8891

8992
private OzoneFSStorageStatistics storageStatistics;
@@ -156,6 +159,10 @@ public void initialize(URI name, Configuration conf) throws IOException {
156159
} else {
157160
ozoneConfiguration = new OzoneConfiguration(conf);
158161
}
162+
SecurityConfig secConfig = new SecurityConfig(ozoneConfiguration);
163+
if (secConfig.isSecurityEnabled()) {
164+
this.securityEnabled = true;
165+
}
159166
this.adapter = new OzoneClientAdapterImpl(ozoneConfiguration,
160167
volumeStr, bucketStr, storageStatistics);
161168
}
@@ -669,6 +676,12 @@ public Path getWorkingDirectory() {
669676
return workingDir;
670677
}
671678

679+
@Override
680+
public Token<?> getDelegationToken(String renewer) throws IOException {
681+
return securityEnabled? adapter.getDelegationToken(renewer) :
682+
super.getDelegationToken(renewer);
683+
}
684+
672685
/**
673686
* Get the username of the FS.
674687
*

0 commit comments

Comments
 (0)