Skip to content

Commit 18fc1ec

Browse files
committed
Replaced RandomStringUtils with AtomicInteger counter in TestSnapshotBackgroundServices to eliminate the key collision
1 parent 881c84f commit 18fc1ec

File tree

2 files changed

+35
-47
lines changed

2 files changed

+35
-47
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,16 @@ public static void shutdown() {
217217
*/
218218
public static String createKey(OzoneBucket ozoneBucket) throws IOException {
219219
String keyName = "key" + RandomStringUtils.randomNumeric(5);
220+
createKey(ozoneBucket, keyName);
221+
return keyName;
222+
}
223+
224+
public static void createKey(OzoneBucket ozoneBucket, String keyName) throws IOException {
220225
String data = "data" + RandomStringUtils.randomNumeric(5);
221-
OzoneOutputStream ozoneOutputStream = ozoneBucket.createKey(keyName,
222-
data.length(), ReplicationType.RATIS,
226+
OzoneOutputStream ozoneOutputStream = ozoneBucket.createKey(keyName, data.length(), ReplicationType.RATIS,
223227
ReplicationFactor.ONE, new HashMap<>());
224228
ozoneOutputStream.write(data.getBytes(UTF_8), 0, data.length());
225229
ozoneOutputStream.close();
226-
return keyName;
227230
}
228231

229232
protected OzoneBucket setupBucket() throws Exception {

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

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
*/
1717
package org.apache.hadoop.ozone.om;
1818

19-
import org.apache.commons.lang3.RandomStringUtils;
2019
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
2120
import org.apache.hadoop.hdds.conf.StorageUnit;
2221
import org.apache.hadoop.hdds.utils.IOUtils;
@@ -65,6 +64,7 @@
6564
import java.util.UUID;
6665
import java.util.concurrent.TimeUnit;
6766
import java.util.concurrent.TimeoutException;
67+
import java.util.concurrent.atomic.AtomicInteger;
6868
import java.util.concurrent.atomic.AtomicLong;
6969
import java.util.concurrent.atomic.AtomicReference;
7070

@@ -88,21 +88,20 @@
8888
*/
8989
@Timeout(5000)
9090
public class TestSnapshotBackgroundServices {
91-
92-
private MiniOzoneHAClusterImpl cluster = null;
91+
private MiniOzoneHAClusterImpl cluster;
9392
private ObjectStore objectStore;
9493
private OzoneBucket ozoneBucket;
9594
private String volumeName;
9695
private String bucketName;
9796

9897
private static final long SNAPSHOT_THRESHOLD = 50;
9998
private static final int LOG_PURGE_GAP = 50;
100-
// This test depends on direct RocksDB checks that are easier done with OBS
101-
// buckets.
102-
private static final BucketLayout TEST_BUCKET_LAYOUT =
103-
BucketLayout.OBJECT_STORE;
104-
private static final String SNAPSHOT_NAME_PREFIX = "snapshot";
99+
// This test depends on direct RocksDB checks that are easier done with OBS buckets.
100+
private static final BucketLayout TEST_BUCKET_LAYOUT = BucketLayout.OBJECT_STORE;
101+
private static final String SNAPSHOT_NAME_PREFIX = "snapshot-";
102+
private static final String KEY_NAME_PREFIX = "key-";
105103
private OzoneClient client;
104+
private final AtomicInteger counter = new AtomicInteger();
106105

107106
/**
108107
* Create a MiniOzoneCluster for testing. The cluster initially has one
@@ -174,12 +173,12 @@ public void init(TestInfo testInfo) throws Exception {
174173
client = OzoneClientFactory.getRpcClient(omServiceId, conf);
175174
objectStore = client.getObjectStore();
176175

177-
volumeName = "volume" + RandomStringUtils.randomNumeric(5);
178-
bucketName = "bucket" + RandomStringUtils.randomNumeric(5);
176+
volumeName = "volume" + counter.incrementAndGet();
177+
bucketName = "bucket" + counter.incrementAndGet();
179178

180179
VolumeArgs createVolumeArgs = VolumeArgs.newBuilder()
181-
.setOwner("user" + RandomStringUtils.randomNumeric(5))
182-
.setAdmin("admin" + RandomStringUtils.randomNumeric(5))
180+
.setOwner("user" + counter.incrementAndGet())
181+
.setAdmin("admin" + counter.incrementAndGet())
183182
.build();
184183

185184
objectStore.createVolume(volumeName, createVolumeArgs);
@@ -224,8 +223,7 @@ public void testSnapshotAndKeyDeletionBackgroundServices()
224223
cluster.getOzoneManager(leaderOM.getOMNodeId());
225224
assertEquals(leaderOM, newFollowerOM);
226225

227-
SnapshotInfo newSnapshot = createOzoneSnapshot(newLeaderOM,
228-
SNAPSHOT_NAME_PREFIX + RandomStringUtils.randomNumeric(5));
226+
SnapshotInfo newSnapshot = createOzoneSnapshot(newLeaderOM, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet());
229227

230228
/*
231229
Check whether newly created key data is reclaimed
@@ -250,8 +248,7 @@ public void testSnapshotAndKeyDeletionBackgroundServices()
250248
assertNotNull(keyInfoA);
251249

252250
// create snapshot b
253-
SnapshotInfo snapshotInfoB = createOzoneSnapshot(newLeaderOM,
254-
SNAPSHOT_NAME_PREFIX + RandomStringUtils.randomNumeric(5));
251+
SnapshotInfo snapshotInfoB = createOzoneSnapshot(newLeaderOM, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet());
255252
assertNotNull(snapshotInfoB);
256253

257254
// delete key a
@@ -261,8 +258,7 @@ public void testSnapshotAndKeyDeletionBackgroundServices()
261258
() -> !isKeyInTable(keyA, omKeyInfoTable));
262259

263260
// create snapshot c
264-
SnapshotInfo snapshotInfoC = createOzoneSnapshot(newLeaderOM,
265-
SNAPSHOT_NAME_PREFIX + RandomStringUtils.randomNumeric(5));
261+
SnapshotInfo snapshotInfoC = createOzoneSnapshot(newLeaderOM, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet());
266262

267263
// get snapshot c
268264
OmSnapshot snapC;
@@ -279,8 +275,7 @@ public void testSnapshotAndKeyDeletionBackgroundServices()
279275
() -> isKeyInTable(keyA, snapC.getMetadataManager().getDeletedTable()));
280276

281277
// create snapshot d
282-
SnapshotInfo snapshotInfoD = createOzoneSnapshot(newLeaderOM,
283-
SNAPSHOT_NAME_PREFIX + RandomStringUtils.randomNumeric(5));
278+
SnapshotInfo snapshotInfoD = createOzoneSnapshot(newLeaderOM, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet());
284279

285280
// delete snapshot c
286281
client.getObjectStore()
@@ -533,18 +528,14 @@ public void testSSTFilteringBackgroundService()
533528
private void confirmSnapDiffForTwoSnapshotsDifferingBySingleKey(
534529
OzoneManager ozoneManager)
535530
throws IOException, InterruptedException, TimeoutException {
536-
String firstSnapshot = createOzoneSnapshot(ozoneManager,
537-
TestSnapshotBackgroundServices.SNAPSHOT_NAME_PREFIX +
538-
RandomStringUtils.randomNumeric(10)).getName();
531+
String firstSnapshot = createOzoneSnapshot(ozoneManager, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet())
532+
.getName();
539533
String diffKey = writeKeys(1).get(0);
540-
String secondSnapshot = createOzoneSnapshot(ozoneManager,
541-
TestSnapshotBackgroundServices.SNAPSHOT_NAME_PREFIX +
542-
RandomStringUtils.randomNumeric(10)).getName();
543-
SnapshotDiffReportOzone diff = getSnapDiffReport(volumeName, bucketName,
544-
firstSnapshot, secondSnapshot);
534+
String secondSnapshot = createOzoneSnapshot(ozoneManager, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet())
535+
.getName();
536+
SnapshotDiffReportOzone diff = getSnapDiffReport(volumeName, bucketName, firstSnapshot, secondSnapshot);
545537
assertEquals(Collections.singletonList(
546-
SnapshotDiffReportOzone.getDiffReportEntry(
547-
SnapshotDiffReport.DiffType.CREATE, diffKey, null)),
538+
SnapshotDiffReportOzone.getDiffReportEntry(SnapshotDiffReport.DiffType.CREATE, diffKey, null)),
548539
diff.getDiffList());
549540
}
550541

@@ -574,9 +565,7 @@ private static File getSstBackupDir(OzoneManager ozoneManager) {
574565
private void checkIfSnapshotGetsProcessedBySFS(OzoneManager ozoneManager)
575566
throws IOException, TimeoutException, InterruptedException {
576567
writeKeys(1);
577-
SnapshotInfo newSnapshot = createOzoneSnapshot(ozoneManager,
578-
TestSnapshotBackgroundServices.SNAPSHOT_NAME_PREFIX +
579-
RandomStringUtils.randomNumeric(5));
568+
SnapshotInfo newSnapshot = createOzoneSnapshot(ozoneManager, SNAPSHOT_NAME_PREFIX + counter.incrementAndGet());
580569
assertNotNull(newSnapshot);
581570
Table<String, SnapshotInfo> snapshotInfoTable =
582571
ozoneManager.getMetadataManager().getSnapshotInfoTable();
@@ -640,22 +629,17 @@ private SnapshotDiffReportOzone getSnapDiffReport(String volume,
640629
return response.get().getSnapshotDiffReport();
641630
}
642631

643-
private SnapshotInfo createOzoneSnapshot(OzoneManager leaderOM, String name)
644-
throws IOException {
632+
private SnapshotInfo createOzoneSnapshot(OzoneManager leaderOM, String name) throws IOException {
645633
objectStore.createSnapshot(volumeName, bucketName, name);
646634

647-
String tableKey = SnapshotInfo.getTableKey(volumeName,
648-
bucketName,
649-
name);
635+
String tableKey = SnapshotInfo.getTableKey(volumeName, bucketName, name);
650636
SnapshotInfo snapshotInfo = leaderOM.getMetadataManager()
651637
.getSnapshotInfoTable()
652638
.get(tableKey);
653639
// Allow the snapshot to be written to disk
654-
String fileName =
655-
getSnapshotPath(leaderOM.getConfiguration(), snapshotInfo);
640+
String fileName = getSnapshotPath(leaderOM.getConfiguration(), snapshotInfo);
656641
File snapshotDir = new File(fileName);
657-
if (!RDBCheckpointUtils
658-
.waitForCheckpointDirectoryExist(snapshotDir)) {
642+
if (!RDBCheckpointUtils.waitForCheckpointDirectoryExist(snapshotDir)) {
659643
throw new IOException("snapshot directory doesn't exist");
660644
}
661645
return snapshotInfo;
@@ -665,7 +649,9 @@ private List<String> writeKeys(long keyCount) throws IOException {
665649
List<String> keys = new ArrayList<>();
666650
long index = 0;
667651
while (index < keyCount) {
668-
keys.add(createKey(ozoneBucket));
652+
String key = KEY_NAME_PREFIX + counter.incrementAndGet();
653+
createKey(ozoneBucket, key);
654+
keys.add(key);
669655
index++;
670656
}
671657
return keys;
@@ -679,5 +665,4 @@ private void readKeys(List<String> keys) throws IOException {
679665
inputStream.close();
680666
}
681667
}
682-
683668
}

0 commit comments

Comments
 (0)