[Placement Group] Move PlacementGroup public method to interface. (#13629)

This commit is contained in:
DK.Pino
2021-01-25 20:14:21 +08:00
committed by GitHub
parent b4702de1c2
commit db2c836587
3 changed files with 70 additions and 30 deletions
@@ -1,9 +1,57 @@
package io.ray.api.placementgroup;
import io.ray.api.id.PlacementGroupId;
import java.util.List;
import java.util.Map;
/**
* A placement group is used to place interdependent actors according to a specific strategy {@link
* PlacementStrategy}. When a placement group is created, the corresponding actor slots and
* resources are preallocated. A placement group consists of one or more bundles plus a specific
* placement strategy.
*/
public interface PlacementGroup {}
public interface PlacementGroup {
/**
* Get the id of current placement group.
*
* @return Id of current placement group.
*/
PlacementGroupId getId();
/**
* Get the name of current placement group.
*
* @return Name of current placement group.
*/
String getName();
/**
* Get all bundles which key is resource name and value is resource value.
*
* @return All bundles of current placement group.
*/
List<Map<String, Double>> getBundles();
/**
* Get the strategy of current placement group.
*
* @return Strategy of current placement group.
*/
PlacementStrategy getStrategy();
/**
* Get the state of current placement group.
*
* @return Creation state of current placement group.
*/
PlacementGroupState getState();
/**
* Wait for the placement group to be ready within the specified time.
*
* @param timeoutSeconds Timeout in seconds.
* @return True if the placement group is created. False otherwise.
*/
boolean wait(int timeoutSeconds);
}
@@ -30,32 +30,32 @@ public class PlacementGroupImpl implements PlacementGroup {
this.state = state;
}
@Override
public PlacementGroupId getId() {
return id;
}
@Override
public String getName() {
return name;
}
@Override
public List<Map<String, Double>> getBundles() {
return bundles;
}
@Override
public PlacementStrategy getStrategy() {
return strategy;
}
@Override
public PlacementGroupState getState() {
return state;
}
/**
* Wait for the placement group to be ready within the specified time.
*
* @param timeoutSeconds Timeout in seconds.
* @return True if the placement group is created. False otherwise.
*/
@Override
public boolean wait(int timeoutSeconds) {
return Ray.internal().waitPlacementGroupReady(id, timeoutSeconds);
}
@@ -7,7 +7,6 @@ import io.ray.api.placementgroup.PlacementGroup;
import io.ray.api.placementgroup.PlacementGroupState;
import io.ray.api.placementgroup.PlacementStrategy;
import io.ray.runtime.exception.RayException;
import io.ray.runtime.placementgroup.PlacementGroupImpl;
import java.util.List;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -32,8 +31,7 @@ public class PlacementGroupTest extends BaseTest {
// This test just creates a placement group with one bundle.
// It's not comprehensive to test all placement group test cases.
public void testCreateAndCallActor() {
PlacementGroupImpl placementGroup =
(PlacementGroupImpl) PlacementGroupTestUtils.createSimpleGroup();
PlacementGroup placementGroup = PlacementGroupTestUtils.createSimpleGroup();
Assert.assertTrue(placementGroup.wait(10));
Assert.assertEquals(placementGroup.getName(), "unnamed_group");
@@ -48,22 +46,18 @@ public class PlacementGroupTest extends BaseTest {
@Test(groups = {"cluster"})
public void testGetPlacementGroup() {
PlacementGroupImpl firstPlacementGroup =
(PlacementGroupImpl)
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "first_placement_group");
PlacementGroup firstPlacementGroup =
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "first_placement_group");
PlacementGroupImpl secondPlacementGroup =
(PlacementGroupImpl)
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "second_placement_group");
PlacementGroup secondPlacementGroup =
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "second_placement_group");
Assert.assertTrue(firstPlacementGroup.wait(10));
Assert.assertTrue(secondPlacementGroup.wait(10));
PlacementGroupImpl firstPlacementGroupRes =
(PlacementGroupImpl) Ray.getPlacementGroup((firstPlacementGroup).getId());
PlacementGroupImpl secondPlacementGroupRes =
(PlacementGroupImpl) Ray.getPlacementGroup((secondPlacementGroup).getId());
PlacementGroup firstPlacementGroupRes = Ray.getPlacementGroup((firstPlacementGroup).getId());
PlacementGroup secondPlacementGroupRes = Ray.getPlacementGroup((secondPlacementGroup).getId());
Assert.assertNotNull(firstPlacementGroupRes);
Assert.assertNotNull(secondPlacementGroupRes);
@@ -76,9 +70,9 @@ public class PlacementGroupTest extends BaseTest {
List<PlacementGroup> allPlacementGroup = Ray.getAllPlacementGroups();
Assert.assertEquals(allPlacementGroup.size(), 2);
PlacementGroupImpl placementGroupRes = (PlacementGroupImpl) allPlacementGroup.get(0);
PlacementGroup placementGroupRes = allPlacementGroup.get(0);
Assert.assertNotNull(placementGroupRes.getId());
PlacementGroupImpl expectPlacementGroup =
PlacementGroup expectPlacementGroup =
placementGroupRes.getId().equals(firstPlacementGroup.getId())
? firstPlacementGroup
: secondPlacementGroup;
@@ -94,18 +88,16 @@ public class PlacementGroupTest extends BaseTest {
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "first_placement_group");
PlacementGroupImpl secondPlacementGroup =
(PlacementGroupImpl)
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "second_placement_group");
PlacementGroup secondPlacementGroup =
PlacementGroupTestUtils.createNameSpecifiedSimpleGroup(
"CPU", 1, PlacementStrategy.PACK, 1.0, "second_placement_group");
List<PlacementGroup> allPlacementGroup = Ray.getAllPlacementGroups();
Assert.assertEquals(allPlacementGroup.size(), 2);
Ray.removePlacementGroup(secondPlacementGroup.getId());
PlacementGroupImpl removedPlacementGroup =
(PlacementGroupImpl) Ray.getPlacementGroup((secondPlacementGroup).getId());
PlacementGroup removedPlacementGroup = Ray.getPlacementGroup((secondPlacementGroup).getId());
Assert.assertEquals(removedPlacementGroup.getState(), PlacementGroupState.REMOVED);
// Wait for placement group after it is removed.