HDDS-825. Code cleanup based on messages from ErrorProne.

Contributed by Anu Engineer.
This commit is contained in:
Anu Engineer 2018-11-15 17:36:09 -08:00
parent fcd94eeab8
commit a16aa2f60b
100 changed files with 812 additions and 456 deletions

View File

@ -296,6 +296,7 @@ public void createPipeline() {
// For stand alone pipeline, there is no notion called setup pipeline.
}
@Override
public void destroyPipeline() {
// For stand alone pipeline, there is no notion called destroy pipeline.
}

View File

@ -170,6 +170,7 @@ public XceiverClientSpi call() throws Exception {
/**
* Close and remove all the cached clients.
*/
@Override
public void close() {
//closing is done through RemovalListener
clientCache.invalidateAll();

View File

@ -100,6 +100,7 @@ private XceiverClientRatis(Pipeline pipeline, RpcType rpcType,
/**
* {@inheritDoc}
*/
@Override
public void createPipeline() throws IOException {
final RaftGroup group = RatisHelper.newRaftGroup(pipeline);
LOG.debug("creating pipeline:{} with {}", pipeline.getId(), group);
@ -110,6 +111,7 @@ public void createPipeline() throws IOException {
/**
* {@inheritDoc}
*/
@Override
public void destroyPipeline() throws IOException {
final RaftGroup group = RatisHelper.newRaftGroup(pipeline);
LOG.debug("destroying pipeline:{} with {}", pipeline.getId(), group);

View File

@ -83,7 +83,7 @@ public ChunkInputStream(
}
private void initializeChunkOffset() {
int tempOffset = 0;
long tempOffset = 0;
for (int i = 0; i < chunks.size(); i++) {
chunkOffset[i] = tempOffset;
tempOffset += chunks.get(i).getLen();

View File

@ -196,6 +196,17 @@ public static Builder newBuilder(Pipeline pipeline) {
return new Builder(pipeline);
}
@Override
public String toString() {
return "Pipeline{" +
"id=" + id +
", type=" + type +
", factor=" + factor +
", state=" + state +
", nodeStatus=" + nodeStatus +
'}';
}
/**
* Builder class for Pipeline.
*/

View File

@ -68,7 +68,6 @@ public StorageInfo(NodeType type, String cid, long cT)
throws IOException {
Preconditions.checkNotNull(type);
Preconditions.checkNotNull(cid);
Preconditions.checkNotNull(cT);
properties.setProperty(NODE_TYPE, type.name());
properties.setProperty(CLUSTER_ID, cid);
properties.setProperty(CREATION_TIME, String.valueOf(cT));

View File

@ -24,11 +24,9 @@
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.metrics2.util.MBeans;
import org.apache.hadoop.utils.RocksDBStoreMBean;
import org.apache.ratis.thirdparty.com.google.common.annotations.
VisibleForTesting;
import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
import org.rocksdb.ColumnFamilyDescriptor;
import org.rocksdb.ColumnFamilyHandle;
import org.rocksdb.DBOptions;
import org.rocksdb.RocksDB;
import org.rocksdb.RocksDBException;
@ -192,7 +190,6 @@ public void move(byte[] key, Table source, Table dest) throws IOException {
}
}
@Override
public void move(byte[] key, byte[] value, Table source,
Table dest) throws IOException {
@ -226,7 +223,7 @@ public void move(byte[] sourceKey, byte[] destKey, byte[] value, Table source,
} catch (RocksDBException rockdbException) {
LOG.error("Move of key failed. Key:{}", DFSUtil.bytes2String(sourceKey));
throw toIOException("Unable to move key: " +
DFSUtil.bytes2String(sourceKey), rockdbException);
DFSUtil.bytes2String(sourceKey), rockdbException);
}
}

View File

@ -37,7 +37,7 @@ public enum DummyAction implements AuditAction {
SET_OWNER("SET_OWNER"),
SET_QUOTA("SET_QUOTA");
private String action;
private final String action;
DummyAction(String action) {
this.action = action;

View File

@ -41,7 +41,7 @@ public class TestLeaseManager {
/**
* Dummy resource on which leases can be acquired.
*/
private final class DummyResource {
private static final class DummyResource {
private final String name;
@ -61,6 +61,21 @@ public boolean equals(Object obj) {
}
return false;
}
/**
* Adding to String method to fix the ErrorProne warning that this method
* is later used in String functions, which would print out (e.g.
* `org.apache.hadoop.ozone.lease.TestLeaseManager.DummyResource@
* 4488aabb`) instead of useful information.
*
* @return Name of the Dummy object.
*/
@Override
public String toString() {
return "DummyResource{" +
"name='" + name + '\'' +
'}';
}
}
@Test

View File

@ -55,7 +55,7 @@ public void testGetLongId() throws Exception {
List<Future<Integer>> result = executor.invokeAll(tasks);
assertEquals(IDS_PER_THREAD * NUM_OF_THREADS, ID_SET.size());
for (Future<Integer> r : result) {
assertEquals(r.get().intValue(), IDS_PER_THREAD);
assertEquals(IDS_PER_THREAD, r.get().intValue());
}
}

View File

@ -1,24 +1,21 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.hadoop.utils;
import static org.apache.hadoop.test.PlatformAssumptions.assumeNotWindows;
import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
@ -28,9 +25,9 @@
import org.apache.hadoop.hdfs.DFSUtilClient;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.test.GenericTestUtils;
import org.apache.hadoop.utils.MetadataStore.KeyValue;
import org.apache.hadoop.utils.MetadataKeyFilters.KeyPrefixFilter;
import org.apache.hadoop.utils.MetadataKeyFilters.MetadataKeyFilter;
import org.apache.hadoop.utils.MetadataStore.KeyValue;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@ -50,14 +47,14 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.hadoop.test.PlatformAssumptions.assumeNotWindows;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.runners.Parameterized.Parameters;
/**
@ -66,27 +63,24 @@
@RunWith(Parameterized.class)
public class TestMetadataStore {
private final static int MAX_GETRANGE_LENGTH = 100;
private final String storeImpl;
@Rule
public ExpectedException expectedException = ExpectedException.none();
private MetadataStore store;
private File testDir;
public TestMetadataStore(String metadataImpl) {
this.storeImpl = metadataImpl;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
return Arrays.asList(new Object[][]{
{OzoneConfigKeys.OZONE_METADATA_STORE_IMPL_LEVELDB},
{OzoneConfigKeys.OZONE_METADATA_STORE_IMPL_ROCKSDB}
});
}
private MetadataStore store;
private File testDir;
private final static int MAX_GETRANGE_LENGTH = 100;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void init() throws IOException {
if (OzoneConfigKeys.OZONE_METADATA_STORE_IMPL_ROCKSDB.equals(storeImpl)) {
@ -109,7 +103,7 @@ public void init() throws IOException {
// Add 20 entries.
// {a0 : a-value0} to {a9 : a-value9}
// {b0 : b-value0} to {b9 : b-value9}
for (int i=0; i<10; i++) {
for (int i = 0; i < 10; i++) {
store.put(getBytes("a" + i), getBytes("a-value" + i));
store.put(getBytes("b" + i), getBytes("b-value" + i));
}
@ -178,7 +172,7 @@ public void testMetaStoreConfigDifferentFromType() throws IOException {
GenericTestUtils.setLogLevel(MetadataStoreBuilder.LOG, Level.DEBUG);
GenericTestUtils.LogCapturer logCapturer =
GenericTestUtils.LogCapturer.captureLogs(MetadataStoreBuilder.LOG);
if(storeImpl.equals(OzoneConfigKeys.OZONE_METADATA_STORE_IMPL_LEVELDB)) {
if (storeImpl.equals(OzoneConfigKeys.OZONE_METADATA_STORE_IMPL_LEVELDB)) {
dbType = "RocksDB";
} else {
dbType = "LevelDB";
@ -241,7 +235,7 @@ private String getString(byte[] bytes) {
@Test
public void testGetDelete() throws IOException {
for (int i=0; i<10; i++) {
for (int i = 0; i < 10; i++) {
byte[] va = store.get(getBytes("a" + i));
assertEquals("a-value" + i, getString(va));
@ -273,7 +267,7 @@ private String getExpectedValue(String key) {
return null;
}
char[] arr = key.toCharArray();
return new StringBuffer().append(arr[0]).append("-value")
return new StringBuilder().append(arr[0]).append("-value")
.append(arr[arr.length - 1]).toString();
}
@ -326,14 +320,14 @@ public void testIterateKeys() throws IOException {
char num = value.charAt(value.length() - 1);
// each value adds 1
int i = Character.getNumericValue(num) + 1;
value = value.substring(0, value.length() - 1) + i;
value = value.substring(0, value.length() - 1) + i;
result.add(value);
return true;
});
assertFalse(result.isEmpty());
for (int i=0; i<result.size(); i++) {
assertEquals("b-value" + (i+1), result.get(i));
for (int i = 0; i < result.size(); i++) {
assertEquals("b-value" + (i + 1), result.get(i));
}
// iterate from a non exist key
@ -388,7 +382,7 @@ public void testGetRangeKVs() throws IOException {
result = store.getRangeKVs(null, 100, filter1);
assertEquals(10, result.size());
assertTrue(result.stream().allMatch(entry ->
new String(entry.getKey()).startsWith("b")
new String(entry.getKey(), UTF_8).startsWith("b")
));
assertEquals(20, filter1.getKeysScannedNum());
assertEquals(10, filter1.getKeysHintedNum());
@ -416,7 +410,7 @@ public void testGetRangeKVs() throws IOException {
assertEquals("b-value2", getString(result.get(0).getValue()));
// If filter is null, no effect.
result = store.getRangeKVs(null, 1, null);
result = store.getRangeKVs(null, 1, (MetadataKeyFilter[]) null);
assertEquals(1, result.size());
assertEquals("a0", getString(result.get(0).getKey()));
}
@ -461,7 +455,7 @@ public void testInvalidStartKey() throws IOException {
// If startKey is invalid, the returned list should be empty.
List<Map.Entry<byte[], byte[]>> kvs =
store.getRangeKVs(getBytes("unknownKey"), MAX_GETRANGE_LENGTH);
assertEquals(kvs.size(), 0);
assertEquals(0, kvs.size());
}
@Test
@ -504,7 +498,7 @@ public void testBatchWrite() throws IOException {
.build();
List<String> expectedResult = Lists.newArrayList();
for (int i = 0; i<10; i++) {
for (int i = 0; i < 10; i++) {
dbStore.put(getBytes("batch-" + i), getBytes("batch-value-" + i));
expectedResult.add("batch-" + i);
}
@ -541,43 +535,44 @@ public void testKeyPrefixFilter() throws IOException {
new KeyPrefixFilter().addFilter("b0", true).addFilter("b");
} catch (IllegalArgumentException e) {
exception = e;
assertTrue(exception.getMessage().contains("KeyPrefix: b already " +
"rejected"));
}
assertTrue(exception.getMessage().contains("KeyPrefix: b already " +
"rejected"));
try {
new KeyPrefixFilter().addFilter("b0").addFilter("b", true);
} catch (IllegalArgumentException e) {
exception = e;
assertTrue(exception.getMessage().contains("KeyPrefix: b already " +
"accepted"));
}
assertTrue(exception.getMessage().contains("KeyPrefix: b already " +
"accepted"));
try {
new KeyPrefixFilter().addFilter("b", true).addFilter("b0");
} catch (IllegalArgumentException e) {
exception = e;
assertTrue(exception.getMessage().contains("KeyPrefix: b0 already " +
"rejected"));
}
assertTrue(exception.getMessage().contains("KeyPrefix: b0 already " +
"rejected"));
try {
new KeyPrefixFilter().addFilter("b").addFilter("b0", true);
} catch (IllegalArgumentException e) {
exception = e;
assertTrue(exception.getMessage().contains("KeyPrefix: b0 already " +
"accepted"));
}
assertTrue(exception.getMessage().contains("KeyPrefix: b0 already " +
"accepted"));
MetadataKeyFilter filter1 = new KeyPrefixFilter(true)
.addFilter("a0")
.addFilter("a1")
.addFilter("b", true);
.addFilter("a0")
.addFilter("a1")
.addFilter("b", true);
result = store.getRangeKVs(null, 100, filter1);
assertEquals(2, result.size());
assertTrue(result.stream().anyMatch(entry -> new String(entry.getKey())
assertTrue(result.stream().anyMatch(entry -> new String(entry.getKey(),
UTF_8)
.startsWith("a0")) && result.stream().anyMatch(entry -> new String(
entry.getKey()).startsWith("a1")));
entry.getKey(), UTF_8).startsWith("a1")));
filter1 = new KeyPrefixFilter(true).addFilter("b", true);
result = store.getRangeKVs(null, 100, filter1);
@ -586,7 +581,8 @@ public void testKeyPrefixFilter() throws IOException {
filter1 = new KeyPrefixFilter().addFilter("b", true);
result = store.getRangeKVs(null, 100, filter1);
assertEquals(10, result.size());
assertTrue(result.stream().allMatch(entry -> new String(entry.getKey())
assertTrue(result.stream().allMatch(entry -> new String(entry.getKey(),
UTF_8)
.startsWith("a")));
}
}

View File

@ -29,12 +29,14 @@
import java.io.File;
import java.lang.management.ManagementFactory;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* Test the JMX interface for the rocksdb metastore implementation.
*/
public class TestRocksDBStoreMBean {
Configuration conf;
private Configuration conf;
@Before
public void init() throws Exception {
@ -57,7 +59,7 @@ public void testJmxBeans() throws Exception {
.setCreateIfMissing(true).setDbFile(testDir).build();
for (int i = 0; i < 10; i++) {
metadataStore.put("key".getBytes(), "value".getBytes());
metadataStore.put("key".getBytes(UTF_8), "value".getBytes(UTF_8));
}
MBeanServer platformMBeanServer =

View File

@ -131,7 +131,7 @@ public void builderWithDataWrites() throws Exception {
RandomStringUtils.random(9).getBytes(StandardCharsets.UTF_8);
firstTable.put(key, value);
byte[] temp = firstTable.get(key);
Arrays.equals(value, temp);
Assert.assertTrue(Arrays.equals(value, temp));
}
try (Table secondTable = dbStore.getTable("Second")) {
@ -161,7 +161,7 @@ public void builderWithDiskProfileWrites() throws Exception {
RandomStringUtils.random(9).getBytes(StandardCharsets.UTF_8);
firstTable.put(key, value);
byte[] temp = firstTable.get(key);
Arrays.equals(value, temp);
Assert.assertTrue(Arrays.equals(value, temp));
}
try (Table secondTable = dbStore.getTable("Second")) {

View File

@ -35,9 +35,9 @@
import org.rocksdb.WriteBatch;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@ -112,8 +112,8 @@ public void putGetAndEmpty() throws Exception {
@Test
public void delete() throws Exception {
List<byte[]> deletedKeys = new LinkedList<>();
List<byte[]> validKeys = new LinkedList<>();
List<byte[]> deletedKeys = new ArrayList<>();
List<byte[]> validKeys = new ArrayList<>();
byte[] value =
RandomStringUtils.random(10).getBytes(StandardCharsets.UTF_8);
for (int x = 0; x < 100; x++) {

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* DB test Utils.
*/
package org.apache.hadoop.utils;

View File

@ -141,8 +141,8 @@ public BlockData getBlock(Container container, BlockID blockID)
long bcsId = blockID.getBlockCommitSequenceId();
Preconditions.checkNotNull(blockID,
"BlockID cannot be null in GetBlock request");
Preconditions.checkNotNull(blockID.getContainerID(),
"Container name cannot be null");
Preconditions.checkNotNull(container,
"Container cannot be null");
KeyValueContainerData containerData = (KeyValueContainerData) container
.getContainerData();

View File

@ -114,7 +114,7 @@ public StreamDownloader(long containerId, CompletableFuture<Path> response,
this.containerId = containerId;
this.outputPath = outputPath;
try {
outputPath = Preconditions.checkNotNull(outputPath);
Preconditions.checkNotNull(outputPath, "Output path cannot be null");
Path parentPath = Preconditions.checkNotNull(outputPath.getParent());
Files.createDirectories(parentPath);
stream =

View File

@ -71,8 +71,8 @@ public ScmTestMock() {
new HashMap<>();
private Map<DatanodeDetails, NodeReportProto> nodeReports = new HashMap<>();
private AtomicInteger commandStatusReport = new AtomicInteger(0);
private List<CommandStatus> cmdStatusList = new LinkedList<>();
private List<SCMCommandProto> scmCommandRequests = new LinkedList<>();
private List<CommandStatus> cmdStatusList = new ArrayList<>();
private List<SCMCommandProto> scmCommandRequests = new ArrayList<>();
/**
* Returns the number of heartbeats made to this class.
*

View File

@ -50,7 +50,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.file.Paths;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@ -86,9 +86,9 @@ public void setUp() throws Exception {
conf.setTimeDuration(OZONE_SCM_HEARTBEAT_RPC_TIMEOUT, 500,
TimeUnit.MILLISECONDS);
conf.setBoolean(OzoneConfigKeys.DFS_CONTAINER_RATIS_IPC_RANDOM_PORT, true);
serverAddresses = new LinkedList<>();
scmServers = new LinkedList<>();
mockServers = new LinkedList<>();
serverAddresses = new ArrayList<>();
scmServers = new ArrayList<>();
mockServers = new ArrayList<>();
for (int x = 0; x < scmServerCount; x++) {
int port = SCMTestUtils.getReuseableAddress().getPort();
String address = "127.0.0.1";
@ -361,8 +361,8 @@ public void testDatanodeStateMachineWithIdWriteFail() throws Exception {
@Test
public void testDatanodeStateMachineWithInvalidConfiguration()
throws Exception {
LinkedList<Map.Entry<String, String>> confList =
new LinkedList<Map.Entry<String, String>>();
List<Map.Entry<String, String>> confList =
new ArrayList<>();
confList.add(Maps.immutableEntry(ScmConfigKeys.OZONE_SCM_NAMES, ""));
// Invalid ozone.scm.names

View File

@ -49,6 +49,7 @@
import java.io.IOException;
import java.util.UUID;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.HDDS_DATANODE_DIR_KEY;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ -160,7 +161,7 @@ private ContainerCommandRequestProto getWriteChunkRequest(
String datanodeId, Long containerId, Long localId) {
ByteString data = ByteString.copyFrom(
UUID.randomUUID().toString().getBytes());
UUID.randomUUID().toString().getBytes(UTF_8));
ContainerProtos.ChunkInfo chunk = ContainerProtos.ChunkInfo
.newBuilder()
.setChunkName(

View File

@ -61,7 +61,7 @@ public static void setup() {
/**
* Dummy report publisher for testing.
*/
private class DummyReportPublisher extends ReportPublisher {
private static class DummyReportPublisher extends ReportPublisher {
private final long frequency;
private int getReportCount = 0;

View File

@ -1,19 +1,18 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.hadoop.ozone.container.common.volume;
@ -23,7 +22,6 @@
import org.apache.hadoop.fs.StorageType;
import org.apache.hadoop.ozone.container.common.helpers.DatanodeVersionFile;
import org.apache.hadoop.ozone.container.common.utils.HddsVolumeUtil;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@ -35,19 +33,22 @@
import java.util.Properties;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Unit tests for {@link HddsVolume}.
*/
public class TestHddsVolume {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private static final String DATANODE_UUID = UUID.randomUUID().toString();
private static final String CLUSTER_ID = UUID.randomUUID().toString();
private static final Configuration CONF = new Configuration();
private static final String DU_CACHE_FILE = "scmUsed";
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private File rootDir;
private HddsVolume volume;
private File versionFile;
@ -69,9 +70,9 @@ public void testHddsVolumeInitialization() throws Exception {
// clusterID is not specified and the version file should not be written
// to disk.
assertTrue(volume.getClusterID() == null);
assertEquals(volume.getStorageType(), StorageType.DEFAULT);
assertEquals(volume.getStorageState(),
HddsVolume.VolumeState.NOT_FORMATTED);
assertEquals(StorageType.DEFAULT, volume.getStorageType());
assertEquals(HddsVolume.VolumeState.NOT_FORMATTED,
volume.getStorageState());
assertFalse("Version file should not be created when clusterID is not " +
"known.", versionFile.exists());
@ -84,7 +85,7 @@ public void testHddsVolumeInitialization() throws Exception {
assertTrue("Volume format should create Version file",
versionFile.exists());
assertEquals(volume.getClusterID(), CLUSTER_ID);
assertEquals(volume.getStorageState(), HddsVolume.VolumeState.NORMAL);
assertEquals(HddsVolume.VolumeState.NORMAL, volume.getStorageState());
}
@Test
@ -111,7 +112,7 @@ public void testReadPropertiesFromVersionFile() throws Exception {
}
@Test
public void testShutdown() throws Exception{
public void testShutdown() throws Exception {
// Return dummy value > 0 for scmUsage so that scm cache file is written
// during shutdown.
GetSpaceUsed scmUsageMock = Mockito.mock(GetSpaceUsed.class);
@ -125,8 +126,7 @@ public void testShutdown() throws Exception{
volume.shutdown();
// Volume state should be "NON_EXISTENT" when volume is shutdown.
assertEquals(volume.getStorageState(),
HddsVolume.VolumeState.NON_EXISTENT);
assertEquals(HddsVolume.VolumeState.NON_EXISTENT, volume.getStorageState());
// Volume should save scmUsed cache file once volume is shutdown
File scmUsedFile = new File(folder.getRoot(), DU_CACHE_FILE);
@ -139,7 +139,7 @@ public void testShutdown() throws Exception{
// as usage thread is shutdown.
volume.getAvailable();
fail("HddsVolume#shutdown test failed");
} catch (Exception ex){
} catch (Exception ex) {
assertTrue(ex instanceof IOException);
assertTrue(ex.getMessage().contains(
"Volume Usage thread is not running."));

View File

@ -22,7 +22,6 @@
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.MiniDFSCluster;
@ -69,7 +68,7 @@ private void initializeVolumeSet() throws Exception {
}
@Rule
public Timeout testTimeout = new Timeout(300_000);
public Timeout testTimeout = new Timeout(300000);
@Before
public void setup() throws Exception {
@ -153,8 +152,7 @@ public void testFailVolume() throws Exception {
assertTrue(volumeSet.getFailedVolumesList().get(0).isFailed());
// Failed volume should not exist in VolumeMap
Path volume1Path = new Path(volume1);
assertFalse(volumeSet.getVolumeMap().containsKey(volume1Path));
assertFalse(volumeSet.getVolumeMap().containsKey(volume1));
}
@Test

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Tests for Container Volumes.
*/
package org.apache.hadoop.ozone.container.common.volume;

View File

@ -25,10 +25,9 @@
import org.apache.hadoop.hdds.scm.container.common.helpers.StorageContainerException;
import org.apache.hadoop.ozone.container.common.helpers.BlockData;
import org.apache.hadoop.ozone.container.common.helpers.ChunkInfo;
import org.apache.hadoop.ozone.container.common.volume
.RoundRobinVolumeChoosingPolicy;
import org.apache.hadoop.ozone.container.common.volume.VolumeSet;
import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
import org.apache.hadoop.ozone.container.common.volume.RoundRobinVolumeChoosingPolicy;
import org.apache.hadoop.ozone.container.common.volume.VolumeSet;
import org.apache.hadoop.ozone.container.keyvalue.impl.BlockManagerImpl;
import org.apache.hadoop.test.GenericTestUtils;
import org.junit.Before;
@ -37,12 +36,14 @@
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.mock;
@ -52,6 +53,8 @@
*/
public class TestBlockManagerImpl {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private OzoneConfiguration config;
private String scmId = UUID.randomUUID().toString();
private VolumeSet volumeSet;
@ -62,10 +65,6 @@ public class TestBlockManagerImpl {
private BlockManagerImpl blockManager;
private BlockID blockID;
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Before
public void setUp() throws Exception {
config = new OzoneConfiguration();
@ -93,7 +92,7 @@ public void setUp() throws Exception {
blockData = new BlockData(blockID);
blockData.addMetadata("VOLUME", "ozone");
blockData.addMetadata("OWNER", "hdfs");
List<ContainerProtos.ChunkInfo> chunkList = new LinkedList<>();
List<ContainerProtos.ChunkInfo> chunkList = new ArrayList<>();
ChunkInfo info = new ChunkInfo(String.format("%d.data.%d", blockID
.getLocalID(), 0), 0, 1024);
chunkList.add(info.getProtoBufMessage());
@ -124,88 +123,74 @@ public void testPutAndGetBlock() throws Exception {
}
@Test
public void testDeleteBlock() throws Exception {
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
//Put Block
blockManager.putBlock(keyValueContainer, blockData);
assertEquals(1,
keyValueContainer.getContainerData().getKeyCount());
//Delete Block
blockManager.deleteBlock(keyValueContainer, blockID);
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
try {
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
//Put Block
blockManager.putBlock(keyValueContainer, blockData);
assertEquals(1,
keyValueContainer.getContainerData().getKeyCount());
//Delete Block
blockManager.deleteBlock(keyValueContainer, blockID);
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
try {
blockManager.getBlock(keyValueContainer, blockID);
fail("testDeleteBlock");
} catch (StorageContainerException ex) {
GenericTestUtils.assertExceptionContains(
"Unable to find the block", ex);
}
} catch (IOException ex) {
fail("testDeleteBlock failed");
blockManager.getBlock(keyValueContainer, blockID);
fail("testDeleteBlock");
} catch (StorageContainerException ex) {
GenericTestUtils.assertExceptionContains(
"Unable to find the block", ex);
}
}
@Test
public void testListBlock() throws Exception {
try {
blockManager.putBlock(keyValueContainer, blockData);
List<BlockData> listBlockData = blockManager.listBlock(
keyValueContainer, 1, 10);
assertNotNull(listBlockData);
assertTrue(listBlockData.size() == 1);
for (long i = 2; i <= 10; i++) {
blockID = new BlockID(1L, i);
blockData = new BlockData(blockID);
blockData.addMetadata("VOLUME", "ozone");
blockData.addMetadata("OWNER", "hdfs");
List<ContainerProtos.ChunkInfo> chunkList = new ArrayList<>();
ChunkInfo info = new ChunkInfo(String.format("%d.data.%d", blockID
.getLocalID(), 0), 0, 1024);
chunkList.add(info.getProtoBufMessage());
blockData.setChunks(chunkList);
blockManager.putBlock(keyValueContainer, blockData);
List<BlockData> listBlockData = blockManager.listBlock(
keyValueContainer, 1, 10);
assertNotNull(listBlockData);
assertTrue(listBlockData.size() == 1);
for (long i = 2; i <= 10; i++) {
blockID = new BlockID(1L, i);
blockData = new BlockData(blockID);
blockData.addMetadata("VOLUME", "ozone");
blockData.addMetadata("OWNER", "hdfs");
List<ContainerProtos.ChunkInfo> chunkList = new LinkedList<>();
ChunkInfo info = new ChunkInfo(String.format("%d.data.%d", blockID
.getLocalID(), 0), 0, 1024);
chunkList.add(info.getProtoBufMessage());
blockData.setChunks(chunkList);
blockManager.putBlock(keyValueContainer, blockData);
}
listBlockData = blockManager.listBlock(
keyValueContainer, 1, 10);
assertNotNull(listBlockData);
assertTrue(listBlockData.size() == 10);
} catch (IOException ex) {
fail("testListBlock failed");
}
listBlockData = blockManager.listBlock(
keyValueContainer, 1, 10);
assertNotNull(listBlockData);
assertTrue(listBlockData.size() == 10);
}
@Test
public void testGetNoSuchBlock() throws Exception {
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
//Put Block
blockManager.putBlock(keyValueContainer, blockData);
assertEquals(1,
keyValueContainer.getContainerData().getKeyCount());
//Delete Block
blockManager.deleteBlock(keyValueContainer, blockID);
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
try {
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
//Put Block
blockManager.putBlock(keyValueContainer, blockData);
assertEquals(1,
keyValueContainer.getContainerData().getKeyCount());
//Delete Block
blockManager.deleteBlock(keyValueContainer, blockID);
assertEquals(0,
keyValueContainer.getContainerData().getKeyCount());
try {
//Since the block has been deleted, we should not be able to find it
blockManager.getBlock(keyValueContainer, blockID);
fail("testGetNoSuchBlock failed");
} catch (StorageContainerException ex) {
GenericTestUtils.assertExceptionContains(
"Unable to find the block", ex);
assertEquals(ContainerProtos.Result.NO_SUCH_BLOCK, ex.getResult());
}
} catch (IOException ex) {
//Since the block has been deleted, we should not be able to find it
blockManager.getBlock(keyValueContainer, blockID);
fail("testGetNoSuchBlock failed");
} catch (StorageContainerException ex) {
GenericTestUtils.assertExceptionContains(
"Unable to find the block", ex);
assertEquals(ContainerProtos.Result.NO_SUCH_BLOCK, ex.getResult());
}
}
}

View File

@ -43,6 +43,7 @@
import java.util.Arrays;
import java.util.UUID;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyLong;
@ -88,7 +89,7 @@ public void setUp() throws Exception {
keyValueContainer.create(volumeSet, volumeChoosingPolicy, scmId);
data = "testing write chunks".getBytes();
data = "testing write chunks".getBytes(UTF_8);
// Creating BlockData
blockID = new BlockID(1L, 1L);
chunkInfo = new ChunkInfo(String.format("%d.data.%d", blockID

View File

@ -42,9 +42,9 @@
import org.junit.runners.Parameterized;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.UUID;
@ -252,7 +252,7 @@ private void createContainerWithBlocks(long containerId, int
.randomUUID().toString());
MetadataStore metadataStore = BlockUtils.getDB(containerData, conf);
List<ContainerProtos.ChunkInfo> chunkList = new LinkedList<>();
List<ContainerProtos.ChunkInfo> chunkList = new ArrayList<>();
ChunkInfo info = new ChunkInfo("chunkfile", 0, 1024);
chunkList.add(info.getProtoBufMessage());

View File

@ -51,12 +51,13 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.LinkedList;
import java.util.UUID;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.ratis.util.Preconditions.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@ -135,7 +136,7 @@ private void addBlocks(int count) throws Exception {
BlockData blockData = new BlockData(blockID);
blockData.addMetadata("VOLUME", "ozone");
blockData.addMetadata("OWNER", "hdfs");
List<ContainerProtos.ChunkInfo> chunkList = new LinkedList<>();
List<ContainerProtos.ChunkInfo> chunkList = new ArrayList<>();
ChunkInfo info = new ChunkInfo(String.format("%d.data.%d", blockID
.getLocalID(), 0), 0, 1024);
chunkList.add(info.getProtoBufMessage());
@ -163,8 +164,6 @@ public void testCreateContainer() throws Exception {
// Check whether containerMetaDataPath and chunksPath exists or not.
assertTrue(containerMetaDataPath != null);
assertTrue(chunksPath != null);
File containerMetaDataLoc = new File(containerMetaDataPath);
//Check whether container file and container db file exists or not.
assertTrue(keyValueContainer.getContainerFile().exists(),
".Container File does not exist");
@ -190,7 +189,7 @@ public void testContainerImportExport() throws Exception {
//write one few keys to check the key count after import
MetadataStore metadataStore = BlockUtils.getDB(keyValueContainerData, conf);
for (int i = 0; i < numberOfKeysToWrite; i++) {
metadataStore.put(("test" + i).getBytes(), "test".getBytes());
metadataStore.put(("test" + i).getBytes(UTF_8), "test".getBytes(UTF_8));
}
metadataStore.close();
@ -247,7 +246,7 @@ public void testContainerImportExport() throws Exception {
container.importContainerData(fis, packer);
}
fail("Container is imported twice. Previous files are overwritten");
} catch (Exception ex) {
} catch (IOException ex) {
//all good
}

View File

@ -226,9 +226,10 @@ public void testVolumeSetInKeyValueHandler() throws Exception{
VolumeSet volumeSet = new VolumeSet(UUID.randomUUID().toString(), conf);
KeyValueHandler keyValueHandler = new KeyValueHandler(conf, cset,
volumeSet, metrics);
assertEquals(keyValueHandler.getVolumeChoosingPolicyForTesting()
.getClass().getName(), "org.apache.hadoop.ozone.container.common" +
".volume.RoundRobinVolumeChoosingPolicy");
assertEquals("org.apache.hadoop.ozone.container.common" +
".volume.RoundRobinVolumeChoosingPolicy",
keyValueHandler.getVolumeChoosingPolicyForTesting()
.getClass().getName());
//Set a class which is not of sub class of VolumeChoosingPolicy
conf.set(HDDS_DATANODE_VOLUME_CHOOSING_POLICY,

View File

@ -23,7 +23,6 @@
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -45,6 +44,8 @@
import org.junit.BeforeClass;
import org.junit.Test;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* Test the tar/untar for a given container.
*/
@ -161,7 +162,7 @@ public void pack() throws IOException, CompressorException {
//read the container descriptor only
try (FileInputStream input = new FileInputStream(targetFile.toFile())) {
String containerYaml = new String(packer.unpackContainerDescriptor(input),
Charset.forName(StandardCharsets.UTF_8.name()));
Charset.forName(UTF_8.name()));
Assert.assertEquals(TEST_DESCRIPTOR_FILE_CONTENT, containerYaml);
}
@ -177,7 +178,7 @@ public void pack() throws IOException, CompressorException {
try (FileInputStream input = new FileInputStream(targetFile.toFile())) {
descriptor =
new String(packer.unpackContainerData(destinationContainer, input),
Charset.forName(StandardCharsets.UTF_8.name()));
Charset.forName(UTF_8.name()));
}
assertExampleMetadataDbIsGood(
@ -204,7 +205,7 @@ private void assertExampleMetadataDbIsGood(Path dbPath)
try (FileInputStream testFile = new FileInputStream(dbFile.toFile())) {
List<String> strings = IOUtils
.readLines(testFile, Charset.forName(StandardCharsets.UTF_8.name()));
.readLines(testFile, Charset.forName(UTF_8.name()));
Assert.assertEquals(1, strings.size());
Assert.assertEquals(TEST_DB_FILE_CONTENT, strings.get(0));
}
@ -222,7 +223,7 @@ private void assertExampleChunkFileIsGood(Path chunkDirPath)
try (FileInputStream testFile = new FileInputStream(chunkFile.toFile())) {
List<String> strings = IOUtils
.readLines(testFile, Charset.forName(StandardCharsets.UTF_8.name()));
.readLines(testFile, Charset.forName(UTF_8.name()));
Assert.assertEquals(1, strings.size());
Assert.assertEquals(TEST_CHUNK_FILE_CONTENT, strings.get(0));
}

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Chunk Manager Checks.
*/
package org.apache.hadoop.ozone.container.keyvalue;

View File

@ -139,6 +139,7 @@ public <PAYLOAD, EVENT_TYPE extends Event<PAYLOAD>> void addHandler(
* @throws IllegalArgumentException If there is no EventHandler for
* the specific event.
*/
@Override
public <PAYLOAD, EVENT_TYPE extends Event<PAYLOAD>> void fireEvent(
EVENT_TYPE event, PAYLOAD payload) {
@ -219,7 +220,9 @@ public void processAll(long timeout) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
LOG.warn("Interrupted exception while sleeping.", e);
// We ignore this exception for time being. Review? should we
// propogate it back to caller?
}
if (Time.now() > currentTime + timeout) {
@ -229,7 +232,7 @@ public void processAll(long timeout) {
}
}
}
@Override
public void close() {
isRunning = false;

View File

@ -1,24 +1,21 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.hadoop.hdds.server.events;
import java.util.List;
import java.util.Objects;
import org.apache.hadoop.hdds.HddsIdFactory;
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
import org.apache.hadoop.ozone.lease.LeaseManager;
@ -27,6 +24,9 @@
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import java.util.Objects;
/**
* Test the basic functionality of event watcher.
*/
@ -41,7 +41,7 @@ public class TestEventWatcher {
private static final TypedEvent<ReplicationCompletedEvent>
REPLICATION_COMPLETED = new TypedEvent<>(ReplicationCompletedEvent.class);
LeaseManager<Long> leaseManager;
private LeaseManager<Long> leaseManager;
@Before
public void startLeaseManager() {
@ -56,7 +56,6 @@ public void stopLeaseManager() {
DefaultMetricsSystem.shutdown();
}
@Test
public void testEventHandling() throws InterruptedException {
EventQueue queue = new EventQueue();
@ -180,7 +179,7 @@ public void testMetrics() throws InterruptedException {
queue.fireEvent(REPLICATION_COMPLETED, event1Completed);
Thread.sleep(2200l);
Thread.sleep(2200L);
//until now: 3 in-progress activities are tracked with three
// UnderreplicatedEvents. The first one is completed, the remaining two
@ -201,27 +200,29 @@ public void testMetrics() throws InterruptedException {
}
private EventWatcher<UnderreplicatedEvent, ReplicationCompletedEvent>
createEventWatcher() {
createEventWatcher() {
return new CommandWatcherExample(WATCH_UNDER_REPLICATED,
REPLICATION_COMPLETED, leaseManager);
}
private class CommandWatcherExample
private static class CommandWatcherExample
extends EventWatcher<UnderreplicatedEvent, ReplicationCompletedEvent> {
public CommandWatcherExample(Event<UnderreplicatedEvent> startEvent,
CommandWatcherExample(Event<UnderreplicatedEvent> startEvent,
Event<ReplicationCompletedEvent> completionEvent,
LeaseManager<Long> leaseManager) {
super("TestCommandWatcher", startEvent, completionEvent, leaseManager);
}
@Override
protected void onTimeout(EventPublisher publisher, UnderreplicatedEvent payload) {
protected void onTimeout(EventPublisher publisher,
UnderreplicatedEvent payload) {
publisher.fireEvent(UNDER_REPLICATED, payload);
}
@Override
protected void onFinished(EventPublisher publisher, UnderreplicatedEvent payload) {
protected void onFinished(EventPublisher publisher,
UnderreplicatedEvent payload) {
//Good job. We did it.
}
@ -240,13 +241,14 @@ private static class ReplicationCompletedEvent
private final String datanodeId;
public ReplicationCompletedEvent(long id, String containerId,
ReplicationCompletedEvent(long id, String containerId,
String datanodeId) {
this.id = id;
this.containerId = containerId;
this.datanodeId = datanodeId;
}
@Override
public long getId() {
return id;
}
@ -279,11 +281,12 @@ private static class UnderreplicatedEvent
private final String containerId;
public UnderreplicatedEvent(long id, String containerId) {
UnderreplicatedEvent(long id, String containerId) {
this.containerId = containerId;
this.id = id;
}
@Override
public long getId() {
return id;
}

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Tests for Event Watcher.
*/
package org.apache.hadoop.hdds.server.events;

View File

@ -19,9 +19,12 @@
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
/**
* Pending Deletes in the block space.
*/
public class PendingDeleteStatusList {
private List<PendingDeleteStatus> pendingDeleteStatuses;
@ -29,7 +32,7 @@ public class PendingDeleteStatusList {
public PendingDeleteStatusList(DatanodeDetails datanodeDetails) {
this.datanodeDetails = datanodeDetails;
pendingDeleteStatuses = new LinkedList<>();
pendingDeleteStatuses = new ArrayList<>();
}
public void addPendingDeleteStatus(long dnDeleteTransactionId,
@ -39,6 +42,9 @@ public void addPendingDeleteStatus(long dnDeleteTransactionId,
containerId));
}
/**
* Status of pending deletes.
*/
public static class PendingDeleteStatus {
private long dnDeleteTransactionId;
private long scmDeleteTransactionId;

View File

@ -44,6 +44,7 @@ public ChillModePrecheck(Configuration conf) {
}
}
@Override
public boolean check(ScmOps op) throws SCMException {
if (inChillMode.get() && ChillModeRestrictedOps
.isRestrictedInChillMode(op)) {

View File

@ -134,6 +134,16 @@ public static ContainerReplicaBuilder newBuilder() {
return new ContainerReplicaBuilder();
}
@Override
public String toString() {
return "ContainerReplica{" +
"containerID=" + containerID +
", datanodeDetails=" + datanodeDetails +
", placeOfBirth=" + placeOfBirth +
", sequenceId=" + sequenceId +
'}';
}
/**
* Used for building ContainerReplica instance.
*/
@ -148,12 +158,12 @@ public static class ContainerReplicaBuilder {
/**
* Set Container Id.
*
* @param containerId ContainerID
* @param cID ContainerID
* @return ContainerReplicaBuilder
*/
public ContainerReplicaBuilder setContainerID(
final ContainerID containerId) {
containerID = containerId;
final ContainerID cID) {
this.containerID = cID;
return this;
}

View File

@ -27,7 +27,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
@ -102,7 +102,7 @@ public Configuration getConf() {
* @return list of datanodes chosen.
* @throws SCMException SCM exception.
*/
@Override
public List<DatanodeDetails> chooseDatanodes(
List<DatanodeDetails> excludedNodes,
int nodesRequired, final long sizeRequired) throws SCMException {
@ -167,7 +167,7 @@ private boolean hasEnoughSpace(DatanodeDetails datanodeDetails,
public List<DatanodeDetails> getResultSet(
int nodesRequired, List<DatanodeDetails> healthyNodes)
throws SCMException {
List<DatanodeDetails> results = new LinkedList<>();
List<DatanodeDetails> results = new ArrayList<>();
for (int x = 0; x < nodesRequired; x++) {
// invoke the choose function defined in the derived classes.
DatanodeDetails nodeId = chooseNode(healthyNodes);

View File

@ -83,6 +83,7 @@ public List<DatanodeDetails> chooseDatanodes(
* @param healthyNodes - all healthy datanodes.
* @return one randomly chosen datanode that from two randomly chosen datanode
*/
@Override
public DatanodeDetails chooseNode(final List<DatanodeDetails> healthyNodes) {
DatanodeDetails selectedNode =
healthyNodes.get(getRand().nextInt(healthyNodes.size()));

View File

@ -23,7 +23,7 @@
* DatanodeMetric acts as the basis for all the metric that is used in
* comparing 2 datanodes.
*/
public interface DatanodeMetric<T, S> extends Comparable<T> {
public interface DatanodeMetric<T, S> {
/**
* Some syntactic sugar over Comparable interface. This makes code easier to
@ -87,5 +87,4 @@ public interface DatanodeMetric<T, S> extends Comparable<T> {
*/
void subtract(T value);
}

View File

@ -136,7 +136,6 @@ public void subtract(Long subValue) {
* @throws ClassCastException if the specified object's type prevents it
* from being compared to this object.
*/
@Override
public int compareTo(Long o) {
return Long.compare(this.value, o);
}

View File

@ -23,7 +23,7 @@
/**
* SCM Node Metric that is used in the placement classes.
*/
public class SCMNodeMetric implements DatanodeMetric<SCMNodeStat, Long> {
public class SCMNodeMetric implements DatanodeMetric<SCMNodeStat, Long> {
private SCMNodeStat stat;
/**
@ -191,7 +191,7 @@ public void subtract(SCMNodeStat value) {
* @throws ClassCastException if the specified object's type prevents it
* from being compared to this object.
*/
@Override
//@Override
public int compareTo(SCMNodeStat o) {
if (isEqual(o)) {
return 0;

View File

@ -52,6 +52,7 @@ public SCMNodeStat(long capacity, long used, long remaining) {
/**
* @return the total configured capacity of the node.
*/
@Override
public LongMetric getCapacity() {
return capacity;
}
@ -59,6 +60,7 @@ public LongMetric getCapacity() {
/**
* @return the total SCM used space on the node.
*/
@Override
public LongMetric getScmUsed() {
return scmUsed;
}
@ -66,6 +68,7 @@ public LongMetric getScmUsed() {
/**
* @return the total remaining space available on the node.
*/
@Override
public LongMetric getRemaining() {
return remaining;
}
@ -77,12 +80,9 @@ public LongMetric getRemaining() {
* @param newUsed in bytes
* @param newRemaining in bytes
*/
@Override
@VisibleForTesting
public void set(long newCapacity, long newUsed, long newRemaining) {
Preconditions.checkNotNull(newCapacity, "Capacity cannot be null");
Preconditions.checkNotNull(newUsed, "used cannot be null");
Preconditions.checkNotNull(newRemaining, "remaining cannot be null");
Preconditions.checkArgument(newCapacity >= 0, "Capacity cannot be " +
"negative.");
Preconditions.checkArgument(newUsed >= 0, "used space cannot be " +
@ -101,6 +101,7 @@ public void set(long newCapacity, long newUsed, long newRemaining) {
* @param stat Nodestat.
* @return SCMNodeStat
*/
@Override
public SCMNodeStat add(NodeStat stat) {
this.capacity.set(this.getCapacity().get() + stat.getCapacity().get());
this.scmUsed.set(this.getScmUsed().get() + stat.getScmUsed().get());
@ -114,6 +115,7 @@ public SCMNodeStat add(NodeStat stat) {
* @param stat SCMNodeStat.
* @return Modified SCMNodeStat
*/
@Override
public SCMNodeStat subtract(NodeStat stat) {
this.capacity.set(this.getCapacity().get() - stat.getCapacity().get());
this.scmUsed.set(this.getScmUsed().get() - stat.getScmUsed().get());

View File

@ -48,12 +48,13 @@ public ReplicationActivityStatus(){
replicationStatusListener = new ReplicationStatusListener();
chillModeStatusListener = new ChillModeStatusListener();
}
@Override
public boolean isReplicationEnabled() {
return replicationEnabled.get();
}
@VisibleForTesting
@Override
public void setReplicationEnabled(boolean enabled) {
replicationEnabled.set(enabled);
}

View File

@ -98,6 +98,7 @@ public void start() {
threadFactory.newThread(this).start();
}
@Override
public void run() {
while (running) {
@ -168,6 +169,7 @@ public void run() {
} else if (deficit < 0) {
//TODO: too many replicas. Not handled yet.
LOG.debug("Too many replicas is not handled yet.");
}
} catch (Exception e) {

View File

@ -22,8 +22,8 @@
import org.apache.hadoop.ozone.protocol.commands.SCMCommand;
import org.apache.hadoop.util.Time;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@ -39,7 +39,7 @@
*/
public class CommandQueue {
// This list is used as default return value.
private static final List<SCMCommand> DEFAULT_LIST = new LinkedList<>();
private static final List<SCMCommand> DEFAULT_LIST = new ArrayList<>();
private final Map<UUID, Commands> commandMap;
private final Lock lock;
private long commandsInQueue;
@ -136,7 +136,7 @@ private static class Commands {
* Constructs a Commands class.
*/
Commands() {
commands = new LinkedList<>();
commands = new ArrayList<>();
updateTime = 0;
readTime = 0;
}
@ -182,7 +182,7 @@ public void add(SCMCommand command) {
*/
public List<SCMCommand> getCommands() {
List<SCMCommand> temp = this.commands;
this.commands = new LinkedList<>();
this.commands = new ArrayList<>();
readTime = Time.monotonicNow();
return temp;
}

View File

@ -144,6 +144,8 @@ public NodeStateManager(Configuration conf, EventPublisher eventPublisher) {
executorService = HadoopExecutors.newScheduledThreadPool(1,
new ThreadFactoryBuilder().setDaemon(true)
.setNameFormat("SCM Heartbeat Processing Thread - %d").build());
//BUG:BUG TODO: The return value is ignored, if an exception is thrown in
// the executing funtion, it will be ignored.
executorService.schedule(this, heartbeatCheckerIntervalMs,
TimeUnit.MILLISECONDS);
}
@ -331,7 +333,7 @@ public List<DatanodeDetails> getDeadNodes() {
* @return list of nodes
*/
public List<DatanodeDetails> getNodes(NodeState state) {
List<DatanodeDetails> nodes = new LinkedList<>();
List<DatanodeDetails> nodes = new ArrayList<>();
nodeStateMap.getNodes(state).forEach(
uuid -> {
try {
@ -352,7 +354,7 @@ public List<DatanodeDetails> getNodes(NodeState state) {
* @return all the managed nodes
*/
public List<DatanodeDetails> getAllNodes() {
List<DatanodeDetails> nodes = new LinkedList<>();
List<DatanodeDetails> nodes = new ArrayList<>();
nodeStateMap.getAllNodes().forEach(
uuid -> {
try {
@ -613,6 +615,8 @@ public void run() {
if (!Thread.currentThread().isInterrupted() &&
!executorService.isShutdown()) {
//BUGBUG: The return future needs to checked here to make sure the
// exceptions are handled correctly.
executorService.schedule(this, heartbeatCheckerIntervalMs,
TimeUnit.MILLISECONDS);
} else {

View File

@ -59,6 +59,7 @@ public Set<ContainerID> getContainers(UUID datanode) {
* @param datanodeID -- Datanode UUID
* @param containerIDs - List of ContainerIDs.
*/
@Override
public void insertNewDatanode(UUID datanodeID, Set<ContainerID> containerIDs)
throws SCMException {
super.insertNewDatanode(datanodeID, containerIDs);
@ -84,6 +85,7 @@ public void setContainersForDatanode(UUID datanodeID,
}
@VisibleForTesting
@Override
public int size() {
return dn2ObjectMap.size();
}

View File

@ -172,7 +172,7 @@ public DatanodeInfo getNodeInfo(UUID uuid) throws NodeNotFoundException {
public List<UUID> getNodes(NodeState state) {
lock.readLock().lock();
try {
return new LinkedList<>(stateMap.get(state));
return new ArrayList<>(stateMap.get(state));
} finally {
lock.readLock().unlock();
}
@ -186,7 +186,7 @@ public List<UUID> getNodes(NodeState state) {
public List<UUID> getAllNodes() {
lock.readLock().lock();
try {
return new LinkedList<>(nodeMap.keySet());
return new ArrayList<>(nodeMap.keySet());
} finally {
lock.readLock().unlock();
}

View File

@ -30,6 +30,7 @@
import org.apache.hadoop.hdds.server.ServerUtils;
import org.apache.hadoop.hdds.server.events.EventPublisher;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.utils.MetadataKeyFilters;
import org.apache.hadoop.utils.MetadataStore;
import org.apache.hadoop.utils.MetadataStoreBuilder;
import org.slf4j.Logger;
@ -94,7 +95,8 @@ private void initializePipelineState() throws IOException {
return;
}
List<Map.Entry<byte[], byte[]>> pipelines =
pipelineStore.getSequentialRangeKVs(null, Integer.MAX_VALUE, null);
pipelineStore.getSequentialRangeKVs(null, Integer.MAX_VALUE,
(MetadataKeyFilters.MetadataKeyFilter[])null);
for (Map.Entry<byte[], byte[]> entry : pipelines) {
Pipeline pipeline = Pipeline.getFromProtobuf(

View File

@ -58,7 +58,6 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@ -354,7 +353,7 @@ public boolean forceExitChillMode() throws IOException {
*/
public List<DatanodeDetails> queryNode(HddsProtos.NodeState state) {
Preconditions.checkNotNull(state, "Node Query set cannot be null");
return new LinkedList<>(queryNodeState(state));
return new ArrayList<>(queryNodeState(state));
}
@VisibleForTesting

View File

@ -89,7 +89,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -225,7 +225,7 @@ public static SCMRegisteredResponseProto getRegisteredResponse(
@Override
public SCMHeartbeatResponseProto sendHeartbeat(
SCMHeartbeatRequestProto heartbeat) throws IOException {
List<SCMCommandProto> cmdResponses = new LinkedList<>();
List<SCMCommandProto> cmdResponses = new ArrayList<>();
for (SCMCommand cmd : heartbeatDispatcher.dispatch(heartbeat)) {
cmdResponses.add(getCommandResponse(cmd));
}

View File

@ -42,7 +42,7 @@
import static org.junit.Assert.assertTrue;
/**
* Unit tests for {@link HddsServerUtil}
* Unit tests for {@link HddsServerUtil}.
*/
public class TestHddsServerUtils {
public static final Logger LOG = LoggerFactory.getLogger(
@ -58,6 +58,7 @@ public class TestHddsServerUtils {
* Test getting OZONE_SCM_DATANODE_ADDRESS_KEY with port.
*/
@Test
@SuppressWarnings("StringSplitter")
public void testGetDatanodeAddressWithPort() {
final String scmHost = "host123:100";
final Configuration conf = new OzoneConfiguration();
@ -78,8 +79,8 @@ public void testGetDatanodeAddressWithoutPort() {
conf.set(OZONE_SCM_DATANODE_ADDRESS_KEY, scmHost);
final InetSocketAddress address =
HddsServerUtil.getScmAddressForDataNodes(conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_DATANODE_PORT_DEFAULT);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_DATANODE_PORT_DEFAULT, address.getPort());
}
/**
@ -93,8 +94,8 @@ public void testDatanodeAddressFallbackToClientNoPort() {
conf.set(OZONE_SCM_CLIENT_ADDRESS_KEY, scmHost);
final InetSocketAddress address =
HddsServerUtil.getScmAddressForDataNodes(conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_DATANODE_PORT_DEFAULT);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_DATANODE_PORT_DEFAULT, address.getPort());
}
/**
@ -103,6 +104,7 @@ public void testDatanodeAddressFallbackToClientNoPort() {
* OZONE_SCM_CLIENT_ADDRESS_KEY should be ignored.
*/
@Test
@SuppressWarnings("StringSplitter")
public void testDatanodeAddressFallbackToClientWithPort() {
final String scmHost = "host123:100";
final Configuration conf = new OzoneConfiguration();
@ -124,8 +126,8 @@ public void testDatanodeAddressFallbackToScmNamesNoPort() {
conf.set(OZONE_SCM_NAMES, scmHost);
final InetSocketAddress address =
HddsServerUtil.getScmAddressForDataNodes(conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_DATANODE_PORT_DEFAULT);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_DATANODE_PORT_DEFAULT, address.getPort());
}
/**
@ -134,6 +136,7 @@ public void testDatanodeAddressFallbackToScmNamesNoPort() {
* defined by OZONE_SCM_NAMES should be ignored.
*/
@Test
@SuppressWarnings("StringSplitter")
public void testDatanodeAddressFallbackToScmNamesWithPort() {
final String scmHost = "host123:100";
final Configuration conf = new OzoneConfiguration();
@ -141,7 +144,7 @@ public void testDatanodeAddressFallbackToScmNamesWithPort() {
final InetSocketAddress address =
HddsServerUtil.getScmAddressForDataNodes(conf);
assertEquals(address.getHostName(), scmHost.split(":")[0]);
assertEquals(address.getPort(), OZONE_SCM_DATANODE_PORT_DEFAULT);
assertEquals(OZONE_SCM_DATANODE_PORT_DEFAULT, address.getPort());
}
/**

View File

@ -48,7 +48,7 @@
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@ -378,12 +378,9 @@ public void testScmDetectStaleAndDeadNode() throws IOException,
* Check for NPE when datanodeDetails is passed null for sendHeartbeat.
*
* @throws IOException
* @throws InterruptedException
* @throws TimeoutException
*/
@Test
public void testScmCheckForErrorOnNullDatanodeDetails() throws IOException,
InterruptedException, TimeoutException {
public void testScmCheckForErrorOnNullDatanodeDetails() throws IOException {
try (SCMNodeManager nodeManager = createNodeManager(getConf())) {
nodeManager.processHeartbeat(null);
} catch (NullPointerException npe) {
@ -588,7 +585,7 @@ private void heartbeatNodeSet(SCMNodeManager manager,
*/
private List<DatanodeDetails> createNodeSet(SCMNodeManager nodeManager, int
count) {
List<DatanodeDetails> list = new LinkedList<>();
List<DatanodeDetails> list = new ArrayList<>();
for (int x = 0; x < count; x++) {
DatanodeDetails datanodeDetails = TestUtils
.createRandomDatanodeAndRegister(nodeManager);
@ -943,7 +940,7 @@ public void testScmNodeReportUpdate() throws IOException,
}
@Test
public void testHandlingSCMCommandEvent() {
public void testHandlingSCMCommandEvent() throws IOException {
OzoneConfiguration conf = getConf();
conf.getTimeDuration(ScmConfigKeys.OZONE_SCM_HEARTBEAT_PROCESS_INTERVAL,
100, TimeUnit.MILLISECONDS);
@ -974,6 +971,7 @@ public void testHandlingSCMCommandEvent() {
.assertEquals(command.get(0).getClass(), CloseContainerCommand.class);
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}

View File

@ -150,22 +150,22 @@ public void testProcessNodeReportCheckOneNode() throws IOException {
path, reportCapacity, reportScmUsed, reportRemaining, null);
StorageReportResult result =
map.processNodeReport(key, TestUtils.createNodeReport(storageReport));
Assert.assertEquals(result.getStatus(),
SCMNodeStorageStatMap.ReportStatus.ALL_IS_WELL);
Assert.assertEquals(SCMNodeStorageStatMap.ReportStatus.ALL_IS_WELL,
result.getStatus());
StorageContainerDatanodeProtocolProtos.NodeReportProto.Builder nrb =
NodeReportProto.newBuilder();
StorageReportProto srb = reportSet.iterator().next().getProtoBufMessage();
reportList.add(srb);
result = map.processNodeReport(key, TestUtils.createNodeReport(reportList));
Assert.assertEquals(result.getStatus(),
SCMNodeStorageStatMap.ReportStatus.ALL_IS_WELL);
Assert.assertEquals(SCMNodeStorageStatMap.ReportStatus.ALL_IS_WELL,
result.getStatus());
reportList.add(TestUtils
.createStorageReport(UUID.randomUUID(), path, reportCapacity,
reportCapacity, 0, null));
result = map.processNodeReport(key, TestUtils.createNodeReport(reportList));
Assert.assertEquals(result.getStatus(),
SCMNodeStorageStatMap.ReportStatus.STORAGE_OUT_OF_SPACE);
Assert.assertEquals(SCMNodeStorageStatMap.ReportStatus.STORAGE_OUT_OF_SPACE,
result.getStatus());
// Mark a disk failed
StorageReportProto srb2 = StorageReportProto.newBuilder()
.setStorageUuid(UUID.randomUUID().toString())
@ -174,8 +174,8 @@ public void testProcessNodeReportCheckOneNode() throws IOException {
reportList.add(srb2);
nrb.addAllStorageReport(reportList);
result = map.processNodeReport(key, nrb.addStorageReport(srb).build());
Assert.assertEquals(result.getStatus(),
SCMNodeStorageStatMap.ReportStatus.FAILED_AND_OUT_OF_SPACE_STORAGE);
Assert.assertEquals(SCMNodeStorageStatMap.ReportStatus
.FAILED_AND_OUT_OF_SPACE_STORAGE, result.getStatus());
}

View File

@ -51,7 +51,7 @@ private void generateData() {
for (int dnIndex = 1; dnIndex <= DATANODE_COUNT; dnIndex++) {
TreeSet<ContainerID> currentSet = new TreeSet<>();
for (int cnIndex = 1; cnIndex <= CONTAINER_COUNT; cnIndex++) {
long currentCnIndex = (dnIndex * CONTAINER_COUNT) + cnIndex;
long currentCnIndex = (long) (dnIndex * CONTAINER_COUNT) + cnIndex;
currentSet.add(new ContainerID(currentCnIndex));
}
testData.put(UUID.randomUUID(), currentSet);
@ -115,8 +115,8 @@ public void testProcessReportCheckOneNode() throws SCMException {
map.insertNewDatanode(key, values);
Assert.assertTrue(map.isKnownDatanode(key));
ReportResult result = map.processReport(key, values);
Assert.assertEquals(result.getStatus(),
ReportResult.ReportStatus.ALL_IS_WELL);
Assert.assertEquals(ReportResult.ReportStatus.ALL_IS_WELL,
result.getStatus());
}
@Test

View File

@ -19,9 +19,8 @@
import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeMetric;
import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeStat;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@ -30,20 +29,18 @@
* Tests that test Metrics that support placement.
*/
public class TestDatanodeMetrics {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testSCMNodeMetric() {
SCMNodeStat stat = new SCMNodeStat(100L, 10L, 90L);
assertEquals((long) stat.getCapacity().get(), 100L);
assertEquals((long) stat.getScmUsed().get(), 10L);
assertEquals((long) stat.getRemaining().get(), 90L);
assertEquals(10L, (long) stat.getScmUsed().get());
assertEquals(90L, (long) stat.getRemaining().get());
SCMNodeMetric metric = new SCMNodeMetric(stat);
SCMNodeStat newStat = new SCMNodeStat(100L, 10L, 90L);
assertEquals((long) stat.getCapacity().get(), 100L);
assertEquals((long) stat.getScmUsed().get(), 10L);
assertEquals((long) stat.getRemaining().get(), 90L);
assertEquals(100L, (long) stat.getCapacity().get());
assertEquals(10L, (long) stat.getScmUsed().get());
assertEquals(90L, (long) stat.getRemaining().get());
SCMNodeMetric newMetric = new SCMNodeMetric(newStat);
assertTrue(metric.isEqual(newMetric.get()));

View File

@ -124,6 +124,7 @@ public String getOzoneBucketMapping(String s3BucketName) throws IOException {
* @return String - Ozone Volume name.
* @throws IOException - Throws if the s3Bucket does not exist.
*/
@SuppressWarnings("StringSplitter")
public String getOzoneVolumeName(String s3BucketName) throws IOException {
String mapping = getOzoneBucketMapping(s3BucketName);
return mapping.split("/")[0];
@ -136,6 +137,7 @@ public String getOzoneVolumeName(String s3BucketName) throws IOException {
* @return String - Ozone bucket Name.
* @throws IOException - Throws if the s3bucket does not exist.
*/
@SuppressWarnings("StringSplitter")
public String getOzoneBucketName(String s3BucketName) throws IOException {
String mapping = getOzoneBucketMapping(s3BucketName);
return mapping.split("/")[1];

View File

@ -610,6 +610,7 @@ public String getOzoneBucketMapping(String s3BucketName) throws IOException {
}
@Override
@SuppressWarnings("StringSplitter")
public String getOzoneVolumeName(String s3BucketName) throws IOException {
String mapping = getOzoneBucketMapping(s3BucketName);
return mapping.split("/")[0];
@ -617,6 +618,7 @@ public String getOzoneVolumeName(String s3BucketName) throws IOException {
}
@Override
@SuppressWarnings("StringSplitter")
public String getOzoneBucketName(String s3BucketName) throws IOException {
String mapping = getOzoneBucketMapping(s3BucketName);
return mapping.split("/")[1];

View File

@ -40,11 +40,12 @@
/**
* This test class verifies the parsing of SCM endpoint config settings. The
* parsing logic is in {@link org.apache.hadoop.hdds.scm.client.HddsClientUtils}.
* parsing logic is in
* {@link org.apache.hadoop.hdds.scm.client.HddsClientUtils}.
*/
public class TestHddsClientUtils {
@Rule
public Timeout timeout = new Timeout(300_000);
public Timeout timeout = new Timeout(300000);
@Rule
public ExpectedException thrown= ExpectedException.none();
@ -114,13 +115,14 @@ public void testBlockClientFallbackToClientNoPort() {
final String scmHost = "host123";
final Configuration conf = new OzoneConfiguration();
conf.set(OZONE_SCM_CLIENT_ADDRESS_KEY, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForBlockClients(
final InetSocketAddress address = HddsUtils.getScmAddressForBlockClients(
conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test
@SuppressWarnings("StringSplitter")
public void testBlockClientFallbackToClientWithPort() {
// When OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY is undefined it should
// fallback to OZONE_SCM_CLIENT_ADDRESS_KEY.
@ -132,8 +134,8 @@ public void testBlockClientFallbackToClientWithPort() {
conf.set(OZONE_SCM_CLIENT_ADDRESS_KEY, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForBlockClients(
conf);
assertEquals(address.getHostName(), scmHost.split(":")[0]);
assertEquals(address.getPort(), OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT);
assertEquals(scmHost.split(":")[0], address.getHostName());
assertEquals(OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test
@ -143,13 +145,14 @@ public void testBlockClientFallbackToScmNamesNoPort() {
final String scmHost = "host456";
final Configuration conf = new OzoneConfiguration();
conf.set(OZONE_SCM_NAMES, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForBlockClients(
final InetSocketAddress address = HddsUtils.getScmAddressForBlockClients(
conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test
@SuppressWarnings("StringSplitter")
public void testBlockClientFallbackToScmNamesWithPort() {
// When OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY and OZONE_SCM_CLIENT_ADDRESS_KEY
// are undefined it should fallback to OZONE_SCM_NAMES.
@ -159,10 +162,10 @@ public void testBlockClientFallbackToScmNamesWithPort() {
final String scmHost = "host456:200";
final Configuration conf = new OzoneConfiguration();
conf.set(OZONE_SCM_NAMES, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForBlockClients(
final InetSocketAddress address = HddsUtils.getScmAddressForBlockClients(
conf);
assertEquals(address.getHostName(), scmHost.split(":")[0]);
assertEquals(address.getPort(), OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT);
assertEquals(scmHost.split(":")[0], address.getHostName());
assertEquals(OZONE_SCM_BLOCK_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test
@ -172,12 +175,13 @@ public void testClientFallbackToScmNamesNoPort() {
final String scmHost = "host456";
final Configuration conf = new OzoneConfiguration();
conf.set(OZONE_SCM_NAMES, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForClients(conf);
assertEquals(address.getHostName(), scmHost);
assertEquals(address.getPort(), OZONE_SCM_CLIENT_PORT_DEFAULT);
final InetSocketAddress address = HddsUtils.getScmAddressForClients(conf);
assertEquals(scmHost, address.getHostName());
assertEquals(OZONE_SCM_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test
@SuppressWarnings("StringSplitter")
public void testClientFallbackToScmNamesWithPort() {
// When OZONE_SCM_CLIENT_ADDRESS_KEY is undefined, it should fallback
// to OZONE_SCM_NAMES.
@ -187,9 +191,9 @@ public void testClientFallbackToScmNamesWithPort() {
final String scmHost = "host456:300";
final Configuration conf = new OzoneConfiguration();
conf.set(OZONE_SCM_NAMES, scmHost);
final InetSocketAddress address =HddsUtils.getScmAddressForClients(conf);
assertEquals(address.getHostName(), scmHost.split(":")[0]);
assertEquals(address.getPort(), OZONE_SCM_CLIENT_PORT_DEFAULT);
final InetSocketAddress address = HddsUtils.getScmAddressForClients(conf);
assertEquals(scmHost.split(":")[0], address.getHostName());
assertEquals(OZONE_SCM_CLIENT_PORT_DEFAULT, address.getPort());
}
@Test

View File

@ -34,6 +34,7 @@
/**
* This helper class keeps a map of all user and their permissions.
*/
@SuppressWarnings("ProtocolBufferOrdinal")
public class OmOzoneAclMap {
// per Acl Type user:rights map
private ArrayList<Map<String, OzoneAclRights>> aclMaps;

View File

@ -18,7 +18,7 @@
package org.apache.hadoop.ozone.web.response;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hdds.protocol.StorageType;
@ -85,7 +85,7 @@ public BucketInfo(String volumeName, String bucketName) {
* Default constructor for BucketInfo.
*/
public BucketInfo() {
acls = new LinkedList<OzoneAcl>();
acls = new ArrayList<>();
}
/**
@ -318,7 +318,7 @@ public void setKeyCount(long keyCount) {
* for the Json serialization.
*/
@JsonFilter(BUCKET_INFO)
class MixIn {
static class MixIn {
}

View File

@ -18,17 +18,19 @@
package org.apache.hadoop.ozone.web;
import org.apache.hadoop.ozone.OzoneAcl;
import org.apache.hadoop.hdds.protocol.StorageType;
import org.apache.hadoop.ozone.web.response.BucketInfo;
import org.apache.hadoop.ozone.OzoneAcl;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.web.response.BucketInfo;
import org.junit.Test;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Test Ozone Bucket Info operation.
*/
@ -38,7 +40,7 @@ public void testBucketInfoJson() throws IOException {
BucketInfo bucketInfo = new BucketInfo("volumeName", "bucketName");
String bucketInfoString = bucketInfo.toJsonString();
BucketInfo newBucketInfo = BucketInfo.parse(bucketInfoString);
assert(bucketInfo.equals(newBucketInfo));
assertEquals(bucketInfo, newBucketInfo);
}
@Test
@ -46,7 +48,7 @@ public void testBucketInfoDBString() throws IOException {
BucketInfo bucketInfo = new BucketInfo("volumeName", "bucketName");
String bucketInfoString = bucketInfo.toDBString();
BucketInfo newBucketInfo = BucketInfo.parse(bucketInfoString);
assert(bucketInfo.equals(newBucketInfo));
assertEquals(bucketInfo, newBucketInfo);
}
@Test
@ -54,18 +56,17 @@ public void testBucketInfoAddAcls() throws IOException {
BucketInfo bucketInfo = new BucketInfo("volumeName", "bucketName");
String bucketInfoString = bucketInfo.toDBString();
BucketInfo newBucketInfo = BucketInfo.parse(bucketInfoString);
assert(bucketInfo.equals(newBucketInfo));
List<OzoneAcl> aclList = new LinkedList<>();
assertEquals(bucketInfo, newBucketInfo);
List<OzoneAcl> aclList = new ArrayList<>();
aclList.add(OzoneAcl.parseAcl("user:bilbo:r"));
aclList.add(OzoneAcl.parseAcl("user:samwise:rw"));
newBucketInfo.setAcls(aclList);
assert(newBucketInfo.getAcls() != null);
assert(newBucketInfo.getAcls().size() == 2);
assertNotNull(newBucketInfo.getAcls());
assertEquals(2, newBucketInfo.getAcls().size());
}
@Test
public void testBucketInfoVersionAndType() throws IOException {
BucketInfo bucketInfo = new BucketInfo("volumeName", "bucketName");
@ -75,7 +76,7 @@ public void testBucketInfoVersionAndType() throws IOException {
String bucketInfoString = bucketInfo.toDBString();
BucketInfo newBucketInfo = BucketInfo.parse(bucketInfoString);
assert(bucketInfo.equals(newBucketInfo));
assertEquals(bucketInfo, newBucketInfo);
}
}

View File

@ -1,19 +1,18 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.hadoop.ozone.web;
@ -82,29 +81,29 @@ public void testParseQuota() {
@Test
public void testVerifyQuota() {
OzoneQuota qt = OzoneQuota.parseQuota("10TB");
assertEquals(qt.getSize(), 10);
assertEquals(qt.getUnit(), OzoneQuota.Units.TB);
assertEquals(qt.sizeInBytes(), 10L * (1024L * 1024L * 1024L * 1024L));
assertEquals(10, qt.getSize());
assertEquals(OzoneQuota.Units.TB, qt.getUnit());
assertEquals(10L * (1024L * 1024L * 1024L * 1024L), qt.sizeInBytes());
qt = OzoneQuota.parseQuota("10MB");
assertEquals(qt.getSize(), 10);
assertEquals(qt.getUnit(), OzoneQuota.Units.MB);
assertEquals(qt.sizeInBytes(), 10L * (1024L * 1024L));
assertEquals(10, qt.getSize());
assertEquals(OzoneQuota.Units.MB, qt.getUnit());
assertEquals(10L * (1024L * 1024L), qt.sizeInBytes());
qt = OzoneQuota.parseQuota("10GB");
assertEquals(qt.getSize(), 10);
assertEquals(qt.getUnit(), OzoneQuota.Units.GB);
assertEquals(qt.sizeInBytes(), 10L * (1024L * 1024L * 1024L));
assertEquals(10, qt.getSize());
assertEquals(OzoneQuota.Units.GB, qt.getUnit());
assertEquals(10L * (1024L * 1024L * 1024L), qt.sizeInBytes());
qt = OzoneQuota.parseQuota("10BYTES");
assertEquals(qt.getSize(), 10);
assertEquals(qt.getUnit(), OzoneQuota.Units.BYTES);
assertEquals(qt.sizeInBytes(), 10L);
assertEquals(10, qt.getSize());
assertEquals(OzoneQuota.Units.BYTES, qt.getUnit());
assertEquals(10L, qt.sizeInBytes());
OzoneQuota emptyQuota = new OzoneQuota();
assertEquals(emptyQuota.sizeInBytes(), -1L);
assertEquals(emptyQuota.getSize(), 0);
assertEquals(emptyQuota.getUnit(), OzoneQuota.Units.UNDEFINED);
assertEquals(-1L, emptyQuota.sizeInBytes());
assertEquals(0, emptyQuota.getSize());
assertEquals(OzoneQuota.Units.UNDEFINED, emptyQuota.getUnit());
}
@Test

View File

@ -23,8 +23,7 @@
import org.apache.hadoop.hdds.scm.container.ContainerID;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.container.ContainerManager;
import org.apache.hadoop.hdds.scm.container.common.helpers
.ContainerWithPipeline;
import org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline;
import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
import org.apache.hadoop.ozone.MiniOzoneCluster;
import org.junit.AfterClass;
@ -36,11 +35,12 @@
import java.util.Set;
import java.util.concurrent.TimeoutException;
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos
.ReplicationFactor.THREE;
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos
.ReplicationType.RATIS;
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor.THREE;
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType.RATIS;
/**
* Tests for Pipeline Closing.
*/
public class TestPipelineClose {
private static MiniOzoneCluster cluster;
@ -88,7 +88,6 @@ public static void shutdown() {
}
}
@Test
public void testPipelineCloseWithClosedContainer() throws IOException {
Set<ContainerID> set = pipelineManager
@ -112,8 +111,8 @@ public void testPipelineCloseWithClosedContainer() throws IOException {
pipelineManager.finalizePipeline(ratisContainer1.getPipeline().getId());
Pipeline pipeline1 = pipelineManager
.getPipeline(ratisContainer1.getPipeline().getId());
Assert.assertEquals(pipeline1.getPipelineState(),
Pipeline.PipelineState.CLOSED);
Assert.assertEquals(Pipeline.PipelineState.CLOSED,
pipeline1.getPipelineState());
pipelineManager.removePipeline(pipeline1.getId());
for (DatanodeDetails dn : ratisContainer1.getPipeline().getNodes()) {
// Assert that the pipeline has been removed from Node2PipelineMap as well
@ -131,12 +130,12 @@ public void testPipelineCloseWithOpenContainer() throws IOException,
ContainerID cId2 = ratisContainer2.getContainerInfo().containerID();
pipelineManager.finalizePipeline(ratisContainer2.getPipeline().getId());
Assert.assertEquals(
pipelineManager.getPipeline(ratisContainer2.getPipeline().getId())
.getPipelineState(), Pipeline.PipelineState.CLOSED);
Assert.assertEquals(Pipeline.PipelineState.CLOSED,
pipelineManager.getPipeline(
ratisContainer2.getPipeline().getId()).getPipelineState());
Pipeline pipeline2 = pipelineManager
.getPipeline(ratisContainer2.getPipeline().getId());
Assert.assertEquals(pipeline2.getPipelineState(),
Pipeline.PipelineState.CLOSED);
Assert.assertEquals(Pipeline.PipelineState.CLOSED,
pipeline2.getPipelineState());
}
}

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Package info tests.
*/
package org.apache.hadoop.hdds.scm.pipeline;

View File

@ -29,7 +29,15 @@
import java.util.List;
import java.util.function.Consumer;
public class OzoneTestUtils {
/**
* Helper class for Tests.
*/
public final class OzoneTestUtils {
/**
* Never Constructed.
*/
private OzoneTestUtils() {
}
/**
* Close containers which contain the blocks listed in
@ -55,7 +63,7 @@ public static boolean closeContainers(
.getContainer(ContainerID.valueof(
blockID.getContainerID())).isOpen());
} catch (IOException e) {
e.printStackTrace();
throw new AssertionError("Failed to close the container", e);
}
}, omKeyLocationInfoGroups);
}

View File

@ -40,12 +40,11 @@
import org.apache.hadoop.ozone.web.utils.OzoneUtils;
import org.apache.hadoop.utils.MetadataKeyFilters;
import org.apache.hadoop.utils.MetadataKeyFilters.KeyPrefixFilter;
import org.apache.hadoop.utils.MetadataKeyFilters.MetadataKeyFilter;
import org.apache.hadoop.utils.MetadataStore;
import java.io.IOException;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -83,8 +82,8 @@ public Map<String, OmKeyInfo> createKeys(int numOfKeys, int keySize)
storageHandler.createVolume(createVolumeArgs);
BucketArgs bucketArgs = new BucketArgs(bucket, createVolumeArgs);
bucketArgs.setAddAcls(new LinkedList<>());
bucketArgs.setRemoveAcls(new LinkedList<>());
bucketArgs.setAddAcls(new ArrayList<>());
bucketArgs.setRemoveAcls(new ArrayList<>());
bucketArgs.setStorageType(StorageType.DISK);
storageHandler.createBucket(bucketArgs);
@ -144,9 +143,6 @@ public List<Long> getAllBlocks(Set<Long> containerIDs)
public List<Long> getAllBlocks(Long containeID) throws IOException {
List<Long> allBlocks = Lists.newArrayList();
MetadataStore meta = getContainerMetadata(containeID);
MetadataKeyFilter filter =
(preKey, currentKey, nextKey) -> !DFSUtil.bytes2String(currentKey)
.startsWith(OzoneConsts.DELETING_KEY_PREFIX);
List<Map.Entry<byte[], byte[]>> kvs =
meta.getRangeKVs(null, Integer.MAX_VALUE,
MetadataKeyFilters.getNormalKeyFilter());

View File

@ -61,6 +61,8 @@
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.HDDS_SCM_WATCHER_TIMEOUT;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_STALENODE_INTERVAL;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* Tests Close Container Exception handling by Ozone Client.
*/
@ -121,7 +123,8 @@ public void testBlockWritesWithFlushAndClose() throws Exception {
OzoneOutputStream key = createKey(keyName, ReplicationType.RATIS, 0);
// write data more than 1 chunk
byte[] data = ContainerTestHelper
.getFixedLengthString(keyString, chunkSize + chunkSize / 2).getBytes();
.getFixedLengthString(keyString, chunkSize + chunkSize / 2)
.getBytes(UTF_8);
key.write(data);
Assert.assertTrue(key.getOutputStream() instanceof ChunkGroupOutputStream);
@ -141,9 +144,9 @@ public void testBlockWritesWithFlushAndClose() throws Exception {
Assert.assertEquals(2 * data.length, keyInfo.getDataSize());
// Written the same data twice
String dataString = new String(data);
dataString.concat(dataString);
validateData(keyName, dataString.getBytes());
String dataString = new String(data, UTF_8);
dataString = dataString.concat(dataString);
validateData(keyName, dataString.getBytes(UTF_8));
}
@Test
@ -152,7 +155,8 @@ public void testBlockWritesCloseConsistency() throws Exception {
OzoneOutputStream key = createKey(keyName, ReplicationType.RATIS, 0);
// write data more than 1 chunk
byte[] data = ContainerTestHelper
.getFixedLengthString(keyString, chunkSize + chunkSize / 2).getBytes();
.getFixedLengthString(keyString, chunkSize + chunkSize / 2)
.getBytes(UTF_8);
key.write(data);
Assert.assertTrue(key.getOutputStream() instanceof ChunkGroupOutputStream);
@ -184,7 +188,7 @@ public void testMultiBlockWrites() throws Exception {
// write data more than 1 chunk
byte[] data =
ContainerTestHelper.getFixedLengthString(keyString, (3 * blockSize))
.getBytes();
.getBytes(UTF_8);
Assert.assertEquals(data.length, 3 * blockSize);
key.write(data);
@ -199,7 +203,7 @@ public void testMultiBlockWrites() throws Exception {
// write 1 more block worth of data. It will fail and new block will be
// allocated
key.write(ContainerTestHelper.getFixedLengthString(keyString, blockSize)
.getBytes());
.getBytes(UTF_8));
key.close();
// read the key from OM again and match the length.The length will still
@ -232,13 +236,13 @@ public void testMultiBlockWrites2() throws Exception {
Assert.assertEquals(4, groupOutputStream.getStreamEntries().size());
String dataString =
ContainerTestHelper.getFixedLengthString(keyString, (2 * blockSize));
byte[] data = dataString.getBytes();
byte[] data = dataString.getBytes(UTF_8);
key.write(data);
// 3 block are completely written to the DataNode in 3 blocks.
// Data of length half of chunkSize resides in the chunkOutput stream buffer
String dataString2 =
ContainerTestHelper.getFixedLengthString(keyString, chunkSize * 1 / 2);
key.write(dataString2.getBytes());
key.write(dataString2.getBytes(UTF_8));
//get the name of a valid container
OmKeyArgs keyArgs = new OmKeyArgs.Builder().setVolumeName(volumeName)
.setBucketName(bucketName).setType(HddsProtos.ReplicationType.RATIS)
@ -257,9 +261,9 @@ public void testMultiBlockWrites2() throws Exception {
// closeContainerException and remaining data in the chunkOutputStream
// buffer will be copied into a different allocated block and will be
// committed.
Assert.assertEquals(dataString.concat(dataString2).getBytes().length,
Assert.assertEquals(dataString.concat(dataString2).getBytes(UTF_8).length,
keyInfo.getDataSize());
validateData(keyName, dataString.concat(dataString2).getBytes());
validateData(keyName, dataString.concat(dataString2).getBytes(UTF_8));
}
@Test
@ -274,7 +278,8 @@ public void testMultiBlockWrites3() throws Exception {
Assert.assertEquals(4, groupOutputStream.getStreamEntries().size());
// write data 3 blocks and one more chunk
byte[] writtenData =
ContainerTestHelper.getFixedLengthString(keyString, keyLen).getBytes();
ContainerTestHelper.getFixedLengthString(keyString, keyLen)
.getBytes(UTF_8);
byte[] data = Arrays.copyOfRange(writtenData, 0, 3 * blockSize + chunkSize);
Assert.assertEquals(data.length, 3 * blockSize + chunkSize);
key.write(data);
@ -367,8 +372,8 @@ private void waitForContainerClose(HddsProtos.ReplicationType type,
.isContainerPresent(cluster, containerID, dn))) {
for (DatanodeDetails datanodeDetails : datanodes) {
GenericTestUtils.waitFor(() -> ContainerTestHelper
.isContainerClosed(cluster, containerID, datanodeDetails), 500,
15 * 1000);
.isContainerClosed(cluster, containerID, datanodeDetails),
500, 15 * 1000);
//double check if it's really closed
// (waitFor also throws an exception)
Assert.assertTrue(ContainerTestHelper
@ -395,7 +400,7 @@ public void testDiscardPreallocatedBlocks() throws Exception {
Assert.assertEquals(2, groupOutputStream.getStreamEntries().size());
String dataString =
ContainerTestHelper.getFixedLengthString(keyString, (1 * blockSize));
byte[] data = dataString.getBytes();
byte[] data = dataString.getBytes(UTF_8);
key.write(data);
List<OmKeyLocationInfo> locationInfos =
new ArrayList<>(groupOutputStream.getLocationInfoList());
@ -411,7 +416,7 @@ public void testDiscardPreallocatedBlocks() throws Exception {
waitForContainerClose(keyName, key, HddsProtos.ReplicationType.RATIS);
dataString =
ContainerTestHelper.getFixedLengthString(keyString, (1 * blockSize));
data = dataString.getBytes();
data = dataString.getBytes(UTF_8);
key.write(data);
Assert.assertEquals(2, groupOutputStream.getStreamEntries().size());
@ -443,7 +448,8 @@ public void testBlockWriteViaRatis() throws Exception {
String keyName = "ratis";
OzoneOutputStream key = createKey(keyName, ReplicationType.RATIS, 0);
byte[] data = ContainerTestHelper
.getFixedLengthString(keyString, chunkSize + chunkSize / 2).getBytes();
.getFixedLengthString(keyString, chunkSize + chunkSize / 2)
.getBytes(UTF_8);
key.write(data);
//get the name of a valid container
@ -462,9 +468,9 @@ public void testBlockWriteViaRatis() throws Exception {
// updated correctly in OzoneManager once the steam is closed
key.close();
OmKeyInfo keyInfo = cluster.getOzoneManager().lookupKey(keyArgs);
String dataString = new String(data);
dataString.concat(dataString);
String dataString = new String(data, UTF_8);
dataString = dataString.concat(dataString);
Assert.assertEquals(2 * data.length, keyInfo.getDataSize());
validateData(keyName, dataString.getBytes());
validateData(keyName, dataString.getBytes(UTF_8));
}
}

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Test utils for Ozone.
*/
package org.apache.hadoop.ozone;

View File

@ -23,6 +23,7 @@
import org.apache.hadoop.ozone.TestOzoneHelper;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.BeforeClass;
import org.junit.AfterClass;
@ -158,6 +159,7 @@ public void testCreateVolumesInLoop() throws IOException {
*
* @throws IOException
*/
@Ignore("Test is ignored for time being, to be enabled after security.")
public void testGetVolumesByUser() throws IOException {
testGetVolumesByUser(port);
}
@ -167,6 +169,7 @@ public void testGetVolumesByUser() throws IOException {
*
* @throws IOException
*/
@Ignore("Test is ignored for time being, to be enabled after security.")
public void testGetVolumesOfAnotherUser() throws IOException {
super.testGetVolumesOfAnotherUser(port);
}
@ -177,6 +180,7 @@ public void testGetVolumesOfAnotherUser() throws IOException {
*
* @throws IOException
*/
@Ignore("Test is ignored for time being, to be enabled after security.")
public void testGetVolumesOfAnotherUserShouldFail() throws IOException {
super.testGetVolumesOfAnotherUserShouldFail(port);
}

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* REST client tests.
*/
package org.apache.hadoop.ozone.web.client;

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Rest Client Tests.
*/
package org.apache.hadoop.ozone.web;

View File

@ -26,7 +26,7 @@
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.NoSuchFileException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hdds.protocol.StorageType;
@ -211,7 +211,7 @@ List<String> getAcls(BucketArgs args, String tag) {
args.getHeaders().getRequestHeader(Header.OZONE_ACLS);
List<String> filteredSet = null;
if (aclStrings != null) {
filteredSet = new LinkedList<>();
filteredSet = new ArrayList<>();
for (String s : aclStrings) {
if (s.startsWith(tag)) {
filteredSet.add(s.replaceFirst(tag, ""));

View File

@ -312,5 +312,6 @@ void renameKey(KeyArgs args, String toKeyName)
/**
* Closes all the opened resources.
*/
@Override
void close();
}

View File

@ -37,9 +37,9 @@ public void testErrorGen() {
OzoneException e = ErrorTable
.newError(ErrorTable.ACCESS_DENIED, getRequestID(), "/test/path",
"localhost");
assertEquals(e.getHostID(), "localhost");
assertEquals(e.getShortMessage(),
ErrorTable.ACCESS_DENIED.getShortMessage());
assertEquals("localhost", e.getHostID());
assertEquals(ErrorTable.ACCESS_DENIED.getShortMessage(),
e.getShortMessage());
}
@Test

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Tests the REST error codes.
*/
package org.apache.hadoop.ozone.web;

View File

@ -257,6 +257,7 @@ private List<OzoneAcl> getUpdatedAclList(List<OzoneAcl> existingAcls,
* @param bucketName - Name of the bucket.
* @throws IOException - on Failure.
*/
@Override
public void deleteBucket(String volumeName, String bucketName)
throws IOException {
Preconditions.checkNotNull(volumeName);

View File

@ -22,7 +22,6 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hdds.client.BlockID;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.server.ServerUtils;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.ozone.OmUtils;
import org.apache.hadoop.ozone.OzoneConsts;
@ -117,7 +116,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
public OmMetadataManagerImpl(OzoneConfiguration conf) throws IOException {
File metaDir = OmUtils.getOmDbDir(conf);
this.lock = new OzoneManagerLock(conf);
this.openKeyExpireThresholdMS = 1000 * conf.getInt(
this.openKeyExpireThresholdMS = 1000L * conf.getInt(
OZONE_OPEN_KEY_EXPIRE_THRESHOLD_SECONDS,
OZONE_OPEN_KEY_EXPIRE_THRESHOLD_SECONDS_DEFAULT);

View File

@ -989,6 +989,7 @@ public void setBucketProperty(OmBucketArgs args)
* @param bucket - Name of the bucket.
* @throws IOException
*/
@Override
public void deleteBucket(String volume, String bucket) throws IOException {
Map<String, String> auditMap = buildAuditMap(volume);
auditMap.put(OzoneConsts.BUCKET, bucket);

View File

@ -66,6 +66,7 @@ public class ServiceListJSONServlet extends HttpServlet {
private transient OzoneManager om;
@Override
public void init() throws ServletException {
this.om = (OzoneManager) getServletContext()
.getAttribute(OzoneConsts.OM_CONTEXT_ATTRIBUTE);

View File

@ -35,7 +35,7 @@
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -73,7 +73,7 @@ private void addVolumeToOwnerList(String volume, String owner,
// Get the volume list
byte[] dbUserKey = metadataManager.getUserKey(owner);
byte[] volumeList = metadataManager.getUserTable().get(dbUserKey);
List<String> prevVolList = new LinkedList<>();
List<String> prevVolList = new ArrayList<>();
if (volumeList != null) {
VolumeList vlist = VolumeList.parseFrom(volumeList);
prevVolList.addAll(vlist.getVolumeNamesList());
@ -98,7 +98,7 @@ private void delVolumeFromOwnerList(String volume, String owner,
// Get the volume list
byte[] dbUserKey = metadataManager.getUserKey(owner);
byte[] volumeList = metadataManager.getUserTable().get(dbUserKey);
List<String> prevVolList = new LinkedList<>();
List<String> prevVolList = new ArrayList<>();
if (volumeList != null) {
VolumeList vlist = VolumeList.parseFrom(volumeList);
prevVolList.addAll(vlist.getVolumeNamesList());
@ -140,7 +140,7 @@ public void createVolume(OmVolumeArgs args) throws IOException {
try(WriteBatch batch = new WriteBatch()) {
// Write the vol info
List<HddsProtos.KeyValue> metadataList = new LinkedList<>();
List<HddsProtos.KeyValue> metadataList = new ArrayList<>();
for (Map.Entry<String, String> entry :
args.getKeyValueMap().entrySet()) {
metadataList.add(HddsProtos.KeyValue.newBuilder()
@ -250,6 +250,7 @@ public void setOwner(String volume, String owner) throws IOException {
* @param quota - Quota in bytes.
* @throws IOException
*/
@Override
public void setQuota(String volume, long quota) throws IOException {
Preconditions.checkNotNull(volume);
metadataManager.getLock().acquireVolumeLock(volume);
@ -293,6 +294,7 @@ public void setQuota(String volume, long quota) throws IOException {
* @return VolumeArgs or exception is thrown.
* @throws IOException
*/
@Override
public OmVolumeArgs getVolumeInfo(String volume) throws IOException {
Preconditions.checkNotNull(volume);
metadataManager.getLock().acquireVolumeLock(volume);
@ -384,6 +386,7 @@ public void deleteVolume(String volume) throws IOException {
* @return true if the user has access for the volume, false otherwise
* @throws IOException
*/
@Override
public boolean checkVolumeAccess(String volume, OzoneAclInfo userAcl)
throws IOException {
Preconditions.checkNotNull(volume);

View File

@ -30,6 +30,7 @@
import java.io.IOException;
import java.util.ArrayList;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
/**
@ -62,7 +63,7 @@ public void testWriteGroupOutputStream() throws Exception {
assertEquals(0, groupOutputStream.getByteOffset());
String dataString = RandomStringUtils.randomAscii(500);
byte[] data = dataString.getBytes();
byte[] data = dataString.getBytes(UTF_8);
groupOutputStream.write(data, 0, data.length);
assertEquals(500, groupOutputStream.getByteOffset());
@ -95,7 +96,8 @@ public void testErrorWriteGroupOutputStream() throws Exception {
assertEquals(0, groupOutputStream.getByteOffset());
// first writes of 100 bytes should succeed
groupOutputStream.write(RandomStringUtils.randomAscii(100).getBytes());
groupOutputStream.write(RandomStringUtils.randomAscii(100)
.getBytes(UTF_8));
assertEquals(100, groupOutputStream.getByteOffset());
// second writes of 500 bytes should fail, as there should be only 400
@ -104,7 +106,8 @@ public void testErrorWriteGroupOutputStream() throws Exception {
// other add more informative error code rather than exception, need to
// change this part.
exception.expect(Exception.class);
groupOutputStream.write(RandomStringUtils.randomAscii(500).getBytes());
groupOutputStream.write(RandomStringUtils.randomAscii(500)
.getBytes(UTF_8));
assertEquals(100, groupOutputStream.getByteOffset());
}
}
@ -115,7 +118,7 @@ public void testReadGroupInputStream() throws Exception {
ArrayList<ChunkInputStream> inputStreams = new ArrayList<>();
String dataString = RandomStringUtils.randomAscii(500);
byte[] buf = dataString.getBytes();
byte[] buf = dataString.getBytes(UTF_8);
int offset = 0;
for (int i = 0; i < 5; i++) {
int tempOffset = offset;
@ -126,12 +129,12 @@ public void testReadGroupInputStream() throws Exception {
new ByteArrayInputStream(buf, tempOffset, 100);
@Override
public void seek(long pos) throws IOException {
public synchronized void seek(long pos) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public long getPos() throws IOException {
public synchronized long getPos() throws IOException {
return pos;
}
@ -142,12 +145,13 @@ public boolean seekToNewSource(long targetPos)
}
@Override
public int read() throws IOException {
public synchronized int read() throws IOException {
return in.read();
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
public synchronized int read(byte[] b, int off, int len)
throws IOException {
int readLen = in.read(b, off, len);
pos += readLen;
return readLen;
@ -162,7 +166,7 @@ public int read(byte[] b, int off, int len) throws IOException {
int len = groupInputStream.read(resBuf, 0, 500);
assertEquals(500, len);
assertEquals(dataString, new String(resBuf));
assertEquals(dataString, new String(resBuf, UTF_8));
}
}
@ -172,7 +176,7 @@ public void testErrorReadGroupInputStream() throws Exception {
ArrayList<ChunkInputStream> inputStreams = new ArrayList<>();
String dataString = RandomStringUtils.randomAscii(500);
byte[] buf = dataString.getBytes();
byte[] buf = dataString.getBytes(UTF_8);
int offset = 0;
for (int i = 0; i < 5; i++) {
int tempOffset = offset;
@ -183,28 +187,29 @@ public void testErrorReadGroupInputStream() throws Exception {
new ByteArrayInputStream(buf, tempOffset, 100);
@Override
public void seek(long pos) throws IOException {
public synchronized void seek(long pos) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public long getPos() throws IOException {
public synchronized long getPos() throws IOException {
return pos;
}
@Override
public boolean seekToNewSource(long targetPos)
public synchronized boolean seekToNewSource(long targetPos)
throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int read() throws IOException {
public synchronized int read() throws IOException {
return in.read();
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
public synchronized int read(byte[] b, int off, int len)
throws IOException {
int readLen = in.read(b, off, len);
pos += readLen;
return readLen;
@ -222,14 +227,14 @@ public int read(byte[] b, int off, int len) throws IOException {
assertEquals(60, groupInputStream.getRemainingOfIndex(3));
assertEquals(340, len);
assertEquals(dataString.substring(0, 340),
new String(resBuf).substring(0, 340));
new String(resBuf, UTF_8).substring(0, 340));
// read following 300 bytes, but only 200 left
len = groupInputStream.read(resBuf, 340, 260);
assertEquals(4, groupInputStream.getCurrentStreamIndex());
assertEquals(0, groupInputStream.getRemainingOfIndex(4));
assertEquals(160, len);
assertEquals(dataString, new String(resBuf).substring(0, 500));
assertEquals(dataString, new String(resBuf, UTF_8).substring(0, 500));
// further read should get EOF
len = groupInputStream.read(resBuf, 0, 1);

View File

@ -18,7 +18,6 @@
package org.apache.hadoop.ozone.om;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@ -49,6 +48,8 @@
import org.rocksdb.Statistics;
import org.rocksdb.StatsLevel;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* Test class for @{@link KeyManagerImpl}.
* */
@ -93,11 +94,11 @@ private void setupMocks() throws Exception {
Mockito.when(metadataManager.getLock())
.thenReturn(new OzoneManagerLock(conf));
Mockito.when(metadataManager.getVolumeKey(VOLUME_NAME))
.thenReturn(VOLUME_NAME.getBytes());
.thenReturn(VOLUME_NAME.getBytes(UTF_8));
Mockito.when(metadataManager.getBucketKey(VOLUME_NAME, BUCKET_NAME))
.thenReturn(BUCKET_NAME.getBytes());
.thenReturn(BUCKET_NAME.getBytes(UTF_8));
Mockito.when(metadataManager.getOpenKeyBytes(VOLUME_NAME, BUCKET_NAME,
KEY_NAME, 1)).thenReturn(KEY_NAME.getBytes());
KEY_NAME, 1)).thenReturn(KEY_NAME.getBytes(UTF_8));
}
private void setupRocksDb() throws Exception {
@ -129,11 +130,11 @@ private void setupRocksDb() throws Exception {
rdbStore = new RDBStore(folder.newFolder(), options, configSet);
rdbTable = rdbStore.getTable("testTable");
rdbTable.put(VOLUME_NAME.getBytes(),
RandomStringUtils.random(10).getBytes(StandardCharsets.UTF_8));
rdbTable.put(BUCKET_NAME.getBytes(),
RandomStringUtils.random(10).getBytes(StandardCharsets.UTF_8));
rdbTable.put(KEY_NAME.getBytes(), keyData.toByteArray());
rdbTable.put(VOLUME_NAME.getBytes(UTF_8),
RandomStringUtils.random(10).getBytes(UTF_8));
rdbTable.put(BUCKET_NAME.getBytes(UTF_8),
RandomStringUtils.random(10).getBytes(UTF_8));
rdbTable.put(KEY_NAME.getBytes(UTF_8), keyData.toByteArray());
}
@Test

View File

@ -252,6 +252,7 @@ private class RenameIterator extends OzoneListingIterator {
LOG.trace("rename from:{} to:{}", srcKey, dstKey);
}
@Override
boolean processKey(String key) throws IOException {
String newKeyName = dstKey.concat(key.substring(srcKey.length()));
bucket.renameKey(key, newKeyName);
@ -370,6 +371,7 @@ && listStatus(f).length != 0) {
}
}
@Override
boolean processKey(String key) throws IOException {
if (key.equals("")) {
LOG.trace("Skipping deleting root directory");
@ -496,6 +498,7 @@ private class ListStatusIterator extends OzoneListingIterator {
* @return always returns true
* @throws IOException
*/
@Override
boolean processKey(String key) throws IOException {
Path keyPath = new Path(OZONE_URI_DELIMITER + key);
if (key.equals(getPathKey())) {

View File

@ -51,6 +51,7 @@
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.Time;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.hadoop.fs.ozone.Constants.OZONE_DEFAULT_USER;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@ -176,7 +177,7 @@ public void testOzFsReadWrite() throws IOException {
byte[] buffer = new byte[stringLen];
// This read will not change the offset inside the file
int readBytes = inputStream.read(0, buffer, 0, buffer.length);
String out = new String(buffer, 0, buffer.length);
String out = new String(buffer, 0, buffer.length, UTF_8);
assertEquals(data, out);
assertEquals(readBytes, buffer.length);
assertEquals(0, inputStream.getPos());

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Ozone FS Contract tests.
*/
package org.apache.hadoop.fs.ozone;

View File

@ -49,6 +49,7 @@ public AuthorizationHeaderV2(String auth) throws OS3Exception {
*
* @throws OS3Exception
*/
@SuppressWarnings("StringSplitter")
public void parseHeader() throws OS3Exception {
String[] split = authHeader.split(" ");
if (split.length != 2) {

View File

@ -60,6 +60,7 @@ public AuthorizationHeaderV4(String header) throws OS3Exception {
* Signature=db81b057718d7c1b3b8dffa29933099551c51d787b3b13b9e0f9ebed45982bf2
* @throws OS3Exception
*/
@SuppressWarnings("StringSplitter")
public void parseAuthHeader() throws OS3Exception {
String[] split = authHeader.split(" ");

View File

@ -54,6 +54,7 @@ public class Credential {
*
* @throws OS3Exception
*/
@SuppressWarnings("StringSplitter")
public void parseCredential() throws OS3Exception {
String[] split = credential.split("/");
if (split.length == 5) {

View File

@ -209,6 +209,7 @@ public String getOzoneBucketMapping(String s3BucketName) throws IOException {
}
@Override
@SuppressWarnings("StringSplitter")
public String getOzoneVolumeName(String s3BucketName) throws IOException {
if (bucketVolumeMap.get(s3BucketName) == null) {
throw new IOException("S3_BUCKET_NOT_FOUND");
@ -217,6 +218,7 @@ public String getOzoneVolumeName(String s3BucketName) throws IOException {
}
@Override
@SuppressWarnings("StringSplitter")
public String getOzoneBucketName(String s3BucketName) throws IOException {
if (bucketVolumeMap.get(s3BucketName) == null) {
throw new IOException("S3_BUCKET_NOT_FOUND");

View File

@ -63,7 +63,7 @@ public void setup() throws Exception {
@Test
public void testBucketEndpoint() throws Exception {
Response response = bucketEndpoint.delete(bucketName);
assertEquals(response.getStatus(), HttpStatus.SC_NO_CONTENT);
assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());
}

View File

@ -23,6 +23,8 @@
import java.io.IOException;
import org.junit.Assert;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.*;
import org.junit.Test;
@ -40,7 +42,7 @@ public void fromStreamWithNamespace() throws IOException {
+ ".com/doc/2006-03-01/\"><Object>key1</Object><Object>key2"
+ "</Object><Object>key3"
+ "</Object></Delete>")
.getBytes());
.getBytes(UTF_8));
//WHEN
MultiDeleteRequest multiDeleteRequest =
@ -58,7 +60,7 @@ public void fromStreamWithoutNamespace() throws IOException {
("<Delete><Object>key1</Object><Object>key2"
+ "</Object><Object>key3"
+ "</Object></Delete>")
.getBytes());
.getBytes(UTF_8));
//WHEN
MultiDeleteRequest multiDeleteRequest =

View File

@ -37,6 +37,8 @@
import org.junit.Test;
import org.mockito.Mockito;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* Test get object.
*/
@ -54,15 +56,16 @@ public void get() throws IOException, OS3Exception {
OzoneBucket bucket =
volume.getBucket("b1");
OzoneOutputStream keyStream =
bucket.createKey("key1", CONTENT.getBytes().length);
keyStream.write(CONTENT.getBytes());
bucket.createKey("key1", CONTENT.getBytes(UTF_8).length);
keyStream.write(CONTENT.getBytes(UTF_8));
keyStream.close();
ObjectEndpoint rest = new ObjectEndpoint();
rest.setClient(client);
HttpHeaders headers = Mockito.mock(HttpHeaders.class);
rest.setHeaders(headers);
ByteArrayInputStream body = new ByteArrayInputStream(CONTENT.getBytes());
ByteArrayInputStream body =
new ByteArrayInputStream(CONTENT.getBytes(UTF_8));
//WHEN
rest.get("b1", "key1", body);

View File

@ -32,6 +32,7 @@
import org.apache.hadoop.ozone.s3.exception.OS3Exception;
import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
import static java.nio.charset.StandardCharsets.UTF_8;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Assert;
import org.junit.Before;
@ -69,9 +70,9 @@ public void testHeadObject() throws Exception {
//GIVEN
String value = RandomStringUtils.randomAlphanumeric(32);
OzoneOutputStream out = bucket.createKey("key1",
value.getBytes().length, ReplicationType.STAND_ALONE,
value.getBytes(UTF_8).length, ReplicationType.STAND_ALONE,
ReplicationFactor.ONE);
out.write(value.getBytes());
out.write(value.getBytes(UTF_8));
out.close();
//WHEN
@ -79,7 +80,7 @@ public void testHeadObject() throws Exception {
//THEN
Assert.assertEquals(200, response.getStatus());
Assert.assertEquals(value.getBytes().length,
Assert.assertEquals(value.getBytes(UTF_8).length,
Long.parseLong(response.getHeaderString("Content-Length")));
DateTimeFormatter.RFC_1123_DATE_TIME
@ -91,7 +92,8 @@ public void testHeadObject() throws Exception {
public void testHeadFailByBadName() throws Exception {
//Head an object that doesn't exist.
try {
keyEndpoint.head(bucketName, "badKeyName");
Response response = keyEndpoint.head(bucketName, "badKeyName");
Assert.assertEquals(404, response.getStatus());
} catch (OS3Exception ex) {
Assert.assertTrue(ex.getCode().contains("NoSuchObject"));
Assert.assertTrue(ex.getErrorMessage().contains("object does not exist"));

View File

@ -286,7 +286,7 @@ private Thread getProgressBarThread() {
long maxValue;
currentValue = () -> numberOfKeysAdded.get();
maxValue = numOfVolumes *
maxValue = (long) numOfVolumes *
numOfBuckets *
numOfKeys;

View File

@ -88,8 +88,8 @@ public void testRestart() throws Exception {
String expectedSnapFile =
storage.getSnapshotFile(termIndexBeforeRestart.getTerm(),
termIndexBeforeRestart.getIndex()).getAbsolutePath();
Assert.assertEquals(snapshotInfo.getFile().getPath().toString(),
expectedSnapFile);
Assert.assertEquals(expectedSnapFile,
snapshotInfo.getFile().getPath().toString());
Assert.assertEquals(termInSnapshot, termIndexBeforeRestart);
// After restart the term index might have progressed to apply pending

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* Freon Ozone Load Generator.
*/
package org.apache.hadoop.ozone.freon;

View File

@ -45,10 +45,10 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@ -182,7 +182,7 @@ public void testOmDB() throws Exception {
String sql = "SELECT * FROM volumeList";
ResultSet rs = executeQuery(conn, sql);
List<String> expectedValues =
new LinkedList<>(Arrays.asList(volumeName0, volumeName1));
new ArrayList<>(Arrays.asList(volumeName0, volumeName1));
while (rs.next()) {
String userNameRs = rs.getString("userName");
String volumeNameRs = rs.getString("volumeName");
@ -194,7 +194,7 @@ public void testOmDB() throws Exception {
sql = "SELECT * FROM volumeInfo";
rs = executeQuery(conn, sql);
expectedValues =
new LinkedList<>(Arrays.asList(volumeName0, volumeName1));
new ArrayList<>(Arrays.asList(volumeName0, volumeName1));
while (rs.next()) {
String adName = rs.getString("adminName");
String ownerName = rs.getString("ownerName");
@ -208,7 +208,7 @@ public void testOmDB() throws Exception {
sql = "SELECT * FROM aclInfo";
rs = executeQuery(conn, sql);
expectedValues =
new LinkedList<>(Arrays.asList(volumeName0, volumeName1));
new ArrayList<>(Arrays.asList(volumeName0, volumeName1));
while (rs.next()) {
String adName = rs.getString("adminName");
String ownerName = rs.getString("ownerName");

View File

@ -0,0 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* OM to SQL Converter. Currently broken.
*/
package org.apache.hadoop.ozone.om;