From 22888a57b013129651c47e857f02c95f269af4c9 Mon Sep 17 00:00:00 2001 From: kaloyane <kaloyane> Date: Tue, 5 Jul 2011 13:57:05 +0000 Subject: [PATCH] [LMS-2375] minor improvement of the SimpleShufflingShareFinder + unit test SVN: 21992 --- .../plugins/SimpleShufflingShareFinder.java | 11 ++++++- .../SimpleShufflingShareFinderTest.java | 33 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinder.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinder.java index 194237ee416..e72de4e2e5e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinder.java @@ -52,6 +52,7 @@ public class SimpleShufflingShareFinder extends AbstractShareFinder ISpeedChecker speedChecker) { Share shareWithMostFree = null; + Share homeShare = null; long maxFreeSpace = 0; for (Share share : shares) { @@ -59,6 +60,10 @@ public class SimpleShufflingShareFinder extends AbstractShareFinder { continue; } + if (share.getShareId().equals(dataSet.getDataSetShareId())) + { + homeShare = share; + } long freeSpace = share.calculateFreeSpace(); if (freeSpace > maxFreeSpace) { @@ -66,9 +71,13 @@ public class SimpleShufflingShareFinder extends AbstractShareFinder shareWithMostFree = share; } } + if (maxFreeSpace - dataSet.getDataSetSize() > minimumFreeSpace) { - return shareWithMostFree; + if (homeShare != shareWithMostFree) + { + return shareWithMostFree; + } } return null; } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java index f681f1e8f96..ebc73e2ba77 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java @@ -101,7 +101,7 @@ public class SimpleShufflingShareFinderTest extends AssertJUnit { SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(new Properties()); MockSpeedChecker speedChecker = new MockSpeedChecker(false); - Share share = share(0); + Share share = share("1", 0); Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(share), speedChecker); @@ -115,7 +115,7 @@ public class SimpleShufflingShareFinderTest extends AssertJUnit { SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(new Properties()); MockSpeedChecker speedChecker = new MockSpeedChecker(true); - Share share = share(10 * FileUtils.ONE_MB); + Share share = share("1", 10 * FileUtils.ONE_MB); Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(share), speedChecker); @@ -131,9 +131,9 @@ public class SimpleShufflingShareFinderTest extends AssertJUnit properties.setProperty(MINIMUM_FREE_SPACE_KEY, Long.toString(2)); SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(properties); MockSpeedChecker speedChecker = new MockSpeedChecker(true, false, true); - Share s1 = share(10 * FileUtils.ONE_MB); - Share s2 = share(0); - Share s3 = share(30 * FileUtils.ONE_MB); + Share s1 = share("1", 10 * FileUtils.ONE_MB); + Share s2 = share("2", 0); + Share s3 = share("3", 30 * FileUtils.ONE_MB); Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3), speedChecker); @@ -142,9 +142,28 @@ public class SimpleShufflingShareFinderTest extends AssertJUnit context.assertIsSatisfied(); } - private Share share(final long freeSpace) + @Test + public void testDoNotFindHomeShare() + { + Properties properties = new Properties(); + properties.setProperty(MINIMUM_FREE_SPACE_KEY, Long.toString(2)); + SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(properties); + MockSpeedChecker speedChecker = new MockSpeedChecker(true, false, true); + Share s1 = share("1", 10 * FileUtils.ONE_MB); + Share s2 = share("2", 0); + Share s3 = share("3", 30 * FileUtils.ONE_MB); + + dataSet.setDataSetShareId(s3.getShareId()); + + Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3), speedChecker); + + assertNull("Home share must never be found.", foundShare); + context.assertIsSatisfied(); + } + + private Share share(String id, final long freeSpace) { - final File file = new File("1"); + final File file = new File(id); if (freeSpace > 0) { context.checking(new Expectations() -- GitLab