Erasure Coding: metrics xmitsInProgress become to negative. Contributed by maobaolong and Toshihiko Uchida.

This commit is contained in:
Ayush Saxena 2020-05-03 19:09:14 +05:30
parent 4b7d6667fd
commit 69163f5e5d
4 changed files with 19 additions and 1 deletions

View File

@ -170,4 +170,8 @@ public final class ErasureCodingWorker {
stripedReconstructionPool.shutdown();
stripedReadPool.shutdown();
}
public float getXmitWeight() {
return xmitWeight;
}
}

View File

@ -67,7 +67,11 @@ class StripedBlockReconstructor extends StripedReconstructor
LOG.warn("Failed to reconstruct striped block: {}", getBlockGroup(), e);
getDatanode().getMetrics().incrECFailedReconstructionTasks();
} finally {
getDatanode().decrementXmitsInProgress(getXmits());
float xmitWeight = getErasureCodingWorker().getXmitWeight();
// if the xmits is smaller than 1, the xmitsSubmitted should be set to 1
// because if it set to zero, we cannot to measure the xmits submitted
int xmitsSubmitted = Math.max((int) (getXmits() * xmitWeight), 1);
getDatanode().decrementXmitsInProgress(xmitsSubmitted);
final DataNodeMetrics metrics = getDatanode().getMetrics();
metrics.incrECReconstructionTasks();
metrics.incrECReconstructionBytesRead(getBytesRead());

View File

@ -275,4 +275,8 @@ abstract class StripedReconstructor {
DataNode getDatanode() {
return datanode;
}
public ErasureCodingWorker getErasureCodingWorker() {
return erasureCodingWorker;
}
}

View File

@ -513,6 +513,8 @@ public class TestReconstructStripedFile {
@Test(timeout = 180000)
public void testErasureCodingWorkerXmitsWeight() throws Exception {
testErasureCodingWorkerXmitsWeight(0.5f,
(int) (ecPolicy.getNumDataUnits() * 0.5f));
testErasureCodingWorkerXmitsWeight(1f, ecPolicy.getNumDataUnits());
testErasureCodingWorkerXmitsWeight(0f, 1);
testErasureCodingWorkerXmitsWeight(10f, 10 * ecPolicy.getNumDataUnits());
@ -566,6 +568,10 @@ public class TestReconstructStripedFile {
} finally {
barrier.await();
DataNodeFaultInjector.set(oldInjector);
for (final DataNode curDn : cluster.getDataNodes()) {
GenericTestUtils.waitFor(() -> curDn.getXceiverCount() <= 1, 10, 60000);
assertEquals(0, curDn.getXmitsInProgress());
}
}
}
}