lilin
5 years ago
4 changed files with 230 additions and 117 deletions
@ -1,112 +0,0 @@ |
|||||||
/* |
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
|
||||||
* contributor license agreements. See the NOTICE file distributed with |
|
||||||
* this work for additional information regarding copyright ownership. |
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
|
||||||
* (the "License"); you may not use this file except in compliance with |
|
||||||
* the License. You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.apache.dolphinscheduler.common.queue; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.Constants; |
|
||||||
import org.apache.dolphinscheduler.common.utils.IpUtils; |
|
||||||
import org.apache.dolphinscheduler.common.utils.OSUtils; |
|
||||||
import org.apache.dolphinscheduler.common.zk.ZKServer; |
|
||||||
import org.junit.After; |
|
||||||
import org.junit.Before; |
|
||||||
import org.junit.Ignore; |
|
||||||
import org.junit.Test; |
|
||||||
import org.slf4j.Logger; |
|
||||||
import org.slf4j.LoggerFactory; |
|
||||||
|
|
||||||
import java.util.List; |
|
||||||
import java.util.Random; |
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals; |
|
||||||
|
|
||||||
/** |
|
||||||
* task queue test |
|
||||||
*/ |
|
||||||
public class TaskQueueImplTest { |
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(TaskQueueImplTest.class); |
|
||||||
|
|
||||||
ITaskQueue tasksQueue = null; |
|
||||||
|
|
||||||
@Before |
|
||||||
public void before(){ |
|
||||||
ZKServer.start(); |
|
||||||
|
|
||||||
tasksQueue = TaskQueueFactory.getTaskQueueInstance(); |
|
||||||
|
|
||||||
//clear all data
|
|
||||||
tasksQueue.delete(); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@After |
|
||||||
public void after(){ |
|
||||||
//clear all data
|
|
||||||
tasksQueue.delete(); |
|
||||||
ZKServer.stop(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Test |
|
||||||
public void testAdd(){ |
|
||||||
|
|
||||||
|
|
||||||
//add
|
|
||||||
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"1_0_1_1_-1"); |
|
||||||
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"0_1_1_1_-1"); |
|
||||||
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"0_0_0_1_" + IpUtils.ipToLong(OSUtils.getHost())); |
|
||||||
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"1_2_1_1_" + IpUtils.ipToLong(OSUtils.getHost()) + 10); |
|
||||||
|
|
||||||
List<String> tasks = tasksQueue.poll(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, 1); |
|
||||||
|
|
||||||
if(tasks.size() <= 0){ |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
//pop
|
|
||||||
String node1 = tasks.get(0); |
|
||||||
|
|
||||||
assertEquals(node1,"0_0_0_1_" + IpUtils.ipToLong(OSUtils.getHost())); |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* test one million data from zookeeper queue |
|
||||||
*/ |
|
||||||
@Ignore |
|
||||||
@Test |
|
||||||
public void extremeTest(){ |
|
||||||
int total = 30 * 10000; |
|
||||||
|
|
||||||
for(int i = 0; i < total; i++) { |
|
||||||
for(int j = 0; j < total; j++) { |
|
||||||
//${processInstancePriority}_${processInstanceId}_${taskInstancePriority}_${taskId}
|
|
||||||
//format ${processInstancePriority}_${processInstanceId}_${taskInstancePriority}_${taskId}
|
|
||||||
String formatTask = String.format("%s_%d_%s_%d", i, i + 1, j, j == 0 ? 0 : j + new Random().nextInt(100)); |
|
||||||
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, formatTask); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
String node1 = tasksQueue.poll(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, 1).get(0); |
|
||||||
assertEquals(node1,"0"); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -0,0 +1,228 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
package org.apache.dolphinscheduler.common.queue; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.common.Constants; |
||||||
|
import org.apache.dolphinscheduler.common.utils.IpUtils; |
||||||
|
import org.apache.dolphinscheduler.common.utils.OSUtils; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.common.zk.ZKServer; |
||||||
|
import org.junit.After; |
||||||
|
import org.junit.Before; |
||||||
|
import org.junit.Ignore; |
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* task queue test |
||||||
|
*/ |
||||||
|
public class TaskQueueZKImplTest { |
||||||
|
|
||||||
|
|
||||||
|
private ITaskQueue tasksQueue = null; |
||||||
|
|
||||||
|
@Before |
||||||
|
public void before(){ |
||||||
|
|
||||||
|
ZKServer.start(); |
||||||
|
tasksQueue = TaskQueueFactory.getTaskQueueInstance(); |
||||||
|
//clear all data
|
||||||
|
tasksQueue.delete(); |
||||||
|
} |
||||||
|
|
||||||
|
@After |
||||||
|
public void after(){ |
||||||
|
//clear all data
|
||||||
|
tasksQueue.delete(); |
||||||
|
ZKServer.stop(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* test take out all the elements |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void getAllTasks(){ |
||||||
|
|
||||||
|
//add
|
||||||
|
init(); |
||||||
|
// get all
|
||||||
|
List<String> allTasks = tasksQueue.getAllTasks(Constants.DOLPHINSCHEDULER_TASKS_QUEUE); |
||||||
|
assertEquals(allTasks.size(),2); |
||||||
|
//delete all
|
||||||
|
tasksQueue.delete(); |
||||||
|
allTasks = tasksQueue.getAllTasks(Constants.DOLPHINSCHEDULER_TASKS_QUEUE); |
||||||
|
assertEquals(allTasks.size(),0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test check task exists in the task queue or not |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void checkTaskExists(){ |
||||||
|
|
||||||
|
String task= "1_0_1_1_-1"; |
||||||
|
//add
|
||||||
|
init(); |
||||||
|
// check Exist true
|
||||||
|
boolean taskExists = tasksQueue.checkTaskExists(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, task); |
||||||
|
assertTrue(taskExists); |
||||||
|
|
||||||
|
//remove task
|
||||||
|
tasksQueue.removeNode(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
// check Exist false
|
||||||
|
taskExists = tasksQueue.checkTaskExists(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, task); |
||||||
|
assertFalse(taskExists); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test add element to the queue |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void add(){ |
||||||
|
|
||||||
|
//add
|
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"1_0_1_1_-1"); |
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"0_1_1_1_-1"); |
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"0_0_0_1_" + IpUtils.ipToLong(OSUtils.getHost())); |
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"1_2_1_1_" + IpUtils.ipToLong(OSUtils.getHost()) + 10); |
||||||
|
|
||||||
|
List<String> tasks = tasksQueue.poll(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, 1); |
||||||
|
|
||||||
|
if(tasks.size() <= 0){ |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
//pop
|
||||||
|
String node1 = tasks.get(0); |
||||||
|
assertEquals(node1,"0_0_0_1_" + IpUtils.ipToLong(OSUtils.getHost())); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test element pops out of the queue |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void poll(){ |
||||||
|
|
||||||
|
//add
|
||||||
|
init(); |
||||||
|
List<String> taskList = tasksQueue.poll(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, 2); |
||||||
|
assertEquals(taskList.size(),2); |
||||||
|
|
||||||
|
assertEquals(taskList.get(0),"0_1_1_1_-1"); |
||||||
|
assertEquals(taskList.get(1),"1_0_1_1_-1"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test remove element from queue |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void removeNode(){ |
||||||
|
String task = "1_0_1_1_-1"; |
||||||
|
//add
|
||||||
|
init(); |
||||||
|
tasksQueue.removeNode(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
assertFalse(tasksQueue.checkTaskExists(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test add an element to the set |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void sadd(){ |
||||||
|
|
||||||
|
String task = "1_0_1_1_-1"; |
||||||
|
tasksQueue.sadd(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
//check size
|
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* test delete the value corresponding to the key in the set |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void srem(){ |
||||||
|
|
||||||
|
String task = "1_0_1_1_-1"; |
||||||
|
tasksQueue.sadd(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
//check size
|
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),1); |
||||||
|
//remove and get size
|
||||||
|
tasksQueue.srem(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* test gets all the elements of the set based on the key |
||||||
|
*/ |
||||||
|
@Test |
||||||
|
public void smembers(){ |
||||||
|
|
||||||
|
//first init
|
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),0); |
||||||
|
//add
|
||||||
|
String task = "1_0_1_1_-1"; |
||||||
|
tasksQueue.sadd(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
//check size
|
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),1); |
||||||
|
//add
|
||||||
|
task = "0_1_1_1_"; |
||||||
|
tasksQueue.sadd(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,task); |
||||||
|
//check size
|
||||||
|
assertEquals(tasksQueue.smembers(Constants.DOLPHINSCHEDULER_TASKS_QUEUE).size(),2); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* init data |
||||||
|
*/ |
||||||
|
private void init(){ |
||||||
|
//add
|
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"1_0_1_1_-1"); |
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE,"0_1_1_1_-1"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* test one million data from zookeeper queue |
||||||
|
*/ |
||||||
|
@Ignore |
||||||
|
@Test |
||||||
|
public void extremeTest(){ |
||||||
|
int total = 30 * 10000; |
||||||
|
|
||||||
|
for(int i = 0; i < total; i++) { |
||||||
|
for(int j = 0; j < total; j++) { |
||||||
|
//${processInstancePriority}_${processInstanceId}_${taskInstancePriority}_${taskId}
|
||||||
|
//format ${processInstancePriority}_${processInstanceId}_${taskInstancePriority}_${taskId}
|
||||||
|
String formatTask = String.format("%s_%d_%s_%d", i, i + 1, j, j == 0 ? 0 : j + new Random().nextInt(100)); |
||||||
|
tasksQueue.add(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, formatTask); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
String node1 = tasksQueue.poll(Constants.DOLPHINSCHEDULER_TASKS_QUEUE, 1).get(0); |
||||||
|
assertEquals(node1,"0"); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue