Skip to content

Commit bd579b3

Browse files
authored
HDDS-12646. Improve OM decommission check (apache#8122)
1 parent 482024e commit bd579b3

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestAddRemoveOzoneManager.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,11 +351,18 @@ public void testForceBootstrap() throws Exception {
351351
@Test
352352
public void testDecommission() throws Exception {
353353
setupCluster(3);
354-
user = UserGroupInformation.getCurrentUser();
355354

356-
// Stop the 3rd OM and decommission it
355+
user = UserGroupInformation.createUserForTesting("user", new String[]{});
356+
// Stop the 3rd OM and decommission it using non-privileged user
357357
String omNodeId3 = cluster.getOzoneManager(2).getOMNodeId();
358358
cluster.stopOzoneManager(omNodeId3);
359+
// decommission should fail
360+
assertThrows(IOException.class, () -> decommissionOM(omNodeId3));
361+
362+
// Switch to admin user
363+
user = UserGroupInformation.getCurrentUser();
364+
// Stop the 3rd OM and decommission it
365+
cluster.stopOzoneManager(omNodeId3);
359366
decommissionOM(omNodeId3);
360367

361368
// Decommission the non leader OM and then stop it. Stopping OM before will

hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OMAdminProtocolServerSideImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@
1717

1818
package org.apache.hadoop.ozone.protocolPB;
1919

20+
import static org.apache.hadoop.hdds.utils.HddsServerUtil.getRemoteUser;
21+
import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.PERMISSION_DENIED;
22+
2023
import com.google.protobuf.RpcController;
2124
import com.google.protobuf.ServiceException;
2225
import java.io.IOException;
2326
import java.util.ArrayList;
2427
import java.util.List;
2528
import org.apache.hadoop.ozone.om.OzoneManager;
29+
import org.apache.hadoop.ozone.om.exceptions.OMException;
2630
import org.apache.hadoop.ozone.om.helpers.OMNodeDetails;
2731
import org.apache.hadoop.ozone.om.protocolPB.OMAdminProtocolPB;
2832
import org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer;
@@ -91,6 +95,9 @@ public DecommissionOMResponse decommission(RpcController controller,
9195
}
9296

9397
try {
98+
if (!ozoneManager.isAdmin(getRemoteUser())) {
99+
throw new OMException("Only administrators are authorized to perform decommission.", PERMISSION_DENIED);
100+
}
94101
omRatisServer.removeOMFromRatisRing(decommNode);
95102
} catch (IOException ex) {
96103
return DecommissionOMResponse.newBuilder()

0 commit comments

Comments
 (0)