|
24 | 24 | import java.nio.file.Paths; |
25 | 25 | import java.util.ArrayList; |
26 | 26 | import java.util.BitSet; |
| 27 | +import java.util.Collections; |
27 | 28 | import java.util.HashMap; |
28 | 29 | import java.util.HashSet; |
29 | 30 | import java.util.List; |
|
61 | 62 | import org.apache.hadoop.ozone.om.helpers.OmKeyArgs; |
62 | 63 | import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; |
63 | 64 | import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo; |
| 65 | +import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup; |
64 | 66 | import org.apache.hadoop.ozone.om.helpers.OmPrefixInfo; |
65 | 67 | import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs; |
66 | 68 | import org.apache.hadoop.ozone.om.helpers.OpenKeySession; |
|
76 | 78 | import org.apache.hadoop.test.GenericTestUtils; |
77 | 79 | import org.apache.hadoop.test.LambdaTestUtils; |
78 | 80 |
|
| 81 | +import org.apache.hadoop.util.Time; |
79 | 82 | import org.junit.After; |
80 | 83 | import org.junit.AfterClass; |
81 | 84 | import org.junit.Assert; |
@@ -213,11 +216,29 @@ public void allocateBlockFailureInSafeMode() throws Exception { |
213 | 216 | OmKeyArgs keyArgs = createBuilder() |
214 | 217 | .setKeyName(KEY_NAME) |
215 | 218 | .build(); |
216 | | - OpenKeySession keySession = keyManager1.openKey(keyArgs); |
| 219 | + |
| 220 | + // As now openKey will allocate at least one block, even if the size |
| 221 | + // passed is 0. So adding an entry to openKeyTable manually to test |
| 222 | + // allocateBlock failure. |
| 223 | + OmKeyInfo omKeyInfo = new OmKeyInfo.Builder() |
| 224 | + .setVolumeName(keyArgs.getVolumeName()) |
| 225 | + .setBucketName(keyArgs.getBucketName()) |
| 226 | + .setKeyName(keyArgs.getKeyName()) |
| 227 | + .setOmKeyLocationInfos(Collections.singletonList( |
| 228 | + new OmKeyLocationInfoGroup(0, new ArrayList<>()))) |
| 229 | + .setCreationTime(Time.now()) |
| 230 | + .setModificationTime(Time.now()) |
| 231 | + .setDataSize(0) |
| 232 | + .setReplicationType(keyArgs.getType()) |
| 233 | + .setReplicationFactor(keyArgs.getFactor()) |
| 234 | + .setFileEncryptionInfo(null).build(); |
| 235 | + metadataManager.getOpenKeyTable().put( |
| 236 | + metadataManager.getOpenKey(VOLUME_NAME, BUCKET_NAME, KEY_NAME, 1L), |
| 237 | + omKeyInfo); |
217 | 238 | LambdaTestUtils.intercept(OMException.class, |
218 | 239 | "SafeModePrecheck failed for allocateBlock", () -> { |
219 | 240 | keyManager1 |
220 | | - .allocateBlock(keyArgs, keySession.getId(), new ExcludeList()); |
| 241 | + .allocateBlock(keyArgs, 1L, new ExcludeList()); |
221 | 242 | }); |
222 | 243 | } |
223 | 244 |
|
|
0 commit comments