Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignite-6430: CacheGroupsMetricsRebalanceTest.testRebalanceEstimateFinishTime test fails periodically #3914

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,6 @@ public void testRebalanceEstimateFinishTime() throws Exception {

final int KEYS = 4_000_000;

IgniteCache<Object, Object> cache1 = ig1.cache(CACHE1);

try (IgniteDataStreamer<Integer, String> st = ig1.dataStreamer(CACHE1)) {
for (int i = 0; i < KEYS; i++)
st.addData(i, CACHE1 + "-" + i);
Expand All @@ -193,7 +191,7 @@ public void testRebalanceEstimateFinishTime() throws Exception {
CacheRebalancingEvent rebEvent = (CacheRebalancingEvent)evt;

if (rebEvent.cacheName().equals(CACHE1)) {
System.out.println("CountDown rebalance stop latch:" + rebEvent.cacheName());
log.info("CountDown rebalance stop latch: " + rebEvent.cacheName());

finishRebalanceLatch.countDown();
}
Expand All @@ -211,10 +209,10 @@ public void testRebalanceEstimateFinishTime() throws Exception {
CacheMetrics metrics = ig2.cache(CACHE1).localMetrics();

long startTime = metrics.getRebalancingStartTime();
long currTime = U.currentTimeMillis();

assertTrue(startTime > 0);
assertTrue((U.currentTimeMillis() - startTime) < 5000);
assertTrue((U.currentTimeMillis() - startTime) > 0);
assertTrue("Invalid start time [startTime=" + startTime + ", currTime=" + currTime + ']',
startTime > 0L && (currTime - startTime) >= 0L && (currTime - startTime) <= 5000L);

final CountDownLatch latch = new CountDownLatch(1);

Expand All @@ -223,9 +221,9 @@ public void testRebalanceEstimateFinishTime() throws Exception {
// Waiting 25% keys will be rebalanced.
int partKeys = KEYS / 2;

final long keysLine = (long)(partKeys - (partKeys * 0.25));
final long keysLine = partKeys * 3L / 4L;

System.out.println("Wait until keys left will be less " + keysLine);
log.info("Wait until keys left will be less than: " + keysLine);

try {
while (finishRebalanceLatch.getCount() != 0) {
Expand All @@ -236,13 +234,13 @@ public void testRebalanceEstimateFinishTime() throws Exception {
if (keyLeft > 0 && keyLeft < keysLine)
latch.countDown();

System.out.println("Keys left: " + m.getKeysToRebalanceLeft());
log.info("Keys left: " + m.getKeysToRebalanceLeft());

try {
Thread.sleep(1_000);
}
catch (InterruptedException e) {
System.out.println("Interrupt thread: " + e.getMessage());
log.warning("Interrupt thread", e);

Thread.currentThread().interrupt();
}
Expand All @@ -256,30 +254,38 @@ public void testRebalanceEstimateFinishTime() throws Exception {

assertTrue(latch.await(getTestTimeout(), TimeUnit.MILLISECONDS));

waitForCondition(new PA() {
@Override public boolean apply() {
return ig2.cache(CACHE1).localMetrics().getEstimatedRebalancingFinishTime() != -1L;
}
}, 5_000L);

long finishTime = ig2.cache(CACHE1).localMetrics().getEstimatedRebalancingFinishTime();

assertTrue(finishTime > 0);
assertTrue("Not a positive estimation of rebalancing finish time: " + finishTime,
finishTime > 0L);

long timePassed = U.currentTimeMillis() - startTime;
long timeLeft = finishTime - System.currentTimeMillis();
currTime = U.currentTimeMillis();
long timePassed = currTime - startTime;
long timeLeft = finishTime - currTime;

assertTrue(finishRebalanceLatch.await(timeLeft + 2_000, TimeUnit.SECONDS));
assertTrue("Got timeout while waiting for rebalancing. Estimated left time: " + timeLeft,
finishRebalanceLatch.await(timeLeft + 2_000L, TimeUnit.MILLISECONDS));

System.out.println(
"TimePassed:" + timePassed +
"\nTimeLeft:" + timeLeft +
"\nTime to rebalance: " + (finishTime - startTime) +
"\nStartTime: " + startTime +
"\nFinishTime: " + finishTime
log.info("[timePassed=" + timePassed + ", timeLeft=" + timeLeft +
", Time to rebalance=" + (finishTime - startTime) +
", startTime=" + startTime + ", finishTime=" + finishTime + ']'
);

System.clearProperty(IGNITE_REBALANCE_STATISTICS_TIME_INTERVAL);

System.out.println("Rebalance time:" + (U.currentTimeMillis() - startTime));
currTime = U.currentTimeMillis();

log.info("Rebalance time: " + (currTime - startTime));

long diff = finishTime - U.currentTimeMillis();
long diff = finishTime - currTime;

assertTrue("Expected less 5000, Actual:" + diff, Math.abs(diff) < 10_000);
assertTrue("Expected less than 10000, but actual: " + diff, Math.abs(diff) < 10_000L);
}

/**
Expand Down