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