本文整理汇总了Java中org.apache.helix.model.ExternalView.setState方法的典型用法代码示例。如果您正苦于以下问题:Java ExternalView.setState方法的具体用法?Java ExternalView.setState怎么用?Java ExternalView.setState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.apache.helix.model.ExternalView
的用法示例。
在下文中一共展示了ExternalView.setState方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: createExternalView
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
private ExternalView createExternalView(String tableName, int segmentCount, int replicationFactor,
int instanceCount) {
ExternalView externalView = new ExternalView(tableName);
String[] instanceNames = new String[instanceCount];
for (int i = 0; i < instanceCount; i++) {
instanceNames[i] = buildInstanceName(i);
}
int assignmentCount = 0;
for (int i = 0; i < segmentCount; i++) {
String segmentName = tableName + "_" + i;
for (int j = 0; j < replicationFactor; j++) {
externalView.setState(segmentName, instanceNames[assignmentCount % instanceCount], "ONLINE");
++assignmentCount;
}
}
return externalView;
}
示例2: isRandom
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void isRandom() {
// Build dummy external view
BalancedRandomRoutingTableBuilder routingTableBuilder = new BalancedRandomRoutingTableBuilder();
List<InstanceConfig> instanceConfigList = new ArrayList<>();
ExternalView externalView = new ExternalView("dummy");
externalView.setState("segment_1", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_1", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_1", "Server_1.2.3.6_3456", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.6_3456", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.6_3456", "ONLINE");
// Build routing table
List<ServerToSegmentSetMap> routingTable =
routingTableBuilder.computeRoutingTableFromExternalView("dummy", externalView, instanceConfigList);
// Check that at least two routing tables are different
Iterator<ServerToSegmentSetMap> routingTableIterator = routingTable.iterator();
ServerToSegmentSetMap previous = routingTableIterator.next();
while (routingTableIterator.hasNext()) {
ServerToSegmentSetMap current = routingTableIterator.next();
System.out.println("current = " + current);
System.out.println("previous = " + previous);
if (!current.equals(previous)) {
// Routing tables differ, test is successful
return;
}
}
Assert.fail("All routing tables are equal!");
}
示例3: constructExternalView
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
private ExternalView constructExternalView(String tableName) {
ExternalView externalView = new ExternalView(tableName);
List<OfflineSegmentZKMetadata> offlineResourceZKMetadataListForResource =
ZKMetadataProvider.getOfflineSegmentZKMetadataListForTable(_propertyStore, tableName);
for (OfflineSegmentZKMetadata segmentMetadata : offlineResourceZKMetadataListForResource) {
externalView.setState(segmentMetadata.getSegmentName(), "localhost", "ONLINE");
}
return externalView;
}
示例4: testHelixExternalViewBasedRoutingTable
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void testHelixExternalViewBasedRoutingTable() {
RoutingTableBuilder routingStrategy = new RandomRoutingTableBuilder(100);
HelixExternalViewBasedRouting routingTable = new HelixExternalViewBasedRouting(routingStrategy, null, null, null);
ExternalView externalView = new ExternalView("testResource0_OFFLINE");
externalView.setState("segment0", "dataServer_instance_0", "ONLINE");
externalView.setState("segment0", "dataServer_instance_1", "ONLINE");
externalView.setState("segment1", "dataServer_instance_1", "ONLINE");
externalView.setState("segment1", "dataServer_instance_2", "ONLINE");
externalView.setState("segment2", "dataServer_instance_2", "ONLINE");
externalView.setState("segment2", "dataServer_instance_0", "ONLINE");
routingTable.markDataResourceOnline("testResource0_OFFLINE", externalView, new ArrayList<InstanceConfig>());
ExternalView externalView1 = new ExternalView("testResource1_OFFLINE");
externalView1.setState("segment10", "dataServer_instance_0", "ONLINE");
externalView1.setState("segment11", "dataServer_instance_1", "ONLINE");
externalView1.setState("segment12", "dataServer_instance_2", "ONLINE");
routingTable.markDataResourceOnline("testResource1_OFFLINE", externalView1, new ArrayList<InstanceConfig>());
ExternalView externalView2 = new ExternalView("testResource2_OFFLINE");
externalView2.setState("segment20", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment20", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment20", "dataServer_instance_2", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_2", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_2", "ONLINE");
routingTable.markDataResourceOnline("testResource2_OFFLINE", externalView2, new ArrayList<InstanceConfig>());
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource0_OFFLINE", "[segment0, segment1, segment2]", 3);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource1_OFFLINE", "[segment10, segment11, segment12]", 3);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource2_OFFLINE", "[segment20, segment21, segment22]", 3);
}
}
示例5: buildExternalView
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
private ExternalView buildExternalView(String tableName, FakePropertyStore propertyStore,
Map<Integer, List<String>> partitionToServerMapping, List<String> segmentList) throws Exception {
// Create External View
ExternalView externalView = new ExternalView(tableName);
for (String segmentName: segmentList) {
LLCSegmentName llcSegmentName = new LLCSegmentName(segmentName);
int partitionId = llcSegmentName.getPartitionId();
for (String server: partitionToServerMapping.get(partitionId)) {
externalView.setState(segmentName, server, "ONLINE");
}
}
return externalView;
}
示例6: isRandom
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void isRandom() {
// Build dummy external view
BalancedRandomRoutingTableBuilder routingTableBuilder = new BalancedRandomRoutingTableBuilder();
List<InstanceConfig> instanceConfigList = new ArrayList<>();
ExternalView externalView = new ExternalView("dummy");
externalView.setState("segment_1", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_1", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_1", "Server_1.2.3.6_3456", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_2", "Server_1.2.3.6_3456", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.4_1234", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.5_2345", "ONLINE");
externalView.setState("segment_3", "Server_1.2.3.6_3456", "ONLINE");
// Create configs for above instances.
instanceConfigList.add(new InstanceConfig("Server_1.2.3.4_1234"));
instanceConfigList.add(new InstanceConfig("Server_1.2.3.5_2345"));
instanceConfigList.add(new InstanceConfig("Server_1.2.3.6_3456"));
// Build routing table
routingTableBuilder.computeRoutingTableFromExternalView("dummy", externalView, instanceConfigList);
List<Map<String, List<String>>> routingTables = routingTableBuilder.getRoutingTables();
// Check that at least two routing tables are different
Iterator<Map<String, List<String>>> routingTableIterator = routingTables.iterator();
Map<String, List<String>> previous = routingTableIterator.next();
while (routingTableIterator.hasNext()) {
Map<String, List<String>> current = routingTableIterator.next();
if (!current.equals(previous)) {
return;
}
}
Assert.fail("All routing tables are equal!");
}
示例7: buildExternalView
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
private ExternalView buildExternalView(String tableName, FakePropertyStore propertyStore,
Map<Integer, List<String>> replicaGroupServers) throws Exception {
// Create External View
ExternalView externalView = new ExternalView(tableName);
for (int i = 0; i < NUM_SEGMENTS; i++) {
String segmentName = "segment" + i;
int serverIndex = i % (NUM_SERVERS / NUM_REPLICA);
for (List<String> serversInReplicaGroup: replicaGroupServers.values()) {
externalView.setState(segmentName, serversInReplicaGroup.get(serverIndex), "ONLINE");
}
}
return externalView;
}
示例8: testKafkaHighLevelConsumerBasedRoutingTable
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void testKafkaHighLevelConsumerBasedRoutingTable() {
RoutingTableBuilder routingStrategy = new KafkaHighLevelConsumerBasedRoutingTableBuilder();
HelixExternalViewBasedRouting routingTable = new HelixExternalViewBasedRouting(null, routingStrategy, null, null);
ExternalView externalView = new ExternalView("testResource0_REALTIME");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "0", "0", "0"),
"dataServer_instance_0", "ONLINE");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "0", "1", "1"),
"dataServer_instance_1", "ONLINE");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "1", "0", "2"),
"dataServer_instance_2", "ONLINE");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "1", "1", "3"),
"dataServer_instance_3", "ONLINE");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "2", "0", "4"),
"dataServer_instance_4", "ONLINE");
externalView.setState(SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "2", "1", "5"),
"dataServer_instance_5", "ONLINE");
routingTable.markDataResourceOnline("testResource0_REALTIME", externalView, new ArrayList<InstanceConfig>());
ExternalView externalView1 = new ExternalView("testResource1_REALTIME");
externalView1.setState(SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "0", "10"),
"dataServer_instance_10", "ONLINE");
externalView1.setState(SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "1", "11"),
"dataServer_instance_11", "ONLINE");
externalView1.setState(SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "2", "12"),
"dataServer_instance_12", "ONLINE");
routingTable.markDataResourceOnline("testResource1_REALTIME", externalView1, new ArrayList<InstanceConfig>());
ExternalView externalView2 = new ExternalView("testResource2_REALTIME");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "0", "20"),
"dataServer_instance_20", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "1", "21"),
"dataServer_instance_21", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "2", "22"),
"dataServer_instance_22", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "0", "23"),
"dataServer_instance_23", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "1", "24"),
"dataServer_instance_24", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "2", "25"),
"dataServer_instance_25", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "0", "26"),
"dataServer_instance_26", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "1", "27"),
"dataServer_instance_27", "ONLINE");
externalView2.setState(SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "2", "28"),
"dataServer_instance_28", "ONLINE");
routingTable.markDataResourceOnline("testResource2_REALTIME", externalView2, new ArrayList<InstanceConfig>());
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(
routingTable,
"testResource0_REALTIME",
new String[] { "[" + SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "0", "0", "0")
+ ", " + SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "0", "1", "1") + "]", "["
+ SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "1", "0", "2")
+ ", "
+ SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "1", "1", "3") + "]", "["
+ SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "2", "0", "4") + ", "
+ SegmentNameBuilder.Realtime.build("testResource0_REALTIME", "instance", "2", "1", "5") + "]" }, 2);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource1_REALTIME",
new String[] { "[" + SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "0", "10")
+ ", " + SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "1", "11") + ", "
+ SegmentNameBuilder.Realtime.build("testResource1_REALTIME", "instance", "0", "2", "12") + "]" }, 3);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource2_REALTIME",
new String[] { "[" + SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "0", "20")
+ ", " + SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "1", "21") + ", "
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "0", "2", "22") + "]", "["
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "0", "23") + ", "
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "1", "24") + ", "
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "1", "2", "25") + "]", "["
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "0", "26") + ", "
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "1", "27") + ", "
+ SegmentNameBuilder.Realtime.build("testResource2_REALTIME", "instance", "2", "2", "28") + "]" }, 3);
}
}
示例9: offlineBasicTest
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void offlineBasicTest() throws Exception {
final String tableName = "myTable_OFFLINE";
List<String> allTableNames = new ArrayList<String>();
allTableNames.add(tableName);
IdealState idealState = new IdealState(tableName);
idealState.setPartitionState("myTable_0", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_0", "pinot2", "ONLINE");
idealState.setPartitionState("myTable_0", "pinot3", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot2", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot3", "ONLINE");
idealState.setPartitionState("myTable_2", "pinot3", "OFFLINE");
idealState.setReplicas("2");
idealState.setRebalanceMode(IdealState.RebalanceMode.CUSTOMIZED);
ExternalView externalView = new ExternalView(tableName);
externalView.setState("myTable_0","pinot1","ONLINE");
externalView.setState("myTable_0","pinot2","ONLINE");
externalView.setState("myTable_1","pinot1","ERROR");
externalView.setState("myTable_1","pinot2","ONLINE");
HelixAdmin helixAdmin;
{
helixAdmin = mock(HelixAdmin.class);
when(helixAdmin.getResourceIdealState("StatusChecker",tableName)).thenReturn(idealState);
when(helixAdmin.getResourceExternalView("StatusChecker",tableName)).thenReturn(externalView);
}
{
helixResourceManager = mock(PinotHelixResourceManager.class);
when(helixResourceManager.isLeader()).thenReturn(true);
when(helixResourceManager.getAllTables()).thenReturn(allTableNames);
when(helixResourceManager.getHelixClusterName()).thenReturn("StatusChecker");
when(helixResourceManager.getHelixAdmin()).thenReturn(helixAdmin);
}
{
config = mock(ControllerConf.class);
when(config.getStatusCheckerFrequencyInSeconds()).thenReturn(300);
when(config.getStatusCheckerWaitForPushTimeInSeconds()).thenReturn(300);
}
metricsRegistry = new MetricsRegistry();
controllerMetrics = new ControllerMetrics(metricsRegistry);
segmentStatusChecker = new SegmentStatusChecker(helixResourceManager, config);
segmentStatusChecker.setMetricsRegistry(controllerMetrics);
segmentStatusChecker.runSegmentMetrics();
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.SEGMENTS_IN_ERROR_STATE), 1);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.NUMBER_OF_REPLICAS), 1);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_OF_REPLICAS), 33);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_SEGMENTS_AVAILABLE), 100);
segmentStatusChecker.stop();
}
示例10: realtimeBasicTest
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void realtimeBasicTest() throws Exception {
final String tableName = "myTable_REALTIME";
final String rawTableName = TableNameBuilder.extractRawTableName(tableName);
List<String> allTableNames = new ArrayList<String>();
allTableNames.add(tableName);
final LLCSegmentName seg1 = new LLCSegmentName(rawTableName, 1, 0, System.currentTimeMillis());
final LLCSegmentName seg2 = new LLCSegmentName(rawTableName, 1, 1, System.currentTimeMillis());
final LLCSegmentName seg3 = new LLCSegmentName(rawTableName, 2, 1, System.currentTimeMillis());
IdealState idealState = new IdealState(tableName);
idealState.setPartitionState(seg1.getSegmentName(), "pinot1", "ONLINE");
idealState.setPartitionState(seg1.getSegmentName(), "pinot2", "ONLINE");
idealState.setPartitionState(seg1.getSegmentName(), "pinot3", "ONLINE");
idealState.setPartitionState(seg2.getSegmentName(), "pinot1", "ONLINE");
idealState.setPartitionState(seg2.getSegmentName(), "pinot2", "ONLINE");
idealState.setPartitionState(seg2.getSegmentName(), "pinot3", "ONLINE");
idealState.setPartitionState(seg3.getSegmentName(), "pinot1", "CONSUMING");
idealState.setPartitionState(seg3.getSegmentName(), "pinot2", "CONSUMING");
idealState.setPartitionState(seg3.getSegmentName(), "pinot3", "OFFLINE");
idealState.setReplicas("3");
idealState.setRebalanceMode(IdealState.RebalanceMode.CUSTOMIZED);
ExternalView externalView = new ExternalView(tableName);
externalView.setState(seg1.getSegmentName(),"pinot1","ONLINE");
externalView.setState(seg1.getSegmentName(), "pinot2","ONLINE");
externalView.setState(seg1.getSegmentName(),"pinot3","ONLINE");
externalView.setState(seg2.getSegmentName(),"pinot1","CONSUMING");
externalView.setState(seg2.getSegmentName(),"pinot2","ONLINE");
externalView.setState(seg2.getSegmentName(),"pinot3","CONSUMING");
externalView.setState(seg3.getSegmentName(),"pinot1","CONSUMING");
externalView.setState(seg3.getSegmentName(),"pinot2","CONSUMING");
externalView.setState(seg3.getSegmentName(),"pinot3","OFFLINE");
HelixAdmin helixAdmin;
{
helixAdmin = mock(HelixAdmin.class);
when(helixAdmin.getResourceIdealState("StatusChecker",tableName)).thenReturn(idealState);
when(helixAdmin.getResourceExternalView("StatusChecker",tableName)).thenReturn(externalView);
}
{
helixResourceManager = mock(PinotHelixResourceManager.class);
when(helixResourceManager.isLeader()).thenReturn(true);
when(helixResourceManager.getAllTables()).thenReturn(allTableNames);
when(helixResourceManager.getHelixClusterName()).thenReturn("StatusChecker");
when(helixResourceManager.getHelixAdmin()).thenReturn(helixAdmin);
}
{
config = mock(ControllerConf.class);
when(config.getStatusCheckerFrequencyInSeconds()).thenReturn(300);
when(config.getStatusCheckerWaitForPushTimeInSeconds()).thenReturn(300);
}
metricsRegistry = new MetricsRegistry();
controllerMetrics = new ControllerMetrics(metricsRegistry);
segmentStatusChecker = new SegmentStatusChecker(helixResourceManager, config);
segmentStatusChecker.setMetricsRegistry(controllerMetrics);
segmentStatusChecker.runSegmentMetrics();
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.SEGMENTS_IN_ERROR_STATE), 0);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.NUMBER_OF_REPLICAS), 3);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_OF_REPLICAS), 100);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_SEGMENTS_AVAILABLE), 100);
segmentStatusChecker.stop();
}
示例11: missingEVPartitionTest
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void missingEVPartitionTest() throws Exception {
final String tableName = "myTable_OFFLINE";
List<String> allTableNames = new ArrayList<String>();
allTableNames.add(tableName);
IdealState idealState = new IdealState(tableName);
idealState.setPartitionState("myTable_0", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_0", "pinot2", "ONLINE");
idealState.setPartitionState("myTable_0", "pinot3", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot2", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot3", "ONLINE");
idealState.setPartitionState("myTable_2", "pinot3", "OFFLINE");
idealState.setPartitionState("myTable_3", "pinot3", "ONLINE");
idealState.setReplicas("2");
idealState.setRebalanceMode(IdealState.RebalanceMode.CUSTOMIZED);
ExternalView externalView = new ExternalView(tableName);
externalView.setState("myTable_0","pinot1","ONLINE");
externalView.setState("myTable_0","pinot2","ONLINE");
externalView.setState("myTable_1","pinot1","ERROR");
externalView.setState("myTable_1","pinot2","ONLINE");
ZNRecord znrecord = new ZNRecord("myTable_0");
znrecord.setSimpleField(CommonConstants.Segment.SEGMENT_NAME,"myTable_0");
znrecord.setSimpleField(CommonConstants.Segment.TABLE_NAME, "myTable_OFFLINE");
znrecord.setSimpleField(CommonConstants.Segment.INDEX_VERSION, "v1");
znrecord.setEnumField(CommonConstants.Segment.SEGMENT_TYPE, CommonConstants.Segment.SegmentType.OFFLINE);
znrecord.setLongField(CommonConstants.Segment.START_TIME, 1000);
znrecord.setLongField(CommonConstants.Segment.END_TIME, 2000);
znrecord.setSimpleField(CommonConstants.Segment.TIME_UNIT, TimeUnit.HOURS.toString());
znrecord.setLongField(CommonConstants.Segment.TOTAL_DOCS, 10000);
znrecord.setLongField(CommonConstants.Segment.CRC, 1234);
znrecord.setLongField(CommonConstants.Segment.CREATION_TIME, 3000);
znrecord.setSimpleField(CommonConstants.Segment.Offline.DOWNLOAD_URL, "http://localhost:8000/myTable_0");
znrecord.setLongField(CommonConstants.Segment.Offline.PUSH_TIME, System.currentTimeMillis());
znrecord.setLongField(CommonConstants.Segment.Offline.REFRESH_TIME,System.currentTimeMillis());
ZkHelixPropertyStore<ZNRecord> propertyStore;
{
propertyStore = (ZkHelixPropertyStore<ZNRecord>) mock(ZkHelixPropertyStore.class);
when(propertyStore.get("/SEGMENTS/myTable_OFFLINE/myTable_3",null, AccessOption.PERSISTENT)).thenReturn(znrecord);
}
HelixAdmin helixAdmin;
{
helixAdmin = mock(HelixAdmin.class);
when(helixAdmin.getResourceIdealState("StatusChecker",tableName)).thenReturn(idealState);
when(helixAdmin.getResourceExternalView("StatusChecker",tableName)).thenReturn(externalView);
}
{
helixResourceManager = mock(PinotHelixResourceManager.class);
when(helixResourceManager.isLeader()).thenReturn(true);
when(helixResourceManager.getAllTables()).thenReturn(allTableNames);
when(helixResourceManager.getHelixClusterName()).thenReturn("StatusChecker");
when(helixResourceManager.getHelixAdmin()).thenReturn(helixAdmin);
when(helixResourceManager.getPropertyStore()).thenReturn(propertyStore);
}
{
config = mock(ControllerConf.class);
when(config.getStatusCheckerFrequencyInSeconds()).thenReturn(300);
when(config.getStatusCheckerWaitForPushTimeInSeconds()).thenReturn(0);
}
metricsRegistry = new MetricsRegistry();
controllerMetrics = new ControllerMetrics(metricsRegistry);
segmentStatusChecker = new SegmentStatusChecker(helixResourceManager, config);
segmentStatusChecker.setMetricsRegistry(controllerMetrics);
segmentStatusChecker.runSegmentMetrics();
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.SEGMENTS_IN_ERROR_STATE), 1);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.NUMBER_OF_REPLICAS), 0);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_SEGMENTS_AVAILABLE), 75);
segmentStatusChecker.stop();
}
示例12: missingEVPartitionPushTest
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void missingEVPartitionPushTest() throws Exception {
final String tableName = "myTable_OFFLINE";
List<String> allTableNames = new ArrayList<String>();
allTableNames.add(tableName);
IdealState idealState = new IdealState(tableName);
idealState.setPartitionState("myTable_0", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot1", "ONLINE");
idealState.setPartitionState("myTable_1", "pinot2", "ONLINE");
idealState.setReplicas("2");
idealState.setRebalanceMode(IdealState.RebalanceMode.CUSTOMIZED);
ExternalView externalView = new ExternalView(tableName);
externalView.setState("myTable_1","pinot1","ONLINE");
externalView.setState("myTable_1","pinot2","ONLINE");
HelixAdmin helixAdmin;
{
helixAdmin = mock(HelixAdmin.class);
when(helixAdmin.getResourceIdealState("StatusChecker","myTable_OFFLINE")).thenReturn(idealState);
when(helixAdmin.getResourceExternalView("StatusChecker","myTable_OFFLINE")).thenReturn(externalView);
}
ZNRecord znrecord = new ZNRecord("myTable_0");
znrecord.setSimpleField(CommonConstants.Segment.SEGMENT_NAME,"myTable_0");
znrecord.setSimpleField(CommonConstants.Segment.TABLE_NAME, "myTable_OFFLINE");
znrecord.setSimpleField(CommonConstants.Segment.INDEX_VERSION, "v1");
znrecord.setEnumField(CommonConstants.Segment.SEGMENT_TYPE, CommonConstants.Segment.SegmentType.OFFLINE);
znrecord.setLongField(CommonConstants.Segment.START_TIME, 1000);
znrecord.setLongField(CommonConstants.Segment.END_TIME, 2000);
znrecord.setSimpleField(CommonConstants.Segment.TIME_UNIT, TimeUnit.HOURS.toString());
znrecord.setLongField(CommonConstants.Segment.TOTAL_DOCS, 10000);
znrecord.setLongField(CommonConstants.Segment.CRC, 1234);
znrecord.setLongField(CommonConstants.Segment.CREATION_TIME, 3000);
znrecord.setSimpleField(CommonConstants.Segment.Offline.DOWNLOAD_URL, "http://localhost:8000/myTable_0");
znrecord.setLongField(CommonConstants.Segment.Offline.PUSH_TIME, System.currentTimeMillis());
znrecord.setLongField(CommonConstants.Segment.Offline.REFRESH_TIME,System.currentTimeMillis());
ZkHelixPropertyStore<ZNRecord> propertyStore;
{
propertyStore = (ZkHelixPropertyStore<ZNRecord>) mock(ZkHelixPropertyStore.class);
when(propertyStore.get("/SEGMENTS/myTable_OFFLINE/myTable_0",null, AccessOption.PERSISTENT)).thenReturn(znrecord);
}
{
helixResourceManager = mock(PinotHelixResourceManager.class);
when(helixResourceManager.isLeader()).thenReturn(true);
when(helixResourceManager.getAllTables()).thenReturn(allTableNames);
when(helixResourceManager.getHelixClusterName()).thenReturn("StatusChecker");
when(helixResourceManager.getHelixAdmin()).thenReturn(helixAdmin);
when(helixResourceManager.getPropertyStore()).thenReturn(propertyStore);
}
{
config = mock(ControllerConf.class);
when(config.getStatusCheckerFrequencyInSeconds()).thenReturn(300);
when(config.getStatusCheckerWaitForPushTimeInSeconds()).thenReturn(300);
}
metricsRegistry = new MetricsRegistry();
controllerMetrics = new ControllerMetrics(metricsRegistry);
segmentStatusChecker = new SegmentStatusChecker(helixResourceManager, config);
segmentStatusChecker.setMetricsRegistry(controllerMetrics);
segmentStatusChecker.runSegmentMetrics();
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.SEGMENTS_IN_ERROR_STATE), 0);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.NUMBER_OF_REPLICAS), 2);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_OF_REPLICAS), 100);
Assert.assertEquals(controllerMetrics.getValueOfTableGauge(externalView.getId(),
ControllerGauge.PERCENT_SEGMENTS_AVAILABLE), 100);
segmentStatusChecker.stop();
}
示例13: testHelixExternalViewBasedRoutingTable
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void testHelixExternalViewBasedRoutingTable() throws Exception {
HelixExternalViewBasedRouting routingTable = new HelixExternalViewBasedRouting(null, null, new BaseConfiguration());
ExternalView externalView = new ExternalView("testResource0_OFFLINE");
externalView.setState("segment0", "dataServer_instance_0", "ONLINE");
externalView.setState("segment0", "dataServer_instance_1", "ONLINE");
externalView.setState("segment1", "dataServer_instance_1", "ONLINE");
externalView.setState("segment1", "dataServer_instance_2", "ONLINE");
externalView.setState("segment2", "dataServer_instance_2", "ONLINE");
externalView.setState("segment2", "dataServer_instance_0", "ONLINE");
List<InstanceConfig> instanceConfigs = generateInstanceConfigs("dataServer_instance", 0, 2);
TableConfig testResource0Config = generateTableConfig("testResource0_OFFLINE");
routingTable.markDataResourceOnline(testResource0Config, externalView, instanceConfigs);
ExternalView externalView1 = new ExternalView("testResource1_OFFLINE");
externalView1.setState("segment10", "dataServer_instance_0", "ONLINE");
externalView1.setState("segment11", "dataServer_instance_1", "ONLINE");
externalView1.setState("segment12", "dataServer_instance_2", "ONLINE");
TableConfig testResource1Config = generateTableConfig("testResource1_OFFLINE");
routingTable.markDataResourceOnline(testResource1Config, externalView1, instanceConfigs);
ExternalView externalView2 = new ExternalView("testResource2_OFFLINE");
externalView2.setState("segment20", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_0", "ONLINE");
externalView2.setState("segment20", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_1", "ONLINE");
externalView2.setState("segment20", "dataServer_instance_2", "ONLINE");
externalView2.setState("segment21", "dataServer_instance_2", "ONLINE");
externalView2.setState("segment22", "dataServer_instance_2", "ONLINE");
TableConfig testResource2Config = generateTableConfig("testResource2_OFFLINE");
routingTable.markDataResourceOnline(testResource2Config, externalView2, instanceConfigs);
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource0_OFFLINE", "[segment0, segment1, segment2]", 3);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource1_OFFLINE", "[segment10, segment11, segment12]", 3);
}
for (int numRun = 0; numRun < 100; ++numRun) {
assertResourceRequest(routingTable, "testResource2_OFFLINE", "[segment20, segment21, segment22]", 3);
}
}
示例14: testTimeBoundaryRegression
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void testTimeBoundaryRegression() throws Exception {
final FakePropertyStore propertyStore = new FakePropertyStore();
final OfflineSegmentZKMetadata offlineSegmentZKMetadata = new OfflineSegmentZKMetadata();
offlineSegmentZKMetadata.setTimeUnit(TimeUnit.DAYS);
offlineSegmentZKMetadata.setEndTime(1234L);
propertyStore.setContents(ZKMetadataProvider.constructPropertyStorePathForSegment("myTable_OFFLINE",
"someSegment_0"), offlineSegmentZKMetadata.toZNRecord());
final ExternalView offlineExternalView = new ExternalView("myTable_OFFLINE");
offlineExternalView.setState("someSegment_0", "Server_1.2.3.4_1234", "ONLINE");
final MutableBoolean timeBoundaryUpdated = new MutableBoolean(false);
HelixExternalViewBasedRouting routingTable =
new HelixExternalViewBasedRouting(propertyStore, null, new BaseConfiguration()) {
@Override
protected ExternalView fetchExternalView(String table) {
return offlineExternalView;
}
@Override
protected void updateTimeBoundary(String tableName, ExternalView externalView) {
if (tableName.equals("myTable_OFFLINE")) {
timeBoundaryUpdated.setValue(true);
}
}
};
routingTable.setBrokerMetrics(new BrokerMetrics(new MetricsRegistry()));
Assert.assertFalse(timeBoundaryUpdated.booleanValue());
final ArrayList<InstanceConfig> instanceConfigList = new ArrayList<>();
instanceConfigList.add(new InstanceConfig("Server_1.2.3.4_1234"));
TableConfig myTableOfflineConfig = generateTableConfig("myTable_OFFLINE");
TableConfig myTableRealtimeConfig = generateTableConfig("myTable_REALTIME");
routingTable.markDataResourceOnline(myTableOfflineConfig, offlineExternalView, instanceConfigList);
routingTable.markDataResourceOnline(myTableRealtimeConfig, new ExternalView("myTable_REALTIME"), new ArrayList<InstanceConfig>());
Assert.assertTrue(timeBoundaryUpdated.booleanValue());
}
示例15: testMultipleConsumingSegments
import org.apache.helix.model.ExternalView; //导入方法依赖的package包/类
@Test
public void testMultipleConsumingSegments() throws Exception {
NUM_PARTITION = 1;
NUM_REPLICA = 1;
NUM_SERVERS = 1;
NUM_SEGMENTS = 10;
int ONLINE_SEGMENTS = 8;
// Create the fake property store
FakePropertyStore fakePropertyStore = new FakePropertyStore();
// Create the table config, partition mapping,
TableConfig tableConfig = buildRealtimeTableConfig();
Map<Integer, Integer> partitionSegmentCount = new HashMap<>();
for (int i = 0; i < NUM_PARTITION; i++) {
partitionSegmentCount.put(i, 0);
}
List<String> segmentList = updateZkMetadataAndBuildSegmentList(partitionSegmentCount, fakePropertyStore);
// Create instance Configs
List<InstanceConfig> instanceConfigs = new ArrayList<>();
for (int serverId = 0; serverId <= NUM_SERVERS; serverId++) {
String serverName = "Server_localhost_" + serverId;
instanceConfigs.add(new InstanceConfig(serverName));
}
// Update replica group mapping zk metadata
Map<Integer, List<String>> partitionToServerMapping =
buildKafkaPartitionMapping(REALTIME_TABLE_NAME, fakePropertyStore, instanceConfigs);
ExternalView externalView =
buildExternalView(REALTIME_TABLE_NAME, fakePropertyStore, partitionToServerMapping, segmentList);
LLCSegmentName consumingSegment = new LLCSegmentName(REALTIME_TABLE_NAME, 0, 9, 0);
externalView.setState(consumingSegment.getSegmentName(), "Server_localhost_0", "CONSUMING");
consumingSegment = new LLCSegmentName(REALTIME_TABLE_NAME, 0, 8, 0);
externalView.setState(consumingSegment.getSegmentName(), "Server_localhost_0", "CONSUMING");
// Create the partition aware realtime routing table builder.
RoutingTableBuilder routingTableBuilder =
buildPartitionAwareRealtimeRoutingTableBuilder(fakePropertyStore, tableConfig, externalView, instanceConfigs);
// Check the query that requires to scan all segment.
String countStarQuery = "select count(*) from myTable";
Map<String, List<String>> routingTable =
routingTableBuilder.getRoutingTable(buildRoutingTableLookupRequest(countStarQuery));
// Check that all segments are covered exactly for once.
Set<String> assignedSegments = new HashSet<>();
for (List<String> segmentsForServer : routingTable.values()) {
for (String segmentName: segmentsForServer) {
Assert.assertFalse(assignedSegments.contains(segmentName));
assignedSegments.add(segmentName);
}
}
Assert.assertEquals(assignedSegments.size(), ONLINE_SEGMENTS + 1);
// Check that only one consuming segment is assigned
Assert.assertTrue(assignedSegments.contains(segmentList.get(ONLINE_SEGMENTS)));
for (int i = ONLINE_SEGMENTS + 1; i < NUM_SEGMENTS; i++) {
Assert.assertFalse(assignedSegments.contains(segmentList.get(i)));
}
}