From a43849f994638a805697a1e8afa8ad9fe0c8eca6 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Sat, 13 Jan 2018 17:58:20 +0800 Subject: [PATCH 01/75] add a query plan2 with join query plan and vertical query plan. --- .../cn/edu/ruc/iir/pard/catalog/Column.java | 53 ++ .../edu/ruc/iir/pard/client/PardClient.java | 8 +- .../executor/connector/PardResultSet.java | 16 + .../executor/connector/node/JoinNode.java | 2 +- .../executor/connector/node/NodeHelper.java | 10 +- .../ruc/iir/pard/planner/ErrorMessage.java | 26 +- .../cn/edu/ruc/iir/pard/planner/Plan.java | 14 +- .../ruc/iir/pard/planner/dml/QueryPlan2.java | 613 ++++++++++++++++++ .../iir/pard/semantic/SemanticException.java | 11 + .../ruc/iir/pard/server/PardQueryHandler.java | 11 +- .../ruc/iir/pard/server/PardWebServer.java | 12 +- .../cn/edu/ruc/iir/pard/web/PardServlet.java | 28 +- .../ruc/iir/pard/semantic/JoinSemantic.java | 27 + .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 34 + 14 files changed, 850 insertions(+), 15 deletions(-) create mode 100644 pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java create mode 100644 pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java index 6f0ab7c..faaab1f 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java @@ -86,4 +86,57 @@ public void setKey(int key) { this.key = key; } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((columnName == null) ? 0 : columnName.hashCode()); + result = prime * result + dataType; + result = prime * result + id; + result = prime * result + index; + result = prime * result + key; + result = prime * result + len; + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Column other = (Column) obj; + if (columnName == null) { + if (other.columnName != null) { + return false; + } + } + else if (!columnName.equals(other.columnName)) { + return false; + } + if (dataType != other.dataType) { + return false; + } + if (id != other.id) { + return false; + } + if (index != other.index) { + return false; + } + if (key != other.key) { + return false; + } + if (len != other.len) { + return false; + } + return true; + } } diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 2a45daf..78b669c 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -80,9 +80,15 @@ public void run() pretty.printLargeDataSetsOneByOne(); System.out.println("Selected " + counter + " tuples"); System.out.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); + if (resultSet.getSemanticErrmsg() != null) { + System.err.println("Semantic Status:" + resultSet.getSemanticErrmsg()); + } } else { - System.out.println(resultSet.getStatus().toString()); + System.err.println(resultSet.getStatus().toString()); + if (resultSet.getSemanticErrmsg() != null) { + System.err.println(resultSet.getSemanticErrmsg()); + } } } else { diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/PardResultSet.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/PardResultSet.java index c5a4a34..1a255f0 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/PardResultSet.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/PardResultSet.java @@ -62,6 +62,7 @@ public String toString() private int currentSize = 0; private String taskId; private long executionTime; + private String semanticErrmsg; private transient ResultSet jdbcResultSet = null; private transient Connection connection = null; @@ -74,6 +75,11 @@ public PardResultSet(ResultStatus resultStatus) { this(resultStatus, ImmutableList.of(), defaultCapacity); } + public PardResultSet(ResultStatus resultStatus, String msg) + { + this(resultStatus, ImmutableList.of(), defaultCapacity); + semanticErrmsg = msg; + } public PardResultSet(ResultStatus resultStatus, List schema) { @@ -248,6 +254,16 @@ public void setExecutionTime(long executionTime) this.executionTime = executionTime; } + public String getSemanticErrmsg() + { + return semanticErrmsg; + } + + public void setSemanticErrmsg(String semanticErrmsg) + { + this.semanticErrmsg = semanticErrmsg; + } + @Override public String toString() { diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java index 237b0dd..39dcc0c 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java @@ -32,7 +32,7 @@ public boolean hasChildren() { return !childrens.isEmpty(); } - public void addUnionChild(PlanNode node) + public void addJoinChild(PlanNode node) { this.childrens.add(node); } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java index 3573917..aeb9449 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java @@ -99,6 +99,9 @@ else if (node instanceof InputNode) { public static Map getPlanNodeInfo(PlanNode node) { Map obj = new HashMap(); + if (node == null) { + return obj; + } if (node instanceof TableScanNode) { TableScanNode cnode = (TableScanNode) node; obj.put("name", "TABLESCAN"); @@ -135,12 +138,14 @@ else if (node instanceof LimitNode) { LimitNode cnode = (LimitNode) node; obj.put("name", "LIMIT"); obj.put("number", ((LimitNode) node).getLimitNum() + ""); + return obj; } else if (node instanceof JoinNode) { JoinNode cnode = (JoinNode) node; obj.put("name", "JOIN"); JSONArray array = new JSONArray(); // obj.put("joinSet", cnode.getJoinSet()); + return obj; } else if (node instanceof InputNode) { InputNode cnode = (InputNode) node; @@ -163,7 +168,10 @@ else if (node instanceof AggregationNode) { obj.put("name", "AggragationNode"); return obj; } - return null; + else { + System.out.println(node.getClass().getName()); + } + return obj; } public static JSONObject toJSON(PlanNode node) { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java index f498dd4..eaa8a52 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java @@ -1,5 +1,7 @@ package cn.edu.ruc.iir.pard.planner; +import cn.edu.ruc.iir.pard.semantic.SemanticException; + import java.util.HashMap; import java.util.Map; @@ -7,6 +9,7 @@ public class ErrorMessage { private int errcode; private String errmsg; + private transient SemanticException exception; private static Map template = null; private static ErrorMessage ok = throwMessage(ErrCode.OK, ""); public static ErrorMessage throwMessage(int errorCode, Object...objects) @@ -22,6 +25,7 @@ public static ErrorMessage getOKMessage() } public static class ErrCode { + public static final int SomeSiteDown = 2; public static final int OK = 1; public static final int ParseError = -10000; public static final int SchemaExsits = -10001; @@ -48,6 +52,8 @@ public static class ErrCode public static final int UnSupportedQuery = -10022; public static final int FileNotFound = -10023; public static final int FileIOError = -10024; + public static final int AllSiteDown = -10025; + public static final int ColumnNameIsAmbiguous = -10026; } public static void init() { @@ -78,7 +84,10 @@ public static void init() template.put(ErrCode.UnSupportedQuery, "Unsupported query:%s"); template.put(ErrCode.FileNotFound, "File not exists"); template.put(ErrCode.FileIOError, "File IO error"); + template.put(ErrCode.AllSiteDown, "Congratulations! The table %s site is all lost connection. Pard needn't do a query plan, thank you!"); + template.put(ErrCode.ColumnNameIsAmbiguous, "Column name %s is ambigouous in %s"); template.put(ErrCode.OK, "success"); + template.put(ErrCode.SomeSiteDown, "Pard lost some sites' connections, the information you want may be not complete."); } static { @@ -92,14 +101,24 @@ public Map getTemplate() return template; } public ErrorMessage() - {} + { + try { + exception = new SemanticException(); + throw exception; + } + catch (SemanticException e) { + exception = e; + } + } public ErrorMessage(String errMsg, int errcode) { + this(); this.errcode = errcode; this.errmsg = errMsg; } public ErrorMessage(int errorCode, Object...objects) { + this(); String tmp = getTemplate().get(errorCode); this.errcode = errorCode; this.errmsg = String.format(tmp, objects); @@ -130,4 +149,9 @@ public String toString() { return String.format("ERROR:[%d] %s", errcode, errmsg); } + // get set + public SemanticException getException() + { + return exception; + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java index 63ac3db..2bf9342 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java @@ -12,17 +12,27 @@ public abstract class Plan { private Statement statement; private String jobId; - + private ErrorMessage msg; public Plan(Statement stmt) { statement = stmt; - ErrorMessage msg = this.semanticAnalysis(); + msg = this.semanticAnalysis(); if (msg.getErrcode() < 0) { System.err.println(msg.toString()); throw new SemanticException(msg); } } + public ErrorMessage getMsg() + { + return msg; + } + + public void setMsg(ErrorMessage msg) + { + this.msg = msg; + } + public Statement getStatment() { return statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java new file mode 100644 index 0000000..20c1048 --- /dev/null +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java @@ -0,0 +1,613 @@ +package cn.edu.ruc.iir.pard.planner.dml; + +import cn.edu.ruc.iir.pard.catalog.Column; +import cn.edu.ruc.iir.pard.catalog.Condition; +import cn.edu.ruc.iir.pard.catalog.Fragment; +import cn.edu.ruc.iir.pard.catalog.GddUtil; +import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; +import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; +import cn.edu.ruc.iir.pard.etcd.dao.TableDao; +import cn.edu.ruc.iir.pard.executor.connector.node.DistinctNode; +import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; +import cn.edu.ruc.iir.pard.executor.connector.node.JoinNode; +import cn.edu.ruc.iir.pard.executor.connector.node.LimitNode; +import cn.edu.ruc.iir.pard.executor.connector.node.OutputNode; +import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; +import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; +import cn.edu.ruc.iir.pard.executor.connector.node.SortNode; +import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; +import cn.edu.ruc.iir.pard.executor.connector.node.UnionNode; +import cn.edu.ruc.iir.pard.planner.EarlyStopPlan; +import cn.edu.ruc.iir.pard.planner.ErrorMessage; +import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; +import cn.edu.ruc.iir.pard.semantic.SemanticException; +import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; +import cn.edu.ruc.iir.pard.sql.expr.Expr; +import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; +import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; +import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; +import cn.edu.ruc.iir.pard.sql.tree.AllColumns; +import cn.edu.ruc.iir.pard.sql.tree.DereferenceExpression; +import cn.edu.ruc.iir.pard.sql.tree.Expression; +import cn.edu.ruc.iir.pard.sql.tree.Identifier; +import cn.edu.ruc.iir.pard.sql.tree.Join; +import cn.edu.ruc.iir.pard.sql.tree.Query; +import cn.edu.ruc.iir.pard.sql.tree.QueryBody; +import cn.edu.ruc.iir.pard.sql.tree.QuerySpecification; +import cn.edu.ruc.iir.pard.sql.tree.Relation; +import cn.edu.ruc.iir.pard.sql.tree.Select; +import cn.edu.ruc.iir.pard.sql.tree.SelectItem; +import cn.edu.ruc.iir.pard.sql.tree.SingleColumn; +import cn.edu.ruc.iir.pard.sql.tree.SortItem; +import cn.edu.ruc.iir.pard.sql.tree.Statement; +import cn.edu.ruc.iir.pard.sql.tree.Table; +import cn.edu.ruc.iir.pard.web.PardServlet; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.logging.Logger; + +/** + * Query Plan + * A query statement can be translated to a query plan. + * @author hagen + */ +public class QueryPlan2 + extends QueryPlan implements EarlyStopPlan +{ + private Logger logger = Logger.getLogger(QueryPlan2.class.getName()); + private PlanNode node; + private boolean alreadyDone; + private Optional limit; + private Optional sort; + private Optional distinct; + private ProjectNode project; + private Optional join; + private Optional filter; + + // for projection + private Map alias2col; // 列名别名与列的对应 + private Map colAlias2tbl; // 列名的别名与表的对应关系 + private Map alias2tbl; + private List colList; // projection中列的顺序 + + // for from + private Map fullColAlias2col; // 使用到的所有的表的列 key: tbl.col[string] value: col[Column] + private Map col2tbl; //使用到的所有的表的列 key: tbl.col[string] value: tbl[string] + private Map> col2tblList; + private Map tbl2schema; //使用到的表与schema的对应关系 + private Map catalog; // 使用到的所有表 + private Map tableDaoMap; + //for site + private Map> tbl2site; + + // private UnionNode union; + private static SiteDao siteDao; + private boolean siteMayMissing; + private List aliveSite; + + private List tableList; // 使用的表的顺序 + + private boolean selectPushDown; + public QueryPlan2(Statement stmt) + { + super(stmt); + } + public PlanNode getPlan() + { + return node; + } + + @Override + public ErrorMessage semanticAnalysis() + { + siteDao = new SiteDao(); + aliveSite = new ArrayList(); + aliveSite.addAll(siteDao.listNodes().keySet()); + siteMayMissing = false; + catalog = new HashMap<>(); + alias2col = new HashMap(); + colAlias2tbl = new HashMap(); + tbl2schema = new HashMap(); + col2tbl = new HashMap(); + tableList = new ArrayList<>(); + colList = new ArrayList<>(); + logger = Logger.getLogger(QueryPlan2.class.getName()); + node = new OutputNode(); + selectPushDown = false; + tbl2site = new HashMap<>(); + fullColAlias2col = new HashMap<>(); + col2tblList = new HashMap<>(); + tableDaoMap = new HashMap<>(); + + ColumnItem.clearCol2TblMap(); + alias2tbl = ColumnItem.getCol2TblMap(); + this.limit = Optional.ofNullable(null); + this.sort = Optional.ofNullable(null); + this.distinct = Optional.ofNullable(null); + this.project = null; + this.filter = Optional.ofNullable(null); + this.join = Optional.ofNullable(null); + // this.union = null; + PlanNode currentNode = this.node; + //System.out.println("currentNode" + currentNode); + // get real objects + Query query = (Query) this.getStatment(); + QueryBody queryBody = query.getQueryBody(); + if (!(queryBody instanceof QuerySpecification)) { + return ErrorMessage.throwMessage(ErrorMessage.ErrCode.UnSupportedQuery, "Query Body is not a query specification!"); + } + QuerySpecification querySpecification = (QuerySpecification) queryBody; + Select select = querySpecification.getSelect(); + if (querySpecification.getGroupBy().isPresent()) { + return ErrorMessage.throwMessage(ErrorMessage.ErrCode.UnSupportedQuery, " Group by not supported at present!"); + } + if (querySpecification.getHaving().isPresent()) { + return ErrorMessage.throwMessage(ErrorMessage.ErrCode.UnSupportedQuery, " Having is not supported!"); + } + if (!querySpecification.getFrom().isPresent()) { + return ErrorMessage.throwMessage(ErrorMessage.ErrCode.UnSupportedQuery, " FROM is missing!"); + } + //check for schema + String schemaName = null; + //boolean checkSchema = false; + Schema schema = null; + schema = UsePlan.getCurrentSchema(); + if (schema != null) { + schemaName = schema.getName(); + //checkSchema = true; + } + // check for projection + //check for table + Relation from = querySpecification.getFrom().get(); + checkRelation(from, schemaName, schema); + fillAlias2tbl(); + currentNode = checkLimit(query, currentNode); + currentNode = checkOrderBy(query, currentNode); + currentNode = checkProjectionAndDistinct(select, currentNode); + currentNode = checkFilter(querySpecification, currentNode); + if (tableList.size() == 1) { + PlanNode unionNode = localization(tableList.get(0)); + currentNode.setChildren(unionNode, true, true); + currentNode = unionNode; + } + else { + PlanNode joinNode = join(); + currentNode.setChildren(joinNode, true, true); + currentNode = joinNode; + } + logger.info("Parsed query plan: " + this.node.toString()); + if (!siteMayMissing) { + return ErrorMessage.getOKMessage(); + } + else { + return ErrorMessage.throwMessage(ErrCode.SomeSiteDown); + } + } + public void fillAlias2tbl() + { + for (String key : col2tblList.keySet()) { + List tb = col2tblList.get(key); + if (tb.size() == 1) { + alias2tbl.put(key, tb.get(0)); + } + } + } + public PlanNode join() + { + JoinNode join = new JoinNode(); + for (String tableName : tableList) { + PlanNode node = localization(tableName); + if (node != null) { + join.addJoinChild(node); + } + else { + return null; + } + } + return join; + } + public PlanNode localization(String fromTableName) + { + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(fromTableName); + if (catalogTable.getFragment().values().iterator().next().getFragmentType() == GddUtil.fragementHORIZONTIAL) { + UnionNode union = horizonLocalization(fromTableName); + if (union.getUnionChildren().isEmpty()) { + return null; + } + return union; + } + else { + JoinNode join = verticalLocalization(fromTableName); + if (join.getJoinChildren().isEmpty()) { + return null; + } + return join; + } + } + + public PlanNode checkFilter(QuerySpecification querySpecification, PlanNode currentNode) + { + if (querySpecification.getWhere().isPresent()) { + Expression filterExpr = querySpecification.getWhere().get(); + FilterNode filterNode = new FilterNode(filterExpr); + filter = Optional.of(filterNode); + currentNode.setChildren(filterNode, true, true); + currentNode = filterNode; + } + return currentNode; + } + public PlanNode checkProjectionAndDistinct(Select select, PlanNode currentNode) + { + List selectItems = select.getSelectItems(); + //List columns = new ArrayList<>(); + for (SelectItem selectItem : selectItems) { + if (selectItem instanceof AllColumns) { + colList.clear(); + selectPushDown = true; + colList.addAll(fullColAlias2col.values()); + colAlias2tbl.clear(); + alias2col.clear(); + alias2tbl.clear(); + for (String table : tableList) { + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(table); + for (Column c : catalogTable.getColumns().values()) { + colAlias2tbl.put(c.getColumnName(), catalogTable); + alias2col.put(c.getColumnName(), c); + alias2tbl.put(c.getColumnName(), catalogTable.getTablename()); + } + } + + break; + } + else { + Expression expression = ((SingleColumn) selectItem).getExpression(); + if (expression instanceof Identifier) { + //throw new SemanticException(ErrorMessage.ErrCode.UnSupportedQuery, "expession " + expression.toString() + " is not supported! class " + expression.getClass().getName()); + //TODO: 处理 + Identifier identifier = (Identifier) expression; + String alias = identifier.getValue(); + List tblColLists1 = col2tblList.get(alias); + if (tblColLists1 == null) { + throw new SemanticException(ErrCode.ColumnInTableNotFound, identifier.getValue(), " multi-table"); + } + else if (tblColLists1.size() >= 2) { + throw new SemanticException(ErrCode.ColumnNameIsAmbiguous, identifier.getValue(), tblColLists1.get(0) + " and " + tblColLists1.get(1)); + } + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(tblColLists1.get(0)); + if (catalogTable.getColumns().keySet().contains(identifier.getValue())) { + Column col = catalogTable.getColumns().get(identifier.getValue()); + colList.add(col); + if (colAlias2tbl.get(alias) != null) { + throw new SemanticException(ErrCode.ColumnNameIsAmbiguous, identifier.getValue(), colAlias2tbl.get(alias).getTablename() + " and " + catalogTable.getTablename()); + } + colAlias2tbl.put(alias, catalogTable); + alias2col.put(alias, col); + alias2tbl.put(alias, catalogTable.getTablename()); + } + else { + throw new SemanticException(ErrCode.ColumnInTableNotFound, identifier.getValue(), catalogTable); + } + } + else if (expression instanceof DereferenceExpression) { + DereferenceExpression exp = (DereferenceExpression) expression; + Identifier identifier = exp.getField(); + String tblName = exp.getBase().toString(); + String alias = exp.toString(); + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(tblName.toLowerCase()); + if (catalogTable.getColumns().keySet().contains(identifier.getValue())) { + Column col = catalogTable.getColumns().get(identifier.getValue()); + colList.add(col); + if (colAlias2tbl.get(alias) != null) { + throw new SemanticException(ErrCode.ColumnNameIsAmbiguous, identifier.getValue(), colAlias2tbl.get(alias).getTablename() + " and " + catalogTable.getTablename()); + } + colAlias2tbl.put(alias, catalogTable); + alias2col.put(alias, col); + alias2tbl.put(alias, catalogTable.getTablename()); + } + } + else { + throw new SemanticException(ErrorMessage.ErrCode.UnSupportedQuery, "expession " + expression.toString() + " is not supported! class " + expression.getClass().getName()); + } + } + } + if (select.isDistinct()) { + DistinctNode distinctNode = new DistinctNode(colList); + distinct = Optional.of(distinctNode); + currentNode.setChildren(distinctNode, true, true); + currentNode = distinctNode; + } + ProjectNode projectNode = new ProjectNode(colList); + currentNode.setChildren(projectNode, true, true); + project = projectNode; + currentNode = projectNode; + return currentNode; + } + public PlanNode checkOrderBy(Query query, PlanNode currentNode) + { + if (query.getOrderBy().isPresent()) { + SortNode sortNode = new SortNode(); + for (SortItem sortItem : query.getOrderBy().get().getSortItems()) { + Identifier sortKey = (Identifier) sortItem.getSortKey(); + if (col2tbl.get(sortKey.getValue()) != null) { + Column sortCol = catalog.get(col2tbl.get(sortKey.getValue())).getColumns().get(sortKey.getValue()); + sortNode.addSort(sortCol, sortItem.getOrdering() == SortItem.Ordering.ASCENDING); + } + else { + throw new SemanticException(ErrorMessage.ErrCode.ColumnInTableNotFound); + } + } + currentNode.setChildren(sortNode, true, true); + sort = Optional.of(sortNode); + currentNode = sortNode; + } + return currentNode; + } + public PlanNode checkLimit(Query query, PlanNode currentNode) + { + if (query.getLimit().isPresent()) { + int limitVal; + try { + limitVal = Integer.parseInt(query.getLimit().get()); + } + catch (Exception e) { + throw new SemanticException(ErrorMessage.ErrCode.LimitIsNotANumber); + } + LimitNode limitNode = new LimitNode(limitVal); + limit = Optional.of(limitNode); + currentNode.setChildren(limitNode, true, true); + currentNode = limitNode; + } + return currentNode; + } + public void checkRelation(Relation from, String defaultSchema, Schema schema) + { + if (from instanceof Table) { + Table fromTable = (Table) from; + checkTable(fromTable, defaultSchema, schema); + } + else if (from instanceof Join) { + Join join = (Join) from; + checkJoin(join, defaultSchema, schema); + } + else { + throw new SemanticException(ErrorMessage.ErrCode.UnSupportedQuery, " FROM clause " + from.getClass().getName() + " is not supported!!"); + } + } + public void checkJoin(Join join, String defaultSchema, Schema schema) + { + Relation lr = join.getLeft(); + Relation rr = join.getRight(); + checkRelation(lr, defaultSchema, schema); + checkRelation(rr, defaultSchema, schema); + } + public cn.edu.ruc.iir.pard.catalog.Table checkTable(Table fromTable, String defaultSchema, Schema schema) + { + boolean checkSchema = (defaultSchema != null); + String schemaName = defaultSchema; + if (fromTable.getName().getPrefix().isPresent()) { + schemaName = fromTable.getName().getPrefix().get().toString(); + checkSchema = false; + } + String fromTableName = fromTable.getName().getSuffix(); + if (schemaName == null) { + throw new SemanticException(ErrorMessage.ErrCode.SchemaNotSpecified); + } + if (!checkSchema) { + SchemaDao schemaDao = new SchemaDao(); + schema = schemaDao.loadByName(schemaName); + if (schema == null) { + throw new SemanticException(ErrorMessage.ErrCode.SchemaNotExsits, schemaName); + } + } + List siteList = new ArrayList(); + TableDao tableDao = tableDaoMap.get(schemaName); + if (tableDao == null) { + tableDao = new TableDao(schema); + tableDaoMap.put(schemaName, tableDao); + } + // check table + int pos = fromTableName.indexOf("@"); + boolean needLoad = false; + if (pos > 0) { + String site = fromTableName.substring(pos + 1); + if (!aliveSite.contains(site)) { + throw new SemanticException(ErrorMessage.ErrCode.SiteNotExist, site); + } + siteList.add(site); + fromTableName = fromTableName.substring(0, pos); + } + else { + needLoad = true; + } + cn.edu.ruc.iir.pard.catalog.Table catalogTable = tableDao.loadByName(fromTableName); + if (catalogTable == null) { + throw new SemanticException(ErrorMessage.ErrCode.TableNotExists, schemaName + "." + fromTableName); + } + // check site + tbl2site.put(fromTableName, siteList); + if (needLoad) { + for (Fragment frag : catalogTable.getFragment().values()) { + siteList.add(frag.getSiteName()); + if (!aliveSite.contains(frag.getSiteName())) { + siteMayMissing = true; + } + } + if (siteList.isEmpty()) { + throw new SemanticException(ErrorMessage.ErrCode.AllSiteDown, fromTableName); + } + } + for (Column col : catalogTable.getColumns().values()) { + col2tbl.put(fromTableName + "." + col.getColumnName(), fromTableName); + fullColAlias2col.put(fromTableName + "." + col.getColumnName(), col); + List tblList = col2tblList.get(col.getColumnName()); + if (tblList == null) { + tblList = new ArrayList(); + col2tblList.put(col.getColumnName(), tblList); + } + tblList.add(catalogTable.getTablename()); + } + //prepared for next step. + catalog.put(fromTableName, catalogTable); + tbl2schema.put(fromTableName, schemaName); + tableList.add(fromTableName); + return catalogTable; + } + public JoinNode verticalLocalization(String fromTableName) + { + List siteList = tbl2site.get(fromTableName); + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(fromTableName); + JoinNode joinNode = new JoinNode(); + Set tblCol = new HashSet(); + tblCol.addAll(extractColumnNameFromProjection(catalogTable)); + tblCol.addAll(extractColumnNameFromFilter(catalogTable)); + Map cntCol = new HashMap(); + for (Fragment frag : catalogTable.getFragment().values()) { + if (!siteList.contains(frag.getSiteName())) { + continue; + } + List projectColumn = new ArrayList(); + for (Condition cond : frag.getCondition()) { + Integer cnt = cntCol.get(cond.getColumnName()); + if (cnt == null) { + cnt = 0; + } + cnt++; + cntCol.put(cond.getColumnName(), cnt); + Column col = catalogTable.getColumns().get(cond.getColumnName()); + if (tblCol.contains(col.getColumnName())) { + projectColumn.add(col); + } + } + if (projectColumn.isEmpty()) { + continue; + } + PlanNode childrenNode = null; + PlanNode root = null; + ProjectNode proj = new ProjectNode(projectColumn); + childrenNode = proj; + root = proj; + if (filter.isPresent()) { + // TODO : 垂直投影filter下推 + } + TableScanNode scan = new TableScanNode(tbl2schema.get(fromTableName), fromTableName, frag.getSiteName()); + childrenNode.setChildren(scan, true, true); + joinNode.addJoinChild(root); + } + String mCol = ""; + int maxC = -1; + for (String key : cntCol.keySet()) { + Integer v = cntCol.get(key); + if (v > maxC) { + maxC = v; + mCol = key; + } + } + joinNode.getJoinSet().add(mCol); + return joinNode; + } + public List extractColumnNameFromFilter(cn.edu.ruc.iir.pard.catalog.Table table) + { + String tblName = table.getTablename(); + List list = new ArrayList(); + if (filter.isPresent()) { + Expr expr = Expr.parse(filter.get().getExpression()); + return Expr.extractTableColumn(expr, tblName); + } + return list; + } + public List extractColumnNameFromProjection(cn.edu.ruc.iir.pard.catalog.Table table) + { + List arrayList = new ArrayList(); + for (String key : colAlias2tbl.keySet()) { + cn.edu.ruc.iir.pard.catalog.Table t = colAlias2tbl.get(key); + if (t.getTablename().equals(table.getTablename())) { + String col = alias2col.get(key).getColumnName(); + arrayList.add(col); + } + } + return arrayList; + } + public UnionNode horizonLocalization(String fromTableName) + { + //TableDao tdao = tableDaoMap.get(tbl2schema.get(fromTableName)); + List siteList = tbl2site.get(fromTableName); + UnionNode unionNode = new UnionNode(); + cn.edu.ruc.iir.pard.catalog.Table catalogTable = catalog.get(fromTableName); + //union = unionNode; + for (Fragment frag : catalogTable.getFragment().values()) { + if (!siteList.contains(frag.getSiteName())) { + continue; + } + Expr expr = Expr.parse(frag.getCondition(), fromTableName); + PlanNode childrenNode = new TableScanNode(tbl2schema.get(fromTableName), fromTableName, frag.getSiteName()); + if (filter.isPresent()) { + //TODO: 从expr2中选择自己的 + Expr expr2 = Expr.extractTableFilter(Expr.parse(filter.get().getExpression()), fromTableName); + Expr merge = Expr.and(expr, expr2, LogicOperator.AND); + if (merge instanceof TrueExpr) { + // do nothing. + } + else if (merge instanceof FalseExpr) { + continue; + } + else { + //merge = Expr.and(expr, expr2, LogicOperator.OR); + FilterNode childrenFilter = new FilterNode(merge.toExpression()); + childrenFilter.setChildren(childrenNode, true, true); + childrenNode = childrenFilter; + } + } + if (project != null && !selectPushDown) { + //TODO: 选择自己表里元素下推 + ProjectNode pnode = new ProjectNode(project.getColumns()); + pnode.setChildren(childrenNode, true, true); + childrenNode = pnode; + } + else { + ProjectNode pnode = new ProjectNode(new ArrayList(catalogTable.getColumns().values())); + pnode.setChildren(childrenNode, true, true); + childrenNode = pnode; + } + if (distinct.isPresent()) { + //TODO: 选择自己表里元素distinct + DistinctNode dnode = new DistinctNode(distinct.get().getColumns()); + dnode.setChildren(childrenNode, true, true); + childrenNode = dnode; + } + unionNode.addUnionChild(childrenNode); + } + if (unionNode.getUnionChildren().isEmpty()) { + //this.alreadyDone = true; + } + return unionNode; + } + public PlanNode optimize() + { + return node; + } + + @Override + public boolean isAlreadyDone() + { + return alreadyDone; + } + + public HashMap getDistributionHints() + { + return new HashMap<>(); + } + @Override + public boolean afterExecution(boolean executeSuccess) + { + PardServlet.planList.add(this); + return true; + } +} diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java index 826364d..059b672 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java @@ -17,13 +17,24 @@ public class SemanticException private static final long serialVersionUID = -8125939273116913981L; private final ErrorMessage semanticErrorMessage; + public SemanticException() + { + semanticErrorMessage = null; + } + public SemanticException(int errorCode, Object...objs) { semanticErrorMessage = ErrorMessage.throwMessage(errorCode, objs); + if (semanticErrorMessage.getException() != null) { + this.initCause(semanticErrorMessage.getException()); + } } public SemanticException(ErrorMessage msg) { semanticErrorMessage = msg; + if (semanticErrorMessage.getException() != null) { + this.initCause(semanticErrorMessage.getException()); + } } public ErrorMessage getSemanticErrorMessage() { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index c58655e..36c7b4d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -3,6 +3,7 @@ import cn.edu.ruc.iir.pard.commons.exception.ParsingException; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.scheduler.Job; @@ -106,16 +107,21 @@ public PardResultSet executeQuery(String sql) logger.info("Created statement for job[" + job.getJobId() + "], job state: " + job.getJobState()); Plan plan = null; + ErrorMessage msg = ErrorMessage.getOKMessage(); try { plan = planner.plan(statement); } catch (SemanticException e) { logger.log(Level.WARNING, e.getSemanticErrorMessage().toString()); + msg = e.getSemanticErrorMessage(); + if (msg == null) { + msg = ErrorMessage.getOKMessage(); + } } if (plan == null) { jobScheduler.failJob(job.getJobId()); logger.log(Level.WARNING, "Cannot create plan for sql: " + sql); - return new PardResultSet(PardResultSet.ResultStatus.PLANNING_ERR); + return new PardResultSet(PardResultSet.ResultStatus.PLANNING_ERR, msg.getErrmsg()); } job.setPlan(plan); plan.setJobId(job.getJobId()); @@ -135,6 +141,9 @@ public PardResultSet executeQuery(String sql) logger.info("Generated tasks for job[" + job.getJobId() + "], job state: " + job.getJobState()); PardResultSet resultSet = taskScheduler.executeJob(job); + if (plan.getMsg() != null) { + resultSet.setSemanticErrmsg(plan.getMsg().toString()); + } if (resultSet.getStatus() != PardResultSet.ResultStatus.OK) { jobScheduler.failJob(job.getJobId()); logger.log(Level.WARNING, "Failed to execute job for sql: " + sql); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java index 0249fa7..f172c91 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java @@ -6,6 +6,8 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; +import javax.servlet.ServletException; + public class PardWebServer implements Runnable { @@ -32,7 +34,15 @@ public void run() context.addServlet(staticHolder, "*.css"); context.addServlet(staticHolder, "*.jpg"); context.setResourceBase("."); - ServletHolder pardHolder = new ServletHolder(new PardServlet()); + PardServlet s = new PardServlet(); + try { + s.test(); + } + catch (ServletException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + ServletHolder pardHolder = new ServletHolder(s); context.addServlet(pardHolder, "*.pard"); //context.setParentLoaderPriority(true); jettyServer.setHandler(context); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java index d5320af..5710c20 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java @@ -4,8 +4,9 @@ import cn.edu.ruc.iir.pard.executor.connector.node.NodeHelper; import cn.edu.ruc.iir.pard.executor.connector.node.OutputNode; import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; -import cn.edu.ruc.iir.pard.planner.PardPlanner; +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Statement; import net.sf.json.JSONObject; @@ -36,12 +37,23 @@ public class PardServlet * */ public void test() throws ServletException { - PardPlanner planner = new PardPlanner(); + //PardPlanner planner = new PardPlanner(); SqlParser parser = new SqlParser(); Statement stmt = parser.createStatement("SELECT * FROM pardtest.emp where eno < 'E0010' and eno > 'E0000'"); - planner.plan(stmt).afterExecution(true); + plan(stmt).afterExecution(true); stmt = parser.createStatement("SELECT * FROM pardtest.emp@pard3"); - planner.plan(stmt).afterExecution(true); + plan(stmt).afterExecution(true); + UsePlan.setCurrentSchema("book"); + stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); + plan(stmt).afterExecution(true); + stmt = parser.createStatement("select * from Customer"); + plan(stmt).afterExecution(true); + } + public QueryPlan plan(Statement stmt) + { + QueryPlan plan = new QueryPlan2(stmt); + //plan.afterExecution(true); + return plan; } public PNode parse(PlanNode pnode) { @@ -49,8 +61,10 @@ public PNode parse(PlanNode pnode) pn.setKey(pnode.getName() + (++keyGen)); StringBuilder sb = new StringBuilder(); Map map = NodeHelper.getPlanNodeInfo(pnode); - for (String key : map.keySet()) { - sb.append(key).append(":").append(map.get(key)).append("\n"); + if (map != null && map.keySet() != null) { + for (String key : map.keySet()) { + sb.append(key).append(":").append(map.get(key)).append("\n"); + } } pn.setText(sb.toString()); pn.setFigure("Rectangle"); @@ -121,7 +135,7 @@ public String getBody(QueryPlan plan) throws IOException int xoffset = 0; for (PlanNode pnode : pnlist) { PNode p = parse(pnode); - p.locx = parent.locx + xoffset * 320; + p.locx = parent.locx + xoffset * 120; xoffset++; p.locy = parent.locy + 150; mapping.put(pnode, p); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java new file mode 100644 index 0000000..c5376dc --- /dev/null +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java @@ -0,0 +1,27 @@ +package cn.edu.ruc.iir.pard.semantic; + +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; +import cn.edu.ruc.iir.pard.sql.tree.Statement; +import org.testng.annotations.Test; + +public class JoinSemantic +{ + @Test + public void testSemantic() + { + UsePlan.setCurrentSchema("book"); + String stmt = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; + SqlParser parser = new SqlParser(); + Statement stmts = parser.createStatement(stmt); + try { + QueryPlan plan = new QueryPlan2(stmts); + } + catch (SemanticException e) { + System.out.println(e.getSemanticErrorMessage()); + e.printStackTrace(); + } + } +} diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 5e8e042..72ba3ff 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -12,7 +12,9 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; public abstract class Expr implements Serializable @@ -108,6 +110,38 @@ else if (expr instanceof SingleExpr) { } return list; } + public static List extractTableColumn(Expr expr, String tableName) + { + Expr extractOr = pdAnd.apply(expr); + Queue traverse = new LinkedList(); + Queue output = new LinkedList(); + List out = new ArrayList(); + traverse.add(extractOr); + while (!traverse.isEmpty()) { + Expr pop = traverse.poll(); + if (pop instanceof CompositionExpr) { + traverse.addAll(((CompositionExpr) pop).getConditions()); + } + else if (pop instanceof UnaryExpr) { + traverse.add(((UnaryExpr) pop).getExpression()); + } + else { + output.add((SingleExpr) pop); + } + } + while (!output.isEmpty()) { + SingleExpr se = output.poll(); + Item lv = se.getLvalue(); + Item rv = se.getRvalue(); + if (lv instanceof ColumnItem && tableName.equals(((ColumnItem) lv).getTableName())) { + out.add(((ColumnItem) lv).getColumnName()); + } + if (rv instanceof ColumnItem && tableName.equals(((ColumnItem) rv).getTableName())) { + out.add(((ColumnItem) rv).getColumnName()); + } + } + return out; + } public static Expr extractTableFilter(Expr expr, String tableName) { Expr extractOr = pdAnd.apply(expr); From fed2f589fbb8ee1cb5d556956ca59e06c2bb5399 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:13:12 +0800 Subject: [PATCH 02/75] merge --- .../src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index f284feb..21e3929 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -266,8 +266,8 @@ private static void testPrettyTable() PardClient pc = new PardClient(); pc.testrun(); } - */ + public static void main(String[] args) { //testPrettyTable(); From 1636fabbb10124038f6174683785e84b1ecc321d Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:44:47 +0800 Subject: [PATCH 03/75] improve the output method, with much less time printing --- .../edu/ruc/iir/pard/client/PardClient.java | 20 ++++--- .../edu/ruc/iir/pard/client/PrettyTable.java | 57 ++++++++++++++++++- 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 16a06f8..25f7d6e 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -2,6 +2,7 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.memory.Row; +import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; @@ -75,9 +76,9 @@ public void run() pretty.addRow(r); counter++; } - //System.out.println(pretty); + System.out.println(pretty); //pretty.printLargeDataSets(); - pretty.printLargeDataSetsOneByOne(); + //pretty.printLargeDataSetsOneByOne(); System.out.println("Selected " + counter + " tuples"); System.out.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); if (resultSet.getSemanticErrmsg() != null) { @@ -109,7 +110,7 @@ public void run() System.exit(0); } - /* + public PardClient() { this.inputStream = null; @@ -231,7 +232,7 @@ public void testrun() pretty.addRow(r5); pretty.addRow(r6); - for (int i = 0; i < 20000; i++) { + for (int i = 0; i < 200000; i++) { RowConstructor rc7 = new RowConstructor(); rc7.appendString("hebe"); rc7.appendInt(7899); @@ -243,9 +244,9 @@ public void testrun() pretty.addRow(r7); } long st = System.currentTimeMillis(); - //System.out.println(pretty); + System.out.println(pretty); //pretty.printLargeDataSets(); - pretty.printLargeDataSetsOneByOne(); + //pretty.printLargeDataSetsOneByOne(); long et = System.currentTimeMillis(); System.out.println("TIME " + (et - st)); System.out.println(pretty.rowSize()); @@ -280,12 +281,12 @@ private static void testPrettyTable() PardClient pc = new PardClient(); pc.testrun(); } - */ + public static void main(String[] args) { - //testPrettyTable(); - + testPrettyTable(); + /* if (args.length != 2) { System.out.println("PardClient "); System.exit(-1); @@ -300,5 +301,6 @@ public static void main(String[] args) catch (IOException e) { e.printStackTrace(); } + */ } } diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java index 3d22c83..c0b27c1 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java @@ -10,6 +10,7 @@ public class PrettyTable { private List headers = new ArrayList<>(); private List> data = new ArrayList<>(); + private List colLength = new ArrayList<>(); public PrettyTable(String... headers) { @@ -58,7 +59,7 @@ private String formatRule() return result.toString(); } - public String toString() + public String toStringOld() { StringBuilder result = new StringBuilder(); result.append(formatRule()); @@ -117,4 +118,58 @@ public void printLargeDataSetsOneByOne() } System.out.println(printEnd()); } + + private int getMaxSizeForCol(int column) + { + int maxSize = headers.get(column).length(); + for (List row : data) { + if (row.get(column).length() > maxSize) { + maxSize = row.get(column).length(); + } + } + return maxSize; + } + + private String formatRuleNew() + { + StringBuilder result = new StringBuilder(); + result.append("+"); + for (int i = 0; i < headers.size(); i++) { + for (int j = 0; j < getMaxSize(i) + 2; j++) { + result.append("-"); + } + colLength.add(new Integer(getMaxSizeForCol(i))); + result.append("+"); + } + result.append("\n"); + return result.toString(); + } + + private String formatRowNew(List row) + { + StringBuilder result = new StringBuilder(); + result.append("|"); + for (int i = 0; i < row.size(); i++) { + result.append(StringUtils.center(row.get(i), colLength.get(i).intValue() + 2)); + //System.out.println(colLength.get(i).intValue()); + //result.append(StringUtils.center(row.get(i), getMaxSize(i) + 2)); + //System.out.println(getMaxSize(i)); + result.append("|"); + } + result.append("\n"); + return result.toString(); + } + + public String toString() + { + StringBuilder result = new StringBuilder(); + result.append(formatRuleNew()); + result.append(formatRow(headers)); + result.append(formatRule()); + for (List row : data) { + result.append(formatRowNew(row)); + } + result.append(formatRule()); + return result.toString(); + } } From 4b7bf0aef772470c8421fae1400890a96c670621 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:47:18 +0800 Subject: [PATCH 04/75] test with new print method --- .../edu/ruc/iir/pard/client/PardClient.java | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 25f7d6e..1caa90d 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -225,14 +225,57 @@ public void testrun() Row row6 = rc6.build(); temp = rc6.printRow(row3, colTypes); String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); - pretty.addRow(r1); - pretty.addRow(r2); - pretty.addRow(r3); - pretty.addRow(r4); - pretty.addRow(r5); - pretty.addRow(r6); + for (int i = 0; i < 200000; i++) { + RowConstructor rc1 = new RowConstructor(); + rc1.appendString("TOMTOMTOM"); + rc1.appendInt(121345); + rc1.appendString("RUCRUCRUCRUCRUCRUC"); + rc1.appendFloat(78.2f); + Row row1 = rc1.build(); + temp = rc1.printRow(row1, colTypes); + String[] r1 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc2 = new RowConstructor(); + rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); + rc2.appendInt(1213415565); + rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); + rc2.appendFloat(78.248481f); + Row row2 = rc2.build(); + temp = rc2.printRow(row2, colTypes); + String[] r2 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc3 = new RowConstructor(); + rc3.appendString("TOM"); + rc3.appendInt(1214); + rc3.appendString("RUC"); + rc3.appendFloat(78.248481f); + Row row3 = rc3.build(); + temp = rc3.printRow(row3, colTypes); + String[] r3 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc4 = new RowConstructor(); + rc4.appendString("T"); + rc4.appendInt(121345); + rc4.appendString("R"); + rc4.appendFloat(78.2f); + Row row4 = rc4.build(); + temp = rc4.printRow(row1, colTypes); + String[] r4 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc5 = new RowConstructor(); + rc5.appendString("OM"); + rc5.appendInt(1213415565); + rc5.appendString("UCR"); + rc5.appendFloat(78.248481f); + Row row5 = rc5.build(); + temp = rc5.printRow(row5, colTypes); + String[] r5 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc6 = new RowConstructor(); + rc6.appendString("OMT"); + rc6.appendInt(1214); + rc6.appendString("CRU"); + rc6.appendFloat(78.248481f); + Row row6 = rc6.build(); + temp = rc6.printRow(row3, colTypes); + String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); RowConstructor rc7 = new RowConstructor(); rc7.appendString("hebe"); rc7.appendInt(7899); @@ -241,6 +284,12 @@ public void testrun() Row row7 = rc7.build(); temp = rc7.printRow(row7, colTypes); String[] r7 = temp.substring(0, temp.length() - 1).split("\t"); + pretty.addRow(r1); + pretty.addRow(r2); + pretty.addRow(r3); + pretty.addRow(r4); + pretty.addRow(r5); + pretty.addRow(r6); pretty.addRow(r7); } long st = System.currentTimeMillis(); From 09252b43a913fd274de9c87b54dad300033bd71a Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:50:37 +0800 Subject: [PATCH 05/75] test new print method done --- .../edu/ruc/iir/pard/client/PardClient.java | 53 +------------------ 1 file changed, 2 insertions(+), 51 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 1caa90d..1aea010 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -176,58 +176,8 @@ public void testrun() tableHeader[i] = (String) header[i]; } PrettyTable pretty = new PrettyTable(tableHeader); - //List rows = new ArrayList(); - RowConstructor rc1 = new RowConstructor(); - rc1.appendString("TOMTOMTOM"); - rc1.appendInt(121345); - rc1.appendString("RUCRUCRUCRUCRUCRUC"); - rc1.appendFloat(78.2f); - Row row1 = rc1.build(); - temp = rc1.printRow(row1, colTypes); - String[] r1 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc2 = new RowConstructor(); - rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); - rc2.appendInt(1213415565); - rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); - rc2.appendFloat(78.248481f); - Row row2 = rc2.build(); - temp = rc2.printRow(row2, colTypes); - String[] r2 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc3 = new RowConstructor(); - rc3.appendString("TOM"); - rc3.appendInt(1214); - rc3.appendString("RUC"); - rc3.appendFloat(78.248481f); - Row row3 = rc3.build(); - temp = rc3.printRow(row3, colTypes); - String[] r3 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc4 = new RowConstructor(); - rc4.appendString("T"); - rc4.appendInt(121345); - rc4.appendString("R"); - rc4.appendFloat(78.2f); - Row row4 = rc4.build(); - temp = rc4.printRow(row1, colTypes); - String[] r4 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc5 = new RowConstructor(); - rc5.appendString("OM"); - rc5.appendInt(1213415565); - rc5.appendString("UCR"); - rc5.appendFloat(78.248481f); - Row row5 = rc5.build(); - temp = rc5.printRow(row5, colTypes); - String[] r5 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc6 = new RowConstructor(); - rc6.appendString("OMT"); - rc6.appendInt(1214); - rc6.appendString("CRU"); - rc6.appendFloat(78.248481f); - Row row6 = rc6.build(); - temp = rc6.printRow(row3, colTypes); - String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); - - for (int i = 0; i < 200000; i++) { + for (int i = 0; i < 10000; i++) { RowConstructor rc1 = new RowConstructor(); rc1.appendString("TOMTOMTOM"); rc1.appendInt(121345); @@ -292,6 +242,7 @@ public void testrun() pretty.addRow(r6); pretty.addRow(r7); } + long st = System.currentTimeMillis(); System.out.println(pretty); //pretty.printLargeDataSets(); From 5077db0fb13110b47645a71d57cca4455e7b14fb Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:51:14 +0800 Subject: [PATCH 06/75] test found a bug in float format --- .../edu/ruc/iir/pard/client/PardClient.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 1aea010..f620192 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -177,6 +177,59 @@ public void testrun() } PrettyTable pretty = new PrettyTable(tableHeader); + //List rows = new ArrayList(); + + /* + RowConstructor rc1 = new RowConstructor(); + rc1.appendString("TOMTOMTOM"); + rc1.appendInt(121345); + rc1.appendString("RUCRUCRUCRUCRUCRUC"); + rc1.appendFloat(78.2f); + Row row1 = rc1.build(); + temp = rc1.printRow(row1, colTypes); + String[] r1 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc2 = new RowConstructor(); + rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); + rc2.appendInt(1213415565); + rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); + rc2.appendFloat(78.248481f); + Row row2 = rc2.build(); + temp = rc2.printRow(row2, colTypes); + String[] r2 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc3 = new RowConstructor(); + rc3.appendString("TOM"); + rc3.appendInt(1214); + rc3.appendString("RUC"); + rc3.appendFloat(78.248481f); + Row row3 = rc3.build(); + temp = rc3.printRow(row3, colTypes); + String[] r3 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc4 = new RowConstructor(); + rc4.appendString("T"); + rc4.appendInt(121345); + rc4.appendString("R"); + rc4.appendFloat(78.2f); + Row row4 = rc4.build(); + temp = rc4.printRow(row1, colTypes); + String[] r4 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc5 = new RowConstructor(); + rc5.appendString("OM"); + rc5.appendInt(1213415565); + rc5.appendString("UCR"); + rc5.appendFloat(78.248481f); + Row row5 = rc5.build(); + temp = rc5.printRow(row5, colTypes); + String[] r5 = temp.substring(0, temp.length() - 1).split("\t"); + RowConstructor rc6 = new RowConstructor(); + rc6.appendString("OMT"); + rc6.appendInt(1214); + rc6.appendString("CRU"); + rc6.appendFloat(78.248481f); + Row row6 = rc6.build(); + temp = rc6.printRow(row3, colTypes); + String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); + */ + for (int i = 0; i < 10000; i++) { RowConstructor rc1 = new RowConstructor(); rc1.appendString("TOMTOMTOM"); From 7291abc947355b135cccb2ff0dd0d9b2c7681d9d Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sat, 13 Jan 2018 23:57:26 +0800 Subject: [PATCH 07/75] seems to remain a bug in float format in RowConstructor --- .../edu/ruc/iir/pard/client/PardClient.java | 68 ++----------------- 1 file changed, 7 insertions(+), 61 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index f620192..8a94fbe 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -2,7 +2,7 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.memory.Row; -import cn.edu.ruc.iir.pard.commons.utils.DataType; +//import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; @@ -110,7 +110,7 @@ public void run() System.exit(0); } - + /* public PardClient() { this.inputStream = null; @@ -177,60 +177,7 @@ public void testrun() } PrettyTable pretty = new PrettyTable(tableHeader); - //List rows = new ArrayList(); - - /* - RowConstructor rc1 = new RowConstructor(); - rc1.appendString("TOMTOMTOM"); - rc1.appendInt(121345); - rc1.appendString("RUCRUCRUCRUCRUCRUC"); - rc1.appendFloat(78.2f); - Row row1 = rc1.build(); - temp = rc1.printRow(row1, colTypes); - String[] r1 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc2 = new RowConstructor(); - rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); - rc2.appendInt(1213415565); - rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); - rc2.appendFloat(78.248481f); - Row row2 = rc2.build(); - temp = rc2.printRow(row2, colTypes); - String[] r2 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc3 = new RowConstructor(); - rc3.appendString("TOM"); - rc3.appendInt(1214); - rc3.appendString("RUC"); - rc3.appendFloat(78.248481f); - Row row3 = rc3.build(); - temp = rc3.printRow(row3, colTypes); - String[] r3 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc4 = new RowConstructor(); - rc4.appendString("T"); - rc4.appendInt(121345); - rc4.appendString("R"); - rc4.appendFloat(78.2f); - Row row4 = rc4.build(); - temp = rc4.printRow(row1, colTypes); - String[] r4 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc5 = new RowConstructor(); - rc5.appendString("OM"); - rc5.appendInt(1213415565); - rc5.appendString("UCR"); - rc5.appendFloat(78.248481f); - Row row5 = rc5.build(); - temp = rc5.printRow(row5, colTypes); - String[] r5 = temp.substring(0, temp.length() - 1).split("\t"); - RowConstructor rc6 = new RowConstructor(); - rc6.appendString("OMT"); - rc6.appendInt(1214); - rc6.appendString("CRU"); - rc6.appendFloat(78.248481f); - Row row6 = rc6.build(); - temp = rc6.printRow(row3, colTypes); - String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); - */ - - for (int i = 0; i < 10000; i++) { + for (int i = 0; i < 10; i++) { RowConstructor rc1 = new RowConstructor(); rc1.appendString("TOMTOMTOM"); rc1.appendInt(121345); @@ -283,7 +230,7 @@ public void testrun() rc7.appendString("hebe"); rc7.appendInt(7899); rc7.appendString("irc"); - rc7.appendFloat(784.5f); + rc7.appendFloat(784.51f); Row row7 = rc7.build(); temp = rc7.printRow(row7, colTypes); String[] r7 = temp.substring(0, temp.length() - 1).split("\t"); @@ -334,12 +281,12 @@ private static void testPrettyTable() PardClient pc = new PardClient(); pc.testrun(); } - + */ public static void main(String[] args) { - testPrettyTable(); - /* + //testPrettyTable(); + if (args.length != 2) { System.out.println("PardClient "); System.exit(-1); @@ -354,6 +301,5 @@ public static void main(String[] args) catch (IOException e) { e.printStackTrace(); } - */ } } From 4083def456a28423f5e42501df65fa27f16820cd Mon Sep 17 00:00:00 2001 From: hagen666 Date: Sun, 14 Jan 2018 00:48:52 +0800 Subject: [PATCH 08/75] add some extraction and horizontal projection push down. --- .../executor/connector/node/JoinNode.java | 10 +++ .../ruc/iir/pard/planner/dml/QueryPlan2.java | 48 +++++++++++- .../cn/edu/ruc/iir/pard/web/PardServlet.java | 4 +- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 76 +++++++++++++++++++ 4 files changed, 134 insertions(+), 4 deletions(-) diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java index 39dcc0c..e4fd9ea 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java @@ -1,7 +1,10 @@ package cn.edu.ruc.iir.pard.executor.connector.node; +import cn.edu.ruc.iir.pard.sql.tree.LogicalBinaryExpression; + import static com.google.common.base.MoreObjects.toStringHelper; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -16,10 +19,12 @@ public class JoinNode { private static final long serialVersionUID = 3355047142533066940L; private Set joinSet; + private List exprList; public JoinNode() { name = "JOIN"; joinSet = new HashSet(); + exprList = new ArrayList(); } public JoinNode(JoinNode node) { @@ -27,6 +32,7 @@ public JoinNode(JoinNode node) name = "JOIN"; joinSet = new HashSet(); joinSet.addAll(node.joinSet); + exprList = new ArrayList(); } public boolean hasChildren() { @@ -54,4 +60,8 @@ public String toString() .add("joinSet", this.joinSet) .toString(); } + public List getExprList() + { + return exprList; + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java index 20c1048..588061b 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java @@ -474,6 +474,7 @@ public JoinNode verticalLocalization(String fromTableName) continue; } List projectColumn = new ArrayList(); + List strColumn = new ArrayList(); for (Condition cond : frag.getCondition()) { Integer cnt = cntCol.get(cond.getColumnName()); if (cnt == null) { @@ -484,6 +485,7 @@ public JoinNode verticalLocalization(String fromTableName) Column col = catalogTable.getColumns().get(cond.getColumnName()); if (tblCol.contains(col.getColumnName())) { projectColumn.add(col); + strColumn.add(col.getColumnName()); } } if (projectColumn.isEmpty()) { @@ -496,6 +498,14 @@ public JoinNode verticalLocalization(String fromTableName) root = proj; if (filter.isPresent()) { // TODO : 垂直投影filter下推 + Expr filterExpr = Expr.parse(filter.get().getExpression()); + filterExpr = Expr.extractTableFilter(filterExpr, fromTableName); + filterExpr = Expr.extractTableColumnFilter(filterExpr, strColumn); + if (!(filterExpr instanceof TrueExpr)) { + FilterNode subFilter = new FilterNode(filterExpr.toExpression()); + childrenNode.setChildren(subFilter, true, true); + childrenNode = subFilter; + } } TableScanNode scan = new TableScanNode(tbl2schema.get(fromTableName), fromTableName, frag.getSiteName()); childrenNode.setChildren(scan, true, true); @@ -511,7 +521,32 @@ public JoinNode verticalLocalization(String fromTableName) } } joinNode.getJoinSet().add(mCol); - return joinNode; + return formatVerticalJoin(joinNode); + } + public JoinNode formatVerticalJoin(JoinNode node) + { + JoinNode join = new JoinNode(); + join.getJoinSet().addAll(node.getJoinSet()); + for (PlanNode p : node.getJoinChildren()) { + if (p instanceof ProjectNode) { + ProjectNode pn = (ProjectNode) p; + boolean contains = true; + for (Column c : pn.getColumns()) { + if (!join.getJoinSet().contains(c.getColumnName())) { + contains = false; + break; + } + } + if (contains) { + continue; + } + } + join.addJoinChild(p); + } + if (join.getJoinChildren().isEmpty() && !node.getJoinChildren().isEmpty()) { + join.getJoinChildren().add(node.getJoinChildren().get(0)); + } + return join; } public List extractColumnNameFromFilter(cn.edu.ruc.iir.pard.catalog.Table table) { @@ -565,9 +600,16 @@ else if (merge instanceof FalseExpr) { childrenNode = childrenFilter; } } - if (project != null && !selectPushDown) { + if (project != null) { //TODO: 选择自己表里元素下推 - ProjectNode pnode = new ProjectNode(project.getColumns()); + List ownList = extractColumnNameFromProjection(catalogTable); + List singleTableProjection = new ArrayList(); + for (Column col : project.getColumns()) { + if (ownList.contains(col.getColumnName())) { + singleTableProjection.add(col); + } + } + ProjectNode pnode = new ProjectNode(singleTableProjection); pnode.setChildren(childrenNode, true, true); childrenNode = pnode; } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java index 5710c20..283564c 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java @@ -46,7 +46,9 @@ public void test() throws ServletException UsePlan.setCurrentSchema("book"); stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); plan(stmt).afterExecution(true); - stmt = parser.createStatement("select * from Customer"); + stmt = parser.createStatement("select * from Customer where id<3 and rank >1"); + plan(stmt).afterExecution(true); + stmt = parser.createStatement("select id,rank from Customer where id<3 and rank >1"); plan(stmt).afterExecution(true); } public QueryPlan plan(Statement stmt) diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 72ba3ff..eadb183 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -110,6 +110,7 @@ else if (expr instanceof SingleExpr) { } return list; } + // 可能有重复值 public static List extractTableColumn(Expr expr, String tableName) { Expr extractOr = pdAnd.apply(expr); @@ -142,6 +143,81 @@ else if (pop instanceof UnaryExpr) { } return out; } + public static List extractTableJoinExpr(Expr expr) + { + Expr extractOr = pdOr.apply(expr); + Queue traverse = new LinkedList(); + Queue output = new LinkedList(); + List out = new ArrayList(); + traverse.add(extractOr); + while (!traverse.isEmpty()) { + Expr pop = traverse.poll(); + if (pop instanceof CompositionExpr) { + traverse.addAll(((CompositionExpr) pop).getConditions()); + } + else if (pop instanceof UnaryExpr) { + traverse.add(((UnaryExpr) pop).getExpression()); + } + else { + output.add((SingleExpr) pop); + } + } + while (!output.isEmpty()) { + SingleExpr se = output.poll(); + Item lv = se.getLvalue(); + Item rv = se.getRvalue(); + if (lv instanceof ColumnItem && rv instanceof ColumnItem) { + out.add(se); + } + } + return out; + } + //TODO: 从extractTableFilter的结果里提取垂直分片的信息。OK + // 以及提取多表连接的条件 + // 以及 运用表连接条件和分片信息对表达式进一步化简 + public static Expr extractTableColumnFilter(Expr expr, List projectList) + { + expr = pdOr.apply(expr); + //只考虑两种情况,expr为SingleExpr和expr为 and的compositionExpr + CompositionExpr and = new CompositionExpr(LogicOperator.AND); + if (expr instanceof SingleExpr) { + SingleExpr e = (SingleExpr) expr; + ColumnItem ci = null; + if (e.getLvalue() instanceof ColumnItem) { + ci = (ColumnItem) e.getLvalue(); + } + else { + return new TrueExpr(); + } + if (projectList.contains(ci.getColumnName())) { + return expr; + } + } + else { + if (expr instanceof CompositionExpr && ((CompositionExpr) expr).getLogicOperator() == LogicOperator.AND) { + CompositionExpr ce = (CompositionExpr) expr; + for (Expr sub : ce.getConditions()) { + if (sub instanceof SingleExpr) { + SingleExpr e = (SingleExpr) sub; + ColumnItem ci = null; + if (e.getLvalue() instanceof ColumnItem) { + ci = (ColumnItem) e.getLvalue(); + } + if (projectList.contains(ci.getColumnName())) { + and.getConditions().add(sub); + } + } + } + if (and.getConditions().size() == 1) { + return and.getConditions().get(0); + } + else if (and.getConditions().size() > 1) { + return and; + } + } + } + return new TrueExpr(); + } public static Expr extractTableFilter(Expr expr, String tableName) { Expr extractOr = pdAnd.apply(expr); From 21d580ad2604d538f260bf4301746d0ce5a0c5fb Mon Sep 17 00:00:00 2001 From: hagen666 Date: Sun, 14 Jan 2018 00:52:04 +0800 Subject: [PATCH 09/75] fix check style. --- .../src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 8a94fbe..4275ba4 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -2,7 +2,6 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.memory.Row; -//import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; From 3fe92b7143f69436c1268c52e2bbe3ec3fa14a1e Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Sun, 14 Jan 2018 14:37:22 +0800 Subject: [PATCH 10/75] It seems that byteBuffer.getFloat() can only reach up to 5 decimal places at most --- .../edu/ruc/iir/pard/client/PardClient.java | 37 +++---- .../edu/ruc/iir/pard/client/PrettyTable.java | 101 ++---------------- 2 files changed, 27 insertions(+), 111 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 4275ba4..790c0ad 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -2,6 +2,7 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.memory.Row; +//import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; @@ -76,8 +77,6 @@ public void run() counter++; } System.out.println(pretty); - //pretty.printLargeDataSets(); - //pretty.printLargeDataSetsOneByOne(); System.out.println("Selected " + counter + " tuples"); System.out.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); if (resultSet.getSemanticErrmsg() != null) { @@ -153,8 +152,8 @@ public void testrun() col3.setColumnName("score"); columns0.add(col0); columns0.add(col1); - columns0.add(col2); columns0.add(col3); + columns0.add(col2); prs.setSchema(columns0); Object obj = prs; String temp = null; @@ -176,63 +175,63 @@ public void testrun() } PrettyTable pretty = new PrettyTable(tableHeader); - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 100000; i++) { RowConstructor rc1 = new RowConstructor(); rc1.appendString("TOMTOMTOM"); rc1.appendInt(121345); - rc1.appendString("RUCRUCRUCRUCRUCRUC"); rc1.appendFloat(78.2f); + rc1.appendString("RUCRUCRUCRUCRUCRUC"); Row row1 = rc1.build(); temp = rc1.printRow(row1, colTypes); - String[] r1 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r1 = temp.split("\t"); RowConstructor rc2 = new RowConstructor(); rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); rc2.appendInt(1213415565); + rc2.appendFloat(78.24848f); rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); - rc2.appendFloat(78.248481f); Row row2 = rc2.build(); temp = rc2.printRow(row2, colTypes); - String[] r2 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r2 = temp.split("\t"); RowConstructor rc3 = new RowConstructor(); rc3.appendString("TOM"); rc3.appendInt(1214); + rc3.appendFloat(78.24848136f); rc3.appendString("RUC"); - rc3.appendFloat(78.248481f); Row row3 = rc3.build(); temp = rc3.printRow(row3, colTypes); - String[] r3 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r3 = temp.split("\t"); RowConstructor rc4 = new RowConstructor(); rc4.appendString("T"); rc4.appendInt(121345); - rc4.appendString("R"); rc4.appendFloat(78.2f); + rc4.appendString("R"); Row row4 = rc4.build(); temp = rc4.printRow(row1, colTypes); - String[] r4 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r4 = temp.split("\t"); RowConstructor rc5 = new RowConstructor(); rc5.appendString("OM"); rc5.appendInt(1213415565); + rc5.appendFloat(78.24848f); rc5.appendString("UCR"); - rc5.appendFloat(78.248481f); Row row5 = rc5.build(); temp = rc5.printRow(row5, colTypes); - String[] r5 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r5 = temp.split("\t"); RowConstructor rc6 = new RowConstructor(); rc6.appendString("OMT"); rc6.appendInt(1214); - rc6.appendString("CRU"); rc6.appendFloat(78.248481f); + rc6.appendString("CRU"); Row row6 = rc6.build(); temp = rc6.printRow(row3, colTypes); - String[] r6 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r6 = temp.split("\t"); RowConstructor rc7 = new RowConstructor(); rc7.appendString("hebe"); rc7.appendInt(7899); - rc7.appendString("irc"); rc7.appendFloat(784.51f); + rc7.appendString("irc"); Row row7 = rc7.build(); temp = rc7.printRow(row7, colTypes); - String[] r7 = temp.substring(0, temp.length() - 1).split("\t"); + String[] r7 = temp.split("\t"); pretty.addRow(r1); pretty.addRow(r2); pretty.addRow(r3); @@ -244,8 +243,6 @@ public void testrun() long st = System.currentTimeMillis(); System.out.println(pretty); - //pretty.printLargeDataSets(); - //pretty.printLargeDataSetsOneByOne(); long et = System.currentTimeMillis(); System.out.println("TIME " + (et - st)); System.out.println(pretty.rowSize()); diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java index c0b27c1..6a38943 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PrettyTable.java @@ -22,7 +22,7 @@ public void addRow(String... row) data.add(Arrays.asList(row)); } - private int getMaxSize(int column) + private int getMaxSizeForCol(int column) { int maxSize = headers.get(column).length(); for (List row : data) { @@ -33,24 +33,12 @@ private int getMaxSize(int column) return maxSize; } - private String formatRow(List row) - { - StringBuilder result = new StringBuilder(); - result.append("|"); - for (int i = 0; i < row.size(); i++) { - result.append(StringUtils.center(row.get(i), getMaxSize(i) + 2)); - result.append("|"); - } - result.append("\n"); - return result.toString(); - } - private String formatRule() { StringBuilder result = new StringBuilder(); result.append("+"); for (int i = 0; i < headers.size(); i++) { - for (int j = 0; j < getMaxSize(i) + 2; j++) { + for (int j = 0; j < colLength.get(i).intValue() + 2; j++) { result.append("-"); } result.append("+"); @@ -59,86 +47,15 @@ private String formatRule() return result.toString(); } - public String toStringOld() - { - StringBuilder result = new StringBuilder(); - result.append(formatRule()); - result.append(formatRow(headers)); - result.append(formatRule()); - for (List row : data) { - result.append(formatRow(row)); - } - result.append(formatRule()); - return result.toString(); - } - - public int rowSize() - { - return data.size(); - } - - public String printHeader() - { - StringBuilder result = new StringBuilder(); - result.append(formatRule()); - result.append(formatRow(headers)); - result.append(formatRule()); - return result.toString(); - } - - public String printEnd() - { - StringBuilder result = new StringBuilder(); - result.append(formatRule()); - return result.toString(); - } - - public void printLargeDataSets() - { - System.out.println(printHeader()); - StringBuilder result = new StringBuilder(); - int count = 0; - for (List row : data) { - result.append(formatRow(row)); - count++; - if (count == 5000) { - System.out.println(result.toString()); - result.delete(0, result.length()); - count = 0; - } - } - System.out.println(printEnd()); - } - - public void printLargeDataSetsOneByOne() - { - System.out.println(printHeader()); - for (List row : data) { - System.out.println(formatRow(row)); - } - System.out.println(printEnd()); - } - - private int getMaxSizeForCol(int column) - { - int maxSize = headers.get(column).length(); - for (List row : data) { - if (row.get(column).length() > maxSize) { - maxSize = row.get(column).length(); - } - } - return maxSize; - } - private String formatRuleNew() { StringBuilder result = new StringBuilder(); result.append("+"); for (int i = 0; i < headers.size(); i++) { - for (int j = 0; j < getMaxSize(i) + 2; j++) { + colLength.add(new Integer(getMaxSizeForCol(i))); + for (int j = 0; j < colLength.get(i).intValue() + 2; j++) { result.append("-"); } - colLength.add(new Integer(getMaxSizeForCol(i))); result.append("+"); } result.append("\n"); @@ -151,9 +68,6 @@ private String formatRowNew(List row) result.append("|"); for (int i = 0; i < row.size(); i++) { result.append(StringUtils.center(row.get(i), colLength.get(i).intValue() + 2)); - //System.out.println(colLength.get(i).intValue()); - //result.append(StringUtils.center(row.get(i), getMaxSize(i) + 2)); - //System.out.println(getMaxSize(i)); result.append("|"); } result.append("\n"); @@ -164,7 +78,7 @@ public String toString() { StringBuilder result = new StringBuilder(); result.append(formatRuleNew()); - result.append(formatRow(headers)); + result.append(formatRowNew(headers)); result.append(formatRule()); for (List row : data) { result.append(formatRowNew(row)); @@ -172,4 +86,9 @@ public String toString() result.append(formatRule()); return result.toString(); } + + public int rowSize() + { + return data.size(); + } } From 9e09b8f01a4b77b5868b48ef3cdcf45c112ca86c Mon Sep 17 00:00:00 2001 From: withchencheng Date: Sun, 14 Jan 2018 15:59:59 +0800 Subject: [PATCH 11/75] 1 --- doc/pard-report.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 4e7c588..21ca7f8 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -138,6 +138,7 @@ \subsection{时间安排} \caption{时间安排timeline} \label{fig:tl} \end{figure} +在国栋师兄的英明领导下,我们pard小组稳中有进,时间安排还算合理。 \section{各模块详细设计} From 5788d1412f905a767d13968ff2474d1c0ceb0f87 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Sun, 14 Jan 2018 20:43:23 +0800 Subject: [PATCH 12/75] add some optimize. --- .../connector/node/CartesianNode.java | 1 + .../executor/connector/node/JoinNode.java | 24 ++- .../executor/connector/node/NodeHelper.java | 10 +- .../ruc/iir/pard/planner/dml/QueryPlan2.java | 180 +++++++++++++++++- .../cn/edu/ruc/iir/pard/web/PardServlet.java | 114 +++++++++-- .../src/main/resources/webapp/_demo.html | 6 +- .../ruc/iir/pard/semantic/JoinSemantic.java | 14 ++ .../edu/ruc/iir/pard/server/PardWebTest.java | 29 +++ .../edu/ruc/iir/pard/sql/expr/ColumnItem.java | 4 +- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 2 +- .../cn/edu/ruc/iir/pard/sql/expr/Item.java | 2 +- 11 files changed, 351 insertions(+), 35 deletions(-) create mode 100644 pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/CartesianNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/CartesianNode.java index be869c3..bf2a079 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/CartesianNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/CartesianNode.java @@ -18,5 +18,6 @@ public CartesianNode(CartesianNode node) { super(node); this.name = "Cartesian"; + this.childrens.addAll(node.childrens); } } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java index e4fd9ea..0f62461 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java @@ -1,7 +1,6 @@ package cn.edu.ruc.iir.pard.executor.connector.node; -import cn.edu.ruc.iir.pard.sql.tree.LogicalBinaryExpression; - +import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import static com.google.common.base.MoreObjects.toStringHelper; import java.util.ArrayList; @@ -19,12 +18,13 @@ public class JoinNode { private static final long serialVersionUID = 3355047142533066940L; private Set joinSet; - private List exprList; + private List exprList; + private String otherInfo; public JoinNode() { name = "JOIN"; joinSet = new HashSet(); - exprList = new ArrayList(); + exprList = new ArrayList(); } public JoinNode(JoinNode node) { @@ -32,7 +32,10 @@ public JoinNode(JoinNode node) name = "JOIN"; joinSet = new HashSet(); joinSet.addAll(node.joinSet); - exprList = new ArrayList(); + exprList = new ArrayList(); + exprList.addAll(node.getExprList()); + childrens.clear(); + childrens.addAll(node.getJoinChildren()); } public boolean hasChildren() { @@ -58,9 +61,18 @@ public String toString() .add("name", "JOIN") .add("children", childrens) .add("joinSet", this.joinSet) + .add("exprList", this.exprList) .toString(); } - public List getExprList() + public String getOtherInfo() + { + return otherInfo; + } + public void setOtherInfo(String otherInfo) + { + this.otherInfo = otherInfo; + } + public List getExprList() { return exprList; } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java index aeb9449..a555e34 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java @@ -143,7 +143,15 @@ else if (node instanceof LimitNode) { else if (node instanceof JoinNode) { JoinNode cnode = (JoinNode) node; obj.put("name", "JOIN"); - JSONArray array = new JSONArray(); + if (!cnode.getJoinSet().isEmpty()) { + obj.put("joinColumn", cnode.getJoinSet().toString()); + } + if (!cnode.getExprList().isEmpty()) { + obj.put("exprList", cnode.getExprList().toString()); + } + if (cnode.getOtherInfo() != null) { + obj.put("mark", cnode.getOtherInfo()); + } // obj.put("joinSet", cnode.getJoinSet()); return obj; } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java index 588061b..0bd5a31 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java @@ -12,6 +12,7 @@ import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; import cn.edu.ruc.iir.pard.executor.connector.node.JoinNode; import cn.edu.ruc.iir.pard.executor.connector.node.LimitNode; +import cn.edu.ruc.iir.pard.executor.connector.node.NodeHelper; import cn.edu.ruc.iir.pard.executor.connector.node.OutputNode; import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; @@ -27,8 +28,11 @@ import cn.edu.ruc.iir.pard.sql.expr.Expr; import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; +import cn.edu.ruc.iir.pard.sql.expr.SingleExpr; import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.AllColumns; +import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.DereferenceExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; import cn.edu.ruc.iir.pard.sql.tree.Identifier; @@ -100,6 +104,11 @@ public QueryPlan2(Statement stmt) { super(stmt); } + private QueryPlan2(PlanNode p, int k) + { + super(new SqlParser().createStatement("select * from customer where rank =" + k)); + node = p; + } public PlanNode getPlan() { return node; @@ -200,8 +209,10 @@ public void fillAlias2tbl() } } } + //TODO:根据Expr里的条件,确定Join树 public PlanNode join() { + /* JoinNode join = new JoinNode(); for (String tableName : tableList) { PlanNode node = localization(tableName); @@ -212,7 +223,163 @@ public PlanNode join() return null; } } + List singleExprs = Expr.extractTableJoinExpr(Expr.parse(filter.get().getExpression())); + for (SingleExpr s : singleExprs) { + join.getExprList().add((ComparisonExpression) s.toExpression()); + } return join; + */ + Set unjoinTable = new HashSet(); + unjoinTable.addAll(tableList); + PlanNode p = localization(tableList.get(0)); + Set joinTable = new HashSet(); + joinTable.add(tableList.get(0)); + unjoinTable.remove(tableList.get(0)); + List singleExprs = Expr.extractTableJoinExpr(Expr.parse(filter.get().getExpression())); + // System.out.println(singleExprs); + while (unjoinTable.size() > 0) { + String waitJoinTableName = null; + SingleExpr joinExpr = null; + for (String t1 : joinTable) { + for (String t2 : unjoinTable) { + for (SingleExpr se : singleExprs) { + ColumnItem ci1 = (ColumnItem) se.getLvalue(); + ColumnItem ci2 = (ColumnItem) se.getRvalue(); + String t11 = ci1.getTableName(); + String t22 = ci2.getTableName(); + //System.out.println("t11" + t11 + " t22 " + t22 + " t1 " + t1 + "t2 " + t2); + if ((t11.equalsIgnoreCase(t1) && t22.equalsIgnoreCase(t2)) || (t11.equalsIgnoreCase(t2) && t22.equalsIgnoreCase(t1))) { + waitJoinTableName = t2; + joinExpr = se; + break; + } + } + } + } + if (joinExpr != null && waitJoinTableName != null) { + joinTable.add(waitJoinTableName); + unjoinTable.remove(waitJoinTableName); + singleExprs.remove(joinExpr); + JoinNode jn = new JoinNode(); + jn.addJoinChild(p); + jn.addJoinChild(localization(waitJoinTableName)); + p = jn; + jn.getExprList().add((ComparisonExpression) joinExpr.toExpression()); + } + else { + throw new SemanticException(ErrCode.UnSupportedQuery, "Not Equal Join"); + } + } + if (p instanceof JoinNode) { + //return p; + return pushDownJoin((JoinNode) p); + } + else { + return p; + } + } + private int cnt = 0; + public PlanNode pushDownJoin(JoinNode node) + { + int k = cnt++; + node = (JoinNode) NodeHelper.copyNode(node); + //new QueryPlan2(node, k).afterExecution(true); + if (node.getExprList().isEmpty()) { + PlanNode o = NodeHelper.copyNode(node); + //new QueryPlan2(o, 3000 + k).afterExecution(true); + return o; + } + JoinNode oldNode = node; + List joinChildren = node.getJoinChildren(); + if (joinChildren.size() == 1) { + PlanNode p = NodeHelper.copyNode(joinChildren.get(0)); + //new QueryPlan2(p, 1000 + k).afterExecution(true); + return p; + } + else if (joinChildren.size() == 2) { + int unionIndex = -1; + for (int i = 0; i < joinChildren.size(); i++) { + PlanNode chd = joinChildren.get(i); + if (chd instanceof UnionNode) { + // UnionNode cu = (UnionNode) chd; + unionIndex = i; + break; + } + } + if (unionIndex >= 0) { + UnionNode union = (UnionNode) joinChildren.get(unionIndex); + PlanNode other = joinChildren.get(1 - unionIndex); + PlanNode o = pushDownJoin(union, other, oldNode); + //new QueryPlan2(o, 2000 + k).afterExecution(true); + return o; + } + else { + return checkPruneJoin(node); + } + } + return NodeHelper.copyNode(node); + } + private SqlParser parser = new SqlParser(); + public PlanNode checkPruneJoin(JoinNode node) + { + node.setOtherInfo("mark"); + if (node.getJoinChildren().size() != 2) { + return node; + } + Expression expr = node.getExprList().get(0); + Expression expr1 = findExpression(node.getJoinChildren().get(0)); + Expression expr2 = findExpression(node.getJoinChildren().get(1)); + if (expr != null && expr1 != null && expr2 != null) { + return node; + } + return node; + } + public Expression findExpression(PlanNode node) + { + while (!(node instanceof FilterNode)) { + if (node instanceof UnionNode || node instanceof JoinNode) { + return null; + } + if (node == null) { + return null; + } + node = node.getLeftChild(); + } + if (node instanceof FilterNode) { + return ((FilterNode) node).getExpression(); + } + return null; + } + public PlanNode pushDownJoin(UnionNode union, PlanNode others, JoinNode oldNode) + { + // 考虑union为0和1时 + UnionNode ret = new UnionNode(); + List children = union.getUnionChildren(); + if (others instanceof JoinNode) { + others = pushDownJoin((JoinNode) others); + } + if (children.isEmpty()) { + return union; + } + for (PlanNode node : children) { + JoinNode joins = new JoinNode(); + joins.addJoinChild(NodeHelper.copyNode(node)); + joins.addJoinChild(NodeHelper.copyNode(others)); + joins.getJoinSet().addAll(oldNode.getJoinSet()); + joins.getExprList().addAll(oldNode.getExprList()); + ret.getUnionChildren().add(pushDownJoin(joins)); + //ret.getUnionChildren().add(joins); + //TODO 进行搜索 如果没有Union结点,且没有带expr的join结点,则考虑减枝 + } + if (ret.getUnionChildren().size() == 0) { + return ret; + } + else if (ret.getUnionChildren().size() == 1) { + return ret.getUnionChildren().get(0); + } + else { + return ret; + } } public PlanNode localization(String fromTableName) { @@ -602,11 +769,18 @@ else if (merge instanceof FalseExpr) { } if (project != null) { //TODO: 选择自己表里元素下推 - List ownList = extractColumnNameFromProjection(catalogTable); + Set tblCol = new HashSet(); + tblCol.addAll(extractColumnNameFromProjection(catalogTable)); + tblCol.addAll(extractColumnNameFromFilter(catalogTable)); List singleTableProjection = new ArrayList(); - for (Column col : project.getColumns()) { - if (ownList.contains(col.getColumnName())) { + //System.out.println(tblCol); + for (Column col : catalogTable.getColumns().values()) { + if (tblCol.contains(col.getColumnName())) { singleTableProjection.add(col); + //System.out.println("table " + fromTableName + " add projection " + col.getColumnName()); + } + else { + //System.out.println("table " + fromTableName + " not add projection " + col.getColumnName()); } } ProjectNode pnode = new ProjectNode(singleTableProjection); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java index 283564c..f83f8b1 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -40,16 +39,18 @@ public void test() throws ServletException //PardPlanner planner = new PardPlanner(); SqlParser parser = new SqlParser(); Statement stmt = parser.createStatement("SELECT * FROM pardtest.emp where eno < 'E0010' and eno > 'E0000'"); - plan(stmt).afterExecution(true); - stmt = parser.createStatement("SELECT * FROM pardtest.emp@pard3"); - plan(stmt).afterExecution(true); + //plan(stmt).afterExecution(true); + //stmt = parser.createStatement("SELECT * FROM pardtest.emp@pard3"); + // plan(stmt).afterExecution(true); UsePlan.setCurrentSchema("book"); stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); - plan(stmt).afterExecution(true); - stmt = parser.createStatement("select * from Customer where id<3 and rank >1"); - plan(stmt).afterExecution(true); - stmt = parser.createStatement("select id,rank from Customer where id<3 and rank >1"); - plan(stmt).afterExecution(true); + //plan(stmt).afterExecution(true); + //stmt = parser.createStatement("select * from Customer where id<3 and rank >1"); + // plan(stmt).afterExecution(true); + // stmt = parser.createStatement("select id,rank from Customer where id<3 and rank >1"); + //plan(stmt).afterExecution(true); + stmt = parser.createStatement("select customer.name, orders.quantity, book.title from customer,orders,book where customer.id=orders.customer_id and book.id=orders.book_id and customer.rank=1 and book.copies>5000"); + //plan(stmt).afterExecution(true); } public QueryPlan plan(Statement stmt) { @@ -116,31 +117,108 @@ public String getListBody() throws IOException System.out.println("sb " + sb.toString()); return body; } - + public int giveX(int nodeNo, int maxCount, int xInc, int levelCount) + { + /* + int offset = (maxCount - levelCount) / 2; + offset += nodeNo; + offset -= 1; + offset = offset * xInc; + return offset;*/ + int realInc = maxCount / levelCount; + int offset = nodeNo * realInc; + offset -= realInc / 2; + offset = offset * xInc; + return offset; + } + public int giveY(int levelNo, int yInc) + { + return (levelNo - 1) * yInc; + } public String getBody(QueryPlan plan) throws IOException { List nodeDataArray = new ArrayList(); List linkedDataArray = new ArrayList(); PlanNode node = ((QueryPlan) plan).optimize(); - Map mapping = new HashMap(); + //Map mapping = new HashMap(); Queue que = new LinkedList(); + + //Map nodeLevel = new HashMap<>(); + //Map nodeNumber = new HashMap<>(); + Queue nodeLevelQue = new LinkedList(); + Queue nodeLevelQue2 = new LinkedList(); + Queue nodeNumberQueue = new LinkedList(); + //Queue nodeNumberQueue2 = new LinkedList(); + int[] nodeNo = new int[100]; + que.add(node); + //nodeLevel.put(node, 1); + nodeLevelQue.add(1); + nodeLevelQue2.add(1); + nodeNo[1]++; + int maxLevel = 1; + int maxNumber = 1; + //nodeNumber.put(node, nodeNo[1]); + nodeNumberQueue.add(nodeNo[1]); + //nodeNumberQueue2.add(nodeNo[1]); + while (!que.isEmpty()) { + PlanNode planNode = que.poll(); + int level = nodeLevelQue.poll(); //nodeLevel.get(planNode); + if (level > maxLevel) { + maxLevel = level; + } + level++; + List children = NodeHelper.getChildren(planNode); + for (PlanNode pn : children) { + que.add(pn); + //nodeLevel.put(pn, level); + nodeLevelQue.add(level); + nodeLevelQue2.add(level); + nodeNo[level]++; + //nodeNumber.put(pn, nodeNo[level]); + nodeNumberQueue.add(nodeNo[level]); + } + } + for (int i = 0; i < maxLevel; i++) { + if (nodeNo[i] > maxNumber) { + maxNumber = nodeNo[i]; + } + } que.add(node); PNode pa = parse(node); - pa.locx = 0; - pa.locy = 60; - mapping.put(node, pa); + int xInc = 270; + int yInc = 150; + pa.locx = giveX(1, maxNumber, xInc, 1); + pa.locy = 60 + giveY(1, yInc); + //mapping.put(node, pa); nodeDataArray.add(pa); + Queue pque = new LinkedList(); + pque.add(pa); + nodeLevelQue2.poll(); + nodeNumberQueue.poll(); while (!que.isEmpty()) { PlanNode planNode = que.poll(); - PNode parent = mapping.get(planNode); + PNode parent = pque.poll(); + //PNode parent = mapping.get(planNode); List pnlist = NodeHelper.getChildren(planNode); int xoffset = 0; for (PlanNode pnode : pnlist) { + int level = nodeLevelQue2.poll(); //nodeLevel.get(pnode); + int levelNo = nodeNumberQueue.poll(); //nodeNumber.get(pnode); PNode p = parse(pnode); - p.locx = parent.locx + xoffset * 120; + pque.add(p); + p.locx = giveX(levelNo, maxNumber, xInc, nodeNo[level]); //parent.locx + xoffset * 220; + /* + if (pnlist.size() == 1) { + p.locx = parent.locx; + } + + else if (pnlist.size() == 2) { + p.locx = parent.locx - xInc / 2 + xoffset * xInc; + xoffset++; + }*/ xoffset++; - p.locy = parent.locy + 150; - mapping.put(pnode, p); + p.locy = giveY(level, yInc); + //mapping.put(pnode, p); PEdge e = new PEdge(); e.from = parent.getKey(); e.to = p.getKey(); diff --git a/pard-main/src/main/resources/webapp/_demo.html b/pard-main/src/main/resources/webapp/_demo.html index 7fad5c2..a7fde0d 100644 --- a/pard-main/src/main/resources/webapp/_demo.html +++ b/pard-main/src/main/resources/webapp/_demo.html @@ -21,7 +21,7 @@ - +
@@ -73,8 +73,8 @@
- -
+ +
diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java index c5376dc..2e25f53 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java @@ -24,4 +24,18 @@ public void testSemantic() e.printStackTrace(); } } + @Test + public void testJoin() + { + UsePlan.setCurrentSchema("book"); + SqlParser parser = new SqlParser(); + Statement stmt = parser.createStatement("select customer.name, orders.quantity, book.title from customer,orders,book where customer.id=orders.id and book.id=orders.book_id and customer.rank=1 and book.copies>5000"); + plan(stmt); + } + public QueryPlan plan(Statement stmt) + { + QueryPlan plan = new QueryPlan2(stmt); + //plan.afterExecution(true); + return plan; + } } diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java new file mode 100644 index 0000000..0165499 --- /dev/null +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java @@ -0,0 +1,29 @@ +package cn.edu.ruc.iir.pard.server; + +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; +import cn.edu.ruc.iir.pard.sql.tree.Statement; +import cn.edu.ruc.iir.pard.web.PardServlet; +import org.testng.annotations.Test; + +public class PardWebTest +{ + @Test + public void test() + { + SqlParser parser = new SqlParser(); + UsePlan.setCurrentSchema("book"); + Statement stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); + plan(stmt); + System.out.println(PardServlet.planList.size()); + PardWebServer.main(new String[0]); + } + public QueryPlan plan(Statement stmt) + { + QueryPlan plan = new QueryPlan2(stmt); + plan.afterExecution(true); + return plan; + } +} diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/ColumnItem.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/ColumnItem.java index 5f14196..ce65ae1 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/ColumnItem.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/ColumnItem.java @@ -42,8 +42,8 @@ public ColumnItem(ColumnItem ci) public ColumnItem(String tableName, String columnName, int dataType) { super(); - this.tableName = tableName; - this.columnName = columnName; + this.tableName = tableName.toLowerCase(); + this.columnName = columnName.toLowerCase(); this.dataType = dataType; } diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index eadb183..88615ce 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -86,7 +86,7 @@ private static List extractList(Expr expr, String tableName, boolean rec) SingleExpr se = (SingleExpr) e; if (se.getLvalue() instanceof ColumnItem && se.getRvalue() instanceof ValueItem) { ColumnItem ci = (ColumnItem) se.getLvalue(); - if (tableName != null && tableName.equals(ci.getTableName())) { + if (tableName != null && tableName.equalsIgnoreCase(ci.getTableName())) { list.add(se); } else { diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Item.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Item.java index a7c577c..a49d59a 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Item.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Item.java @@ -37,7 +37,7 @@ public static Item parse(Expression expr) DereferenceExpression de = (DereferenceExpression) expr; //System.out.println("base :" + de.getBase().getClass().getName()); //System.out.println("field:" + de.getField()); - ColumnItem ci = new ColumnItem(de.getBase().toString(), de.getField().toString(), 0); + ColumnItem ci = new ColumnItem(de.getBase().toString().toLowerCase(), de.getField().toString().toLowerCase(), 0); ci.expression = expr; return ci; } From 4fbd84f405953a4fc023e8ba724a44ad5d77f741 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Sun, 14 Jan 2018 22:17:35 +0800 Subject: [PATCH 13/75] add some optimize. --- .../executor/connector/node/FilterNode.java | 7 +- .../ruc/iir/pard/planner/dml/QueryPlan2.java | 70 +++++++++++++++++-- .../ruc/iir/pard/server/PardWebServer.java | 14 ++-- .../cn/edu/ruc/iir/pard/web/PardServlet.java | 8 +-- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 32 +++++++++ 5 files changed, 111 insertions(+), 20 deletions(-) diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/FilterNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/FilterNode.java index 546007f..ccae55d 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/FilterNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/FilterNode.java @@ -13,7 +13,7 @@ public class FilterNode extends PlanNode { private static final long serialVersionUID = 8695368351559462220L; - private final Expression expression; + private Expression expression; public FilterNode(Expression expression) { @@ -30,7 +30,10 @@ public Expression getExpression() { return expression; } - + public void setExpression(Expression expression) + { + this.expression = expression; + } @Override public String toString() { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java index 0bd5a31..04f3a67 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java @@ -189,6 +189,7 @@ public ErrorMessage semanticAnalysis() } else { PlanNode joinNode = join(); + joinNode = formatUnion(joinNode); currentNode.setChildren(joinNode, true, true); currentNode = joinNode; } @@ -209,6 +210,33 @@ public void fillAlias2tbl() } } } + public PlanNode formatUnion(PlanNode node) + { + if (node instanceof UnionNode) { + boolean needRec = false; + UnionNode union = new UnionNode(); + UnionNode old = (UnionNode) node; + for (PlanNode p : old.getUnionChildren()) { + if (p instanceof UnionNode) { + UnionNode pp = (UnionNode) p; + needRec = true; + for (PlanNode n : pp.getUnionChildren()) { + union.addUnionChild(n); + } + } + else { + union.addUnionChild(p); + } + } + if (needRec) { + return formatUnion(union); + } + return union; + } + else { + return NodeHelper.copyNode(node); + } + } //TODO:根据Expr里的条件,确定Join树 public PlanNode join() { @@ -319,22 +347,46 @@ else if (joinChildren.size() == 2) { } return NodeHelper.copyNode(node); } - private SqlParser parser = new SqlParser(); + public PlanNode checkPruneJoin(JoinNode node) { node.setOtherInfo("mark"); if (node.getJoinChildren().size() != 2) { + node.setOtherInfo("mark" + node.getJoinChildren().size()); return node; } Expression expr = node.getExprList().get(0); - Expression expr1 = findExpression(node.getJoinChildren().get(0)); - Expression expr2 = findExpression(node.getJoinChildren().get(1)); + FilterNode node1 = findExpression(node.getJoinChildren().get(0)); + FilterNode node2 = findExpression(node.getJoinChildren().get(1)); + if (node1 == null || node2 == null) { + return node; + } + Expression expr1 = node1.getExpression(); + Expression expr2 = node2.getExpression(); if (expr != null && expr1 != null && expr2 != null) { + SingleExpr se = (SingleExpr) Expr.parse(expr); + Expr e1 = Expr.parse(expr1); + Expr e2 = Expr.parse(expr2); + ColumnItem lv = (ColumnItem) se.getLvalue(); + ColumnItem rv = (ColumnItem) se.getRvalue(); + e1 = Expr.replace(e1, (ColumnItem) se.getLvalue(), (ColumnItem) se.getRvalue()); + e2 = Expr.replace(e2, (ColumnItem) se.getLvalue(), (ColumnItem) se.getRvalue()); + Expr res = Expr.and(e1, e2, LogicOperator.AND); + if (res instanceof FalseExpr) { + //System.out.println("Flase e1 " + e1.toString() + " e2 " + e2.toString() + "se " + se + " res " + res); + return null; + } + else { + //System.out.println("ke1 " + e1.toString() + " e2 " + e2.toString() + "se " + se + " res " + res); + } return node; } + else { + //System.out.println("?e1 " + expr1 + " e2 " + expr2 + "se " + expr); + } return node; } - public Expression findExpression(PlanNode node) + public FilterNode findExpression(PlanNode node) { while (!(node instanceof FilterNode)) { if (node instanceof UnionNode || node instanceof JoinNode) { @@ -346,7 +398,7 @@ public Expression findExpression(PlanNode node) node = node.getLeftChild(); } if (node instanceof FilterNode) { - return ((FilterNode) node).getExpression(); + return ((FilterNode) node); } return null; } @@ -357,6 +409,9 @@ public PlanNode pushDownJoin(UnionNode union, PlanNode others, JoinNode oldNode) List children = union.getUnionChildren(); if (others instanceof JoinNode) { others = pushDownJoin((JoinNode) others); + if (others == null) { + return null; + } } if (children.isEmpty()) { return union; @@ -367,7 +422,10 @@ public PlanNode pushDownJoin(UnionNode union, PlanNode others, JoinNode oldNode) joins.addJoinChild(NodeHelper.copyNode(others)); joins.getJoinSet().addAll(oldNode.getJoinSet()); joins.getExprList().addAll(oldNode.getExprList()); - ret.getUnionChildren().add(pushDownJoin(joins)); + PlanNode pn = pushDownJoin(joins); + if (pn != null) { + ret.getUnionChildren().add(pn); + } //ret.getUnionChildren().add(joins); //TODO 进行搜索 如果没有Union结点,且没有带expr的join结点,则考虑减枝 } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java index f172c91..0d0fce7 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardWebServer.java @@ -6,8 +6,6 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; -import javax.servlet.ServletException; - public class PardWebServer implements Runnable { @@ -35,13 +33,13 @@ public void run() context.addServlet(staticHolder, "*.jpg"); context.setResourceBase("."); PardServlet s = new PardServlet(); - try { - s.test(); - } - catch (ServletException e1) { + //try { + // s.test(); + //} + //catch (ServletException e1) { // TODO Auto-generated catch block - e1.printStackTrace(); - } + // e1.printStackTrace(); + //} ServletHolder pardHolder = new ServletHolder(s); context.addServlet(pardHolder, "*.pard"); //context.setParentLoaderPriority(true); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java index f83f8b1..1a03660 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/web/PardServlet.java @@ -44,13 +44,13 @@ public void test() throws ServletException // plan(stmt).afterExecution(true); UsePlan.setCurrentSchema("book"); stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); - //plan(stmt).afterExecution(true); + plan(stmt).afterExecution(true); //stmt = parser.createStatement("select * from Customer where id<3 and rank >1"); // plan(stmt).afterExecution(true); // stmt = parser.createStatement("select id,rank from Customer where id<3 and rank >1"); //plan(stmt).afterExecution(true); stmt = parser.createStatement("select customer.name, orders.quantity, book.title from customer,orders,book where customer.id=orders.customer_id and book.id=orders.book_id and customer.rank=1 and book.copies>5000"); - //plan(stmt).afterExecution(true); + plan(stmt).afterExecution(true); } public QueryPlan plan(Statement stmt) { @@ -207,11 +207,11 @@ public String getBody(QueryPlan plan) throws IOException PNode p = parse(pnode); pque.add(p); p.locx = giveX(levelNo, maxNumber, xInc, nodeNo[level]); //parent.locx + xoffset * 220; - /* + if (pnlist.size() == 1) { p.locx = parent.locx; } - + /* else if (pnlist.size() == 2) { p.locx = parent.locx - xInc / 2 + xoffset * xInc; xoffset++; diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 88615ce..10b4911 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -55,6 +55,38 @@ public static LogicOperator getReverse(LogicOperator opt) public Expr() { } + public static Expr replace(Expr e1, ColumnItem from, ColumnItem to) + { + Expr e = Expr.clone(e1); + if (e instanceof SingleExpr) { + SingleExpr se = (SingleExpr) e; + Item lv = se.getLvalue(); + Item rv = se.getRvalue(); + if (lv.equals(from)) { + lv = Item.clone(to); + } + if (rv.equals(from)) { + rv = Item.clone(to); + } + return new SingleExpr(lv, rv, se.getCompareType()); + } + else if (e instanceof CompositionExpr) { + CompositionExpr ce = (CompositionExpr) e; + for (int i = 0; i < ce.getConditions().size(); i++) { + Expr ex = ce.getConditions().get(i); + ce.getConditions().set(i, replace(ex, from, to)); + } + return ce; + } + else if (e instanceof UnaryExpr) { + UnaryExpr ue = (UnaryExpr) e; + return new UnaryExpr(ue.getCompareType(), replace(ue.getExpression(), from, to)); + } + else if (e instanceof TrueExpr || e instanceof FalseExpr) { + return e; + } + return e; + } public static Expr clone(Expr expr) { if (expr instanceof CompositionExpr) { From 084593f7e8a413644f4236fe4e3b7b3c0c8ee941 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 00:28:40 +0800 Subject: [PATCH 14/75] fix client. --- .../src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 790c0ad..556efc2 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -2,7 +2,6 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.memory.Row; -//import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; From cbf5ddc8a63c4f4d59244505c79e8d581864bd25 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 00:29:48 +0800 Subject: [PATCH 15/75] fix a bug. --- .../src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 556efc2..8041daf 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -80,12 +80,14 @@ public void run() System.out.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); if (resultSet.getSemanticErrmsg() != null) { System.err.println("Semantic Status:" + resultSet.getSemanticErrmsg()); + System.out.println("Semantic Status:" + resultSet.getSemanticErrmsg()); } } else { System.err.println(resultSet.getStatus().toString()); if (resultSet.getSemanticErrmsg() != null) { System.err.println(resultSet.getSemanticErrmsg()); + System.out.println(resultSet.getSemanticErrmsg()); } } } From 14b37dce982b9f324abe9592deb6c5c4ff180fbc Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 00:51:25 +0800 Subject: [PATCH 16/75] update new QueryPlan. --- .../src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java index 1742814..b3c657c 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java @@ -11,6 +11,7 @@ import cn.edu.ruc.iir.pard.planner.dml.InsertPlan; import cn.edu.ruc.iir.pard.planner.dml.LoadPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; import cn.edu.ruc.iir.pard.semantic.SemanticException; import cn.edu.ruc.iir.pard.sql.tree.CreateSchema; import cn.edu.ruc.iir.pard.sql.tree.CreateTable; @@ -40,7 +41,7 @@ public class PardPlanner public static Map ast2plan = new HashMap(); public static void init() { - ast2plan.put(Query.class, QueryPlan.class); + ast2plan.put(Query.class, QueryPlan2.class); ast2plan.put(CreateSchema.class, SchemaCreationPlan.class); ast2plan.put(CreateTable.class, TableCreationPlan.class); ast2plan.put(Use.class, UsePlan.class); From 89d7466a1e7a72ae85d1da4c8b8abc6d64f3d691 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 01:35:53 +0800 Subject: [PATCH 17/75] add column's tableName. --- .../cn/edu/ruc/iir/pard/catalog/Column.java | 23 ++++++++++++++++++- .../cn/edu/ruc/iir/pard/etcd/EtcdUtil.java | 3 +++ pard-main/etc/sbin/pard-server | 2 +- .../ruc/iir/pard/scheduler/TaskScheduler.java | 4 ++-- .../ruc/iir/pard/server/PardQueryHandler.java | 3 +++ .../pard/semantic/SemanticAnalysisTest.java | 14 +++++++++++ .../edu/ruc/iir/pard/server/PardWebTest.java | 2 ++ 7 files changed, 47 insertions(+), 4 deletions(-) diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java index faaab1f..58ba189 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java @@ -9,6 +9,7 @@ public class Column private int id; private int dataType; private String columnName; + private String tableName; private int len; private int index; //0:none; 1:hashindex; 2:btreeindex; 3:others private int key; @@ -17,7 +18,7 @@ public Column() { } - public Column(int id, int dataType, String columnName, int len, int index, int key) + public Column(int id, int dataType, String columnName, int len, int index, int key, String tableName) { this.id = id; this.dataType = dataType; @@ -25,6 +26,7 @@ public Column(int id, int dataType, String columnName, int len, int index, int k this.len = len; this.index = index; this.key = key; + this.tableName = tableName; } public int getId() @@ -93,6 +95,7 @@ public int hashCode() final int prime = 31; int result = 1; result = prime * result + ((columnName == null) ? 0 : columnName.hashCode()); + result = prime * result + ((tableName == null) ? 0 : tableName.hashCode()); result = prime * result + dataType; result = prime * result + id; result = prime * result + index; @@ -122,6 +125,14 @@ public boolean equals(Object obj) else if (!columnName.equals(other.columnName)) { return false; } + if (tableName == null) { + if (other.tableName != null) { + return false; + } + } + else if (!tableName.equals(other.tableName)) { + return false; + } if (dataType != other.dataType) { return false; } @@ -139,4 +150,14 @@ else if (!columnName.equals(other.columnName)) { } return true; } + + public String getTableName() + { + return tableName; + } + + public void setTableName(String tableName) + { + this.tableName = tableName; + } } diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java index ff303ca..91ecabe 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java @@ -277,6 +277,9 @@ private static Schema convertSchema(Schema schema) //System.out.println(json.toString()); Column col = (Column) JSONObject.toBean(json, Column.class); columnHashMap.put(obj.toString(), col); + if (col.getTableName() == null) { + col.setTableName(table.getTablename()); + } } table.setColumns(columnHashMap); jsonObject = JSONObject.fromObject(table.getStaticsMap()); diff --git a/pard-main/etc/sbin/pard-server b/pard-main/etc/sbin/pard-server index 10aa381..6927dae 100755 --- a/pard-main/etc/sbin/pard-server +++ b/pard-main/etc/sbin/pard-server @@ -22,7 +22,7 @@ if [ $1 == "start" ] ; then if [ -e ../pid ] ; then echo "Pard already started. Please stop it first." else - nohup java -jar ../bin/pard-server.jar ../pard.properties & + nohup java -jar ../bin/pard-server.jar ../pard.properties >../nohup.log 2>&1 & pid=$! echo ${pid} > ../pid echo "Pard is running in background as" ${pid} diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 1ba0146..48a1e46 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -338,7 +338,7 @@ public PardResultSet executeJob(Job job) if (plan instanceof SchemaShowPlan) { SchemaDao schemaDao = new SchemaDao(); Set schemas = schemaDao.listAll(); - Column header = new Column(0, DataType.VARCHAR.getType(), "schema", 100, 0, 0); + Column header = new Column(0, DataType.VARCHAR.getType(), "schema", 100, 0, 0, null); PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK, ImmutableList.of(header)); for (String schemaName : schemas) { RowConstructor rowConstructor = new RowConstructor(); @@ -352,7 +352,7 @@ public PardResultSet executeJob(Job job) SchemaDao schemaDao = new SchemaDao(); Schema schema = schemaDao.loadByName(((TableShowPlan) plan).getSchema()); List tables = schema.getTableList(); - Column header = new Column(0, DataType.VARCHAR.getType(), "table", 100, 0, 0); + Column header = new Column(0, DataType.VARCHAR.getType(), "table", 100, 0, 0, null); PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK, ImmutableList.of(header)); for (Table table : tables) { RowConstructor rowConstructor = new RowConstructor(); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index 36c7b4d..0d94586 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -97,6 +97,9 @@ public PardResultSet executeQuery(String sql) catch (ParsingException e) { return new PardResultSet(PardResultSet.ResultStatus.PARSING_ERR); } + catch (NullPointerException e1) { + return new PardResultSet(PardResultSet.ResultStatus.PARSING_ERR, e1.getMessage()); + } if (statement == null) { jobScheduler.failJob(job.getJobId()); logger.log(Level.WARNING, "Cannot create statement for sql: " + sql); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java index 44c9608..90543e0 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java @@ -20,6 +20,7 @@ import cn.edu.ruc.iir.pard.planner.ddl.TableCreationPlan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Node; import cn.edu.ruc.iir.pard.sql.tree.OrderBy; @@ -235,4 +236,17 @@ else if (node instanceof AggregationNode) { } return null; } + @Test + public void testCount() + { + UsePlan.setCurrentSchema("booktest"); + String cnt = "select count(*) from publisher"; + try { + Statement stmt = parser.createStatement(cnt); + QueryPlan plan = new QueryPlan2(stmt); + } + catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java index 0165499..d13aa3e 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java @@ -17,6 +17,8 @@ public void test() UsePlan.setCurrentSchema("book"); Statement stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); plan(stmt); + stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); + plan(stmt); System.out.println(PardServlet.planList.size()); PardWebServer.main(new String[0]); } From 3a7388373c7a5e9f51bfeb57d52f257890a99a13 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 04:14:44 +0800 Subject: [PATCH 18/75] add union task and a little join task. --- .../iir/pard/executor/connector/JoinTask.java | 49 +++++ .../pard/executor/connector/UnionTask.java | 29 +++ .../pard/exchange/ExchangeTaskHandler.java | 46 +++- .../ruc/iir/pard/scheduler/TaskScheduler.java | 201 ++++++++++++++---- .../edu/ruc/iir/pard/scheduler/TaskState.java | 71 +++++++ .../iir/pard/scheduler/TaskSchedulerTest.java | 27 +++ .../edu/ruc/iir/pard/server/PardWebTest.java | 6 +- 7 files changed, 385 insertions(+), 44 deletions(-) create mode 100644 pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java create mode 100644 pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/UnionTask.java create mode 100644 pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java create mode 100644 pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java new file mode 100644 index 0000000..74b39ad --- /dev/null +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java @@ -0,0 +1,49 @@ +package cn.edu.ruc.iir.pard.executor.connector; + +import cn.edu.ruc.iir.pard.sql.tree.Expression; +import com.google.common.collect.ImmutableList; + +import java.util.ArrayList; +import java.util.List; + +public class JoinTask + extends Task +{ + /** + * + */ + private static final long serialVersionUID = 8086274031234684990L; + private List waitTask; + private String verticalJoinColumn; + private List joinList; + public JoinTask(String site) + { + super(site); + verticalJoinColumn = null; + joinList = new ArrayList(); + } + public List getWaitTask() + { + return waitTask; + } + public void setWaitTask(List waitTask) + { + this.waitTask = ImmutableList.copyOf(waitTask); + } + public String getVerticalJoinColumn() + { + return verticalJoinColumn; + } + public void setVerticalJoinColumn(String verticalJoinColumn) + { + this.verticalJoinColumn = verticalJoinColumn; + } + public List getJoinList() + { + return joinList; + } + public void setJoinList(List joinList) + { + this.joinList = joinList; + } +} diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/UnionTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/UnionTask.java new file mode 100644 index 0000000..f161248 --- /dev/null +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/UnionTask.java @@ -0,0 +1,29 @@ +package cn.edu.ruc.iir.pard.executor.connector; + +import com.google.common.collect.ImmutableList; + +import java.util.ArrayList; +import java.util.List; + +public class UnionTask + extends Task +{ + /** + * + */ + private static final long serialVersionUID = -7442789904751335533L; + private List waitTask; + public UnionTask(String site) + { + super(site); + waitTask = new ArrayList(); + } + public List getWaitTask() + { + return waitTask; + } + public void setWaitTask(List waitTask) + { + this.waitTask = ImmutableList.copyOf(waitTask); + } +} diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 0314805..526e2e8 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -2,12 +2,20 @@ import cn.edu.ruc.iir.pard.executor.PardTaskExecutor; import cn.edu.ruc.iir.pard.executor.connector.Block; +import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.executor.connector.UnionTask; +import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; +import cn.edu.ruc.iir.pard.scheduler.TaskState; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -21,16 +29,21 @@ public class ExchangeTaskHandler { private final Logger logger = Logger.getLogger(ExchangeTaskHandler.class.getName()); private final PardTaskExecutor executor; - + private final Map taskMap; + private final Map> subTaskMap; + private final TaskScheduler taskScheduler; public ExchangeTaskHandler(PardTaskExecutor executor) { this.executor = executor; + this.taskMap = new HashMap(); + this.subTaskMap = new HashMap<>(); + this.taskScheduler = TaskScheduler.INSTANCE(); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { - if (msg instanceof Task) { + if (msg instanceof Task && !(msg instanceof UnionTask) && !(msg instanceof JoinTask)) { Task task = (Task) msg; Block block = executor.executeQuery(task); if (block.isSequenceHasNext()) { @@ -41,12 +54,39 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) f.addListener(ChannelFutureListener.CLOSE); } } + else if (msg instanceof Task && msg instanceof UnionTask) { + unionTask(ctx, (UnionTask) msg); + } else { logger.log(Level.WARNING, "Exchange task handler received a message which is not a task"); ctx.close(); } } - + public void unionTask(ChannelHandlerContext ctx, UnionTask task) + { + //int p = 0; + if (subTaskMap.get(task.getTaskId()) == null) { + List list = new ArrayList(); + TaskState state = taskScheduler.executeQueryTask(task.getWaitTask(), true); + list.add(task.getTaskId()); + subTaskMap.put(task.getTaskId(), list); + taskMap.put(task.getTaskId(), state); + } + TaskState state = taskMap.get(task.getTaskId()); + boolean hasNext = true; + ChannelFuture f = null; + if (!state.isDone()) { + Block b = state.fetch(); + hasNext = b.isSequenceHasNext() || state.getTaskMap().size() > 1; + b.setSequenceHasNext(hasNext); + f = ctx.write(b); + } + if (!hasNext) { + f.addListener(ChannelFutureListener.CLOSE); + subTaskMap.put(task.getTaskId(), null); + taskMap.put(task.getTaskId(), null); + } + } @Override public void channelReadComplete(ChannelHandlerContext ctx) { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 48a1e46..e47f50a 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -18,12 +18,16 @@ import cn.edu.ruc.iir.pard.executor.connector.DropSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.DropTableTask; import cn.edu.ruc.iir.pard.executor.connector.InsertIntoTask; +import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.LoadTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.QueryTask; import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.executor.connector.UnionTask; +import cn.edu.ruc.iir.pard.executor.connector.node.JoinNode; import cn.edu.ruc.iir.pard.executor.connector.node.NodeHelper; import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; +import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; import cn.edu.ruc.iir.pard.executor.connector.node.UnionNode; import cn.edu.ruc.iir.pard.planner.Plan; @@ -54,6 +58,7 @@ import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -267,56 +272,172 @@ public List generateTasks(Plan plan) // query plan if (plan instanceof QueryPlan) { - logger.info("Task generation for query plan"); + QueryPlan queryPlan = (QueryPlan) plan; try { - QueryPlan queryPlan = (QueryPlan) plan; - PlanNode planNode = queryPlan.getPlan(); - PlanNode currentNode = planNode; - UnionNode internalUnionNode = null; - while (currentNode.hasChildren()) { - currentNode = currentNode.getLeftChild(); - if (currentNode instanceof UnionNode) { - internalUnionNode = (UnionNode) currentNode; - break; + return processQueryPlan2(queryPlan); + } + catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + public List processQueryPlan2(QueryPlan queryPlan) + { + logger.info("Task generation for query plan"); + PlanNode planNode = queryPlan.getPlan(); + PlanNode currentNode = planNode; + UnionNode internalUnionNode = null; + ProjectNode projNode = null; + while (currentNode != null) { + if (currentNode instanceof UnionNode) { + internalUnionNode = (UnionNode) currentNode; + } + if (currentNode instanceof ProjectNode) { + projNode = (ProjectNode) currentNode; + } + currentNode = currentNode.getLeftChild(); + } + if (internalUnionNode == null) { + return ImmutableList.of(new QueryTask(planNode)); + } + else { + return ImmutableList.copyOf(processUnionTask(internalUnionNode, queryPlan.getJobId(), new AtomicInteger(1))); + } + /* + List tasks = new ArrayList<>(); + List unionChildren = internalUnionNode.getUnionChildren(); + int index = 0; + return ImmutableList.copyOf(tasks); + */ + } + public JoinTask joinTask(JoinNode node, String jobId, AtomicInteger jobOffset) + { + return null; + } + public QueryTask singleSiteTableTask(PlanNode node, String jobId, AtomicInteger jobOffset) + { + TableScanNode tableScanNode = null; + if (node instanceof TableScanNode) { + tableScanNode = (TableScanNode) node; + } + while (!(node instanceof TableScanNode) && node.hasChildren()) { + if (node.getLeftChild() instanceof TableScanNode) { + tableScanNode = (TableScanNode) node.getLeftChild(); + break; + } + node = node.getLeftChild(); + } + if (tableScanNode == null) { + return null; + } + QueryTask task = new QueryTask(tableScanNode.getSite(), NodeHelper.copyNode(node)); + task.setTaskId(jobId + "-" + jobOffset.addAndGet(1)); + return task; + } + public List processUnionTask(UnionNode union, String jobId, AtomicInteger jobOffset) + { + List availableSite = new ArrayList(); + availableSite.addAll(siteDao.listNodes().keySet()); + int rand = (int) (Math.random() * availableSite.size() * 2); + rand = rand % availableSite.size(); + List tasks = new ArrayList<>(); + List unionChildren = union.getUnionChildren(); + //int index = jobOffset; + List unionTasks = new ArrayList<>(); + for (PlanNode childNode : unionChildren) { + //union.setChildren(childNode, true, false); + PlanNode node = childNode; + while (node != null) { + if (node instanceof TableScanNode) { + Task tableTask = singleSiteTableTask(childNode, jobId, jobOffset); + if (tableTask != null) { + unionTasks.add(tableTask); } + break; } - if (internalUnionNode == null) { - return ImmutableList.of(new QueryTask(planNode)); - } - List tasks = new ArrayList<>(); - List unionChildren = internalUnionNode.getUnionChildren(); - int index = 0; - for (PlanNode childNode : unionChildren) { - internalUnionNode.setChildren(childNode, true, false); - PlanNode node = childNode; - TableScanNode tableScanNode = null; - if (node instanceof TableScanNode) { - tableScanNode = (TableScanNode) node; + else if (node instanceof JoinNode) { + Task joinTask = joinTask((JoinNode) node, jobId, jobOffset); + if (joinTask != null) { + unionTasks.add(joinTask); } - while (!(node instanceof TableScanNode) && node.hasChildren()) { - if (node.getLeftChild() instanceof TableScanNode) { - tableScanNode = (TableScanNode) node.getLeftChild(); - break; - } - node = node.getLeftChild(); - } - if (tableScanNode == null) { - return null; - } - QueryTask task = new QueryTask(tableScanNode.getSite(), NodeHelper.copyNode(planNode)); - task.setTaskId(plan.getJobId() + "-" + index); - tasks.add(task); - index++; } - return ImmutableList.copyOf(tasks); + node = node.getLeftChild(); } - catch (Exception e) { - e.printStackTrace(); + } + UnionTask unionTask = new UnionTask(availableSite.get(rand)); + unionTask.setWaitTask(unionTasks); + tasks.add(unionTask); + return tasks; + } + public List processQueryPlan(QueryPlan queryPlan) + { + logger.info("Task generation for query plan"); + PlanNode planNode = queryPlan.getPlan(); + PlanNode currentNode = planNode; + UnionNode internalUnionNode = null; + while (currentNode.hasChildren()) { + currentNode = currentNode.getLeftChild(); + if (currentNode instanceof UnionNode) { + internalUnionNode = (UnionNode) currentNode; + break; + } + } + if (internalUnionNode == null) { + return ImmutableList.of(new QueryTask(planNode)); + } + List tasks = new ArrayList<>(); + List unionChildren = internalUnionNode.getUnionChildren(); + int index = 0; + for (PlanNode childNode : unionChildren) { + internalUnionNode.setChildren(childNode, true, false); + PlanNode node = childNode; + TableScanNode tableScanNode = null; + if (node instanceof TableScanNode) { + tableScanNode = (TableScanNode) node; + } + while (!(node instanceof TableScanNode) && node.hasChildren()) { + if (node.getLeftChild() instanceof TableScanNode) { + tableScanNode = (TableScanNode) node.getLeftChild(); + break; + } + node = node.getLeftChild(); + } + if (tableScanNode == null) { + return null; } + QueryTask task = new QueryTask(tableScanNode.getSite(), NodeHelper.copyNode(planNode)); + task.setTaskId(queryPlan.getJobId() + "-" + index); + tasks.add(task); + index++; + } + return ImmutableList.copyOf(tasks); + } + public TaskState executeQueryTask(List tasks, boolean isLocal) + { + if (isLocal) { + PardResultSet resultSet = new PardResultSet(); + Map taskMap = new HashMap<>(); + BlockingQueue blocks = new LinkedBlockingQueue<>(); + TaskState state = new TaskState(taskMap, blocks); + state.setResultSet(resultSet); + for (Task task : tasks) { + String site = task.getSite(); + String taskId = task.getTaskId(); + Site nodeSite = siteDao.listNodes().get(site); + if (nodeSite == null) { + logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); + state.setResultSet(PardResultSet.execErrResultSet); + return state; + } + PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); + client.connect(task, blocks); + taskMap.put(taskId, task); + } + return state; } return null; } - // todo this sucks, full of if else public PardResultSet executeJob(Job job) { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java new file mode 100644 index 0000000..3845f6d --- /dev/null +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java @@ -0,0 +1,71 @@ +package cn.edu.ruc.iir.pard.scheduler; + +import cn.edu.ruc.iir.pard.executor.connector.Block; +import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; +import cn.edu.ruc.iir.pard.executor.connector.Task; + +import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TimeUnit; + +public class TaskState +{ + private Map taskMap = null; + private BlockingQueue blocks = null; + private PardResultSet resultSet = null; + public TaskState(Map taskMap, BlockingQueue blocks) + { + super(); + this.taskMap = taskMap; + this.blocks = blocks; + } + public Map getTaskMap() + { + return taskMap; + } + public void setTaskMap(Map taskMap) + { + this.taskMap = taskMap; + } + public BlockingQueue getBlocks() + { + return blocks; + } + public int available() + { + return blocks.size(); + } + public Block fetch() + { + Block block = null; + do { + try { + block = blocks.poll(8000, TimeUnit.MILLISECONDS); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + }while (block == null && !isDone()); + if (!block.isSequenceHasNext()) { + String taskId = block.getTaskId(); + taskMap.remove(taskId); + } + return block; + } + public void setBlocks(BlockingQueue blocks) + { + this.blocks = blocks; + } + public PardResultSet getResultSet() + { + return resultSet; + } + public void setResultSet(PardResultSet resultSet) + { + this.resultSet = resultSet; + } + public boolean isDone() + { + return taskMap.isEmpty(); + } +} diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java new file mode 100644 index 0000000..f870463 --- /dev/null +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java @@ -0,0 +1,27 @@ +package cn.edu.ruc.iir.pard.scheduler; + +import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.planner.PardPlanner; +import cn.edu.ruc.iir.pard.planner.Plan; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; +import cn.edu.ruc.iir.pard.sql.tree.Statement; +import net.sf.json.JSONArray; +import org.testng.annotations.Test; + +import java.util.List; + +public class TaskSchedulerTest +{ + SqlParser parser = new SqlParser(); + @Test + public void test2() + { + String sql = "select * from book.publisher"; + Statement stmt = parser.createStatement(sql); + PardPlanner planner = new PardPlanner(); + Plan plan = planner.plan(stmt); + plan.setJobId("aa"); + List task = TaskScheduler.INSTANCE().generateTasks(plan); + System.out.println(JSONArray.fromObject(task).toString(1)); + } +} diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java index d13aa3e..249488a 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardWebTest.java @@ -17,7 +17,11 @@ public void test() UsePlan.setCurrentSchema("book"); Statement stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); plan(stmt); - stmt = parser.createStatement("select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"); + stmt = parser.createStatement("select customer.name, orders.quantity, book.title from customer,orders,book where customer.id=orders.customer_id and book.id=orders.book_id and customer.rank=1 and book.copies>5000"); + plan(stmt); + stmt = parser.createStatement("select * from customer"); + plan(stmt); + stmt = parser.createStatement("select * from publisher"); plan(stmt); System.out.println(PardServlet.planList.size()); PardWebServer.main(new String[0]); From b38bd77ca49f27b7c471db9ce6300187290e4f01 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 04:20:19 +0800 Subject: [PATCH 19/75] debug. --- .../java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 526e2e8..08e9c5d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -76,6 +76,7 @@ public void unionTask(ChannelHandlerContext ctx, UnionTask task) boolean hasNext = true; ChannelFuture f = null; if (!state.isDone()) { + logger.info("waiting more blocks in exchange task handler."); Block b = state.fetch(); hasNext = b.isSequenceHasNext() || state.getTaskMap().size() > 1; b.setSequenceHasNext(hasNext); From a7401184a7a4d3510d09072a4c6aae3ecbcb1227 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 05:01:06 +0800 Subject: [PATCH 20/75] add sth for test. --- .../edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java | 9 ++++++++- .../java/cn/edu/ruc/iir/pard/scheduler/TaskState.java | 3 +++ .../cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 08e9c5d..928d79d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -11,6 +11,7 @@ import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import net.sf.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; @@ -75,9 +76,15 @@ public void unionTask(ChannelHandlerContext ctx, UnionTask task) TaskState state = taskMap.get(task.getTaskId()); boolean hasNext = true; ChannelFuture f = null; - if (!state.isDone()) { + while (!state.isDone()) { logger.info("waiting more blocks in exchange task handler."); + for (String key : state.getTaskMap().keySet()) { + logger.info("task map key " + key + JSONObject.fromObject(state.getTaskMap().get(key)).toString()); + } Block b = state.fetch(); + if (b == null) { + continue; + } hasNext = b.isSequenceHasNext() || state.getTaskMap().size() > 1; b.setSequenceHasNext(hasNext); f = ctx.write(b); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java index 3845f6d..554dd55 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java @@ -45,6 +45,9 @@ public Block fetch() catch (InterruptedException e) { e.printStackTrace(); } + if (block == null) { + return null; + } }while (block == null && !isDone()); if (!block.isSequenceHasNext()) { String taskId = block.getTaskId(); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java index f870463..5337af0 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java @@ -3,6 +3,7 @@ import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; +import cn.edu.ruc.iir.pard.scheduler.JobScheduler.JobState; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Statement; import net.sf.json.JSONArray; @@ -23,5 +24,10 @@ public void test2() plan.setJobId("aa"); List task = TaskScheduler.INSTANCE().generateTasks(plan); System.out.println(JSONArray.fromObject(task).toString(1)); + Job job = JobScheduler.INSTANCE().newJob(); + task.forEach(job::addTask); + job.setJobState(JobState.EXECUTING); + job.setPlan(plan); + TaskScheduler.INSTANCE().executeJob(job); } } From 9f647b1979672e34c1ff30a6cbec6b88f47ea031 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 05:18:26 +0800 Subject: [PATCH 21/75] commit sth. --- .../cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java | 6 ++---- .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java | 3 --- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 928d79d..9e092c2 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -76,15 +76,13 @@ public void unionTask(ChannelHandlerContext ctx, UnionTask task) TaskState state = taskMap.get(task.getTaskId()); boolean hasNext = true; ChannelFuture f = null; - while (!state.isDone()) { + if (!state.isDone()) { logger.info("waiting more blocks in exchange task handler."); + logger.info("print task map:"); for (String key : state.getTaskMap().keySet()) { logger.info("task map key " + key + JSONObject.fromObject(state.getTaskMap().get(key)).toString()); } Block b = state.fetch(); - if (b == null) { - continue; - } hasNext = b.isSequenceHasNext() || state.getTaskMap().size() > 1; b.setSequenceHasNext(hasNext); f = ctx.write(b); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java index 554dd55..3845f6d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskState.java @@ -45,9 +45,6 @@ public Block fetch() catch (InterruptedException e) { e.printStackTrace(); } - if (block == null) { - return null; - } }while (block == null && !isDone()); if (!block.isSequenceHasNext()) { String taskId = block.getTaskId(); From c25c4158dedc42eecc7abd5118a00e8e47957db4 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 05:28:15 +0800 Subject: [PATCH 22/75] add some info. --- .../java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java | 2 +- .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 9e092c2..3de8b1d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -77,7 +77,7 @@ public void unionTask(ChannelHandlerContext ctx, UnionTask task) boolean hasNext = true; ChannelFuture f = null; if (!state.isDone()) { - logger.info("waiting more blocks in exchange task handler."); + logger.info("waiting more blocks in exchange task handlers."); logger.info("print task map:"); for (String key : state.getTaskMap().keySet()) { logger.info("task map key " + key + JSONObject.fromObject(state.getTaskMap().get(key)).toString()); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index e47f50a..12c5cd7 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -341,6 +341,7 @@ public List processUnionTask(UnionNode union, String jobId, AtomicInteger availableSite.addAll(siteDao.listNodes().keySet()); int rand = (int) (Math.random() * availableSite.size() * 2); rand = rand % availableSite.size(); + rand = 0; List tasks = new ArrayList<>(); List unionChildren = union.getUnionChildren(); //int index = jobOffset; From 7908382dba2e2aa49fe0d138097fae2230fa4130 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 05:30:16 +0800 Subject: [PATCH 23/75] test --- .../main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index 0d94586..6e15a3b 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -75,6 +75,9 @@ public void run() catch (IOException e) { e.printStackTrace(); } + catch (Exception e2) { + e2.printStackTrace(); + } } public PardResultSet executeQuery(String sql) From f38368b5b58f40bcfa5c29cd2e77b13cfe2c9835 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 05:57:30 +0800 Subject: [PATCH 24/75] recover. --- .../java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java | 1 + .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index 3de8b1d..f6cf918 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -83,6 +83,7 @@ public void unionTask(ChannelHandlerContext ctx, UnionTask task) logger.info("task map key " + key + JSONObject.fromObject(state.getTaskMap().get(key)).toString()); } Block b = state.fetch(); + logger.info("fetch~"); hasNext = b.isSequenceHasNext() || state.getTaskMap().size() > 1; b.setSequenceHasNext(hasNext); f = ctx.write(b); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 12c5cd7..4774f75 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -274,7 +274,7 @@ public List generateTasks(Plan plan) if (plan instanceof QueryPlan) { QueryPlan queryPlan = (QueryPlan) plan; try { - return processQueryPlan2(queryPlan); + return processQueryPlan(queryPlan); } catch (Exception e) { e.printStackTrace(); From b3eaf7dfe8b5acb5025cdf41d4c320ac4a6f7a66 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 15:37:15 +0800 Subject: [PATCH 25/75] add join task and send data task. --- .../iir/pard/executor/connector/JoinTask.java | 54 ++++++++------- .../pard/executor/connector/SendDataTask.java | 67 +++++++++++++++++++ 2 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java index 74b39ad..68aeb21 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java @@ -1,10 +1,6 @@ package cn.edu.ruc.iir.pard.executor.connector; -import cn.edu.ruc.iir.pard.sql.tree.Expression; -import com.google.common.collect.ImmutableList; - -import java.util.ArrayList; -import java.util.List; +import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; public class JoinTask extends Task @@ -12,38 +8,50 @@ public class JoinTask /** * */ - private static final long serialVersionUID = 8086274031234684990L; - private List waitTask; - private String verticalJoinColumn; - private List joinList; + private static final long serialVersionUID = -5881505715821305268L; + private String taskId; + private PlanNode node; + private String tmpTableName; public JoinTask(String site) { super(site); - verticalJoinColumn = null; - joinList = new ArrayList(); + this.tmpTableName = null; + this.node = null; + } + public JoinTask(String site, PlanNode node) + { + super(site); + this.node = node; + this.tmpTableName = null; + } + public JoinTask(String site, PlanNode node, String tmpTableName) + { + super(site); + this.node = node; + this.tmpTableName = tmpTableName; } - public List getWaitTask() + public String getTaskId() { - return waitTask; + return taskId; } - public void setWaitTask(List waitTask) + public void setTaskId(String taskId) { - this.waitTask = ImmutableList.copyOf(waitTask); + this.taskId = taskId; } - public String getVerticalJoinColumn() + public PlanNode getNode() { - return verticalJoinColumn; + return node; } - public void setVerticalJoinColumn(String verticalJoinColumn) + public void setNode(PlanNode node) { - this.verticalJoinColumn = verticalJoinColumn; + this.node = node; } - public List getJoinList() + public String getTmpTableName() { - return joinList; + return tmpTableName; } - public void setJoinList(List joinList) + public void setTmpTableName(String tmpTableName) { - this.joinList = joinList; + this.tmpTableName = tmpTableName; } } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java new file mode 100644 index 0000000..8b4e7b9 --- /dev/null +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java @@ -0,0 +1,67 @@ +package cn.edu.ruc.iir.pard.executor.connector; + +import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; +import cn.edu.ruc.iir.pard.sql.tree.Expression; + +import java.util.HashMap; +import java.util.Map; + +public class SendDataTask + extends Task +{ + /** + * + */ + private static final long serialVersionUID = 1L; + private String taskId; + private String schemaName; + private PlanNode node; + private Map siteExpression; + private Map tmpTableMap; + public SendDataTask(String site) + { + super(site); + siteExpression = new HashMap(); + tmpTableMap = new HashMap(); + } + public String getTaskId() + { + return taskId; + } + public void setTaskId(String taskId) + { + this.taskId = taskId; + } + public String getSchemaName() + { + return schemaName; + } + public void setSchemaName(String schemaName) + { + this.schemaName = schemaName; + } + public PlanNode getNode() + { + return node; + } + public void setNode(PlanNode node) + { + this.node = node; + } + public Map getSiteExpression() + { + return siteExpression; + } + public void setSiteExpression(Map siteExpression) + { + this.siteExpression = siteExpression; + } + public Map getTmpTableMap() + { + return tmpTableMap; + } + public void setTmpTableMap(Map tmpTableMap) + { + this.tmpTableMap = tmpTableMap; + } +} From e6a0ce424aac9e2cfb4b94c39eddcdebb07e5860 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 21:26:00 +0800 Subject: [PATCH 26/75] add join task & send data task generation. --- .../pard/commons/exception}/ErrorMessage.java | 12 +- .../pard/commons/exception/PardException.java | 34 ++- .../commons/exception}/SemanticException.java | 6 +- .../exception/TaskSchedulerException.java | 25 ++ .../executor/connector/node/PlanNode.java | 3 +- .../connector/node/TableScanNode.java | 4 +- .../pard/exchange/ExchangeTaskHandler.java | 3 +- .../iir/pard/planner/ConditionComparator.java | 4 +- .../edu/ruc/iir/pard/planner/PardPlanner.java | 2 +- .../cn/edu/ruc/iir/pard/planner/Plan.java | 3 +- .../pard/planner/ddl/SchemaCreationPlan.java | 4 +- .../iir/pard/planner/ddl/SchemaDropPlan.java | 4 +- .../iir/pard/planner/ddl/SchemaShowPlan.java | 2 +- .../pard/planner/ddl/TableCreationPlan.java | 4 +- .../iir/pard/planner/ddl/TableDropPlan.java | 2 +- .../ruc/iir/pard/planner/ddl/TablePlan.java | 2 +- .../iir/pard/planner/ddl/TableShowPlan.java | 2 +- .../edu/ruc/iir/pard/planner/ddl/UsePlan.java | 4 +- .../ruc/iir/pard/planner/dml/DeletePlan.java | 2 +- .../ruc/iir/pard/planner/dml/InsertPlan.java | 4 +- .../ruc/iir/pard/planner/dml/LoadPlan.java | 2 +- .../ruc/iir/pard/planner/dml/QueryPlan.java | 2 +- .../ruc/iir/pard/planner/dml/QueryPlan2.java | 6 +- .../ruc/iir/pard/scheduler/TaskScheduler.java | 270 ++++++++++++++++-- .../ruc/iir/pard/server/PardQueryHandler.java | 16 +- .../edu/ruc/iir/pard/catelog/CatelogTest.java | 2 +- .../ruc/iir/pard/semantic/JoinSemantic.java | 1 + .../pard/semantic/SemanticAnalysisTest.java | 2 +- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 9 + 29 files changed, 359 insertions(+), 77 deletions(-) rename {pard-main/src/main/java/cn/edu/ruc/iir/pard/planner => pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception}/ErrorMessage.java (96%) rename {pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic => pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception}/SemanticException.java (88%) create mode 100644 pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/TaskSchedulerException.java diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/ErrorMessage.java similarity index 96% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java rename to pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/ErrorMessage.java index eaa8a52..70db5fa 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ErrorMessage.java +++ b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/ErrorMessage.java @@ -1,6 +1,4 @@ -package cn.edu.ruc.iir.pard.planner; - -import cn.edu.ruc.iir.pard.semantic.SemanticException; +package cn.edu.ruc.iir.pard.commons.exception; import java.util.HashMap; import java.util.Map; @@ -9,7 +7,7 @@ public class ErrorMessage { private int errcode; private String errmsg; - private transient SemanticException exception; + private transient PardException exception; private static Map template = null; private static ErrorMessage ok = throwMessage(ErrCode.OK, ""); public static ErrorMessage throwMessage(int errorCode, Object...objects) @@ -103,10 +101,10 @@ public Map getTemplate() public ErrorMessage() { try { - exception = new SemanticException(); + exception = new PardException(); throw exception; } - catch (SemanticException e) { + catch (PardException e) { exception = e; } } @@ -150,7 +148,7 @@ public String toString() return String.format("ERROR:[%d] %s", errcode, errmsg); } // get set - public SemanticException getException() + public PardException getException() { return exception; } diff --git a/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/PardException.java b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/PardException.java index 813474d..8644263 100644 --- a/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/PardException.java +++ b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/PardException.java @@ -5,6 +5,38 @@ * * @author guodong */ -public abstract class PardException +public class PardException + extends RuntimeException { + /** + * + */ + private static final long serialVersionUID = -8125939273116913981L; + private final ErrorMessage pardErrorMessage; + + public PardException() + { + pardErrorMessage = null; + } + + public PardException(int errorCode, Object... objs) + { + pardErrorMessage = ErrorMessage.throwMessage(errorCode, objs); + if (pardErrorMessage.getException() != null) { + this.initCause(pardErrorMessage.getException()); + } + } + + public PardException(ErrorMessage msg) + { + pardErrorMessage = msg; + if (pardErrorMessage.getException() != null) { + this.initCause(pardErrorMessage.getException()); + } + } + + public ErrorMessage getPardErrorMessage() + { + return pardErrorMessage; + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/SemanticException.java similarity index 88% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java rename to pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/SemanticException.java index 059b672..b6fbe42 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/semantic/SemanticException.java +++ b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/SemanticException.java @@ -1,6 +1,4 @@ -package cn.edu.ruc.iir.pard.semantic; - -import cn.edu.ruc.iir.pard.planner.ErrorMessage; +package cn.edu.ruc.iir.pard.commons.exception; /** * SemanticException @@ -9,7 +7,7 @@ * @author hagen * */ public class SemanticException - extends RuntimeException + extends PardException { /** * diff --git a/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/TaskSchedulerException.java b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/TaskSchedulerException.java new file mode 100644 index 0000000..1689217 --- /dev/null +++ b/pard-commons/src/main/java/cn/edu/ruc/iir/pard/commons/exception/TaskSchedulerException.java @@ -0,0 +1,25 @@ +package cn.edu.ruc.iir.pard.commons.exception; + +public class TaskSchedulerException + extends PardException +{ + /** + * + */ + private static final long serialVersionUID = 1L; + + public TaskSchedulerException() + { + super(); + } + + public TaskSchedulerException(ErrorMessage msg) + { + super(msg); + } + + public TaskSchedulerException(int errorCode, Object... objs) + { + super(errorCode, objs); + } +} diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/PlanNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/PlanNode.java index a33bd17..f4fe3db 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/PlanNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/PlanNode.java @@ -47,7 +47,7 @@ public void setChildren(PlanNode planNode, boolean left, boolean exists) if (childrenNum >= 2) { return; } - childrenNum++; + //childrenNum++; } if (left) { children[0] = planNode; @@ -55,6 +55,7 @@ public void setChildren(PlanNode planNode, boolean left, boolean exists) else { children[1] = planNode; } + childrenNum = (children[0] == null ? 0 : 1) + (children[1] == null ? 0 : 1); } public String getName() diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java index b3125e1..94c2382 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java @@ -11,8 +11,8 @@ public class TableScanNode extends InputNode { private static final long serialVersionUID = 2673717961909269975L; - private final String schema; - private final String table; + private String schema; + private String table; private String site; /* private Optional limit; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java index f6cf918..a6fd697 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeTaskHandler.java @@ -2,7 +2,6 @@ import cn.edu.ruc.iir.pard.executor.PardTaskExecutor; import cn.edu.ruc.iir.pard.executor.connector.Block; -import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.executor.connector.UnionTask; import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; @@ -44,7 +43,7 @@ public ExchangeTaskHandler(PardTaskExecutor executor) @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { - if (msg instanceof Task && !(msg instanceof UnionTask) && !(msg instanceof JoinTask)) { + if (msg instanceof Task && !(msg instanceof UnionTask)) { Task task = (Task) msg; Block block = executor.executeQuery(task); if (block.isSequenceHasNext()) { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ConditionComparator.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ConditionComparator.java index ebf80c4..1972ff4 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ConditionComparator.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ConditionComparator.java @@ -2,9 +2,9 @@ import cn.edu.ruc.iir.pard.catalog.Condition; import cn.edu.ruc.iir.pard.catalog.GddUtil; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; import cn.edu.ruc.iir.pard.commons.utils.DataType.DataTypeInt; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; -import cn.edu.ruc.iir.pard.semantic.SemanticException; import cn.edu.ruc.iir.pard.sql.tree.BooleanLiteral; import cn.edu.ruc.iir.pard.sql.tree.CharLiteral; import cn.edu.ruc.iir.pard.sql.tree.DoubleLiteral; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java index b3c657c..57fbe13 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/PardPlanner.java @@ -1,5 +1,6 @@ package cn.edu.ruc.iir.pard.planner; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; import cn.edu.ruc.iir.pard.planner.ddl.SchemaCreationPlan; import cn.edu.ruc.iir.pard.planner.ddl.SchemaDropPlan; import cn.edu.ruc.iir.pard.planner.ddl.SchemaShowPlan; @@ -12,7 +13,6 @@ import cn.edu.ruc.iir.pard.planner.dml.LoadPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; -import cn.edu.ruc.iir.pard.semantic.SemanticException; import cn.edu.ruc.iir.pard.sql.tree.CreateSchema; import cn.edu.ruc.iir.pard.sql.tree.CreateTable; import cn.edu.ruc.iir.pard.sql.tree.Delete; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java index 2bf9342..586a94b 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/Plan.java @@ -1,6 +1,7 @@ package cn.edu.ruc.iir.pard.planner; -import cn.edu.ruc.iir.pard.semantic.SemanticException; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; import cn.edu.ruc.iir.pard.sql.tree.Statement; /** diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaCreationPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaCreationPlan.java index 30d7c70..26ba31d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaCreationPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaCreationPlan.java @@ -1,9 +1,9 @@ package cn.edu.ruc.iir.pard.planner.ddl; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.sql.tree.CreateSchema; import cn.edu.ruc.iir.pard.sql.tree.Statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaDropPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaDropPlan.java index 515cb13..14ba8d9 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaDropPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaDropPlan.java @@ -1,9 +1,9 @@ package cn.edu.ruc.iir.pard.planner.ddl; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.sql.tree.DropSchema; import cn.edu.ruc.iir.pard.sql.tree.Statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaShowPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaShowPlan.java index 1048596..a80ec09 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaShowPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/SchemaShowPlan.java @@ -1,6 +1,6 @@ package cn.edu.ruc.iir.pard.planner.ddl; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.sql.tree.Statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableCreationPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableCreationPlan.java index 85f8390..9cd8a95 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableCreationPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableCreationPlan.java @@ -7,12 +7,12 @@ import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Site; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.sql.tree.ColumnDefinition; import cn.edu.ruc.iir.pard.sql.tree.CreateTable; import cn.edu.ruc.iir.pard.sql.tree.QualifiedName; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableDropPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableDropPlan.java index 836503a..9d20924 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableDropPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableDropPlan.java @@ -3,9 +3,9 @@ import cn.edu.ruc.iir.pard.catalog.Fragment; import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.sql.tree.DropTable; import cn.edu.ruc.iir.pard.sql.tree.QualifiedName; import cn.edu.ruc.iir.pard.sql.tree.Statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TablePlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TablePlan.java index dc11f01..74071a2 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TablePlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TablePlan.java @@ -1,6 +1,6 @@ package cn.edu.ruc.iir.pard.planner.ddl; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.planner.GDDPlan; import cn.edu.ruc.iir.pard.sql.tree.Statement; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableShowPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableShowPlan.java index e9cadb1..9541aaf 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableShowPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/TableShowPlan.java @@ -1,8 +1,8 @@ package cn.edu.ruc.iir.pard.planner.ddl; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.sql.tree.Identifier; import cn.edu.ruc.iir.pard.sql.tree.ShowTables; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/UsePlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/UsePlan.java index 56d9a3b..5e38080 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/UsePlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/ddl/UsePlan.java @@ -1,9 +1,9 @@ package cn.edu.ruc.iir.pard.planner.ddl; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.planner.GDDPlan; import cn.edu.ruc.iir.pard.sql.tree.Statement; import cn.edu.ruc.iir.pard.sql.tree.Use; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/DeletePlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/DeletePlan.java index 76ab845..b989be7 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/DeletePlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/DeletePlan.java @@ -4,9 +4,9 @@ import cn.edu.ruc.iir.pard.catalog.Fragment; import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/InsertPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/InsertPlan.java index 8a89407..ef25464 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/InsertPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/InsertPlan.java @@ -6,11 +6,11 @@ import cn.edu.ruc.iir.pard.catalog.GddUtil; import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; import cn.edu.ruc.iir.pard.planner.ConditionComparator; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.sql.tree.BooleanLiteral; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/LoadPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/LoadPlan.java index f553bf8..6c0dbec 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/LoadPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/LoadPlan.java @@ -6,11 +6,11 @@ import cn.edu.ruc.iir.pard.catalog.GddUtil; import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; import cn.edu.ruc.iir.pard.planner.ConditionComparator; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.sql.tree.Load; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan.java index 6c6cd5f..ae79d1f 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan.java @@ -3,6 +3,7 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.catalog.Fragment; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; @@ -17,7 +18,6 @@ import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; import cn.edu.ruc.iir.pard.executor.connector.node.UnionNode; import cn.edu.ruc.iir.pard.planner.EarlyStopPlan; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java index 04f3a67..579b2ef 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryPlan2.java @@ -5,6 +5,9 @@ import cn.edu.ruc.iir.pard.catalog.Fragment; import cn.edu.ruc.iir.pard.catalog.GddUtil; import cn.edu.ruc.iir.pard.catalog.Schema; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; @@ -20,10 +23,7 @@ import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; import cn.edu.ruc.iir.pard.executor.connector.node.UnionNode; import cn.edu.ruc.iir.pard.planner.EarlyStopPlan; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; -import cn.edu.ruc.iir.pard.planner.ErrorMessage.ErrCode; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; -import cn.edu.ruc.iir.pard.semantic.SemanticException; import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; import cn.edu.ruc.iir.pard.sql.expr.Expr; import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 4774f75..050a0b6 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -4,6 +4,8 @@ import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Site; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage.ErrCode; +import cn.edu.ruc.iir.pard.commons.exception.TaskSchedulerException; import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.communication.rpc.PardRPCClient; @@ -22,10 +24,12 @@ import cn.edu.ruc.iir.pard.executor.connector.LoadTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.QueryTask; +import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; -import cn.edu.ruc.iir.pard.executor.connector.UnionTask; +import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; import cn.edu.ruc.iir.pard.executor.connector.node.JoinNode; import cn.edu.ruc.iir.pard.executor.connector.node.NodeHelper; +import cn.edu.ruc.iir.pard.executor.connector.node.OutputNode; import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; @@ -43,7 +47,11 @@ import cn.edu.ruc.iir.pard.planner.dml.LoadPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; import cn.edu.ruc.iir.pard.server.PardStartupHook; +import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; import cn.edu.ruc.iir.pard.sql.expr.Expr; +import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; +import cn.edu.ruc.iir.pard.sql.expr.SingleExpr; +import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.tree.Expression; import cn.edu.ruc.iir.pard.sql.tree.Row; import com.google.common.collect.ImmutableList; @@ -282,19 +290,20 @@ public List generateTasks(Plan plan) } return null; } + public List processQueryPlan2(QueryPlan queryPlan) { logger.info("Task generation for query plan"); PlanNode planNode = queryPlan.getPlan(); + ProjectNode proj = null; PlanNode currentNode = planNode; UnionNode internalUnionNode = null; - ProjectNode projNode = null; while (currentNode != null) { if (currentNode instanceof UnionNode) { internalUnionNode = (UnionNode) currentNode; } if (currentNode instanceof ProjectNode) { - projNode = (ProjectNode) currentNode; + proj = (ProjectNode) currentNode; } currentNode = currentNode.getLeftChild(); } @@ -302,18 +311,8 @@ public List processQueryPlan2(QueryPlan queryPlan) return ImmutableList.of(new QueryTask(planNode)); } else { - return ImmutableList.copyOf(processUnionTask(internalUnionNode, queryPlan.getJobId(), new AtomicInteger(1))); + return ImmutableList.copyOf(processUnionTask(internalUnionNode, queryPlan.getJobId(), new AtomicInteger(1), proj)); } - /* - List tasks = new ArrayList<>(); - List unionChildren = internalUnionNode.getUnionChildren(); - int index = 0; - return ImmutableList.copyOf(tasks); - */ - } - public JoinTask joinTask(JoinNode node, String jobId, AtomicInteger jobOffset) - { - return null; } public QueryTask singleSiteTableTask(PlanNode node, String jobId, AtomicInteger jobOffset) { @@ -335,40 +334,251 @@ public QueryTask singleSiteTableTask(PlanNode node, String jobId, AtomicInteger task.setTaskId(jobId + "-" + jobOffset.addAndGet(1)); return task; } - public List processUnionTask(UnionNode union, String jobId, AtomicInteger jobOffset) + public static class Pointer + { + private T value; + + public Pointer(T value) + { + super(); + this.value = value; + } + public T getValue() + { + return value; + } + + public void setValue(T value) + { + this.value = value; + } + public boolean isEmpty() + { + return value == null; + } + } + public TableScanNode getTableScanNode(PlanNode node) + { + while (node != null) { + if (node instanceof TableScanNode) { + return (TableScanNode) node; + } + node = node.getLeftChild(); + } + return null; + } + public Expr getTableFilterNode(PlanNode node) + { + while (node != null) { + if (node instanceof FilterNode) { + return Expr.parse(((FilterNode) node).getExpression()); + } + node = node.getLeftChild(); + } + return new TrueExpr(); + } + //TODO: add projection. + public void processJoinTask(JoinNode node, Map joinMap, Map sendDataMap, List otherTask, Pointer joinTableName, Pointer dataTableName, String jobId, AtomicInteger jobOffset, ProjectNode proj) + { + PlanNode joinNode = null; + PlanNode dataNode = null; + TableScanNode joinTable = null; + TableScanNode dataTable = null; + Expr joinExpr = null; + Expr dataExpr = null; + + PlanNode left = node.getJoinChildren().get(0); + PlanNode right = node.getJoinChildren().get(1); + TableScanNode leftTable = getTableScanNode(left); + TableScanNode rightTable = getTableScanNode(right); + if (leftTable == null || rightTable == null) { + throw new TaskSchedulerException(ErrCode.UnSupportedQuery, " two or more table participate one join"); + } + if (joinTableName.isEmpty() || dataTableName.isEmpty()) { + joinTableName.setValue(leftTable.getTable()); + dataTableName.setValue(rightTable.getTable()); + } + if (leftTable.getTable().equals(joinTableName.getValue()) && rightTable.getTable().equals(dataTableName.getValue())) { + joinNode = left; + dataNode = right; + joinTable = leftTable; + dataTable = rightTable; + } + else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.getTable().equals(dataTableName.getValue()))) { + joinNode = right; + dataNode = left; + joinTable = rightTable; + dataTable = leftTable; + } + else { + throw new TaskSchedulerException(ErrCode.UnSupportedQuery, "below one union has more than one group of joins."); + } + joinExpr = getTableFilterNode(joinNode); + dataExpr = getTableFilterNode(dataNode); + SendDataTask dataTask = sendDataMap.get(dataTable.getSite()); + + Expr dataTaskExpr = extractTableExpr(joinExpr, dataExpr, dataTableName.getValue(), node); + Expr joinTaskSingleTableExpr = extractTableExpr(joinExpr, dataExpr, joinTableName.getValue(), node); + String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); + if (dataTask == null) { + dataTask = new SendDataTask(dataTable.getSite()); + dataTask.setSchemaName(dataTable.getTable()); + PlanNode p = new OutputNode(); + p.setChildren(NodeHelper.copyNode(dataNode), true, true); + dataTask.setNode(orFilterNode(p, dataTaskExpr)); + dataTask.getSiteExpression().put(joinTable.getSite(), dataTaskExpr.toExpression()); + dataTask.setTaskId(jobId + "_ " + jobOffset.addAndGet(1)); + dataTask.getTmpTableMap().put(joinTable.getSite(), tmpTableName); + sendDataMap.put(dataTable.getSite(), dataTask); + } + else { + PlanNode p = dataTask.getNode(); + dataTask.setNode(orFilterNode(p, dataTaskExpr)); + dataTask.getSiteExpression().put(joinTable.getSite(), dataTaskExpr.toExpression()); + dataTask.getTmpTableMap().put(joinTable.getSite(), tmpTableName); + } + JoinTask joinTask = joinMap.get(joinTable.getSite()); + if (joinTask == null) { + //Do sth. + PlanNode p = NodeHelper.copyNode(proj); + JoinNode join = new JoinNode(); + p.setChildren(join, true, true); + join.getJoinSet().addAll(node.getJoinSet()); + join.getExprList().addAll(node.getExprList()); + //TODO: add children. + join.addJoinChild(orFilterNode(NodeHelper.copyNode(joinNode), joinTaskSingleTableExpr)); + PlanNode dataCopy = NodeHelper.copyNode(dataNode); + PlanNode tmp = dataCopy; + if (dataCopy instanceof TableScanNode) { + TableScanNode scan = (TableScanNode) dataCopy; + dataCopy = new TableScanNode(scan.getSchema(), tmpTableName, joinTable.getSite()); + } + else { + while (tmp.hasChildren()) { + if (tmp.getLeftChild() instanceof TableScanNode) { + TableScanNode scan = (TableScanNode) tmp.getLeftChild(); + scan = new TableScanNode(scan.getSchema(), tmpTableName, joinTable.getSite()); + tmp.setChildren(scan, true, false); + break; + } + tmp = tmp.getLeftChild(); + } + } + join.addJoinChild(dataCopy); + joinTask = new JoinTask(joinTable.getSite()); + joinTask.setTmpTableName(tmpTableName); + joinTask.setTaskId(jobId + "_" + jobOffset.addAndGet(1)); + joinTask.setNode(p); + joinMap.put(joinTable.getSite(), joinTask); + } + else { + PlanNode p = joinTask.getNode(); + p = NodeHelper.copyNode(p); + while (p.hasChildren()) { + if (p.getLeftChild() instanceof JoinNode) { + JoinNode jnode = (JoinNode) p.getLeftChild(); + PlanNode pnode = jnode.getJoinChildren().get(0); + pnode = orFilterNode(NodeHelper.copyNode(p), joinTaskSingleTableExpr); + jnode.getJoinChildren().set(0, pnode); + break; + } + p = p.getLeftChild(); + } + joinTask.setNode(p); + } + } + public PlanNode orFilterNode(PlanNode node, Expr filterExpr) + { + node = NodeHelper.copyNode(node); + PlanNode root = node; + while (node.hasChildren()) { + if (node.getLeftChild() instanceof FilterNode) { + FilterNode children = (FilterNode) node.getLeftChild(); + Expr e1 = Expr.parse(children.getExpression()); + e1 = Expr.or(e1, filterExpr, LogicOperator.AND); + children.setExpression(e1.toExpression()); + return root; + } + node = node.getLeftChild(); + } + return root; + } + public Expr extractTableExpr(Expr joinExpr, Expr dataExpr, String tableName, JoinNode node) + { + Expr e = Expr.and(joinExpr, dataExpr, LogicOperator.AND); + if (node.getExprList().size() == 0) { + return new TrueExpr(); + } + SingleExpr se = (SingleExpr) Expr.parse(node.getExprList().get(0)); + ColumnItem lv = (ColumnItem) se.getLvalue(); + ColumnItem rv = (ColumnItem) se.getRvalue(); + if (lv.getTableName().equalsIgnoreCase(tableName)) { + Expr opt = Expr.replace(e, rv, lv); + opt = Expr.extractTableFilter(opt, tableName); + return Expr.optimize(opt, LogicOperator.AND); + } + else if (rv.getTableName().equalsIgnoreCase(tableName)) { + Expr opt = Expr.replace(e, lv, rv); + opt = Expr.extractTableFilter(opt, tableName); + return Expr.optimize(opt, LogicOperator.AND); + } + else { + throw new TaskSchedulerException(ErrCode.ParseError, "expression that can replace"); + } + } + public List processUnionTask(UnionNode union, String jobId, AtomicInteger jobOffset, ProjectNode proj) { - List availableSite = new ArrayList(); - availableSite.addAll(siteDao.listNodes().keySet()); - int rand = (int) (Math.random() * availableSite.size() * 2); - rand = rand % availableSite.size(); - rand = 0; List tasks = new ArrayList<>(); List unionChildren = union.getUnionChildren(); + //List sendDataList = new ArrayList(); + //List joinList = new ArrayList(); + List otherTask = new ArrayList(); //int index = jobOffset; - List unionTasks = new ArrayList<>(); + Map sendDataMap = new HashMap(); + Map joinMap = new HashMap(); + Pointer joinTableName = new Pointer(null); + Pointer dataTableName = new Pointer(null); for (PlanNode childNode : unionChildren) { //union.setChildren(childNode, true, false); PlanNode node = childNode; while (node != null) { if (node instanceof TableScanNode) { - Task tableTask = singleSiteTableTask(childNode, jobId, jobOffset); + PlanNode p = new OutputNode(); + PlanNode root = p; + if (!(childNode instanceof ProjectNode)) { + PlanNode projection = NodeHelper.copyNode(proj); + if (projection != null) { + p.setChildren(projection, true, true); + p = projection; + } + } + p.setChildren(childNode, true, true); + root = NodeHelper.copyNode(root); + Task tableTask = singleSiteTableTask(root, jobId, jobOffset); if (tableTask != null) { - unionTasks.add(tableTask); + otherTask.add(tableTask); } break; } + else if (node instanceof JoinNode && ((JoinNode) node).getJoinChildren().size() == 2) { + //需要收集task的site,确定主表从表 + processJoinTask((JoinNode) node, joinMap, sendDataMap, otherTask, joinTableName, dataTableName, jobId, jobOffset, proj); + } + else if (node instanceof JoinNode && ((JoinNode) node).getJoinChildren().size() == 1) { + node = ((JoinNode) node).getJoinChildren().get(0); + //don't need to do anything. + } else if (node instanceof JoinNode) { - Task joinTask = joinTask((JoinNode) node, jobId, jobOffset); - if (joinTask != null) { - unionTasks.add(joinTask); - } + throw new TaskSchedulerException(ErrCode.UnSupportedQuery, " join node has more than one children"); } node = node.getLeftChild(); } } - UnionTask unionTask = new UnionTask(availableSite.get(rand)); - unionTask.setWaitTask(unionTasks); - tasks.add(unionTask); + tasks.addAll(otherTask); + tasks.addAll(sendDataMap.values()); + // tasks.addAll(joinMap.values()); + tasks.addAll(joinMap.values()); + //joinMap.values().forEach(tasks::add); return tasks; } public List processQueryPlan(QueryPlan queryPlan) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index 6e15a3b..569c7de 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -1,15 +1,16 @@ package cn.edu.ruc.iir.pard.server; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.commons.exception.ParsingException; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; +import cn.edu.ruc.iir.pard.commons.exception.TaskSchedulerException; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.Task; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.scheduler.Job; import cn.edu.ruc.iir.pard.scheduler.JobScheduler; import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; -import cn.edu.ruc.iir.pard.semantic.SemanticException; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Statement; @@ -134,11 +135,18 @@ public PardResultSet executeQuery(String sql) jobScheduler.updateJob(job.getJobId()); logger.info("Created plan for job[" + job.getJobId() + "], job state: " + job.getJobState()); - List tasks = taskScheduler.generateTasks(plan); + List tasks = null; + String taskMsg = null; + try { + tasks = taskScheduler.generateTasks(plan); + } + catch (TaskSchedulerException e) { + taskMsg = e.getPardErrorMessage().toString(); + } if (tasks == null) { jobScheduler.failJob(job.getJobId()); logger.log(Level.WARNING, "Cannot create tasks for sql: " + sql); - return new PardResultSet(PardResultSet.ResultStatus.SCHEDULING_ERR); + return new PardResultSet(PardResultSet.ResultStatus.SCHEDULING_ERR, taskMsg); } if (!tasks.isEmpty()) { tasks.forEach(job::addTask); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/catelog/CatelogTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/catelog/CatelogTest.java index 0d99f6b..7aa09e7 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/catelog/CatelogTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/catelog/CatelogTest.java @@ -3,10 +3,10 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.catalog.Schema; import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.SchemaDao; import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.TableCreationPlan; diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java index 2e25f53..358d6c5 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/JoinSemantic.java @@ -1,5 +1,6 @@ package cn.edu.ruc.iir.pard.semantic; +import cn.edu.ruc.iir.pard.commons.exception.SemanticException; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan2; diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java index 90543e0..786aa61 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/semantic/SemanticAnalysisTest.java @@ -1,5 +1,6 @@ package cn.edu.ruc.iir.pard.semantic; +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; import cn.edu.ruc.iir.pard.etcd.dao.TableDao; import cn.edu.ruc.iir.pard.executor.connector.node.AggregationNode; import cn.edu.ruc.iir.pard.executor.connector.node.DistinctNode; @@ -14,7 +15,6 @@ import cn.edu.ruc.iir.pard.executor.connector.node.SortNode; import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; import cn.edu.ruc.iir.pard.executor.connector.node.UnionNode; -import cn.edu.ruc.iir.pard.planner.ErrorMessage; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.TableCreationPlan; diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 10b4911..73c84e0 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -305,6 +305,15 @@ public static Expr and(Expr e1, Expr e2, LogicOperator opt) Expr and = optimize(comp, opt); return and; } + public static Expr or(Expr e1, Expr e2, LogicOperator opt) + { + CompositionExpr comp = new CompositionExpr(LogicOperator.OR); + comp.getConditions().add(e1); + comp.getConditions().add(e2); + comp = PushDownLaw.formatExpr(comp); + Expr and = optimize(comp, opt); + return and; + } public static Expr parse(List conditions, String tableName) { if (conditions.isEmpty()) { From 0046eae43ba2976f41479f3b6d8878a99c959be4 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Mon, 15 Jan 2018 21:33:34 +0800 Subject: [PATCH 27/75] replace with the new task generation. --- .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 050a0b6..ce883e0 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -282,7 +282,7 @@ public List generateTasks(Plan plan) if (plan instanceof QueryPlan) { QueryPlan queryPlan = (QueryPlan) plan; try { - return processQueryPlan(queryPlan); + return processQueryPlan2(queryPlan); } catch (Exception e) { e.printStackTrace(); From 09653cac93be9f8b3fac947c9e204a95859ba39c Mon Sep 17 00:00:00 2001 From: withchencheng Date: Mon, 15 Jan 2018 21:49:25 +0800 Subject: [PATCH 28/75] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E6=A6=82=E8=A6=81?= =?UTF-8?q?=EF=BC=8C=E5=BE=85=E5=A1=AB=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/pard-report.tex | 133 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 3 deletions(-) diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 21ca7f8..752d47f 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -128,6 +128,9 @@ \section{总体设计} \label{fig:node1} \end{figure} +\subsection{启动/关闭流程} +package cn.edu.ruc.iir.pard.server; +class PardServer \subsection{时间安排} 如图\ref{fig:tl}。 @@ -138,21 +141,145 @@ \subsection{时间安排} \caption{时间安排timeline} \label{fig:tl} \end{figure} -在国栋师兄的英明领导下,我们pard小组稳中有进,时间安排还算合理。 + + + \section{各模块详细设计} -\subsection{SQL Engine} -\subsection{Execution Engine} +\subsection{Execution Flow} +package cn.edu.ruc.iir.pard.scheduler; + +job + +ABORTED(0), BEGIN(1), PARSING(2), PLANNING(3), SCHEDULING(4), EXECUTING(5), DONE(6), FAILED(-1); + + +getNext() 状态转换 + + + +记录各个状态的job供用户查看。 +private final List doneJobs; +private final List abortedJobs; +private final List failedJobs; + + +错误 +cn.edu.ruc.iir.pard.planner.ErrorMessage + + + +=============== +package cn.edu.ruc.iir.pard.planner.ddl; +dml 优化具体 韩涵 + +\subsubsection{Insert/Delete 流程} +RPC + +\subsubsection{Load 流程} +返回值比较少,返回状态 + +\subsubsection{Select 流程} + + +\subsubsection{Join 流程} + \subsection{Communication} +通讯任务依据数据传输量的大小,和任务本身性质,可以自然的分为两类: + + +pipeline Netty inbound outbound + \subsection{Catalog} +元数据模型 etcd + + +watch机制 + + + +\subsection{Parser} +语义语法解析 +Antlrv4 + + +\begin{lstlisting} +statement +: query #statementDefault +| USE schema=identifier #use +| CREATE SCHEMA (IF NOT EXISTS)? qualifiedName #createSchema +| DROP SCHEMA (IF EXISTS)? qualifiedName (CASCADE | RESTRICT)? #dropSchema +| ALTER SCHEMA qualifiedName RENAME TO identifier #renameSchema +| CREATE TABLE (IF NOT EXISTS)? qualifiedName +tableElementPart +(',' tableElementPart)* +partitionOps? #createTable +| CREATE INDEX indexName=identifier ON +indexTbl=qualifiedName '(' identifier (',' identifier)*')' #createIndex +| DROP INDEX indexName=identifier #dropIndex +| DROP TABLE (IF EXISTS)? qualifiedName #dropTable +| INSERT INTO qualifiedName columnAliases? query #insertInto +| DELETE FROM qualifiedName (WHERE booleanExpression)? #delete +| ALTER TABLE from=qualifiedName RENAME TO to=qualifiedName #renameTable +| ALTER TABLE tableName=qualifiedName +RENAME COLUMN from=identifier TO to=identifier #renameColumn +| ALTER TABLE tableName=qualifiedName +DROP COLUMN column=qualifiedName #dropColumn +| ALTER TABLE tableName=qualifiedName +ADD COLUMN column=columnDefinition #addColumn +| GRANT +(privilege (',' privilege)* | ALL PRIVILEGES) +ON TABLE? qualifiedName TO grantee=identifier +(WITH GRANT OPTION)? #grant +| REVOKE +(GRANT OPTION FOR)? +(privilege (',' privilege)* | ALL PRIVILEGES) +ON TABLE? qualifiedName FROM grantee=identifier #revoke +| SHOW GRANTS +(ON TABLE? qualifiedName)? #showGrants +| EXPLAIN ANALYZE? VERBOSE? +('(' explainOption (',' explainOption)* ')')? statement #explain +| SHOW STATS (FOR | ON) qualifiedName #showStats +| SHOW STATS FOR '(' querySpecification ')' #showStatsForQuery +| DESCRIBE qualifiedName #showColumns +| DESC qualifiedName #showColumns +| START TRANSACTION (transactionMode (',' transactionMode)*)? #startTransaction +| COMMIT WORK? #commit +| ROLLBACK WORK? #rollback +| SHOW PARTITIONS (FROM | IN) qualifiedName #showPartitions +| SHOW SCHEMAS #showSchemas +| SHOW TABLES (FROM schemaName=identifier)? #showTables +| LOAD path=identifier INTO table=qualifiedName #load +; +\end{lstlisting} + +支持基本的Select语句,如 + +select * from ASG where eno<’E1020’ and eno>=’E0990’ + + +expression and or not + + + + + +\subsection{SQL Optimization} +package cn.edu.ruc.iir.pard.server.PardQueryHandler; + + + + \subsection{Project Dependency Management} + + \section{任务分工及小结} \subsection{金国栋的小结} From 796e3286c4e92e323308a5c73456fcb2b5ab121e Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Mon, 15 Jan 2018 22:28:23 +0800 Subject: [PATCH 29/75] half in the way of sendDataTask --- pard-connector-postgresql/pom.xml | 1 - .../postgresql/PostgresConnector.java | 224 ++++++++++++++++++ .../connector/postgresql/TestConnector.java | 14 ++ .../iir/pard/executor/connector/JoinTask.java | 9 + .../pard/executor/connector/SendDataTask.java | 14 +- .../executor/connector/node/JoinNode.java | 3 + .../pard/exchange/PardFileExchangeServer.java | 1 + 7 files changed, 263 insertions(+), 3 deletions(-) diff --git a/pard-connector-postgresql/pom.xml b/pard-connector-postgresql/pom.xml index 331bc0b..c42d2d5 100644 --- a/pard-connector-postgresql/pom.xml +++ b/pard-connector-postgresql/pom.xml @@ -24,7 +24,6 @@ cn.edu.ruc.iir pard-catalog - com.zaxxer HikariCP diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 8254ea6..b85a6b0 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -2,8 +2,11 @@ import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.commons.config.PardUserConfiguration; +import cn.edu.ruc.iir.pard.commons.memory.Row; import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; +//import cn.edu.ruc.iir.pard.exchange.PardExchangeClient; +//import cn.edu.ruc.iir.pard.exchange.PardFileExchangeClient; import cn.edu.ruc.iir.pard.executor.connector.Connector; import cn.edu.ruc.iir.pard.executor.connector.CreateSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.CreateTableTask; @@ -11,9 +14,11 @@ import cn.edu.ruc.iir.pard.executor.connector.DropSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.DropTableTask; import cn.edu.ruc.iir.pard.executor.connector.InsertIntoTask; +import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.LoadTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.QueryTask; +import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; import cn.edu.ruc.iir.pard.executor.connector.node.LimitNode; @@ -21,20 +26,27 @@ import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; import cn.edu.ruc.iir.pard.executor.connector.node.SortNode; import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; +import cn.edu.ruc.iir.pard.sql.tree.Expression; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; +import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; +import java.sql.Types; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Logger; /** @@ -97,6 +109,12 @@ public PardResultSet execute(Task task) if (task instanceof DeleteTask) { return executeDelete(conn, (DeleteTask) task); } + if (task instanceof JoinTask) { + return executeJoin(conn, (JoinTask) task); + } + if (task instanceof SendDataTask) { + return executeSendDataTask(conn, (SendDataTask) task); + } } catch (SQLException e) { logger.info("GET CONNECTION FAILED"); @@ -511,6 +529,212 @@ private PardResultSet executeDelete(Connection conn, DeleteTask task) return PardResultSet.execErrResultSet; } + private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) + { + String schema = task.getSchemaName(); + String table = null; + try { + Statement statement = conn.createStatement(); + StringBuilder querySQL = new StringBuilder("select "); + PlanNode rootNode = task.getNode(); + List nodeList = new ArrayList<>(); + int nodeListCursor = 0; + FilterNode filterNode = null; + ProjectNode projectNode = null; + SortNode sortNode = null; + LimitNode limitNode = null; + boolean isFilter = false; + boolean isProject = false; + boolean isSort = false; + boolean isLimit = false; + nodeList.add(rootNode); + nodeListCursor++; + while (nodeList.get(nodeListCursor - 1).hasChildren()) { + nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); + nodeListCursor++; + } + for (int i = nodeListCursor - 1; i >= 0; i--) { + if (nodeList.get(i) instanceof TableScanNode) { + table = ((TableScanNode) nodeList.get(i)).getTable(); + schema = ((TableScanNode) nodeList.get(i)).getSchema(); + continue; + } + + if (nodeList.get(i) instanceof FilterNode) { + filterNode = (FilterNode) nodeList.get(i); + isFilter = true; + continue; + } + + if (nodeList.get(i) instanceof ProjectNode) { + projectNode = (ProjectNode) nodeList.get(i); + isProject = true; + continue; + } + + if (nodeList.get(i) instanceof SortNode) { + sortNode = (SortNode) nodeList.get(i); + isSort = true; + continue; + } + + if (nodeList.get(i) instanceof LimitNode) { + limitNode = (LimitNode) nodeList.get(i); + isLimit = true; + } + } + if (isProject) { + List columns = projectNode.getColumns(); + for (Column column : columns) { + querySQL.append(column.getColumnName()); + querySQL.append(","); + } + querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); + } + else { + querySQL.append(" *"); + } + querySQL.append(" from "); + querySQL.append(schema); + querySQL.append("."); + querySQL.append(table); + if (isFilter) { + querySQL.append(" where ").append(filterNode.getExpression()).append(" "); + } + if (isSort) { + querySQL.append("order by"); + List columns = sortNode.getColumns(); + for (Column column : columns) { + querySQL.append(" "); + querySQL.append(column.getColumnName()); + querySQL.append(","); + } + querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); + } + if (isLimit) { + querySQL.append(" limit "); + querySQL.append(limitNode.getLimitNum()); + } + + logger.info("Postgres connector: " + querySQL); + ResultSet rs = statement.executeQuery(querySQL.toString()); + + Map siteExpression = task.getSiteExpression(); // site -> Expression + Map tmpTableMap = task.getTmpTableMap(); // site -> tmpTableName + + boolean flag = dispense(siteExpression, tmpTableMap, rs); + if (flag == true) { + conn.close(); + return PardResultSet.okResultSet; + } + else { + conn.close(); + return PardResultSet.execErrResultSet; + } + } + catch (SQLException e) { + e.printStackTrace(); + } + finally { + try { + conn.close(); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + return PardResultSet.execErrResultSet; + } + + private PardResultSet executeJoin(Connection conn, JoinTask task) + { + return PardResultSet.execErrResultSet; + } + + private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs) + { + boolean isSucceeded; + Map localWriter = new HashMap(); // site -> local BufferedWirter + for (String site : siteExpression.keySet()) { + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/dev/shm/" + site.toString() + tmpTableMap.get(site)))); + localWriter.put(site, bw); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + try { + ResultSetMetaData rsmd = rs.getMetaData(); + int colNum = rsmd.getColumnCount(); + while (rs.next()) { + RowConstructor rowConstructor = new RowConstructor(); + List colTypes = new ArrayList<>(); + for (int i = 0; i < colNum; i++) { + switch (rsmd.getColumnType(i + 1)) { + case Types.CHAR: + rowConstructor.appendString(rs.getString(i + 1)); + colTypes.add(DataType.CHAR.getType()); + break; + case Types.VARCHAR: + rowConstructor.appendString(rs.getString(i + 1)); + colTypes.add(DataType.VARCHAR.getType()); + break; + case Types.DATE: + rowConstructor.appendString(rs.getString(i + 1).toString()); + colTypes.add(DataType.DATE.getType()); + break; + case Types.INTEGER: + rowConstructor.appendInt(rs.getInt(i + 1)); + colTypes.add(DataType.INT.getType()); + break; + case Types.FLOAT: + rowConstructor.appendFloat(rs.getFloat(i + 1)); + colTypes.add(DataType.FLOAT.getType()); + break; + case Types.DOUBLE: + rowConstructor.appendDouble(rs.getDouble(i + 1)); + colTypes.add(DataType.DOUBLE.getType()); + break; + default: + break; + } + } + Row row = rowConstructor.build(); + for (Map.Entry entry : siteExpression.entrySet()) { + boolean ifTrue = compare(entry.getValue(), row); + if (ifTrue) { + localWriter.get(entry.getKey()).write(rowConstructor.printRow(row, colTypes) + "\n"); + } + } + } + + for (Map.Entry entry : localWriter.entrySet()) { + entry.getValue().flush(); + entry.getValue().close(); + } + + isSucceeded = true; + return isSucceeded; + } + catch (SQLException e) { + e.printStackTrace(); + isSucceeded = false; + } + catch (IOException e) { + e.printStackTrace(); + isSucceeded = false; + } + return isSucceeded; + } + + private boolean compare(Expression expression, Row row) + { + // TODO it's gonna be replaced + return false; + } + private String getTypeString(int type, int length) { if (type == DataType.INT.getType()) { diff --git a/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java b/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java index 25a625d..93d89fa 100644 --- a/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java +++ b/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java @@ -199,4 +199,18 @@ public void testLoad() LoadTask loadTask = new LoadTask("pard", "emp", ImmutableList.of("/Users/Jelly/Desktop/emp.tsv")); connector.execute(loadTask); } + + @Test + public void testJoin() + { + PardUserConfiguration configuration = PardUserConfiguration.INSTANCE(); + Connector connector = PostgresConnector.INSTANCE(); + } + + @Test + public void testSendData() + { + PardUserConfiguration configuration = PardUserConfiguration.INSTANCE(); + Connector connector = PostgresConnector.INSTANCE(); + } } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java index 68aeb21..9664666 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/JoinTask.java @@ -12,44 +12,53 @@ public class JoinTask private String taskId; private PlanNode node; private String tmpTableName; + public JoinTask(String site) { super(site); this.tmpTableName = null; this.node = null; } + public JoinTask(String site, PlanNode node) { super(site); this.node = node; this.tmpTableName = null; } + public JoinTask(String site, PlanNode node, String tmpTableName) { super(site); this.node = node; this.tmpTableName = tmpTableName; } + public String getTaskId() { return taskId; } + public void setTaskId(String taskId) { this.taskId = taskId; } + public PlanNode getNode() { return node; } + public void setNode(PlanNode node) { this.node = node; } + public String getTmpTableName() { return tmpTableName; } + public void setTmpTableName(String tmpTableName) { this.tmpTableName = tmpTableName; diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java index 8b4e7b9..de9ee75 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/SendDataTask.java @@ -16,50 +16,60 @@ public class SendDataTask private String taskId; private String schemaName; private PlanNode node; - private Map siteExpression; - private Map tmpTableMap; + private Map siteExpression; // site -> Expression + private Map tmpTableMap; // site -> tmpTableName public SendDataTask(String site) { super(site); siteExpression = new HashMap(); tmpTableMap = new HashMap(); } + public String getTaskId() { return taskId; } + public void setTaskId(String taskId) { this.taskId = taskId; } + public String getSchemaName() { return schemaName; } + public void setSchemaName(String schemaName) { this.schemaName = schemaName; } + public PlanNode getNode() { return node; } + public void setNode(PlanNode node) { this.node = node; } + public Map getSiteExpression() { return siteExpression; } + public void setSiteExpression(Map siteExpression) { this.siteExpression = siteExpression; } + public Map getTmpTableMap() { return tmpTableMap; } + public void setTmpTableMap(Map tmpTableMap) { this.tmpTableMap = tmpTableMap; diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java index 0f62461..099194b 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/JoinNode.java @@ -64,14 +64,17 @@ public String toString() .add("exprList", this.exprList) .toString(); } + public String getOtherInfo() { return otherInfo; } + public void setOtherInfo(String otherInfo) { this.otherInfo = otherInfo; } + public List getExprList() { return exprList; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeServer.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeServer.java index 01cfefe..0843949 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeServer.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeServer.java @@ -21,6 +21,7 @@ * * @author guodong */ + public class PardFileExchangeServer implements Runnable { From 6c92de482f7219f54fad2475cfd1122904f1278a Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 00:04:34 +0800 Subject: [PATCH 30/75] add sth. --- .../ruc/iir/pard/scheduler/TaskScheduler.java | 99 +++++++++++-------- .../iir/pard/scheduler/TaskSchedulerTest.java | 77 ++++++++++++++- 2 files changed, 134 insertions(+), 42 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index ce883e0..3bfce0a 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -477,6 +477,8 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge while (p.hasChildren()) { if (p.getLeftChild() instanceof JoinNode) { JoinNode jnode = (JoinNode) p.getLeftChild(); + System.out.println(); + //System.out.println(jnode.getJoinChildren().size() + "aaaaaaaaa"); PlanNode pnode = jnode.getJoinChildren().get(0); pnode = orFilterNode(NodeHelper.copyNode(p), joinTaskSingleTableExpr); jnode.getJoinChildren().set(0, pnode); @@ -489,7 +491,9 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge } public PlanNode orFilterNode(PlanNode node, Expr filterExpr) { + //System.out.println(node == null); node = NodeHelper.copyNode(node); + //System.out.println(node == null); PlanNode root = node; while (node.hasChildren()) { if (node.getLeftChild() instanceof FilterNode) { @@ -500,6 +504,9 @@ public PlanNode orFilterNode(PlanNode node, Expr filterExpr) return root; } node = node.getLeftChild(); + if (node == null) { + break; + } } return root; } @@ -649,6 +656,58 @@ public TaskState executeQueryTask(List tasks, boolean isLocal) } return null; } + public PardResultSet executeQueryPlanJob(Job job, QueryPlan plan, List tasks) + { + logger.info("Executing query tasks for job[" + job.getJobId() + "]"); + PardResultSet resultSet = new PardResultSet(); + Map taskMap = new HashMap<>(); + BlockingQueue blocks = new LinkedBlockingQueue<>(); + List sendDataTask = new ArrayList(); + List joinTask = new ArrayList(); + for (Task task : tasks) { + if (task instanceof SendDataTask) { + sendDataTask.add((SendDataTask) task); + continue; + } + if (task instanceof JoinTask) { + joinTask.add((JoinTask) task); + continue; + } + String site = task.getSite(); + String taskId = task.getTaskId(); + Site nodeSite = siteDao.listNodes().get(site); + if (nodeSite == null) { + logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); + return PardResultSet.execErrResultSet; + } + PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); + client.connect(task, blocks); + taskMap.put(taskId, task); + } + // wait for all tasks done + while (!taskMap.isEmpty()) { + Block block = null; + try { + block = blocks.poll(8000, TimeUnit.MILLISECONDS); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + if (block == null) { + logger.info("Waiting for more blocks..."); + continue; + } + resultSet.addBlock(block); + logger.info("Added block " + block.getSequenceId() + ", num of rows: " + block.getRows().size()); + if (!block.isSequenceHasNext()) { + String taskId = block.getTaskId(); + taskMap.remove(taskId); + logger.info("Task " + taskId + " done."); + } + } + plan.afterExecution(true); + return resultSet; + } // todo this sucks, full of if else public PardResultSet executeJob(Job job) { @@ -745,45 +804,7 @@ public PardResultSet executeJob(Job job) // this is a simplest implementation // todo collected result set form exchange client shall be passed on for next query stage if (plan instanceof QueryPlan) { - logger.info("Executing query tasks for job[" + job.getJobId() + "]"); - PardResultSet resultSet = new PardResultSet(); - Map taskMap = new HashMap<>(); - BlockingQueue blocks = new LinkedBlockingQueue<>(); - for (Task task : tasks) { - String site = task.getSite(); - String taskId = task.getTaskId(); - Site nodeSite = siteDao.listNodes().get(site); - if (nodeSite == null) { - logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); - return PardResultSet.execErrResultSet; - } - PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); - client.connect(task, blocks); - taskMap.put(taskId, task); - } - // wait for all tasks done - while (!taskMap.isEmpty()) { - Block block = null; - try { - block = blocks.poll(8000, TimeUnit.MILLISECONDS); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - if (block == null) { - logger.info("Waiting for more blocks..."); - continue; - } - resultSet.addBlock(block); - logger.info("Added block " + block.getSequenceId() + ", num of rows: " + block.getRows().size()); - if (!block.isSequenceHasNext()) { - String taskId = block.getTaskId(); - taskMap.remove(taskId); - logger.info("Task " + taskId + " done."); - } - } - plan.afterExecution(true); - return resultSet; + return executeQueryPlanJob(job, (QueryPlan) plan, tasks); } // delete diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java index 5337af0..5b59eab 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/scheduler/TaskSchedulerTest.java @@ -1,12 +1,20 @@ package cn.edu.ruc.iir.pard.scheduler; +import cn.edu.ruc.iir.pard.catalog.Column; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.scheduler.JobScheduler.JobState; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; +import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; +import cn.edu.ruc.iir.pard.sql.tree.Expression; +import cn.edu.ruc.iir.pard.sql.tree.LogicalBinaryExpression; import cn.edu.ruc.iir.pard.sql.tree.Statement; import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; +import net.sf.json.processors.JsonValueProcessor; import org.testng.annotations.Test; import java.util.List; @@ -17,17 +25,80 @@ public class TaskSchedulerTest @Test public void test2() { - String sql = "select * from book.publisher"; + UsePlan.setCurrentSchema("book"); + String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); plan.setJobId("aa"); List task = TaskScheduler.INSTANCE().generateTasks(plan); - System.out.println(JSONArray.fromObject(task).toString(1)); + JsonConfig config = new JsonConfig(); + config.setExcludes(new String[]{"rightChild"}); + config.registerJsonValueProcessor(Expression.class, new JsonValueProcessor(){ + @Override + public Object processArrayValue(Object arg0, JsonConfig arg1) + { + return arg0.toString(); + } + + @Override + public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) + { + return arg1.toString(); + } + }); + config.registerJsonValueProcessor(ComparisonExpression.class, new JsonValueProcessor(){ + @Override + public Object processArrayValue(Object arg0, JsonConfig arg1) + { + return arg0.toString(); + } + + @Override + public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) + { + return arg1.toString(); + } + }); + config.registerJsonValueProcessor(LogicalBinaryExpression.class, new JsonValueProcessor(){ + @Override + public Object processArrayValue(Object arg0, JsonConfig arg1) + { + return arg0.toString(); + } + + @Override + public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) + { + return arg1.toString(); + } + }); + config.registerJsonValueProcessor(Column.class, new JsonValueProcessor(){ + @Override + public Object processArrayValue(Object arg0, JsonConfig arg1) + { + JSONObject obj = new JSONObject(); + Column col = (Column) arg0; + obj.put("columnName", col.getColumnName()); + obj.put("tableName", col.getTableName()); + return obj; + } + + @Override + public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) + { + JSONObject obj = new JSONObject(); + Column col = (Column) arg1; + obj.put("columnName", col.getColumnName()); + obj.put("tableName", col.getTableName()); + return obj; + } + }); + System.out.println(JSONArray.fromObject(task, config).toString(1)); Job job = JobScheduler.INSTANCE().newJob(); task.forEach(job::addTask); job.setJobState(JobState.EXECUTING); job.setPlan(plan); - TaskScheduler.INSTANCE().executeJob(job); + // TaskScheduler.INSTANCE().executeJob(job); } } From c5a81fd48fc972125c8dd5475df174776a8a7b89 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 00:10:52 +0800 Subject: [PATCH 31/75] put the client to the connector. --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 2 -- .../java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java | 0 .../cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java | 0 .../java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java | 0 .../cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java | 0 5 files changed, 2 deletions(-) rename {pard-main => pard-connector}/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java (100%) rename {pard-main => pard-connector}/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java (100%) rename {pard-main => pard-connector}/src/main/java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java (100%) rename {pard-main => pard-connector}/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java (100%) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index b85a6b0..008b6e5 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -5,8 +5,6 @@ import cn.edu.ruc.iir.pard.commons.memory.Row; import cn.edu.ruc.iir.pard.commons.utils.DataType; import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; -//import cn.edu.ruc.iir.pard.exchange.PardExchangeClient; -//import cn.edu.ruc.iir.pard.exchange.PardFileExchangeClient; import cn.edu.ruc.iir.pard.executor.connector.Connector; import cn.edu.ruc.iir.pard.executor.connector.CreateSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.CreateTableTask; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java similarity index 100% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java rename to pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeBlockHandler.java diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java similarity index 100% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java rename to pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java similarity index 100% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java rename to pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/PardExchangeClient.java diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java similarity index 100% rename from pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java rename to pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/PardFileExchangeClient.java From 1475f5eeb2019aa65bc2a19f325c09b39e551b6f Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 01:30:22 +0800 Subject: [PATCH 32/75] join task. --- .../iir/pard/scheduler/QueryJobExecutor.java | 140 ++++++++++++++++++ .../ruc/iir/pard/scheduler/TaskScheduler.java | 9 +- .../iir/pard/server/PardQueryHandlerTest.java | 37 +++++ 3 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java create mode 100644 pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java new file mode 100644 index 0000000..fa24c75 --- /dev/null +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java @@ -0,0 +1,140 @@ +package cn.edu.ruc.iir.pard.scheduler; + +import cn.edu.ruc.iir.pard.catalog.Site; +import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; +import cn.edu.ruc.iir.pard.exchange.PardExchangeClient; +import cn.edu.ruc.iir.pard.executor.connector.Block; +import cn.edu.ruc.iir.pard.executor.connector.JoinTask; +import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; +import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; +import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.planner.Plan; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class QueryJobExecutor +{ + private Job queryJob; + private Plan plan = null; + private List tasks = null; + private List sendDataTask = new ArrayList(); + private List joinTask = new ArrayList(); + private List otherTask = new ArrayList(); + private Logger logger = Logger.getLogger(QueryJobExecutor.class.getName()); + private SiteDao siteDao = new SiteDao(); + private Map taskMap = null; + private int realNodeNum = 0; + public QueryJobExecutor(Job job) + { + taskMap = new HashMap(); + queryJob = job; + plan = job.getPlan(); + tasks = job.getTasks(); + init(); + } + public void init() + { + for (Task task : tasks) { + if (task instanceof SendDataTask) { + sendDataTask.add((SendDataTask) task); + continue; + } + if (task instanceof JoinTask) { + joinTask.add((JoinTask) task); + continue; + } + else { + otherTask.add(task); + } + } + } + public void executeFirstPhase() + { + BlockingQueue blocks = new LinkedBlockingQueue<>(); + for (SendDataTask task : sendDataTask) { + String site = task.getSite(); + String taskId = task.getTaskId(); + Site nodeSite = siteDao.listNodes().get(site); + if (nodeSite == null) { + logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); + //return PardResultSet.execErrResultSet; + } + else { + realNodeNum++; + PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); + client.connect(task, blocks); + taskMap.put(taskId, task); + } + } + while (!taskMap.isEmpty()) { + Block block = null; + try { + block = blocks.poll(8000, TimeUnit.MILLISECONDS); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + if (block == null) { + logger.info("Waiting for more blocks..."); + continue; + } + else { + String taskId = block.getTaskId(); + taskMap.remove(taskId); + logger.info("Task " + taskId + " done."); + } + } + } + + public PardResultSet execute() + { + executeFirstPhase(); + PardResultSet resultSet = new PardResultSet(); + List secondList = new ArrayList(); + secondList.addAll(otherTask); + secondList.addAll(joinTask); + BlockingQueue blocks = new LinkedBlockingQueue<>(); + for (Task task : secondList) { + String site = task.getSite(); + String taskId = task.getTaskId(); + Site nodeSite = siteDao.listNodes().get(site); + if (nodeSite == null) { + logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); + } + PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); + client.connect(task, blocks); + taskMap.put(taskId, task); + } + // wait for all tasks done + while (!taskMap.isEmpty()) { + Block block = null; + try { + block = blocks.poll(8000, TimeUnit.MILLISECONDS); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + if (block == null) { + logger.info("Waiting for more blocks..."); + continue; + } + resultSet.addBlock(block); + logger.info("Added block " + block.getSequenceId() + ", num of rows: " + block.getRows().size()); + if (!block.isSequenceHasNext()) { + String taskId = block.getTaskId(); + taskMap.remove(taskId); + logger.info("Task " + taskId + " done."); + } + } + plan.afterExecution(true); + return resultSet; + } +} diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 3bfce0a..d58e303 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -656,6 +656,7 @@ public TaskState executeQueryTask(List tasks, boolean isLocal) } return null; } + /* public PardResultSet executeQueryPlanJob(Job job, QueryPlan plan, List tasks) { logger.info("Executing query tasks for job[" + job.getJobId() + "]"); @@ -664,6 +665,7 @@ public PardResultSet executeQueryPlanJob(Job job, QueryPlan plan, List tas BlockingQueue blocks = new LinkedBlockingQueue<>(); List sendDataTask = new ArrayList(); List joinTask = new ArrayList(); + List otherTask = new ArrayList(); for (Task task : tasks) { if (task instanceof SendDataTask) { sendDataTask.add((SendDataTask) task); @@ -673,6 +675,9 @@ public PardResultSet executeQueryPlanJob(Job job, QueryPlan plan, List tas joinTask.add((JoinTask) task); continue; } + else { + otherTask.add(task); + } String site = task.getSite(); String taskId = task.getTaskId(); Site nodeSite = siteDao.listNodes().get(site); @@ -707,7 +712,7 @@ public PardResultSet executeQueryPlanJob(Job job, QueryPlan plan, List tas } plan.afterExecution(true); return resultSet; - } + }*/ // todo this sucks, full of if else public PardResultSet executeJob(Job job) { @@ -804,7 +809,7 @@ public PardResultSet executeJob(Job job) // this is a simplest implementation // todo collected result set form exchange client shall be passed on for next query stage if (plan instanceof QueryPlan) { - return executeQueryPlanJob(job, (QueryPlan) plan, tasks); + return new QueryJobExecutor(job).execute(); } // delete diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java new file mode 100644 index 0000000..c0f1781 --- /dev/null +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -0,0 +1,37 @@ +package cn.edu.ruc.iir.pard.server; + +import cn.edu.ruc.iir.pard.executor.connector.Task; +import cn.edu.ruc.iir.pard.planner.PardPlanner; +import cn.edu.ruc.iir.pard.planner.Plan; +import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; +import cn.edu.ruc.iir.pard.scheduler.Job; +import cn.edu.ruc.iir.pard.scheduler.JobScheduler; +import cn.edu.ruc.iir.pard.scheduler.JobScheduler.JobState; +import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; +import cn.edu.ruc.iir.pard.sql.tree.Statement; +import org.testng.annotations.Test; + +import java.util.List; + +public class PardQueryHandlerTest +{ + SqlParser parser = new SqlParser(); + @Test + public void executeQuery() + { + UsePlan.setCurrentSchema("book"); + //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; + String sql = "select * from book@pard0"; + Statement stmt = parser.createStatement(sql); + PardPlanner planner = new PardPlanner(); + Plan plan = planner.plan(stmt); + plan.setJobId("aa"); + List task = TaskScheduler.INSTANCE().generateTasks(plan); + Job job = JobScheduler.INSTANCE().newJob(); + task.forEach(job::addTask); + job.setJobState(JobState.EXECUTING); + job.setPlan(plan); + TaskScheduler.INSTANCE().executeJob(job); + } +} From 2b0870ef7e66eb1437770ba19613c85a7970345f Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 02:25:15 +0800 Subject: [PATCH 33/75] add sth about expression. --- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 32 +++++++ .../edu/ruc/iir/pard/sql/expr/ExprTest.java | 90 +++++++++++++++++++ 2 files changed, 122 insertions(+) diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 73c84e0..6e6cf69 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -87,6 +87,38 @@ else if (e instanceof TrueExpr || e instanceof FalseExpr) { } return e; } + public static Expr generalReplace(Expr e1, Item from, Item to) + { + Expr e = Expr.clone(e1); + if (e instanceof SingleExpr) { + SingleExpr se = (SingleExpr) e; + Item lv = se.getLvalue(); + Item rv = se.getRvalue(); + if (lv.equals(from)) { + lv = Item.clone(to); + } + if (rv.equals(from)) { + rv = Item.clone(to); + } + return new SingleExpr(lv, rv, se.getCompareType()); + } + else if (e instanceof CompositionExpr) { + CompositionExpr ce = (CompositionExpr) e; + for (int i = 0; i < ce.getConditions().size(); i++) { + Expr ex = ce.getConditions().get(i); + ce.getConditions().set(i, generalReplace(ex, from, to)); + } + return ce; + } + else if (e instanceof UnaryExpr) { + UnaryExpr ue = (UnaryExpr) e; + return new UnaryExpr(ue.getCompareType(), generalReplace(ue.getExpression(), from, to)); + } + else if (e instanceof TrueExpr || e instanceof FalseExpr) { + return e; + } + return e; + } public static Expr clone(Expr expr) { if (expr instanceof CompositionExpr) { diff --git a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java index 4a05d71..19b6ade 100644 --- a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java +++ b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java @@ -1,5 +1,9 @@ package cn.edu.ruc.iir.pard.sql.expr; +import cn.edu.ruc.iir.pard.catalog.Column; +import cn.edu.ruc.iir.pard.commons.memory.Row; +import cn.edu.ruc.iir.pard.commons.utils.DataType.DataTypeInt; +import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; import cn.edu.ruc.iir.pard.sql.expr.rules.ContainEliminateLaw; import cn.edu.ruc.iir.pard.sql.expr.rules.MinimalItemLaw; @@ -16,6 +20,8 @@ import cn.edu.ruc.iir.pard.sql.tree.Statement; import org.testng.annotations.Test; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; public class ExprTest @@ -134,4 +140,88 @@ public void justTest() } } } + /** + * A表 id name city age + * */ + @Test + public void testGeneralReplace() + { + SqlParser parser = new SqlParser(); + String expr = "a.id>'E100' and a.age<18"; + Expression expression = parser.createExpression(expr); + RowConstructor constructor = new RowConstructor(); + constructor.appendString("'E101'"); + constructor.appendString("'Geroge'"); + constructor.appendString("'Beijing'"); + constructor.appendInt(12); + Row row = constructor.build(); + String[] col = new String[]{"id", "name", "city", "age"}; + List cols = new ArrayList<>(); + for (int i = 0; i < col.length; i++) { + Column c = new Column(); + c.setColumnName(col[i]); + c.setTableName("a"); + c.setDataType(DataTypeInt.VARCHAR); + if (i == col.length - 1) { + c.setDataType(DataTypeInt.INT); + } + cols.add(c); + } + boolean match = match(expression, row, cols); + System.out.println(match); + expr = "a.id>'E200' and a.age<18"; + expression = parser.createExpression(expr); + match = match(expression, row, cols); + System.out.println(match); + } + public Boolean match(Expression expr, Row row, List col) + { + List types = new ArrayList(); + col.forEach(x -> types.add(x.getDataType())); + String[] list = RowConstructor.printRow(row, types).split("\t"); + List ciList = new ArrayList(); + List vList = new ArrayList(); + Expr e = Expr.parse(expr); + for (int i = 0; i < list.length; i++) { + ColumnItem ci = new ColumnItem(col.get(i).getTableName(), col.get(i).getColumnName(), col.get(i).getDataType()); + ValueItem vi = new ValueItem(parseFromString(col.get(i).getDataType(), list[i])); + ciList.add(ci); + vList.add(vi); + } + for (int i = 0; i < list.length; i++) { + ColumnItem ci = ciList.get(i); + ValueItem vi = vList.get(i); + e = Expr.generalReplace(e, ci, vi); + } + System.out.println(e.toString()); + e = Expr.optimize(e, LogicOperator.AND); + if (e instanceof TrueExpr) { + return true; + } + else if (e instanceof FalseExpr) { + return false; + } + return null; + } + public static Comparable parseFromString(int dataType, String value) + { + switch(dataType) { + case DataTypeInt.SMALLINT: + case DataTypeInt.BIGINT: + case DataTypeInt.INT: + return Long.parseLong(value); + case DataTypeInt.FLOAT: + case DataTypeInt.DOUBLE: + return Double.parseDouble(value); + case DataTypeInt.TEXT: + case DataTypeInt.CHAR: + case DataTypeInt.VARCHAR: + return value; + case DataTypeInt.TIME: + case DataTypeInt.DATE: + case DataTypeInt.TIMESTAMP: + return value; + } + return value; + } } From b71bb8cae5459f7519e9fa113927a98ff2d28879 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 03:40:49 +0800 Subject: [PATCH 34/75] fix a tiny bug. --- .../cn/edu/ruc/iir/pard/catalog/Column.java | 11 ++++- .../ruc/iir/pard/scheduler/TaskScheduler.java | 40 +++++++++++++++---- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 34 ++++++++++++++++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java index 58ba189..5b90f49 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java @@ -28,7 +28,16 @@ public Column(int id, int dataType, String columnName, int len, int index, int k this.key = key; this.tableName = tableName; } - + public Column(Column column) + { + this.id = column.id; + this.dataType = column.dataType; + this.columnName = column.columnName; + this.len = column.len; + this.index = column.index; + this.key = column.key; + this.tableName = column.tableName; + } public int getId() { return id; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index d58e303..4cc11b7 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -420,12 +420,20 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge Expr dataTaskExpr = extractTableExpr(joinExpr, dataExpr, dataTableName.getValue(), node); Expr joinTaskSingleTableExpr = extractTableExpr(joinExpr, dataExpr, joinTableName.getValue(), node); String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); + tmpTableName = tmpTableName.replace('-', '_').replace('-', '_').replace('-', '_'); + boolean needDropTable = true; +// if (dataTable.getSite().equals(joinTable.getSite())) { + //位于相同站点,不需要发数据 +// tmpTableName = dataTableName.getValue(); +// needDropTable = false; + // } +// else { if (dataTask == null) { dataTask = new SendDataTask(dataTable.getSite()); dataTask.setSchemaName(dataTable.getTable()); PlanNode p = new OutputNode(); p.setChildren(NodeHelper.copyNode(dataNode), true, true); - dataTask.setNode(orFilterNode(p, dataTaskExpr)); + dataTask.setNode(orFilterNode(p, dataTaskExpr, null, null)); dataTask.getSiteExpression().put(joinTable.getSite(), dataTaskExpr.toExpression()); dataTask.setTaskId(jobId + "_ " + jobOffset.addAndGet(1)); dataTask.getTmpTableMap().put(joinTable.getSite(), tmpTableName); @@ -433,20 +441,29 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge } else { PlanNode p = dataTask.getNode(); - dataTask.setNode(orFilterNode(p, dataTaskExpr)); + dataTask.setNode(orFilterNode(p, dataTaskExpr, null, null)); dataTask.getSiteExpression().put(joinTable.getSite(), dataTaskExpr.toExpression()); dataTask.getTmpTableMap().put(joinTable.getSite(), tmpTableName); } +// } JoinTask joinTask = joinMap.get(joinTable.getSite()); if (joinTask == null) { //Do sth. - PlanNode p = NodeHelper.copyNode(proj); + List clist = new ArrayList(); + for (Column c : proj.getColumns()) { + Column col = new Column(c); + if (dataTableName.getValue().equals(col.getTableName())) { + col.setTableName(tmpTableName); + } + clist.add(col); + } + PlanNode p = new ProjectNode(clist); JoinNode join = new JoinNode(); p.setChildren(join, true, true); join.getJoinSet().addAll(node.getJoinSet()); join.getExprList().addAll(node.getExprList()); //TODO: add children. - join.addJoinChild(orFilterNode(NodeHelper.copyNode(joinNode), joinTaskSingleTableExpr)); + join.addJoinChild(orFilterNode(NodeHelper.copyNode(joinNode), joinTaskSingleTableExpr, dataTableName.getValue(), tmpTableName)); PlanNode dataCopy = NodeHelper.copyNode(dataNode); PlanNode tmp = dataCopy; if (dataCopy instanceof TableScanNode) { @@ -466,7 +483,12 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge } join.addJoinChild(dataCopy); joinTask = new JoinTask(joinTable.getSite()); - joinTask.setTmpTableName(tmpTableName); + if (needDropTable) { + joinTask.setTmpTableName(tmpTableName); + } + else { + joinTask.setTmpTableName(null); + } joinTask.setTaskId(jobId + "_" + jobOffset.addAndGet(1)); joinTask.setNode(p); joinMap.put(joinTable.getSite(), joinTask); @@ -480,7 +502,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge System.out.println(); //System.out.println(jnode.getJoinChildren().size() + "aaaaaaaaa"); PlanNode pnode = jnode.getJoinChildren().get(0); - pnode = orFilterNode(NodeHelper.copyNode(p), joinTaskSingleTableExpr); + pnode = orFilterNode(NodeHelper.copyNode(p), joinTaskSingleTableExpr, dataTableName.getValue(), tmpTableName); jnode.getJoinChildren().set(0, pnode); break; } @@ -489,7 +511,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge joinTask.setNode(p); } } - public PlanNode orFilterNode(PlanNode node, Expr filterExpr) + public PlanNode orFilterNode(PlanNode node, Expr filterExpr, String oldTableName, String newTableName) { //System.out.println(node == null); node = NodeHelper.copyNode(node); @@ -499,6 +521,10 @@ public PlanNode orFilterNode(PlanNode node, Expr filterExpr) if (node.getLeftChild() instanceof FilterNode) { FilterNode children = (FilterNode) node.getLeftChild(); Expr e1 = Expr.parse(children.getExpression()); + if (oldTableName != null) { + e1 = Expr.replaceTableName(e1, oldTableName, newTableName); + filterExpr = Expr.replaceTableName(filterExpr, oldTableName, newTableName); + } e1 = Expr.or(e1, filterExpr, LogicOperator.AND); children.setExpression(e1.toExpression()); return root; diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 6e6cf69..63557a5 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -87,6 +87,40 @@ else if (e instanceof TrueExpr || e instanceof FalseExpr) { } return e; } + public static Expr replaceTableName(Expr e1, String from, String to) + { + Expr e = Expr.clone(e1); + if (e instanceof SingleExpr) { + SingleExpr se = (SingleExpr) e; + Item lv = se.getLvalue(); + Item rv = se.getRvalue(); + if (lv instanceof ColumnItem && ((ColumnItem) lv).getTableName().toLowerCase().equals(from)) { + ColumnItem ci = (ColumnItem) lv; + lv = new ColumnItem(to, ci.getColumnName(), ci.getDataType()); + } + if (rv instanceof ColumnItem && ((ColumnItem) rv).getTableName().toLowerCase().equals(from)) { + ColumnItem ci = (ColumnItem) rv; + rv = new ColumnItem(to, ci.getColumnName(), ci.getDataType()); + } + return new SingleExpr(lv, rv, se.getCompareType()); + } + else if (e instanceof CompositionExpr) { + CompositionExpr ce = (CompositionExpr) e; + for (int i = 0; i < ce.getConditions().size(); i++) { + Expr ex = ce.getConditions().get(i); + ce.getConditions().set(i, replaceTableName(ex, from, to)); + } + return ce; + } + else if (e instanceof UnaryExpr) { + UnaryExpr ue = (UnaryExpr) e; + return new UnaryExpr(ue.getCompareType(), replaceTableName(ue.getExpression(), from, to)); + } + else if (e instanceof TrueExpr || e instanceof FalseExpr) { + return e; + } + return e; + } public static Expr generalReplace(Expr e1, Item from, Item to) { Expr e = Expr.clone(e1); From 6fc597489737fe429873c03900f3001b62497648 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 05:53:47 +0800 Subject: [PATCH 35/75] SENDDATATASK initially write done, but quite a lot of bugs estimated --- pard-connector-postgresql/pom.xml | 4 + .../postgresql/PostgresConnector.java | 255 ++++++++++++++++-- .../exchange/ExchangeFileSendHandler.java | 10 +- .../connector/CreateTmpTableTask.java | 49 ++++ .../iir/pard/executor/PardTaskExecutor.java | 123 ++++++++- .../exchange/ExchangeFileReceiveHandler.java | 35 +++ .../edu/ruc/iir/pard/sql/expr/ExprTest.java | 2 + 7 files changed, 457 insertions(+), 21 deletions(-) create mode 100644 pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/CreateTmpTableTask.java diff --git a/pard-connector-postgresql/pom.xml b/pard-connector-postgresql/pom.xml index c42d2d5..a7a8d26 100644 --- a/pard-connector-postgresql/pom.xml +++ b/pard-connector-postgresql/pom.xml @@ -24,6 +24,10 @@ cn.edu.ruc.iir pard-catalog + + cn.edu.ruc.iir + pard-optimizer + com.zaxxer HikariCP diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 008b6e5..c3bd73e 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -8,6 +8,7 @@ import cn.edu.ruc.iir.pard.executor.connector.Connector; import cn.edu.ruc.iir.pard.executor.connector.CreateSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.CreateTableTask; +import cn.edu.ruc.iir.pard.executor.connector.CreateTmpTableTask; import cn.edu.ruc.iir.pard.executor.connector.DeleteTask; import cn.edu.ruc.iir.pard.executor.connector.DropSchemaTask; import cn.edu.ruc.iir.pard.executor.connector.DropTableTask; @@ -24,13 +25,21 @@ import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; import cn.edu.ruc.iir.pard.executor.connector.node.SortNode; import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; +import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; +import cn.edu.ruc.iir.pard.sql.expr.Expr; +import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; +import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; +import cn.edu.ruc.iir.pard.sql.expr.ValueItem; import cn.edu.ruc.iir.pard.sql.tree.Expression; +import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; +import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -43,6 +52,7 @@ import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -113,6 +123,9 @@ public PardResultSet execute(Task task) if (task instanceof SendDataTask) { return executeSendDataTask(conn, (SendDataTask) task); } + if (task instanceof CreateTmpTableTask) { + return executeCreateTmpTable(conn, (CreateTmpTableTask) task); + } } catch (SQLException e) { logger.info("GET CONNECTION FAILED"); @@ -581,17 +594,17 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) isLimit = true; } } - if (isProject) { - List columns = projectNode.getColumns(); - for (Column column : columns) { - querySQL.append(column.getColumnName()); - querySQL.append(","); - } - querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); - } - else { - querySQL.append(" *"); - } +// if (isProject) { + List cols = projectNode.getColumns(); + for (Column column : cols) { + querySQL.append(column.getColumnName()); + querySQL.append(","); + } + querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); +// } +// else { +// querySQL.append(" *"); +// } querySQL.append(" from "); querySQL.append(schema); querySQL.append("."); @@ -620,7 +633,7 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) Map siteExpression = task.getSiteExpression(); // site -> Expression Map tmpTableMap = task.getTmpTableMap(); // site -> tmpTableName - boolean flag = dispense(siteExpression, tmpTableMap, rs); + boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema, table); if (flag == true) { conn.close(); return PardResultSet.okResultSet; @@ -644,19 +657,172 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) return PardResultSet.execErrResultSet; } + public PardResultSet executeCreateTmpTable(Connection conn, CreateTmpTableTask task) + { + String schemaName = task.getSchemaName(); + String tableName = task.getTableName(); + DropTableTask dropTableTask = new DropTableTask(schemaName, tableName); + PardResultSet prsDropTempTale = dropTempTable(conn, dropTableTask); + CreateTableTask createTableTask = new CreateTableTask(schemaName, tableName, false, task.getColumnDefinitions()); + PardResultSet prsCreateTempTable = createTempTable(conn, createTableTask); + String filePath1 = task.getPath(); + try { + BufferedReader br = new BufferedReader(new FileReader(new File(filePath1))); + BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath1 + "tmp"))); + String readIn = br.readLine(); + readIn = br.readLine(); + while ((readIn = br.readLine()) != null) { + bw.write(readIn); + bw.newLine(); + } + br.close(); + bw.flush(); + bw.close(); + } + catch (IOException e) { + e.printStackTrace(); + } + LoadTask loadTask = new LoadTask(schemaName, tableName, ImmutableList.of(filePath1 + "tmp")); + PardResultSet prsLoadTemoTable = loadTmpTable(conn, loadTask); + return prsLoadTemoTable; + } + + private PardResultSet loadTmpTable(Connection conn, LoadTask task) + { + String schema = task.getSchema(); + String table = task.getTable(); + List paths = task.getPaths(); + try { + PgConnection pgConnection; + if (!conn.isWrapperFor(PgConnection.class)) { + return PardResultSet.execErrResultSet; + } + pgConnection = conn.unwrap(PgConnection.class); + CopyManager copyManager = new CopyManager(pgConnection); + for (String path : paths) { + if (schema != null) { + logger.info("Copying " + path + " into " + schema + "." + table); + String sql = "COPY " + schema + "." + table + " FROM STDIN DELIMITER E'\t'"; + logger.info("Postgres connector: " + sql); + File file = new File(path); + InputStream inputStream = new FileInputStream(file); + copyManager.copyIn(sql, inputStream); + file.deleteOnExit(); + } + else { + logger.info("Copying " + path + " into " + table); + String sql = "COPY " + table + " FROM STDIN DELIMITER E'\t'"; + logger.info("Postgres connector: " + sql); + File file = new File(path); + InputStream inputStream = new FileInputStream(file); + copyManager.copyIn(sql, inputStream); + file.deleteOnExit(); + } + } + PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK); + RowConstructor rowConstructor = new RowConstructor(); + rowConstructor.appendString(PardResultSet.ResultStatus.OK.toString()); + resultSet.add(rowConstructor.build()); + return resultSet; + } + catch (SQLException | IOException e) { + e.printStackTrace(); + } + finally { + try { + conn.close(); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + return PardResultSet.execErrResultSet; + } + + private PardResultSet dropTempTable(Connection conn, DropTableTask task) + { + try { + Statement statement = conn.createStatement(); + String dropTableSQL; + if (task.getSchemaName() == null) { + dropTableSQL = "drop table if exists " + task.getTableName(); + } + else { + dropTableSQL = "drop table if exists " + task.getSchemaName() + "." + task.getTableName(); + } + logger.info("Postgres connector: " + dropTableSQL); + int status = statement.executeUpdate(dropTableSQL); + if (status == 0) { + logger.info("DROP TEMP TABLE SUCCESSFULLY"); + return PardResultSet.okResultSet; + } + } + catch (SQLException e) { + logger.info("DROP TEMP TABLE FAILED"); + e.printStackTrace(); + } + return PardResultSet.execErrResultSet; + } + + private PardResultSet createTempTable(Connection conn, CreateTableTask task) + { + try { + StringBuilder createTableSQL = new StringBuilder("create table if not exists "); + if (task.getSchemaName() != null) { + createTableSQL.append(task.getSchemaName() + "." + task.getTableName() + "("); + } + else { + createTableSQL.append(task.getTableName() + "("); + } + for (Column cd : task.getColumnDefinitions()) { + if (cd.getKey() == 1) { + createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())).append(" primary key "); + } + else { + createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())); + } + createTableSQL.append(" ,"); + } + createTableSQL = new StringBuilder(createTableSQL.substring(0, createTableSQL.length() - 1)); + createTableSQL.append(")"); + logger.info("Connector: " + createTableSQL.toString()); + Statement statement = conn.createStatement(); + int status = statement.executeUpdate(createTableSQL.toString()); + if (status == 0) { + logger.info("CREATE TEMP TABLE SUCCESSFULLY"); + return PardResultSet.okResultSet; + } + } + catch (SQLException e) { + logger.info("CREATE TEMP TABLE FAILED"); + e.printStackTrace(); + } + return PardResultSet.execErrResultSet; + } + private PardResultSet executeJoin(Connection conn, JoinTask task) { return PardResultSet.execErrResultSet; } - private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs) + private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema, String table) { boolean isSucceeded; Map localWriter = new HashMap(); // site -> local BufferedWirter for (String site : siteExpression.keySet()) { try { - BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/dev/shm/" + site.toString() + tmpTableMap.get(site)))); + BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/dev/shm/" + site + tmpTableMap.get(site) + "SENDDATA"))); localWriter.put(site, bw); + bw.write(schema + "\t" + table + "\n"); //schema name, table name + Iterator it = columns.iterator(); + String secondLine = ""; + while (it.hasNext()) { + secondLine += ((Column) it.next()).getColumnName() + "\t"; // column names + } + secondLine = secondLine.substring(0, secondLine.length() - 1); + bw.write(secondLine); + bw.write("\n"); + bw.flush(); } catch (IOException e) { e.printStackTrace(); @@ -669,39 +835,46 @@ private boolean dispense(Map siteExpression, Map colTypes = new ArrayList<>(); + for (int i = 0; i < colNum; i++) { switch (rsmd.getColumnType(i + 1)) { case Types.CHAR: rowConstructor.appendString(rs.getString(i + 1)); colTypes.add(DataType.CHAR.getType()); break; + case Types.VARCHAR: rowConstructor.appendString(rs.getString(i + 1)); colTypes.add(DataType.VARCHAR.getType()); break; + case Types.DATE: rowConstructor.appendString(rs.getString(i + 1).toString()); colTypes.add(DataType.DATE.getType()); break; + case Types.INTEGER: rowConstructor.appendInt(rs.getInt(i + 1)); colTypes.add(DataType.INT.getType()); break; + case Types.FLOAT: rowConstructor.appendFloat(rs.getFloat(i + 1)); colTypes.add(DataType.FLOAT.getType()); break; + case Types.DOUBLE: rowConstructor.appendDouble(rs.getDouble(i + 1)); colTypes.add(DataType.DOUBLE.getType()); break; + default: break; } } Row row = rowConstructor.build(); for (Map.Entry entry : siteExpression.entrySet()) { - boolean ifTrue = compare(entry.getValue(), row); + boolean ifTrue = compare(entry.getValue(), row, columns); if (ifTrue) { localWriter.get(entry.getKey()).write(rowConstructor.printRow(row, colTypes) + "\n"); } @@ -727,10 +900,56 @@ private boolean dispense(Map siteExpression, Map col) + { + List types = new ArrayList(); + col.forEach(x -> types.add(x.getDataType())); + String[] list = RowConstructor.printRow(row, types).split("\t"); + List ciList = new ArrayList(); + List vList = new ArrayList(); + Expr e = Expr.parse(expr); + for (int i = 0; i < list.length; i++) { + ColumnItem ci = new ColumnItem(col.get(i).getTableName(), col.get(i).getColumnName(), col.get(i).getDataType()); + ValueItem vi = new ValueItem(parseFromString(col.get(i).getDataType(), list[i])); + ciList.add(ci); + vList.add(vi); + } + for (int i = 0; i < list.length; i++) { + ColumnItem ci = ciList.get(i); + ValueItem vi = vList.get(i); + e = Expr.generalReplace(e, ci, vi); + } + System.out.println(e.toString()); + e = Expr.optimize(e, Expr.LogicOperator.AND); + if (e instanceof TrueExpr) { + return true; + } + else if (e instanceof FalseExpr) { + return false; + } + return null; + } + + private static Comparable parseFromString(int dataType, String value) { - // TODO it's gonna be replaced - return false; + switch(dataType) { + case DataType.DataTypeInt.SMALLINT: + case DataType.DataTypeInt.BIGINT: + case DataType.DataTypeInt.INT: + return Long.parseLong(value); + case DataType.DataTypeInt.FLOAT: + case DataType.DataTypeInt.DOUBLE: + return Double.parseDouble(value); + case DataType.DataTypeInt.TEXT: + case DataType.DataTypeInt.CHAR: + case DataType.DataTypeInt.VARCHAR: + return value; + case DataType.DataTypeInt.TIME: + case DataType.DataTypeInt.DATE: + case DataType.DataTypeInt.TIMESTAMP: + return value; + } + return value; } private String getTypeString(int type, int length) diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java index d928a6b..eca57ab 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileSendHandler.java @@ -66,8 +66,14 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws IOExceptio } } - ChannelFuture f = ctx.writeAndFlush(new DefaultFileRegion(raf.getChannel(), 0, length)); - f.addListener((ChannelFutureListener) future -> ctx.writeAndFlush("OKDONE\n")); + if (path.endsWith("SENDDATA")) { // SEND DATA TASK + ChannelFuture f = ctx.writeAndFlush(new DefaultFileRegion(raf.getChannel(), 0, length)); + f.addListener((ChannelFutureListener) future -> ctx.writeAndFlush("OKDONESENDDATA\n")); + } + else { // LOAD TASK + ChannelFuture f = ctx.writeAndFlush(new DefaultFileRegion(raf.getChannel(), 0, length)); + f.addListener((ChannelFutureListener) future -> ctx.writeAndFlush("OKDONE\n")); + } } if (message.equalsIgnoreCase("OK")) { PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK); diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/CreateTmpTableTask.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/CreateTmpTableTask.java new file mode 100644 index 0000000..297e5d8 --- /dev/null +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/CreateTmpTableTask.java @@ -0,0 +1,49 @@ +package cn.edu.ruc.iir.pard.executor.connector; + +import cn.edu.ruc.iir.pard.catalog.Column; + +import java.util.List; + +public class CreateTmpTableTask + extends Task +{ + private static final long serialVersionUID = 5L; + private final String schemaName; + private final String tableName; + private final List columnDefinitions; + private final String path; + + public CreateTmpTableTask(String schemaName, String tableName, List columnDefinitions, String path) + { + this(schemaName, tableName, columnDefinitions, path, null); + } + + public CreateTmpTableTask(String schemaName, String tableName, List columnDefinitions, String path, String site) + { + super(site); + this.schemaName = schemaName; + this.tableName = tableName; + this.columnDefinitions = columnDefinitions; + this.path = path; + } + + public String getSchemaName() + { + return schemaName; + } + + public String getTableName() + { + return tableName; + } + + public List getColumnDefinitions() + { + return columnDefinitions; + } + + public String getPath() + { + return path; + } +} diff --git a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java index a3e4475..08137f1 100644 --- a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java +++ b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java @@ -1,15 +1,29 @@ package cn.edu.ruc.iir.pard.executor; import cn.edu.ruc.iir.pard.catalog.Column; +import cn.edu.ruc.iir.pard.catalog.Site; import cn.edu.ruc.iir.pard.commons.memory.Row; +import cn.edu.ruc.iir.pard.commons.utils.DataType; +import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; +import cn.edu.ruc.iir.pard.etcd.dao.SiteDao; +import cn.edu.ruc.iir.pard.exchange.PardFileExchangeClient; import cn.edu.ruc.iir.pard.executor.connector.Block; import cn.edu.ruc.iir.pard.executor.connector.Connector; +//import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; +import cn.edu.ruc.iir.pard.executor.connector.QueryTask; +import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.logging.Logger; /** @@ -53,9 +67,99 @@ public PardResultSet executeStatus(Task task) } public Block executeQuery(Task task) + { + if (task instanceof QueryTask) { + return executeSelect(task); + } + if (task instanceof SendDataTask) { + return executeSendData(task); + } + else { // task instanceof JoinTask + return executeJoin(task); + } + } + + private Block executeSendData(Task task) + { + //Map taskMap = new HashMap<>(); + SiteDao siteDao = new SiteDao(); + String taskId = task.getTaskId(); + logger.info("Executing SendDataTask " + taskId); + if (!resultSetMap.containsKey(taskId)) { + PardResultSet pardResultSet = connector.execute(task); + resultSetMap.put(taskId, pardResultSet); + sequenceIds.put(taskId, 0); + } + + PardResultSet resultSet = resultSetMap.get(taskId); + int seq = sequenceIds.get(taskId) + 1; + List column = new ArrayList<>(); + Column col0 = new Column(); + col0.setDataType(DataType.INT.getType()); + col0.setColumnName("id"); + column.add(col0); + Block block = new Block(column, 50 * 1024 * 1024, seq, taskId); + block.setSequenceHasNext(false); + sequenceIds.put(taskId, seq); + if (resultSet.getStatus() == PardResultSet.ResultStatus.OK) { + for (Map.Entry entry : ((SendDataTask) task).getTmpTableMap().entrySet()) { + Site nodeSite = siteDao.listNodes().get(entry.getKey()); + + File file = new File("/dev/shm/" + entry.getKey() + + ((SendDataTask) task).getTmpTableMap().get(entry.getKey()) + + "SENDDATA"); + + if (file.exists() && fileLength(file) > 2) { + ConcurrentLinkedQueue resultSets = new ConcurrentLinkedQueue<>(); + PardFileExchangeClient pfec = new PardFileExchangeClient(nodeSite.getIp(), + nodeSite.getFileExchangePort(), + file.getPath(), + ((SendDataTask) task).getSchemaName(), + ((SendDataTask) task).getTmpTableMap().get(entry.getKey()), + task.getTaskId(), + resultSets); + pfec.run(); + //taskMap.put(task.getTaskId(), task); + } + } + return block; + } + else { + RowConstructor rowConstructor = new RowConstructor(); + rowConstructor.appendInt(0); + block.setSequenceHasNext(true); + block.addRow(rowConstructor.build()); + return block; + } + } + + private Block executeJoin(Task task) { String taskId = task.getTaskId(); - logger.info("Executing task " + taskId); + logger.info("Executing JoinTask " + taskId); + if (!resultSetMap.containsKey(taskId)) { + PardResultSet pardResultSet = connector.execute(task); + resultSetMap.put(taskId, pardResultSet); + sequenceIds.put(taskId, 0); + } + PardResultSet resultSet = resultSetMap.get(taskId); + int seq = sequenceIds.get(taskId) + 1; + List column = new ArrayList<>(); + Column col0 = new Column(); + col0.setDataType(DataType.INT.getType()); + col0.setColumnName("id"); + column.add(col0); + Block block = new Block(column, 50 * 1024 * 1024, seq, taskId); + block.setSequenceHasNext(false); + sequenceIds.put(taskId, seq); + + return block; + } + + private Block executeSelect(Task task) + { + String taskId = task.getTaskId(); + logger.info("Executing QueryTask " + taskId); if (!resultSetMap.containsKey(taskId)) { PardResultSet pardResultSet = connector.execute(task); @@ -84,4 +188,21 @@ public Block executeQuery(Task task) } return block; } + + private int fileLength(File file) + { + int counter = 0; + try { + BufferedReader br = new BufferedReader(new FileReader(file)); + String str = null; + while ((str = br.readLine()) != null) { + counter++; + } + br.close(); + } + catch (IOException e) { + e.printStackTrace(); + } + return counter; + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java index 272e264..0aaac14 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java @@ -1,6 +1,10 @@ package cn.edu.ruc.iir.pard.exchange; +import cn.edu.ruc.iir.pard.catalog.Column; +import cn.edu.ruc.iir.pard.catalog.Table; +import cn.edu.ruc.iir.pard.etcd.dao.TableDao; import cn.edu.ruc.iir.pard.executor.PardTaskExecutor; +import cn.edu.ruc.iir.pard.executor.connector.CreateTmpTableTask; import cn.edu.ruc.iir.pard.executor.connector.LoadTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.Task; @@ -10,10 +14,15 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.logging.Logger; /** @@ -74,6 +83,32 @@ else if (message.equalsIgnoreCase("OKDONE")) { ChannelFuture future = ctx.writeAndFlush(resultSet.getStatus().toString() + "\n"); future.addListener((ChannelFutureListener) f -> ctx.close()); } + else if (message.equalsIgnoreCase("OKDONESENDDATA")) { + logger.info("File Writer close"); + if (writer != null) { + writer.close(); + } + BufferedReader br = new BufferedReader(new FileReader(new File(this.path))); + String[] header = br.readLine().split("\t"); + TableDao tableDao = new TableDao(header[0]); + Table table = tableDao.loadByName(header[1]); + HashMap tableColumn = table.getColumns(); + List columnDefinitions = new ArrayList<>(); + String[] columnNames = br.readLine().split("\t"); + for (String s : columnNames) { + columnDefinitions.add(tableColumn.get(s)); + } + br.close(); + //TODO table name is what? + //Task task = new CreateTmpTableTask(header[0], header[1], columnDefinitions); + Task task = new CreateTmpTableTask(null, header[1], columnDefinitions, this.path); + PardResultSet resultSet = executor.executeStatus(task); + logger.info("Create tmp table: " + resultSet.getStatus().toString()); + writer = null; + path = null; + ChannelFuture future = ctx.writeAndFlush(resultSet.getStatus().toString() + "\n"); + future.addListener((ChannelFutureListener) f -> ctx.close()); + } else { if (writer != null) { writer.write(message + "\n"); diff --git a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java index 19b6ade..1e8c002 100644 --- a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java +++ b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java @@ -174,6 +174,7 @@ public void testGeneralReplace() match = match(expression, row, cols); System.out.println(match); } + public Boolean match(Expression expr, Row row, List col) { List types = new ArrayList(); @@ -203,6 +204,7 @@ else if (e instanceof FalseExpr) { } return null; } + public static Comparable parseFromString(int dataType, String value) { switch(dataType) { From 4c13d9c02b0ad30c8e9fd83b83c2a4ad1c77625a Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 06:10:19 +0800 Subject: [PATCH 36/75] Join task was just started --- .../postgresql/PostgresConnector.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index c3bd73e..bf75502 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -31,6 +31,7 @@ import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; import cn.edu.ruc.iir.pard.sql.tree.Expression; +import cn.edu.ruc.iir.pard.sql.tree.Join; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; @@ -126,6 +127,9 @@ public PardResultSet execute(Task task) if (task instanceof CreateTmpTableTask) { return executeCreateTmpTable(conn, (CreateTmpTableTask) task); } + if (task instanceof JoinTask) { + return executeJoin(conn, (JoinTask) task); + } } catch (SQLException e) { logger.info("GET CONNECTION FAILED"); @@ -802,6 +806,35 @@ private PardResultSet createTempTable(Connection conn, CreateTableTask task) private PardResultSet executeJoin(Connection conn, JoinTask task) { + String tmpTableName = task.getTmpTableName(); + PlanNode rootNode = task.getNode(); + try { + Statement statement = conn.createStatement(); + StringBuilder joinSQL = new StringBuilder("select "); + List nodeList = new ArrayList<>(); + int nodeListCursor = 0; + String schemaName = null; + String tableName = null; + FilterNode filterNode = null; + ProjectNode projectNode = null; + SortNode sortNode = null; + LimitNode limitNode = null; + boolean isFilter = false; + boolean isProject = false; + boolean isSort = false; + boolean isLimit = false; + nodeList.add(rootNode); + nodeListCursor++; + while (nodeList.get(nodeListCursor - 1).hasChildren()) { + nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); + nodeListCursor++; + } + + } + catch (SQLException e) { + logger.info("JOIN FAILED"); + e.printStackTrace(); + } return PardResultSet.execErrResultSet; } From 4e179341f50ef5be661a4f183c99d25bbef46964 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 11:18:51 +0800 Subject: [PATCH 37/75] update doc --- doc/figure/release.png | Bin 0 -> 20016 bytes doc/pard-report.fls | 152 +++++++++++++++++++++++++++++++++++++++++ doc/pard-report.tex | 138 +++++++++++++++++++++++-------------- 3 files changed, 238 insertions(+), 52 deletions(-) create mode 100644 doc/figure/release.png create mode 100644 doc/pard-report.fls diff --git a/doc/figure/release.png b/doc/figure/release.png new file mode 100644 index 0000000000000000000000000000000000000000..69cfd9ed58139349444ca9bc77f98c243882a9f7 GIT binary patch literal 20016 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 gddGR!_CD_Yz*yb~!iVi2Ej~7X3iF8}}l literal 0 HcmV?d00001 diff --git a/doc/pard-report.fls b/doc/pard-report.fls new file mode 100644 index 0000000..774fba8 --- /dev/null +++ b/doc/pard-report.fls @@ -0,0 +1,152 @@ +PWD /Users/Jelly/Developer/pard/doc +INPUT /usr/local/texlive/2015/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-var/web2c/xetex/xelatex.fmt +INPUT pard-report.tex +OUTPUT pard-report.log +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo +INPUT /usr/local/texlive/2015/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/latex-fonts/lasy6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg +INPUT /dev/null +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +INPUT pard-report.aux +INPUT pard-report.aux +OUTPUT pard-report.aux +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT figure/leopard.png +INPUT pard-report.toc +INPUT pard-report.toc +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr6.tfm +OUTPUT pard-report.toc +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT figure/architecture.png +INPUT figure/pard-node-in.png +INPUT figure/timeline.png +INPUT pard-report.aux diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 752d47f..5fd424f 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -51,75 +51,110 @@ \includegraphics[width=0.7\linewidth]{figure/leopard.png} \end{figure} - - - \newpage \tableofcontents \section{系统概述} -\subsection{任务回顾} -我们要实现一个分布式数据库系统,即通过网络将多个不同的局部数据库系统连接起 -来,使得用户可以通过分布式数据库管理系统达到透明性管理的目的。 -在我们具体的实例中,我们通过网络将 3 个不同站点的4个局部数据库连接起来,并可以通 -过分布式数据库管理系统(Client)进行数据库创建,数据分片、分配、导入及 SQL 操作等 -管理,支持水平划分、垂直划分。 - +\subsection{任务描述} +本实验主要设计和实现一个面向分析的分布式数据库系统,即通过网络将多个不同的局部数据库系统连接起来, +使得用户可以通过分布式数据库管理系统达到透明性管理的目的,采用横向扩展的方式,扩展数据库系统的查询性能。 + +\subsection{系统需求} +\begin{enumerate} +\item 支持数据库的创建和删除。 +\item 支持表的创建和删除。 +\item 支持数据表的水平分片和垂直分片。 +\item 支持元数据的存储和管理。 +\item 支持数据从文件批量导入。 +\item 支持插入记录。 +\item 支持删除记录。 +\item 支持SQL语句\textit{select ... from ... where ...}。 +\end{enumerate} \subsection{运行环境} -Java8 以上,postGRESQL,Linux操作系统。 +Pard系统采用Java语言开发,运行时需要Java 8以上的运行环境,目前仅支持Linux系统。 +Pard采用P2P的设计思想,每个Pard Server都可以部署在集群中的任意节点上,且每个节点都可以作为主节点被客户端访问。 +在我们的实验环境中,我们利用三台普通台式机搭建了一个集群,分别为pard01、pard02和pard03。 +其中pard01和pard02分别部署了一个Pard Server,pard03部署了两个Pard Server。 \subsection{开发环境} -Git + Intellij IDEA + Java8 + Maven3.3.9+ - - - Compilation Without Running Unit Tests: +系统的开发环境主要由Git、Maven(v3.3.9+)和Java 8构成。开发的IDE包括Eclipse和Intellij IDEA。 +系统利用Maven实现了代码风格的管理和代码编译、打包、自动分发的功能,方便了项目的开发过程。 +\lstinline|mvn clean compile| +\lstinline[language=bash]|mvn clean package| -\lstinline[language=bash]|mvn clean package -DskipTests| +\subsection{使用说明} +Pard系统的使用说明如下: +\begin{enumerate} +\item 代码编译和打包: -\lstinline|mvn clean compile -DskipTests| - - Compilation With Running Unit Tests: - -\lstinline|mvn clean package or mvn clean compile| - -\begin{lstlisting} +切换到Pard项目的根目录,执行 +\lstinline[language=bash]|mvn clean package| -\end{lstlisting} - - Tips: -\begin{enumerate}[1] - \item Compile locally to ensure everything is ok before pushing to Github. - \item Pay attention to CheckStyle. Make sure your code style satisfies the code style rules. - \end{enumerate} - - +\textit{pard-assembly/target}目录下的\textit{.zip}或\textit{.tar.gz}文件即为部署文件。 + +解压后目录结构如图\ref{release} +\begin{figure}[htbp] + \centering + \includegraphics[width=\linewidth]{figure/release.tiff} + \caption{发布版目录结构} + \label{fig:release} +\end{figure} + +\item Pard Server的启动: +\lstinline[language=bash]|./sbin/pard-server start/run| +Pard Server的启动方式分为两种: +\begin{itemize} + \item start: 后台启动。Pard Server进程将利用nohup后台启动。 + \item run: 前台启动。 +\end{itemize} +对于后台启动的Pard Server,可以调用 +\lstinline[language=bash]|./sbin/pard-server stop| +停止进程。 + +\item 配置文件: +\begin{itemize} +\item \textit{pard.name}: Pard Server的名称,需要保证每个Server都不相同。 +\item \textit{pard.host}: Pard Server的网络IP地址。 +\item \textit{pard.server.port}: Pard Server的服务端口号。客户端连接该端口。 +\item \textit{pard.web.port}: Pard Server的网络端口号。 +\item \textit{pard.rpc.port}: Pard Server的RPC端口。供Server之间调用。 +\item \textit{pard.exchange.port}: Pard Server数据传输的端口。 +\item \textit{pard.file.port}: Pard Server文件传输的端口。 +\item \textit{pard.connector.host}: Pard Server连接的数据库的地址。 +\item \textit{pard.connector.user}: Pard Server连接的数据库的用户名。 +\item \textit{pard.connector.password}: Pard Server连接的数据库对应用户的密码。 +\item \textit{pard.connector.driver}: Pard Server使用的JDBC连接的driver类。 +\end{itemize} +\end{enumerate} + +\subsection{项目管理} +Pard的开发利用Github进行协同,并且代码都开源在Github上。\textit{https://github.com/dbiir/pard} -\section{总体设计} -Pard整体运行概念如图\ref{fig:archi},用户通过命令行与某个主节点Pard Node上的client进行交互, -总共有三个场地,分别命名为 site1 、site2 、site3,四个postgresql作为Slave DB。 -理论上来讲这样其实是有点怪异,某些优化技术是需要和本地数据库做深度定制和交互的,但是本门课程是分布与并行数据库,重在分布与并行的优化技术, -没有太多精力再做一个深度定制的本地数据库。 +\section{系统架构} +Pard整体架构如图\ref{fig:archi}。用户通过命令行连接集群中的任意一个Pard Node进行交互,每个Pard Node都可以通过内置的connector连接多个SlaveDB。 +通过connector的方式屏蔽底层SlaveDB的细节,这样SlaveDB可以为PostgreSQL或者MySQL等任意数据库,只需按照connector的接口开发对应的connector即可。 \begin{figure}[htbp] \centering \includegraphics[width=\linewidth]{figure/architecture.png} - \caption{Pard整体运行概念图} + \caption{Pard整体架构图} \label{fig:archi} \end{figure} Pard单个节点的架构如图\ref{fig:node1}。每个节点都有可能成为与用户直接交互的节点,应用层面诸如Client、Web UI -是用户可见的抽象层级。下面来看底层实现。Pard收到用户输入的SQL语句,先做SQL的语法解析,拿到抽象语法树AST。 -依据数据在不同站点的划分,数据本身的分布特性,对AST做优化改造。Job Planner生成物理的查询执行计划, -Job scheduler发送给各个节点 -去做具体的任务执行,安排好job执行的顺序、同步异步等等,使用一定的并行加速技术。 -各个节点还有存储管理模块,负责管理数据在内存中的组织形式(column-store, buffer management, 数据压缩等等)。 -通讯模块具体分两类:一类是任务的通信,使用RPC技术发送较小数据量的任务通知; -另一类是SQL执行需要的大批量数据的通信,我们使用Netty做大批量数据的异步传输。 -Catalog使用etcd进行分布式存储,etcd遵循的raft协议可以确保各个节点GDD的一致性。 -Executor是本地执行器,Connetor连接pard到本地的postGRESQL。 +是用户可见的抽象层级。下面来看底层实现。Pard收到用户输入的SQL语句,转化为执行的Job,先交给SQL Parser进行SQL的语法解析,得到抽象语法树AST。 +再依据查询本身特性和数据划分的特点,在SQL Optimizer模块中进行优化。然后由Job Planner制定物理的查询执行计划,并将计划交给Job scheduler,生成具体的查询执行任务, +分发给各个节点去执行,并协调任务之间执行的顺序、同步异步等。 + +各个节点还有存储管理模块,负责管理数据在内存中的组织形式。数据在内存中以\textit{Block}的方式组织。 +节点中的通讯模块具体分两类:一类是任务的通信,使用RPC技术发送较小数据量的任务通知; +另一类是SQL执行需要的大批量数据的通信,比如节点之间的数据shuffle,我们使用Netty做大批量数据的异步传输。 +元数据由各节点的Catalog模块维护,数据分布在集群中的各个节点,由分布式的KV存储系统etcd负责存储和数据的同步,etcd遵循的raft协议可以确保各个节点元数据的一致性。 +节点中的Executor是本地执行器,负责执行接收到的具体的查询任务,并调用Connetor与本地连接的数据库进行交互。 +NodeKeeper模块负责集群中节点状态的维护,每个Pard Server启动的时候都需要向NodeKeeper注册,并在进程结束的时候通知NodeKeeper。 \begin{figure}[htbp] \centering @@ -129,7 +164,10 @@ \section{总体设计} \end{figure} \subsection{启动/关闭流程} -package cn.edu.ruc.iir.pard.server; +Pard Server的启动流程: +\begin{enumerate} +\item 节点注册。 +\end{enumerate} class PardServer \subsection{时间安排} @@ -142,11 +180,7 @@ \subsection{时间安排} \label{fig:tl} \end{figure} - - - \section{各模块详细设计} - \subsection{Execution Flow} package cn.edu.ruc.iir.pard.scheduler; From 9fb7932c42f5a4faae689fbede1bd6a60b2b3540 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 11:27:21 +0800 Subject: [PATCH 38/75] add schema for send data --- .../postgresql/PostgresConnector.java | 18 +++++++++++------- .../pard/executor/connector/node/JoinNode.java | 6 ++++++ .../exchange/ExchangeFileReceiveHandler.java | 4 ++-- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index bf75502..ad9f103 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -20,6 +20,7 @@ import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; +import cn.edu.ruc.iir.pard.executor.connector.node.JoinNode; import cn.edu.ruc.iir.pard.executor.connector.node.LimitNode; import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; @@ -31,7 +32,7 @@ import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; import cn.edu.ruc.iir.pard.sql.tree.Expression; -import cn.edu.ruc.iir.pard.sql.tree.Join; +//import cn.edu.ruc.iir.pard.sql.tree.Join; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; @@ -637,7 +638,7 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) Map siteExpression = task.getSiteExpression(); // site -> Expression Map tmpTableMap = task.getTmpTableMap(); // site -> tmpTableName - boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema, table); + boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema); if (flag == true) { conn.close(); return PardResultSet.okResultSet; @@ -816,11 +817,15 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) String schemaName = null; String tableName = null; FilterNode filterNode = null; - ProjectNode projectNode = null; + ProjectNode projectNode1 = null; + JoinNode joinNode = null; + ProjectNode projectNode2 = null; SortNode sortNode = null; LimitNode limitNode = null; boolean isFilter = false; - boolean isProject = false; + boolean isProject1 = false; + boolean isJoin = false; + boolean isProject2 = false; boolean isSort = false; boolean isLimit = false; nodeList.add(rootNode); @@ -829,7 +834,6 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); nodeListCursor++; } - } catch (SQLException e) { logger.info("JOIN FAILED"); @@ -838,7 +842,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) return PardResultSet.execErrResultSet; } - private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema, String table) + private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema) { boolean isSucceeded; Map localWriter = new HashMap(); // site -> local BufferedWirter @@ -846,7 +850,7 @@ private boolean dispense(Map siteExpression, Map joinSet; private List exprList; private String otherInfo; + public JoinNode() { name = "JOIN"; joinSet = new HashSet(); exprList = new ArrayList(); } + public JoinNode(JoinNode node) { super(node); @@ -37,10 +39,12 @@ public JoinNode(JoinNode node) childrens.clear(); childrens.addAll(node.getJoinChildren()); } + public boolean hasChildren() { return !childrens.isEmpty(); } + public void addJoinChild(PlanNode node) { this.childrens.add(node); @@ -50,10 +54,12 @@ public List getJoinChildren() { return childrens; } + public Set getJoinSet() { return joinSet; } + @Override public String toString() { diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java index 0aaac14..02596d8 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java @@ -100,8 +100,8 @@ else if (message.equalsIgnoreCase("OKDONESENDDATA")) { } br.close(); //TODO table name is what? - //Task task = new CreateTmpTableTask(header[0], header[1], columnDefinitions); - Task task = new CreateTmpTableTask(null, header[1], columnDefinitions, this.path); + Task task = new CreateTmpTableTask(header[0], header[1], columnDefinitions, this.path); + //Task task = new CreateTmpTableTask(null, header[1], columnDefinitions, this.path); PardResultSet resultSet = executor.executeStatus(task); logger.info("Create tmp table: " + resultSet.getStatus().toString()); writer = null; From 4bb27b4b4e9f23b0d0359f611a2df3e51f234cce Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 11:45:51 +0800 Subject: [PATCH 39/75] update doc: add server startup and shutdown description --- doc/pard-report.tex | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 5fd424f..1dc5ab8 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -163,12 +163,37 @@ \section{系统架构} \label{fig:node1} \end{figure} -\subsection{启动/关闭流程} +\subsection{PardServer启动/关闭流程} Pard Server的启动流程: \begin{enumerate} -\item 节点注册。 +\item 初始化配置。读取配置文件,并且检查配置项。 +\item 加载connector。加载配置的connector,包括初始化数据库JDBC连接的连接池。 +\item 加载Catalog。初始化Catalog与etcd的连接,并启动etcd的watch线程。 +\item 加载本地执行器(Executor)。初始化本地执行器。 +\item 加载NodeKeeper。初始化本地的NodeKeeper模块。 +\item 启动数据传输的ExchangeServer。以线程方式初始化和启动Netty。不阻塞主进程。 +\item 启动文件传输的FileExchangeServer。以线程方式初始化和启动Netty。不阻塞主进程。 +\item 启动RPCServer。以线程方式初始化和启动RPC服务。不阻塞主进程。 +\item 加载JobScheduler。初始化JobScheduler,并创建单例。 +\item 加载TaskScheduler。初始化TaskScheduler,并创建单例。 +\item Pard Server注册。向NodeKeeper注册一个Pard Server,包括名称、IP地址、RPC端口、数据传输端口、文件传输端口等。该信息会在etcd中进行同步,方便其他节点查询。 +\item 启动Pard Web Server。以线程方式启动内嵌的Jetty作为web server,目前用于展示查询计划。 +\item 启动socket监听。服务器和客户端之间采用socket进行通信,启动服务器端的socket监听线程。 +\item 注册shutdownHook。注册JVM进程停止的shutdownHook,该hook中添加的方法将会按照顺序在JVM停止之前执行,进行清理和资源释放。 +\end{enumerate} + +Pard Server的停止流程: +\begin{enumerate} +\item 停止web server。 +\item 停止socket连接和监听。 +\item 通知NodeKeeper更改Pard Server的状态为下线(或从NodeKeeper中删除该节点)。 +\item 停止Catalog。中止etcd的watch线程,并释放与etcd的连接。 +\item 停止本地执行器(Executor)。停止正在执行的task。 +\item 停止数据传输的ExchangeServer。关闭Netty线程。 +\item 停止文件传输的FileExchangeServer。关闭Netty线程。 +\item 停止RPCServer。关闭RPC线程。 +\item 关闭Connector。关闭与数据库的连接池。 \end{enumerate} -class PardServer \subsection{时间安排} 如图\ref{fig:tl}。 @@ -181,7 +206,7 @@ \subsection{时间安排} \end{figure} \section{各模块详细设计} -\subsection{Execution Flow} +\subsection{执行流程} package cn.edu.ruc.iir.pard.scheduler; job From c49e6c2dd239c3932cff56ffaeb2f32f1b352b6b Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 12:41:34 +0800 Subject: [PATCH 40/75] fix the generate task bug. --- .../executor/connector/node/NodeHelper.java | 4 ++ .../connector/node/TableScanNode.java | 10 +++++ .../iir/pard/planner/dml/QueryTestPlan.java | 27 ++++++++++++ .../ruc/iir/pard/scheduler/TaskScheduler.java | 42 +++++++++++++------ .../cn/edu/ruc/iir/pard/web/PardServlet.java | 7 +++- .../iir/pard/server/PardQueryHandlerTest.java | 29 ++++++++++--- .../cn/edu/ruc/iir/pard/sql/expr/Expr.java | 9 ++-- 7 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryTestPlan.java diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java index a555e34..9bfc67a 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java @@ -78,6 +78,9 @@ public static String parseLists(List list) public static List getChildren(PlanNode node) { List list = new ArrayList(); + if (node == null) { + return list; + } if (node instanceof UnionNode) { UnionNode union = (UnionNode) node; return union.getUnionChildren(); @@ -108,6 +111,7 @@ public static Map getPlanNodeInfo(PlanNode node) obj.put("schema", cnode.getSchema()); obj.put("table", cnode.getTable()); obj.put("site", cnode.getSite()); + obj.put("alias", cnode.getAlias()); //obj.put("child", toJSON(cnode.getLeftChild())); return obj; } diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java index 94c2382..6732871 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/TableScanNode.java @@ -14,6 +14,7 @@ public class TableScanNode private String schema; private String table; private String site; + private String alias; /* private Optional limit; private Optional sort; @@ -136,6 +137,15 @@ public String toString() .add("table", table) .add("site", site) .add("child", getLeftChild()) + .add("alias", alias) .toString(); } + public String getAlias() + { + return alias; + } + public void setAlias(String alias) + { + this.alias = alias; + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryTestPlan.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryTestPlan.java new file mode 100644 index 0000000..ecd7dbf --- /dev/null +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/planner/dml/QueryTestPlan.java @@ -0,0 +1,27 @@ +package cn.edu.ruc.iir.pard.planner.dml; + +import cn.edu.ruc.iir.pard.commons.exception.ErrorMessage; +import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; +import cn.edu.ruc.iir.pard.sql.parser.SqlParser; + +public class QueryTestPlan + extends QueryPlan +{ + private PlanNode node; + public QueryTestPlan(PlanNode node, String info) + { + super(new SqlParser().createStatement("select * from " + info)); + this.node = node; + } + + @Override + public ErrorMessage semanticAnalysis() + { + return new ErrorMessage(); + } + + public PlanNode getPlan() + { + return node; + } +} diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 4cc11b7..8f8fac8 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -388,7 +388,9 @@ public void processJoinTask(JoinNode node, Map joinMap, Map nodeDataArray = new ArrayList(); List linkedDataArray = new ArrayList(); - PlanNode node = ((QueryPlan) plan).optimize(); + PlanNode node = ((QueryPlan) plan).getPlan(); //Map mapping = new HashMap(); Queue que = new LinkedList(); @@ -169,6 +169,9 @@ public String getBody(QueryPlan plan) throws IOException level++; List children = NodeHelper.getChildren(planNode); for (PlanNode pn : children) { + if (pn == null) { + continue; + } que.add(pn); //nodeLevel.put(pn, level); nodeLevelQue.add(level); @@ -186,7 +189,7 @@ public String getBody(QueryPlan plan) throws IOException que.add(node); PNode pa = parse(node); int xInc = 270; - int yInc = 150; + int yInc = 200; pa.locx = giveX(1, maxNumber, xInc, 1); pa.locy = 60 + giveY(1, yInc); //mapping.put(node, pa); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index c0f1781..737a328 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -1,15 +1,17 @@ package cn.edu.ruc.iir.pard.server; +import cn.edu.ruc.iir.pard.executor.connector.JoinTask; +import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.planner.PardPlanner; import cn.edu.ruc.iir.pard.planner.Plan; import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; -import cn.edu.ruc.iir.pard.scheduler.Job; -import cn.edu.ruc.iir.pard.scheduler.JobScheduler; -import cn.edu.ruc.iir.pard.scheduler.JobScheduler.JobState; +import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; +import cn.edu.ruc.iir.pard.planner.dml.QueryTestPlan; import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Statement; +import cn.edu.ruc.iir.pard.web.PardServlet; import org.testng.annotations.Test; import java.util.List; @@ -21,17 +23,32 @@ public class PardQueryHandlerTest public void executeQuery() { UsePlan.setCurrentSchema("book"); - //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; - String sql = "select * from book@pard0"; + String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; + //String sql = "select * from book@pard0"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); plan.setJobId("aa"); List task = TaskScheduler.INSTANCE().generateTasks(plan); + PardServlet.planList.add((QueryPlan) plan); + for (Task t : task) { + System.out.println(t.getTaskId()); + if (t instanceof SendDataTask) { + QueryPlan p = new QueryTestPlan(((SendDataTask) t).getNode(), "send_Data_" + t.getTaskId()); + PardServlet.planList.add(p); + } + else if (t instanceof JoinTask) { + QueryPlan p = new QueryTestPlan(((JoinTask) t).getNode(), "Join_" + t.getTaskId()); + PardServlet.planList.add(p); + } + } + System.out.println(PardServlet.planList.size()); + PardWebServer.main(new String[0]); + /* Job job = JobScheduler.INSTANCE().newJob(); task.forEach(job::addTask); job.setJobState(JobState.EXECUTING); job.setPlan(plan); - TaskScheduler.INSTANCE().executeJob(job); + TaskScheduler.INSTANCE().executeJob(job);*/ } } diff --git a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java index 63557a5..b12d019 100644 --- a/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java +++ b/pard-optimizer/src/main/java/cn/edu/ruc/iir/pard/sql/expr/Expr.java @@ -91,18 +91,21 @@ public static Expr replaceTableName(Expr e1, String from, String to) { Expr e = Expr.clone(e1); if (e instanceof SingleExpr) { + System.out.println("from " + e.toString()); SingleExpr se = (SingleExpr) e; Item lv = se.getLvalue(); Item rv = se.getRvalue(); - if (lv instanceof ColumnItem && ((ColumnItem) lv).getTableName().toLowerCase().equals(from)) { + if (lv instanceof ColumnItem && ((ColumnItem) lv).getTableName().equalsIgnoreCase(from)) { ColumnItem ci = (ColumnItem) lv; lv = new ColumnItem(to, ci.getColumnName(), ci.getDataType()); } - if (rv instanceof ColumnItem && ((ColumnItem) rv).getTableName().toLowerCase().equals(from)) { + if (rv instanceof ColumnItem && ((ColumnItem) rv).getTableName().equalsIgnoreCase(from)) { ColumnItem ci = (ColumnItem) rv; rv = new ColumnItem(to, ci.getColumnName(), ci.getDataType()); } - return new SingleExpr(lv, rv, se.getCompareType()); + se = new SingleExpr(lv, rv, se.getCompareType()); + //System.out.println("to " + se.toString()); + return se; } else if (e instanceof CompositionExpr) { CompositionExpr ce = (CompositionExpr) e; From a4ddad7e833c7503aaa3d288d735d8f9bfad224f Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 12:50:45 +0800 Subject: [PATCH 41/75] update doc --- doc/pard-report.fls | 1 + doc/pard-report.tex | 24 ++++++++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/doc/pard-report.fls b/doc/pard-report.fls index 774fba8..53d2eff 100644 --- a/doc/pard-report.fls +++ b/doc/pard-report.fls @@ -146,6 +146,7 @@ INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT figure/release.png INPUT figure/architecture.png INPUT figure/pard-node-in.png INPUT figure/timeline.png diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 1dc5ab8..0d8d697 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -98,7 +98,7 @@ \subsection{使用说明} 解压后目录结构如图\ref{release} \begin{figure}[htbp] \centering - \includegraphics[width=\linewidth]{figure/release.tiff} + \includegraphics[width=\linewidth]{figure/release.png} \caption{发布版目录结构} \label{fig:release} \end{figure} @@ -246,7 +246,7 @@ \subsubsection{Join 流程} -\subsection{Communication} +\subsection{节点通信} 通讯任务依据数据传输量的大小,和任务本身性质,可以自然的分为两类: @@ -254,7 +254,7 @@ \subsection{Communication} -\subsection{Catalog} +\subsection{元数据} 元数据模型 etcd @@ -262,7 +262,7 @@ \subsection{Catalog} -\subsection{Parser} +\subsection{SQL解析} 语义语法解析 Antlrv4 @@ -328,16 +328,12 @@ \subsection{Parser} -\subsection{SQL Optimization} -package cn.edu.ruc.iir.pard.server.PardQueryHandler; - - - - - -\subsection{Project Dependency Management} - - +\subsection{SQL优化} +% PLAN树结构 +% PROJECT/FILTER下推 +% 表达式计算 +% INSERT/DELETE/SELECT剪枝 +% JOIN优化 \section{任务分工及小结} From a953cde10db47f8d805c1528bb6cad7181a5ce6b Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 12:54:45 +0800 Subject: [PATCH 42/75] add assembly --- pard-assembly/pom.xml | 36 ++++++++++++++++++------------------ pom.xml | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pard-assembly/pom.xml b/pard-assembly/pom.xml index d0d870a..117bdeb 100644 --- a/pard-assembly/pom.xml +++ b/pard-assembly/pom.xml @@ -17,24 +17,24 @@ - - - - - - - - - - - - - - - - - - + + org.apache.maven.plugins + maven-assembly-plugin + + + src/main/assembly/pard-final.xml + + + + + make-assembly + package + + single + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 75f6d8b..d297251 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,6 @@ pom 1.0-SNAPSHOT - pard-assembly pard-parser pard-connector pard-catalog @@ -21,6 +20,7 @@ pard-executor pard-commons pard-client + pard-assembly From ad36f6b350c324bd7c02dc6fa2c1710f61155eba Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 12:59:19 +0800 Subject: [PATCH 43/75] check style bug. --- .../edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java | 1 - .../main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java | 1 - 2 files changed, 2 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index ad9f103..e496517 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -32,7 +32,6 @@ import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; import cn.edu.ruc.iir.pard.sql.tree.Expression; -//import cn.edu.ruc.iir.pard.sql.tree.Join; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; diff --git a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java index 08137f1..353cd8b 100644 --- a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java +++ b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java @@ -9,7 +9,6 @@ import cn.edu.ruc.iir.pard.exchange.PardFileExchangeClient; import cn.edu.ruc.iir.pard.executor.connector.Block; import cn.edu.ruc.iir.pard.executor.connector.Connector; -//import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.QueryTask; import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; From 7f63487123de4e77614c5733da6104ab4ee40b57 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 13:09:50 +0800 Subject: [PATCH 44/75] add supplement for join --- .../postgresql/PostgresConnector.java | 94 ++++++++++++++++--- 1 file changed, 81 insertions(+), 13 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index ad9f103..e190b1b 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -31,6 +31,7 @@ import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; +import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; //import cn.edu.ruc.iir.pard.sql.tree.Join; import com.google.common.collect.ImmutableList; @@ -814,25 +815,92 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) StringBuilder joinSQL = new StringBuilder("select "); List nodeList = new ArrayList<>(); int nodeListCursor = 0; - String schemaName = null; - String tableName = null; - FilterNode filterNode = null; - ProjectNode projectNode1 = null; - JoinNode joinNode = null; - ProjectNode projectNode2 = null; - SortNode sortNode = null; - LimitNode limitNode = null; - boolean isFilter = false; - boolean isProject1 = false; - boolean isJoin = false; - boolean isProject2 = false; + boolean isProject = false; boolean isSort = false; boolean isLimit = false; + ProjectNode projectNode = null; + LimitNode limitNode = null; + SortNode sortNode = null; + JoinNode joinNode = null; nodeList.add(rootNode); nodeListCursor++; - while (nodeList.get(nodeListCursor - 1).hasChildren()) { + + while (nodeList.get(nodeListCursor - 1 ).hasChildren()) { nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); nodeListCursor++; + if (nodeList.get(nodeListCursor - 1) instanceof JoinNode) { + joinNode = (JoinNode) nodeList.get(nodeListCursor - 1); + break; + } + } + + for (int i = nodeListCursor - 1; i >= 0; i--) { + if (nodeList.get(i) instanceof LimitNode) { + limitNode = (LimitNode) nodeList.get(i); + isLimit = true; + } + + if (nodeList.get(i) instanceof SortNode) { + sortNode = (SortNode) nodeList.get(i); + isSort = true; + } + + if (nodeList.get(i) instanceof ProjectNode) { + projectNode = (ProjectNode) nodeList.get(i); + isProject = true; + } + } + + if (isProject) { + List columns = projectNode.getColumns(); + for (Column column : columns) { + joinSQL.append(column.getColumnName()); + joinSQL.append(","); + } + joinSQL = new StringBuilder(joinSQL.substring(0, joinSQL.length() - 1)); + } + else { + joinSQL.append(" *"); + } + + joinSQL.append(" from "); + StringBuilder whereClause = new StringBuilder(" where "); + List joinChildren = joinNode.getJoinChildren(); + if (joinNode.getExprList().size() > 0) { + whereClause.append(joinNode.getExprList().get(0).toString()); + } + else { + whereClause.append((String)(joinNode.getJoinSet().iterator().next())); + } + whereClause.append(" "); + + Iterator it = joinChildren.iterator(); + while (it.hasNext()) { + PlanNode childRootNode = (PlanNode) it.next(); + List childNodeList = new ArrayList<>(); + int childNodeListCursor = 0; + ProjectNode childProjectNode = null; + FilterNode childFilterNode = null; + TableScanNode childTableScanNode = null; + boolean childIsProject = false; + boolean childIsFilter = false; + boolean childIsTableScan = false; + childNodeList.add(childRootNode); + childNodeListCursor++; + while (childNodeList.get(childNodeListCursor - 1).hasChildren()) { + childNodeList.add(childNodeList.get(childNodeListCursor - 1).getLeftChild()); + childNodeListCursor++; + } + for (int i = childNodeListCursor - 1; i >= 0; i--) { + if (childNodeList.get(i) instanceof ProjectNode) { + childProjectNode = (ProjectNode) childNodeList.get(i); + childIsProject = true; + } + if (childNodeList.get(i) instanceof FilterNode) { + childFilterNode = (FilterNode) childNodeList.get(i); + childIsFilter = true; + } + } } } catch (SQLException e) { From af0a73f30c9ef1a171f15c1f3ff80212baf57d3d Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 13:40:36 +0800 Subject: [PATCH 45/75] fix null pointer --- .../iir/pard/connector/postgresql/PostgresConnector.java | 8 ++++---- .../ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index e496517..3e6a849 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -637,7 +637,7 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) Map siteExpression = task.getSiteExpression(); // site -> Expression Map tmpTableMap = task.getTmpTableMap(); // site -> tmpTableName - boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema); + boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema, table); if (flag == true) { conn.close(); return PardResultSet.okResultSet; @@ -841,7 +841,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) return PardResultSet.execErrResultSet; } - private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema) + private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema, String table) { boolean isSucceeded; Map localWriter = new HashMap(); // site -> local BufferedWirter @@ -849,7 +849,7 @@ private boolean dispense(Map siteExpression, Map col) ValueItem vi = vList.get(i); e = Expr.generalReplace(e, ci, vi); } - System.out.println(e.toString()); +// System.out.println(e.toString()); e = Expr.optimize(e, Expr.LogicOperator.AND); if (e instanceof TrueExpr) { return true; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java index 02596d8..68eca5b 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/exchange/ExchangeFileReceiveHandler.java @@ -90,8 +90,9 @@ else if (message.equalsIgnoreCase("OKDONESENDDATA")) { } BufferedReader br = new BufferedReader(new FileReader(new File(this.path))); String[] header = br.readLine().split("\t"); + logger.info("SEND DATA HEADER: " + header[0] + " " + header[1]); TableDao tableDao = new TableDao(header[0]); - Table table = tableDao.loadByName(header[1]); + Table table = tableDao.loadByName(header[2]); HashMap tableColumn = table.getColumns(); List columnDefinitions = new ArrayList<>(); String[] columnNames = br.readLine().split("\t"); From 76f363a28f33d5c2b6d22f9e245f38912ad80084 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 13:44:57 +0800 Subject: [PATCH 46/75] join done initially --- .../postgresql/PostgresConnector.java | 66 ++++++++++++++++--- .../iir/pard/executor/PardTaskExecutor.java | 23 +++++-- 2 files changed, 73 insertions(+), 16 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index f0d3e69..973172b 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -33,6 +33,7 @@ import cn.edu.ruc.iir.pard.sql.expr.ValueItem; import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; +import cn.edu.ruc.iir.pard.sql.tree.Table; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; @@ -862,18 +863,11 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) joinSQL.append(" *"); } - joinSQL.append(" from "); + StringBuilder fromClause = new StringBuilder(" from "); StringBuilder whereClause = new StringBuilder(" where "); List joinChildren = joinNode.getJoinChildren(); - if (joinNode.getExprList().size() > 0) { - whereClause.append(joinNode.getExprList().get(0).toString()); - } - else { - whereClause.append((String)(joinNode.getJoinSet().iterator().next())); - } - whereClause.append(" "); - Iterator it = joinChildren.iterator(); + Boolean isFirst = true; while (it.hasNext()) { PlanNode childRootNode = (PlanNode) it.next(); List childNodeList = new ArrayList<>(); @@ -899,8 +893,62 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) childFilterNode = (FilterNode) childNodeList.get(i); childIsFilter = true; } + if (childNodeList.get(i) instanceof TableScanNode) { + childTableScanNode = (TableScanNode) childNodeList.get(i); + childIsTableScan = true; + } + } + //HERE WE IGNORE THE childProjectNode + if (childIsFilter) { + whereClause.append("and " + childFilterNode.getExpression()); + } + if (childIsTableScan) { + String schemaName = childTableScanNode.getSchema(); + String tableName = childTableScanNode.getTable(); + String aliasName = childTableScanNode.getAlias(); + if (isFirst) { + fromClause.append(schemaName + "." + tableName); + fromClause.append( "inner join "); + isFirst = false; + } + else { + fromClause.append(schemaName + "." + aliasName); + fromClause.append(" on "); + } + } + } + if (joinNode.getExprList().size() > 0) { + whereClause.append(joinNode.getExprList().get(0).toString()); + } + else { + whereClause.append((String)(joinNode.getJoinSet().iterator().next())); + } + if (isSort) { + whereClause.append("order by"); + List columns = sortNode.getColumns(); + for (Column column : columns) { + whereClause.append(" "); + whereClause.append(column.getColumnName()); + whereClause.append(","); } + whereClause = new StringBuilder(whereClause.substring(0, whereClause.length() - 1)); + } + if (isLimit) { + whereClause.append(" limit "); + whereClause.append(limitNode.getLimitNum()); } + joinSQL.append(fromClause.toString() + whereClause.toString()); + logger.info("Postgres connector: " + joinSQL); + ResultSet rs = statement.executeQuery(joinSQL.toString()); + List columns = new ArrayList<>(); + if (isProject) { + columns = projectNode.getColumns(); + } + logger.info("JOIN SUCCESSFULLY"); + PardResultSet prs = new PardResultSet(PardResultSet.ResultStatus.OK, columns); + prs.setJdbcResultSet(rs); + prs.setJdbcConnection(conn); + return prs; } catch (SQLException e) { logger.info("JOIN FAILED"); diff --git a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java index 353cd8b..5c0de21 100644 --- a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java +++ b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java @@ -88,6 +88,7 @@ private Block executeSendData(Task task) PardResultSet pardResultSet = connector.execute(task); resultSetMap.put(taskId, pardResultSet); sequenceIds.put(taskId, 0); + schemaMap.put(taskId, pardResultSet.getSchema()); } PardResultSet resultSet = resultSetMap.get(taskId); @@ -140,18 +141,26 @@ private Block executeJoin(Task task) PardResultSet pardResultSet = connector.execute(task); resultSetMap.put(taskId, pardResultSet); sequenceIds.put(taskId, 0); + schemaMap.put(taskId, pardResultSet.getSchema()); } PardResultSet resultSet = resultSetMap.get(taskId); int seq = sequenceIds.get(taskId) + 1; - List column = new ArrayList<>(); - Column col0 = new Column(); - col0.setDataType(DataType.INT.getType()); - col0.setColumnName("id"); - column.add(col0); - Block block = new Block(column, 50 * 1024 * 1024, seq, taskId); + Block block = new Block(schemaMap.get(taskId), 50 * 1024 * 1024, seq, taskId); block.setSequenceHasNext(false); sequenceIds.put(taskId, seq); - + Row row; + while ((row = resultSet.getNext()) != null) { + if (!block.addRow(row)) { + block.setSequenceHasNext(true); + break; + } + } + logger.info("Result block num: " + block.getRows().size()); + if (!block.isSequenceHasNext()) { + resultSetMap.remove(taskId); + schemaMap.remove(taskId); + sequenceIds.remove(taskId); + } return block; } From 75ff48d41feef0402e5817d1780dc6cc5d28f8af Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 13:59:01 +0800 Subject: [PATCH 47/75] add table name for columns in join --- .../connector/postgresql/PostgresConnector.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index ea53937..fd77546 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -31,9 +31,9 @@ import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; -import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; +//import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; -import cn.edu.ruc.iir.pard.sql.tree.Table; +//import cn.edu.ruc.iir.pard.sql.tree.Table; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; @@ -825,7 +825,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) nodeList.add(rootNode); nodeListCursor++; - while (nodeList.get(nodeListCursor - 1 ).hasChildren()) { + while (nodeList.get(nodeListCursor - 1).hasChildren()) { nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); nodeListCursor++; if (nodeList.get(nodeListCursor - 1) instanceof JoinNode) { @@ -854,7 +854,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (isProject) { List columns = projectNode.getColumns(); for (Column column : columns) { - joinSQL.append(column.getColumnName()); + joinSQL.append(column.getTableName() + "." + column.getColumnName()); joinSQL.append(","); } joinSQL = new StringBuilder(joinSQL.substring(0, joinSQL.length() - 1)); @@ -908,7 +908,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) String aliasName = childTableScanNode.getAlias(); if (isFirst) { fromClause.append(schemaName + "." + tableName); - fromClause.append( "inner join "); + fromClause.append("inner join "); isFirst = false; } else { @@ -921,14 +921,14 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) whereClause.append(joinNode.getExprList().get(0).toString()); } else { - whereClause.append((String)(joinNode.getJoinSet().iterator().next())); + whereClause.append((String) (joinNode.getJoinSet().iterator().next())); } if (isSort) { whereClause.append("order by"); List columns = sortNode.getColumns(); for (Column column : columns) { whereClause.append(" "); - whereClause.append(column.getColumnName()); + whereClause.append(column.getTableName() + "." + column.getColumnName()); whereClause.append(","); } whereClause = new StringBuilder(whereClause.substring(0, whereClause.length() - 1)); From 9bd42a45eb3cea2d27ee47b7a6a553d8f4874d33 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 14:11:27 +0800 Subject: [PATCH 48/75] to merge --- .../postgresql/PostgresConnector.java | 1011 ----------------- 1 file changed, 1011 deletions(-) delete mode 100644 pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java deleted file mode 100644 index bf75502..0000000 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ /dev/null @@ -1,1011 +0,0 @@ -package cn.edu.ruc.iir.pard.connector.postgresql; - -import cn.edu.ruc.iir.pard.catalog.Column; -import cn.edu.ruc.iir.pard.commons.config.PardUserConfiguration; -import cn.edu.ruc.iir.pard.commons.memory.Row; -import cn.edu.ruc.iir.pard.commons.utils.DataType; -import cn.edu.ruc.iir.pard.commons.utils.RowConstructor; -import cn.edu.ruc.iir.pard.executor.connector.Connector; -import cn.edu.ruc.iir.pard.executor.connector.CreateSchemaTask; -import cn.edu.ruc.iir.pard.executor.connector.CreateTableTask; -import cn.edu.ruc.iir.pard.executor.connector.CreateTmpTableTask; -import cn.edu.ruc.iir.pard.executor.connector.DeleteTask; -import cn.edu.ruc.iir.pard.executor.connector.DropSchemaTask; -import cn.edu.ruc.iir.pard.executor.connector.DropTableTask; -import cn.edu.ruc.iir.pard.executor.connector.InsertIntoTask; -import cn.edu.ruc.iir.pard.executor.connector.JoinTask; -import cn.edu.ruc.iir.pard.executor.connector.LoadTask; -import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; -import cn.edu.ruc.iir.pard.executor.connector.QueryTask; -import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; -import cn.edu.ruc.iir.pard.executor.connector.Task; -import cn.edu.ruc.iir.pard.executor.connector.node.FilterNode; -import cn.edu.ruc.iir.pard.executor.connector.node.LimitNode; -import cn.edu.ruc.iir.pard.executor.connector.node.PlanNode; -import cn.edu.ruc.iir.pard.executor.connector.node.ProjectNode; -import cn.edu.ruc.iir.pard.executor.connector.node.SortNode; -import cn.edu.ruc.iir.pard.executor.connector.node.TableScanNode; -import cn.edu.ruc.iir.pard.sql.expr.ColumnItem; -import cn.edu.ruc.iir.pard.sql.expr.Expr; -import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; -import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; -import cn.edu.ruc.iir.pard.sql.expr.ValueItem; -import cn.edu.ruc.iir.pard.sql.tree.Expression; -import cn.edu.ruc.iir.pard.sql.tree.Join; -import com.google.common.collect.ImmutableList; -import org.postgresql.copy.CopyManager; -import org.postgresql.jdbc.PgConnection; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Types; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -/** - * pard - * - * @author guodong - */ -public class PostgresConnector - implements Connector -{ - private final Logger logger = Logger.getLogger(PostgresConnector.class.getName()); - private final ConnectionPool connectionPool; - - private static final class PostgresConnectorHolder - { - private static final PostgresConnector instance = new PostgresConnector(); - } - - public static final PostgresConnector INSTANCE() - { - return PostgresConnectorHolder.instance; - } - - private PostgresConnector() - { - PardUserConfiguration configuration = PardUserConfiguration.INSTANCE(); - connectionPool = new ConnectionPool( - configuration.getConnectorDriver(), - configuration.getConnectorHost(), - configuration.getConnectorUser(), - configuration.getConnectorPassword()); - } - - @Override - public PardResultSet execute(Task task) - { - try { - Connection conn = connectionPool.getConnection(); - if (task instanceof QueryTask) { - return executeQuery(conn, (QueryTask) task); - } - if (task instanceof CreateSchemaTask) { - return executeCreateSchema(conn, (CreateSchemaTask) task); - } - if (task instanceof CreateTableTask) { - return executeCreateTable(conn, (CreateTableTask) task); - } - if (task instanceof DropSchemaTask) { - return executeDropSchema(conn, (DropSchemaTask) task); - } - if (task instanceof DropTableTask) { - return executeDropTable(conn, (DropTableTask) task); - } - if (task instanceof InsertIntoTask) { - return executeBatchInsertInto(conn, (InsertIntoTask) task); - } - if (task instanceof LoadTask) { - return executeLoad(conn, (LoadTask) task); - } - if (task instanceof DeleteTask) { - return executeDelete(conn, (DeleteTask) task); - } - if (task instanceof JoinTask) { - return executeJoin(conn, (JoinTask) task); - } - if (task instanceof SendDataTask) { - return executeSendDataTask(conn, (SendDataTask) task); - } - if (task instanceof CreateTmpTableTask) { - return executeCreateTmpTable(conn, (CreateTmpTableTask) task); - } - if (task instanceof JoinTask) { - return executeJoin(conn, (JoinTask) task); - } - } - catch (SQLException e) { - logger.info("GET CONNECTION FAILED"); - e.printStackTrace(); - } - return new PardResultSet(PardResultSet.ResultStatus.EXECUTING_ERR); - } - - @Override - public void close() - { - logger.info("Connector close"); - connectionPool.close(); - } - - private PardResultSet executeCreateSchema(Connection conn, CreateSchemaTask task) - { - try { - Statement statement = conn.createStatement(); - String createSchemaSQL; - createSchemaSQL = "create schema " + task.getSchemaName(); - int status = statement.executeUpdate(createSchemaSQL); - logger.info("Connector: " + createSchemaSQL); - if (status == 0) { - logger.info("CREATE SCHEMA SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("CREATE SCHEMA FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeCreateTable(Connection conn, CreateTableTask task) - { - try { - StringBuilder createTableSQL = new StringBuilder("create table if not exists " + task.getSchemaName() + "." + task.getTableName() + "("); - for (Column cd : task.getColumnDefinitions()) { - if (cd.getKey() == 1) { - createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())).append(" primary key "); - } - else { - createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())); - } - createTableSQL.append(" ,"); - } - createTableSQL = new StringBuilder(createTableSQL.substring(0, createTableSQL.length() - 1)); - createTableSQL.append(")"); - logger.info("Connector: " + createTableSQL.toString()); - Statement statement = conn.createStatement(); - int status = statement.executeUpdate(createTableSQL.toString()); - if (status == 0) { - logger.info("CREATE TABLE SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("CREATE TABLE FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeDropSchema(Connection conn, DropSchemaTask task) - { - try { - Statement statement = conn.createStatement(); - String dropSchemaSQL; - dropSchemaSQL = "drop schema " + task.getSchema() + " CASCADE"; - int status = statement.executeUpdate(dropSchemaSQL); - logger.info("Connector: " + dropSchemaSQL); - if (status == 0) { - logger.info("DROP SCHEMA SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("DROP SCHEMA FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeDropTable(Connection conn, DropTableTask task) - { - try { - Statement statement = conn.createStatement(); - String dropTableSQL; - if (task.getSchemaName() == null) { - dropTableSQL = "drop table " + task.getTableName(); - } - else { - dropTableSQL = "drop table " + task.getSchemaName() + "." + task.getTableName(); - } - logger.info("Postgres connector: " + dropTableSQL); - int status = statement.executeUpdate(dropTableSQL); - if (status == 0) { - logger.info("DROP TABLE SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("DROP TABLE FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - public PardResultSet executeInsertInto(Connection conn, InsertIntoTask task) - { - try { - Statement statement = conn.createStatement(); - List columns = task.getColumns(); - String[][] values = task.getValues(); - int fieldNum = columns.size(); - StringBuilder insertSQL; - int num = 0; - for (String[] value : values) { - insertSQL = new StringBuilder(" insert into " + task.getSchemaName() + "." + task.getTableName() + " values("); - for (int j = 0; j < fieldNum; j++) { - int type = columns.get(j).getDataType(); - if (type == DataType.CHAR.getType() || type == DataType.VARCHAR.getType()) { - insertSQL.append("'").append(value[j]).append("'"); - } - else { - insertSQL.append(value[j]); - } - insertSQL.append(","); - } - insertSQL = new StringBuilder(insertSQL.substring(0, insertSQL.length() - 1)); - insertSQL.append(")"); - logger.info("Connector: " + insertSQL.toString()); - statement.executeUpdate(insertSQL.toString()); - num++; - } - logger.info("INSERT SUCCESSFULLY"); - conn.close(); - return new PardResultSet(PardResultSet.ResultStatus.OK); - } - catch (SQLException e) { - logger.info("INSERT FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return new PardResultSet(PardResultSet.ResultStatus.EXECUTING_ERR); - } - - private PardResultSet executeBatchInsertInto(Connection conn, InsertIntoTask task) - { - try { - List columns = task.getColumns(); - String[][] values = task.getValues(); - int fieldNum = columns.size(); - StringBuilder insertSQL = new StringBuilder(" insert into " + task.getSchemaName() + "." + task.getTableName() + " values("); - for (int i = 0; i < fieldNum; i++) { - insertSQL.append("?,"); - } - insertSQL = new StringBuilder(insertSQL.substring(0, insertSQL.length() - 1)); - insertSQL.append(")"); - PreparedStatement pstmt = conn.prepareStatement(insertSQL.toString()); - for (String[] value : values) { - for (int j = 0; j < fieldNum; j++) { - int type = columns.get(j).getDataType(); - if (type == DataType.INT.getType()) { - pstmt.setInt(j + 1, Integer.parseInt(value[j])); - } - if (type == DataType.FLOAT.getType()) { - pstmt.setFloat(j + 1, Float.parseFloat(value[j])); - } - if (type == DataType.CHAR.getType() || type == DataType.VARCHAR.getType()) { - String v = value[j]; - // todo this is too implicit to replace all ' in string - v = v.replaceAll("'", ""); - pstmt.setString(j + 1, v); - } - } - pstmt.addBatch(); - } - pstmt.executeBatch(); - //conn.commit(); - logger.info("INSERT SUCCESSFULLY"); - conn.close(); - return PardResultSet.okResultSet; - } - catch (SQLException e) { - logger.info("INSERT FAILED"); - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeQuery(Connection conn, QueryTask task) - { - try { - Statement statement = conn.createStatement(); - StringBuilder querySQL = new StringBuilder("select "); - PlanNode rootNode = task.getPlanNode(); - List nodeList = new ArrayList<>(); - int nodeListCursor = 0; - String schemaName = null; - String tableName = null; - FilterNode filterNode = null; - ProjectNode projectNode = null; - SortNode sortNode = null; - LimitNode limitNode = null; - boolean isFilter = false; - boolean isProject = false; - boolean isSort = false; - boolean isLimit = false; - nodeList.add(rootNode); - nodeListCursor++; - while (nodeList.get(nodeListCursor - 1).hasChildren()) { - nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); - nodeListCursor++; - } - - for (int i = nodeListCursor - 1; i >= 0; i--) { - if (nodeList.get(i) instanceof TableScanNode) { - tableName = ((TableScanNode) nodeList.get(i)).getTable(); - schemaName = ((TableScanNode) nodeList.get(i)).getSchema(); - continue; - } - if (nodeList.get(i) instanceof FilterNode) { - filterNode = (FilterNode) nodeList.get(i); - isFilter = true; - continue; - } - if (nodeList.get(i) instanceof ProjectNode) { - projectNode = (ProjectNode) nodeList.get(i); - isProject = true; - continue; - } - if (nodeList.get(i) instanceof SortNode) { - sortNode = (SortNode) nodeList.get(i); - isSort = true; - continue; - } - if (nodeList.get(i) instanceof LimitNode) { - limitNode = (LimitNode) nodeList.get(i); - isLimit = true; - } - } - - if (isProject) { - List columns = projectNode.getColumns(); - for (Column column : columns) { - querySQL.append(column.getColumnName()); - querySQL.append(","); - } - querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); - } - else { - querySQL.append(" *"); - } - querySQL.append(" from "); - querySQL.append(schemaName); - querySQL.append("."); - querySQL.append(tableName); - if (isFilter) { - querySQL.append(" where ").append(filterNode.getExpression()).append(" "); - } - if (isSort) { - querySQL.append("order by"); - List columns = sortNode.getColumns(); - for (Column column : columns) { - querySQL.append(" "); - querySQL.append(column.getColumnName()); - querySQL.append(","); - } - querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); - } - if (isLimit) { - querySQL.append(" limit "); - querySQL.append(limitNode.getLimitNum()); - } - logger.info("Postgres connector: " + querySQL); - - ResultSet rs = statement.executeQuery(querySQL.toString()); - List columns = new ArrayList<>(); - - if (isProject) { - columns = projectNode.getColumns(); - } - logger.info("QUERY SUCCESSFULLY"); - PardResultSet prs = new PardResultSet(PardResultSet.ResultStatus.OK, columns); - prs.setJdbcResultSet(rs); - prs.setJdbcConnection(conn); - return prs; - } - catch (SQLException e) { - logger.info("QUERY FAILED"); - e.printStackTrace(); - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeLoad(Connection conn, LoadTask task) - { - String schema = task.getSchema(); - String table = task.getTable(); - List paths = task.getPaths(); - try { - PgConnection pgConnection; - if (!conn.isWrapperFor(PgConnection.class)) { - return PardResultSet.execErrResultSet; - } - pgConnection = conn.unwrap(PgConnection.class); - CopyManager copyManager = new CopyManager(pgConnection); - for (String path : paths) { - logger.info("Copying " + path + " into " + schema + "." + table); - String sql = "COPY " + schema + "." + table + " FROM STDIN DELIMITER E'\t'"; - logger.info("Postgres connector: " + sql); - File file = new File(path); - InputStream inputStream = new FileInputStream(file); - copyManager.copyIn(sql, inputStream); - file.deleteOnExit(); - } - PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK); - RowConstructor rowConstructor = new RowConstructor(); - rowConstructor.appendString(PardResultSet.ResultStatus.OK.toString()); - resultSet.add(rowConstructor.build()); - return resultSet; - } - catch (SQLException | IOException e) { - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeDelete(Connection conn, DeleteTask task) - { - String schema = task.getSchema(); - String table = task.getTable(); - try { - Statement statement = conn.createStatement(); - StringBuilder sb = new StringBuilder("DELETE FROM "); - sb.append(schema).append(".").append(table); - sb.append(" WHERE "); - sb.append(task.getExpression().toString()); - logger.info("Postgres connector: " + sb.toString()); - statement.executeUpdate(sb.toString()); - return PardResultSet.okResultSet; - } - catch (SQLException e) { - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) - { - String schema = task.getSchemaName(); - String table = null; - try { - Statement statement = conn.createStatement(); - StringBuilder querySQL = new StringBuilder("select "); - PlanNode rootNode = task.getNode(); - List nodeList = new ArrayList<>(); - int nodeListCursor = 0; - FilterNode filterNode = null; - ProjectNode projectNode = null; - SortNode sortNode = null; - LimitNode limitNode = null; - boolean isFilter = false; - boolean isProject = false; - boolean isSort = false; - boolean isLimit = false; - nodeList.add(rootNode); - nodeListCursor++; - while (nodeList.get(nodeListCursor - 1).hasChildren()) { - nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); - nodeListCursor++; - } - for (int i = nodeListCursor - 1; i >= 0; i--) { - if (nodeList.get(i) instanceof TableScanNode) { - table = ((TableScanNode) nodeList.get(i)).getTable(); - schema = ((TableScanNode) nodeList.get(i)).getSchema(); - continue; - } - - if (nodeList.get(i) instanceof FilterNode) { - filterNode = (FilterNode) nodeList.get(i); - isFilter = true; - continue; - } - - if (nodeList.get(i) instanceof ProjectNode) { - projectNode = (ProjectNode) nodeList.get(i); - isProject = true; - continue; - } - - if (nodeList.get(i) instanceof SortNode) { - sortNode = (SortNode) nodeList.get(i); - isSort = true; - continue; - } - - if (nodeList.get(i) instanceof LimitNode) { - limitNode = (LimitNode) nodeList.get(i); - isLimit = true; - } - } -// if (isProject) { - List cols = projectNode.getColumns(); - for (Column column : cols) { - querySQL.append(column.getColumnName()); - querySQL.append(","); - } - querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); -// } -// else { -// querySQL.append(" *"); -// } - querySQL.append(" from "); - querySQL.append(schema); - querySQL.append("."); - querySQL.append(table); - if (isFilter) { - querySQL.append(" where ").append(filterNode.getExpression()).append(" "); - } - if (isSort) { - querySQL.append("order by"); - List columns = sortNode.getColumns(); - for (Column column : columns) { - querySQL.append(" "); - querySQL.append(column.getColumnName()); - querySQL.append(","); - } - querySQL = new StringBuilder(querySQL.substring(0, querySQL.length() - 1)); - } - if (isLimit) { - querySQL.append(" limit "); - querySQL.append(limitNode.getLimitNum()); - } - - logger.info("Postgres connector: " + querySQL); - ResultSet rs = statement.executeQuery(querySQL.toString()); - - Map siteExpression = task.getSiteExpression(); // site -> Expression - Map tmpTableMap = task.getTmpTableMap(); // site -> tmpTableName - - boolean flag = dispense(siteExpression, tmpTableMap, rs, cols, schema, table); - if (flag == true) { - conn.close(); - return PardResultSet.okResultSet; - } - else { - conn.close(); - return PardResultSet.execErrResultSet; - } - } - catch (SQLException e) { - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - public PardResultSet executeCreateTmpTable(Connection conn, CreateTmpTableTask task) - { - String schemaName = task.getSchemaName(); - String tableName = task.getTableName(); - DropTableTask dropTableTask = new DropTableTask(schemaName, tableName); - PardResultSet prsDropTempTale = dropTempTable(conn, dropTableTask); - CreateTableTask createTableTask = new CreateTableTask(schemaName, tableName, false, task.getColumnDefinitions()); - PardResultSet prsCreateTempTable = createTempTable(conn, createTableTask); - String filePath1 = task.getPath(); - try { - BufferedReader br = new BufferedReader(new FileReader(new File(filePath1))); - BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath1 + "tmp"))); - String readIn = br.readLine(); - readIn = br.readLine(); - while ((readIn = br.readLine()) != null) { - bw.write(readIn); - bw.newLine(); - } - br.close(); - bw.flush(); - bw.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - LoadTask loadTask = new LoadTask(schemaName, tableName, ImmutableList.of(filePath1 + "tmp")); - PardResultSet prsLoadTemoTable = loadTmpTable(conn, loadTask); - return prsLoadTemoTable; - } - - private PardResultSet loadTmpTable(Connection conn, LoadTask task) - { - String schema = task.getSchema(); - String table = task.getTable(); - List paths = task.getPaths(); - try { - PgConnection pgConnection; - if (!conn.isWrapperFor(PgConnection.class)) { - return PardResultSet.execErrResultSet; - } - pgConnection = conn.unwrap(PgConnection.class); - CopyManager copyManager = new CopyManager(pgConnection); - for (String path : paths) { - if (schema != null) { - logger.info("Copying " + path + " into " + schema + "." + table); - String sql = "COPY " + schema + "." + table + " FROM STDIN DELIMITER E'\t'"; - logger.info("Postgres connector: " + sql); - File file = new File(path); - InputStream inputStream = new FileInputStream(file); - copyManager.copyIn(sql, inputStream); - file.deleteOnExit(); - } - else { - logger.info("Copying " + path + " into " + table); - String sql = "COPY " + table + " FROM STDIN DELIMITER E'\t'"; - logger.info("Postgres connector: " + sql); - File file = new File(path); - InputStream inputStream = new FileInputStream(file); - copyManager.copyIn(sql, inputStream); - file.deleteOnExit(); - } - } - PardResultSet resultSet = new PardResultSet(PardResultSet.ResultStatus.OK); - RowConstructor rowConstructor = new RowConstructor(); - rowConstructor.appendString(PardResultSet.ResultStatus.OK.toString()); - resultSet.add(rowConstructor.build()); - return resultSet; - } - catch (SQLException | IOException e) { - e.printStackTrace(); - } - finally { - try { - conn.close(); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet dropTempTable(Connection conn, DropTableTask task) - { - try { - Statement statement = conn.createStatement(); - String dropTableSQL; - if (task.getSchemaName() == null) { - dropTableSQL = "drop table if exists " + task.getTableName(); - } - else { - dropTableSQL = "drop table if exists " + task.getSchemaName() + "." + task.getTableName(); - } - logger.info("Postgres connector: " + dropTableSQL); - int status = statement.executeUpdate(dropTableSQL); - if (status == 0) { - logger.info("DROP TEMP TABLE SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("DROP TEMP TABLE FAILED"); - e.printStackTrace(); - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet createTempTable(Connection conn, CreateTableTask task) - { - try { - StringBuilder createTableSQL = new StringBuilder("create table if not exists "); - if (task.getSchemaName() != null) { - createTableSQL.append(task.getSchemaName() + "." + task.getTableName() + "("); - } - else { - createTableSQL.append(task.getTableName() + "("); - } - for (Column cd : task.getColumnDefinitions()) { - if (cd.getKey() == 1) { - createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())).append(" primary key "); - } - else { - createTableSQL.append(cd.getColumnName()).append(" ").append(getTypeString(cd.getDataType(), cd.getLen())); - } - createTableSQL.append(" ,"); - } - createTableSQL = new StringBuilder(createTableSQL.substring(0, createTableSQL.length() - 1)); - createTableSQL.append(")"); - logger.info("Connector: " + createTableSQL.toString()); - Statement statement = conn.createStatement(); - int status = statement.executeUpdate(createTableSQL.toString()); - if (status == 0) { - logger.info("CREATE TEMP TABLE SUCCESSFULLY"); - return PardResultSet.okResultSet; - } - } - catch (SQLException e) { - logger.info("CREATE TEMP TABLE FAILED"); - e.printStackTrace(); - } - return PardResultSet.execErrResultSet; - } - - private PardResultSet executeJoin(Connection conn, JoinTask task) - { - String tmpTableName = task.getTmpTableName(); - PlanNode rootNode = task.getNode(); - try { - Statement statement = conn.createStatement(); - StringBuilder joinSQL = new StringBuilder("select "); - List nodeList = new ArrayList<>(); - int nodeListCursor = 0; - String schemaName = null; - String tableName = null; - FilterNode filterNode = null; - ProjectNode projectNode = null; - SortNode sortNode = null; - LimitNode limitNode = null; - boolean isFilter = false; - boolean isProject = false; - boolean isSort = false; - boolean isLimit = false; - nodeList.add(rootNode); - nodeListCursor++; - while (nodeList.get(nodeListCursor - 1).hasChildren()) { - nodeList.add(nodeList.get(nodeListCursor - 1).getLeftChild()); - nodeListCursor++; - } - - } - catch (SQLException e) { - logger.info("JOIN FAILED"); - e.printStackTrace(); - } - return PardResultSet.execErrResultSet; - } - - private boolean dispense(Map siteExpression, Map tmpTableMap, ResultSet rs, List columns, String schema, String table) - { - boolean isSucceeded; - Map localWriter = new HashMap(); // site -> local BufferedWirter - for (String site : siteExpression.keySet()) { - try { - BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/dev/shm/" + site + tmpTableMap.get(site) + "SENDDATA"))); - localWriter.put(site, bw); - bw.write(schema + "\t" + table + "\n"); //schema name, table name - Iterator it = columns.iterator(); - String secondLine = ""; - while (it.hasNext()) { - secondLine += ((Column) it.next()).getColumnName() + "\t"; // column names - } - secondLine = secondLine.substring(0, secondLine.length() - 1); - bw.write(secondLine); - bw.write("\n"); - bw.flush(); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - try { - ResultSetMetaData rsmd = rs.getMetaData(); - int colNum = rsmd.getColumnCount(); - while (rs.next()) { - RowConstructor rowConstructor = new RowConstructor(); - List colTypes = new ArrayList<>(); - - for (int i = 0; i < colNum; i++) { - switch (rsmd.getColumnType(i + 1)) { - case Types.CHAR: - rowConstructor.appendString(rs.getString(i + 1)); - colTypes.add(DataType.CHAR.getType()); - break; - - case Types.VARCHAR: - rowConstructor.appendString(rs.getString(i + 1)); - colTypes.add(DataType.VARCHAR.getType()); - break; - - case Types.DATE: - rowConstructor.appendString(rs.getString(i + 1).toString()); - colTypes.add(DataType.DATE.getType()); - break; - - case Types.INTEGER: - rowConstructor.appendInt(rs.getInt(i + 1)); - colTypes.add(DataType.INT.getType()); - break; - - case Types.FLOAT: - rowConstructor.appendFloat(rs.getFloat(i + 1)); - colTypes.add(DataType.FLOAT.getType()); - break; - - case Types.DOUBLE: - rowConstructor.appendDouble(rs.getDouble(i + 1)); - colTypes.add(DataType.DOUBLE.getType()); - break; - - default: - break; - } - } - Row row = rowConstructor.build(); - for (Map.Entry entry : siteExpression.entrySet()) { - boolean ifTrue = compare(entry.getValue(), row, columns); - if (ifTrue) { - localWriter.get(entry.getKey()).write(rowConstructor.printRow(row, colTypes) + "\n"); - } - } - } - - for (Map.Entry entry : localWriter.entrySet()) { - entry.getValue().flush(); - entry.getValue().close(); - } - - isSucceeded = true; - return isSucceeded; - } - catch (SQLException e) { - e.printStackTrace(); - isSucceeded = false; - } - catch (IOException e) { - e.printStackTrace(); - isSucceeded = false; - } - return isSucceeded; - } - - private Boolean compare(Expression expr, Row row, List col) - { - List types = new ArrayList(); - col.forEach(x -> types.add(x.getDataType())); - String[] list = RowConstructor.printRow(row, types).split("\t"); - List ciList = new ArrayList(); - List vList = new ArrayList(); - Expr e = Expr.parse(expr); - for (int i = 0; i < list.length; i++) { - ColumnItem ci = new ColumnItem(col.get(i).getTableName(), col.get(i).getColumnName(), col.get(i).getDataType()); - ValueItem vi = new ValueItem(parseFromString(col.get(i).getDataType(), list[i])); - ciList.add(ci); - vList.add(vi); - } - for (int i = 0; i < list.length; i++) { - ColumnItem ci = ciList.get(i); - ValueItem vi = vList.get(i); - e = Expr.generalReplace(e, ci, vi); - } - System.out.println(e.toString()); - e = Expr.optimize(e, Expr.LogicOperator.AND); - if (e instanceof TrueExpr) { - return true; - } - else if (e instanceof FalseExpr) { - return false; - } - return null; - } - - private static Comparable parseFromString(int dataType, String value) - { - switch(dataType) { - case DataType.DataTypeInt.SMALLINT: - case DataType.DataTypeInt.BIGINT: - case DataType.DataTypeInt.INT: - return Long.parseLong(value); - case DataType.DataTypeInt.FLOAT: - case DataType.DataTypeInt.DOUBLE: - return Double.parseDouble(value); - case DataType.DataTypeInt.TEXT: - case DataType.DataTypeInt.CHAR: - case DataType.DataTypeInt.VARCHAR: - return value; - case DataType.DataTypeInt.TIME: - case DataType.DataTypeInt.DATE: - case DataType.DataTypeInt.TIMESTAMP: - return value; - } - return value; - } - - private String getTypeString(int type, int length) - { - if (type == DataType.INT.getType()) { - return "int"; - } - if (type == DataType.FLOAT.getType()) { - return "float"; - } - if (type == DataType.DOUBLE.getType()) { - return "double"; - } - if (type == DataType.DATE.getType()) { - return "date"; - } - if (type == DataType.CHAR.getType()) { - return "char(" + length + ")"; - } - if (type == DataType.VARCHAR.getType()) { - return "varchar(" + length + ")"; - } - // todo add more types - return null; - } -} From a754a86f45a2de9ebdaff08d8a1c1d15861486eb Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 14:14:25 +0800 Subject: [PATCH 49/75] del drop. --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 2 +- .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 1 + .../java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java | 3 ++- .../src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index e496517..c76cbd4 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -666,7 +666,7 @@ public PardResultSet executeCreateTmpTable(Connection conn, CreateTmpTableTask t String schemaName = task.getSchemaName(); String tableName = task.getTableName(); DropTableTask dropTableTask = new DropTableTask(schemaName, tableName); - PardResultSet prsDropTempTale = dropTempTable(conn, dropTableTask); + //PardResultSet prsDropTempTale = dropTempTable(conn, dropTableTask); CreateTableTask createTableTask = new CreateTableTask(schemaName, tableName, false, task.getColumnDefinitions()); PardResultSet prsCreateTempTable = createTempTable(conn, createTableTask); String filePath1 = task.getPath(); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 8f8fac8..27d9384 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -424,6 +424,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge Expr joinTaskSingleTableExpr = extractTableExpr(joinExpr, dataExpr, joinTableName.getValue(), node); String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); tmpTableName = tmpTableName.replace('-', '_').replace('-', '_').replace('-', '_'); + tmpTableName += (int) (Math.random() * Integer.MAX_VALUE); while (tmpTableName.contains(" ")) { tmpTableName = tmpTableName.replace(" ", ""); } diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index 737a328..5f6d0bf 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -23,8 +23,9 @@ public class PardQueryHandlerTest public void executeQuery() { UsePlan.setCurrentSchema("book"); - String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; + //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; //String sql = "select * from book@pard0"; + String sql = "select * from book,orders where book.id=orders.book_id"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); diff --git a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java index 1e8c002..fb45d37 100644 --- a/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java +++ b/pard-optimizer/src/test/java/cn/edu/ruc/iir/pard/sql/expr/ExprTest.java @@ -194,7 +194,7 @@ public Boolean match(Expression expr, Row row, List col) ValueItem vi = vList.get(i); e = Expr.generalReplace(e, ci, vi); } - System.out.println(e.toString()); + //System.out.println(e.toString()); e = Expr.optimize(e, LogicOperator.AND); if (e instanceof TrueExpr) { return true; From ecef567feb3c1e61a472746cf1cc6b11a5540e02 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 14:30:39 +0800 Subject: [PATCH 50/75] fix. --- .../iir/pard/connector/postgresql/PostgresConnector.java | 2 -- .../java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 7 ++++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 706d0b3..257ddd6 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -31,9 +31,7 @@ import cn.edu.ruc.iir.pard.sql.expr.FalseExpr; import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; import cn.edu.ruc.iir.pard.sql.expr.ValueItem; -//import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; -//import cn.edu.ruc.iir.pard.sql.tree.Table; import com.google.common.collect.ImmutableList; import org.postgresql.copy.CopyManager; import org.postgresql.jdbc.PgConnection; diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 27d9384..27fffb8 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -378,7 +378,7 @@ public Expr getTableFilterNode(PlanNode node) return new TrueExpr(); } //TODO: add projection. - public void processJoinTask(JoinNode node, Map joinMap, Map sendDataMap, List otherTask, Pointer joinTableName, Pointer dataTableName, String jobId, AtomicInteger jobOffset, ProjectNode proj) + public void processJoinTask(JoinNode node, Map joinMap, Map sendDataMap, List otherTask, Pointer joinTableName, Pointer dataTableName, String jobId, AtomicInteger jobOffset, ProjectNode proj, String randomString) { PlanNode joinNode = null; PlanNode dataNode = null; @@ -424,7 +424,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge Expr joinTaskSingleTableExpr = extractTableExpr(joinExpr, dataExpr, joinTableName.getValue(), node); String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); tmpTableName = tmpTableName.replace('-', '_').replace('-', '_').replace('-', '_'); - tmpTableName += (int) (Math.random() * Integer.MAX_VALUE); + tmpTableName += randomString; while (tmpTableName.contains(" ")) { tmpTableName = tmpTableName.replace(" ", ""); } @@ -588,6 +588,7 @@ public List processUnionTask(UnionNode union, String jobId, AtomicInteger Map joinMap = new HashMap(); Pointer joinTableName = new Pointer(null); Pointer dataTableName = new Pointer(null); + String randomString = "_" + (int) (Math.random() * Integer.MAX_VALUE); for (PlanNode childNode : unionChildren) { //union.setChildren(childNode, true, false); PlanNode node = childNode; @@ -612,7 +613,7 @@ public List processUnionTask(UnionNode union, String jobId, AtomicInteger } else if (node instanceof JoinNode && ((JoinNode) node).getJoinChildren().size() == 2) { //需要收集task的site,确定主表从表 - processJoinTask((JoinNode) node, joinMap, sendDataMap, otherTask, joinTableName, dataTableName, jobId, jobOffset, proj); + processJoinTask((JoinNode) node, joinMap, sendDataMap, otherTask, joinTableName, dataTableName, jobId, jobOffset, proj, randomString); } else if (node instanceof JoinNode && ((JoinNode) node).getJoinChildren().size() == 1) { node = ((JoinNode) node).getJoinChildren().get(0); From b19f219e1908a2c1a670823fdb5e0e270a2203e1 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 14:54:33 +0800 Subject: [PATCH 51/75] change join sql --- .../postgresql/PostgresConnector.java | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 706d0b3..9ec8d6e 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -812,7 +812,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) PlanNode rootNode = task.getNode(); try { Statement statement = conn.createStatement(); - StringBuilder joinSQL = new StringBuilder("select "); + StringBuilder joinSQL = new StringBuilder("SELECT "); List nodeList = new ArrayList<>(); int nodeListCursor = 0; boolean isProject = false; @@ -863,8 +863,14 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) joinSQL.append(" *"); } - StringBuilder fromClause = new StringBuilder(" from "); - StringBuilder whereClause = new StringBuilder(" where "); + StringBuilder fromClause = new StringBuilder(" FROM "); + StringBuilder whereClause = new StringBuilder(" WHERE "); + if (joinNode.getExprList().size() > 0) { + whereClause.append(joinNode.getExprList().get(0).toString()); + } + else { + whereClause.append((String) (joinNode.getJoinSet().iterator().next())); + } List joinChildren = joinNode.getJoinChildren(); Iterator it = joinChildren.iterator(); Boolean isFirst = true; @@ -900,31 +906,36 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) } //HERE WE IGNORE THE childProjectNode if (childIsFilter) { - whereClause.append("and " + childFilterNode.getExpression()); + whereClause.append(" AND " + childFilterNode.getExpression()); } if (childIsTableScan) { String schemaName = childTableScanNode.getSchema(); String tableName = childTableScanNode.getTable(); String aliasName = childTableScanNode.getAlias(); if (isFirst) { - fromClause.append(schemaName + "." + tableName); - fromClause.append("inner join "); + if (aliasName == null) { + fromClause.append(schemaName + "." + tableName); + fromClause.append(" , "); + } + else { + fromClause.append(schemaName + "." + tableName + " as " + schemaName + "." + aliasName); + fromClause.append(" , "); + } isFirst = false; } else { - fromClause.append(schemaName + "." + aliasName); - fromClause.append(" on "); + if (aliasName == null) { + fromClause.append(schemaName + "." + tableName); + } + else { + fromClause.append(schemaName + "." + tableName + " as " schemaName + "." + aliasName); + } } } } - if (joinNode.getExprList().size() > 0) { - whereClause.append(joinNode.getExprList().get(0).toString()); - } - else { - whereClause.append((String) (joinNode.getJoinSet().iterator().next())); - } + if (isSort) { - whereClause.append("order by"); + whereClause.append("ORDER BY"); List columns = sortNode.getColumns(); for (Column column : columns) { whereClause.append(" "); @@ -934,7 +945,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) whereClause = new StringBuilder(whereClause.substring(0, whereClause.length() - 1)); } if (isLimit) { - whereClause.append(" limit "); + whereClause.append(" LIMIT "); whereClause.append(limitNode.getLimitNum()); } joinSQL.append(fromClause.toString() + whereClause.toString()); From 28e582903d022014e695efe906cec274d5909e0d Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 14:55:16 +0800 Subject: [PATCH 52/75] fix. --- .../java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 27fffb8..a203cf3 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -459,9 +459,10 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge List clist = new ArrayList(); for (Column c : proj.getColumns()) { Column col = new Column(c); - if (dataTableName.getValue().equals(col.getTableName())) { - col.setTableName(tmpTableName); - } + //设置为实际表的名字 但是因为别名的存在 所以目前不需要 + //if (dataTableName.getValue().equals(col.getTableName())) { + // col.setTableName(tmpTableName); + //} clist.add(col); } PlanNode output = new OutputNode(); From d4722d3fc1cb28faa45015701ad35f2b862c61d7 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 14:59:52 +0800 Subject: [PATCH 53/75] join updated --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 8dfbc20..d206a78 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -926,7 +926,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) fromClause.append(schemaName + "." + tableName); } else { - fromClause.append(schemaName + "." + tableName + " as " schemaName + "." + aliasName); + fromClause.append(schemaName + "." + tableName + " as " + schemaName + "." + aliasName); } } } From 5379d42f504ace7f96e3bafff949ef31a509be81 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 15:17:43 +0800 Subject: [PATCH 54/75] add encoding --- pom.xml | 1 + upload.sh | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 upload.sh diff --git a/pom.xml b/pom.xml index d297251..82c6182 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,7 @@ + UTF-8 4.6 false true diff --git a/upload.sh b/upload.sh new file mode 100644 index 0000000..548b945 --- /dev/null +++ b/upload.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +cd `dirname $0` +cd pard +mvn clean +mvn package +cd .. +scp pard/pard-main/target/pard-server.jar pard@10.77.40.41:/home/pard/pard-src/pard-server.jar +scp pard/pard-client/target/pard-client.jar pard@10.77.40.41:/home/pard/pard-src/pard-client.jar +ssh pard@10.77.40.41 /home/pard/pard-src/deploy_2.sh From 96f1fec982c24a439f043d1ec608b7f667903479 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 15:23:12 +0800 Subject: [PATCH 55/75] fix bug for join sql: remove schema from alias --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index d206a78..b04e410 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -916,7 +916,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) fromClause.append(" , "); } else { - fromClause.append(schemaName + "." + tableName + " as " + schemaName + "." + aliasName); + fromClause.append(schemaName + "." + tableName + " as " + aliasName); fromClause.append(" , "); } isFirst = false; @@ -926,7 +926,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) fromClause.append(schemaName + "." + tableName); } else { - fromClause.append(schemaName + "." + tableName + " as " + schemaName + "." + aliasName); + fromClause.append(schemaName + "." + tableName + " as " + aliasName); } } } From 20de7cfc3c630b91eaa299844f9dbfb0a02f32f7 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 15:33:49 +0800 Subject: [PATCH 56/75] fix null pointer bug when site is null --- .../java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java index fa24c75..3a8027c 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java @@ -108,6 +108,7 @@ public PardResultSet execute() Site nodeSite = siteDao.listNodes().get(site); if (nodeSite == null) { logger.log(Level.SEVERE, "Node " + site + " is not active. Please check."); + return PardResultSet.execErrResultSet; } PardExchangeClient client = new PardExchangeClient(nodeSite.getIp(), nodeSite.getExchangePort()); client.connect(task, blocks); From 4d6c67a3d9166c504cd1575250c4d1083431afd7 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 15:42:37 +0800 Subject: [PATCH 57/75] fix horizon partition join. --- .../ruc/iir/pard/scheduler/TaskScheduler.java | 26 ++++++++++++++++++- .../iir/pard/server/PardQueryHandlerTest.java | 3 ++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index a203cf3..e6e27d1 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -298,6 +298,7 @@ public List processQueryPlan2(QueryPlan queryPlan) ProjectNode proj = null; PlanNode currentNode = planNode; UnionNode internalUnionNode = null; + JoinNode joinNode = null; while (currentNode != null) { if (currentNode instanceof UnionNode) { internalUnionNode = (UnionNode) currentNode; @@ -305,11 +306,17 @@ public List processQueryPlan2(QueryPlan queryPlan) if (currentNode instanceof ProjectNode) { proj = (ProjectNode) currentNode; } + if (currentNode instanceof JoinNode) { + joinNode = (JoinNode) currentNode; + } currentNode = currentNode.getLeftChild(); } - if (internalUnionNode == null) { + if (internalUnionNode == null && joinNode == null) { return ImmutableList.of(new QueryTask(planNode)); } + else if (joinNode != null) { + return ImmutableList.copyOf(processJoinTask(joinNode, proj, queryPlan.getJobId(), new AtomicInteger(0))); + } else { return ImmutableList.copyOf(processUnionTask(internalUnionNode, queryPlan.getJobId(), new AtomicInteger(1), proj)); } @@ -556,6 +563,7 @@ public PlanNode orFilterNode(PlanNode node, Expr filterExpr) } public Expr extractTableExpr(Expr joinExpr, Expr dataExpr, String tableName, JoinNode node) { + List tasks = new ArrayList<>(); Expr e = Expr.and(joinExpr, dataExpr, LogicOperator.AND); if (node.getExprList().size() == 0) { return new TrueExpr(); @@ -577,6 +585,22 @@ else if (rv.getTableName().equalsIgnoreCase(tableName)) { throw new TaskSchedulerException(ErrCode.ParseError, "expression that can replace"); } } + public List processJoinTask(JoinNode node, ProjectNode proj, String jobId, AtomicInteger jobOffset) + { + List tasks = new ArrayList<>(); + Pointer joinTableName = new Pointer(null); + Pointer dataTableName = new Pointer(null); + Map sendDataMap = new HashMap(); + Map joinMap = new HashMap(); + List otherTask = new ArrayList(); + String randomString = "_" + (int) (Math.random() * Integer.MAX_VALUE); + processJoinTask((JoinNode) node, joinMap, sendDataMap, otherTask, joinTableName, dataTableName, jobId, jobOffset, proj, randomString); + tasks.addAll(otherTask); + tasks.addAll(sendDataMap.values()); + // tasks.addAll(joinMap.values()); + tasks.addAll(joinMap.values()); + return tasks; + } public List processUnionTask(UnionNode union, String jobId, AtomicInteger jobOffset, ProjectNode proj) { List tasks = new ArrayList<>(); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index 5f6d0bf..9942761 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -25,7 +25,8 @@ public void executeQuery() UsePlan.setCurrentSchema("book"); //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; //String sql = "select * from book@pard0"; - String sql = "select * from book,orders where book.id=orders.book_id"; + //String sql = "select * from book,orders where book.id=orders.book_id"; + String sql = "select * from customer"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); From 88b94f2dc930c2f1d19460738387c808f768c99e Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 15:59:30 +0800 Subject: [PATCH 58/75] add info for node helper. --- .../ruc/iir/pard/executor/connector/node/NodeHelper.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java index 9bfc67a..56519ed 100644 --- a/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java +++ b/pard-connector/src/main/java/cn/edu/ruc/iir/pard/executor/connector/node/NodeHelper.java @@ -55,7 +55,12 @@ public static String parseColumns(List list) { StringBuilder sb = new StringBuilder("["); for (int i = 0; i < list.size(); i++) { - sb.append(list.get(i).getColumnName()); + if (list.get(i).getTableName() != null) { + sb.append(list.get(i).getTableName() + "." + list.get(i).getColumnName()); + } + else { + sb.append(list.get(i).getColumnName()); + } if (i != list.size() - 1) { sb.append(","); } From 620bdc79f75976e1ef3e3770a80f2956c907179f Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 16:00:28 +0800 Subject: [PATCH 59/75] fix vertical join no table name bug --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index b04e410..19084d8 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -852,7 +852,10 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (isProject) { List columns = projectNode.getColumns(); for (Column column : columns) { - joinSQL.append(column.getTableName() + "." + column.getColumnName()); + if (!column.getTableName().isEmpty()) { + joinSQL.append(column.getTableName()).append("."); + } + joinSQL.append(column.getColumnName()); joinSQL.append(","); } joinSQL = new StringBuilder(joinSQL.substring(0, joinSQL.length() - 1)); From 8bfb7829fab453bc7ee5983de05fae8bb690d439 Mon Sep 17 00:00:00 2001 From: Huang Wentao Date: Tue, 16 Jan 2018 16:51:00 +0800 Subject: [PATCH 60/75] fix bug in joinSet --- .../postgresql/PostgresConnector.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 19084d8..6b50e46 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -865,13 +865,9 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) } StringBuilder fromClause = new StringBuilder(" FROM "); - StringBuilder whereClause = new StringBuilder(" WHERE "); - if (joinNode.getExprList().size() > 0) { - whereClause.append(joinNode.getExprList().get(0).toString()); - } - else { - whereClause.append((String) (joinNode.getJoinSet().iterator().next())); - } + StringBuilder joinCondition = new StringBuilder(" WHERE "); + StringBuilder whereClause = new StringBuilder(" "); + List schemaTableName = new ArrayList<>(); List joinChildren = joinNode.getJoinChildren(); Iterator it = joinChildren.iterator(); Boolean isFirst = true; @@ -917,24 +913,42 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (aliasName == null) { fromClause.append(schemaName + "." + tableName); fromClause.append(" , "); + schemaTableName.add(schemaName + "." + tableName); } else { fromClause.append(schemaName + "." + tableName + " as " + aliasName); fromClause.append(" , "); + schemaTableName.add(schemaName + "." + tableName); } isFirst = false; } else { if (aliasName == null) { fromClause.append(schemaName + "." + tableName); + schemaTableName.add(schemaName + "." + tableName); } else { fromClause.append(schemaName + "." + tableName + " as " + aliasName); + schemaTableName.add(schemaName + "." + tableName); } } } } + if (joinNode.getExprList().size() > 0) { + joinCondition.append(joinNode.getExprList().get(0).toString()); + } + else { + String joinColumn = ((String) (joinNode.getJoinSet().iterator().next())); + for (int i = 0; i < schemaTableName.size(); i++) { + joinCondition.append(schemaTableName.get(i) + "." + joinColumn); + if (i != schemaTableName.size() - 1) { + joinCondition.append(" = "); + } + } + joinCondition.append(" "); + } + if (isSort) { whereClause.append("ORDER BY"); List columns = sortNode.getColumns(); @@ -949,7 +963,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) whereClause.append(" LIMIT "); whereClause.append(limitNode.getLimitNum()); } - joinSQL.append(fromClause.toString() + whereClause.toString()); + joinSQL.append(fromClause.toString() + joinCondition.toString() + whereClause.toString()); logger.info("Postgres connector: " + joinSQL); ResultSet rs = statement.executeQuery(joinSQL.toString()); List columns = new ArrayList<>(); From 20307dc9ee59f1d6532d107423732f9f3773913c Mon Sep 17 00:00:00 2001 From: withchencheng Date: Tue, 16 Jan 2018 17:00:07 +0800 Subject: [PATCH 61/75] =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/figure/exec-flow.png | Bin 0 -> 154261 bytes doc/figure/iobound.png | Bin 0 -> 17248 bytes .../leopard - \345\211\257\346\234\254.png" | Bin 0 -> 372757 bytes doc/figure/leopard.png | Bin 372757 -> 382372 bytes doc/figure/release.jpg | Bin 0 -> 15032 bytes doc/figure/release.png | Bin 20016 -> 0 bytes doc/pard-report.fls | 153 ------------------ doc/pard-report.tex | 57 +++++-- 8 files changed, 42 insertions(+), 168 deletions(-) create mode 100644 doc/figure/exec-flow.png create mode 100644 doc/figure/iobound.png create mode 100644 "doc/figure/leopard - \345\211\257\346\234\254.png" create mode 100644 doc/figure/release.jpg delete mode 100644 doc/figure/release.png delete mode 100644 doc/pard-report.fls diff --git a/doc/figure/exec-flow.png b/doc/figure/exec-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..b28b08414ac48f0c396653d954c914f14a2277b8 GIT binary patch literal 154261 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⋙=+@v9TUlI^>?z#Kb-z}fc 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≷q4`Iu3F8>0vF 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

EG6Br6ss5v3P`k4rON8MouR$ZPjx$DO=ye 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%0D@@he~J!MEQyfVul`Vrz!L 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 LNkvXXu0mjfN?fER diff --git a/doc/figure/release.jpg b/doc/figure/release.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18d114f8abcd3f8599e852027431bddb27053879 GIT binary patch literal 15032 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 gddGR!_CD_Yz*yb~!iVi2Ej~7X3iF8}}l diff --git a/doc/pard-report.fls b/doc/pard-report.fls deleted file mode 100644 index 53d2eff..0000000 --- a/doc/pard-report.fls +++ /dev/null @@ -1,153 +0,0 @@ -PWD /Users/Jelly/Developer/pard/doc -INPUT /usr/local/texlive/2015/texmf.cnf -INPUT /usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf -INPUT /usr/local/texlive/2015/texmf-var/web2c/xetex/xelatex.fmt -INPUT pard-report.tex -OUTPUT pard-report.log -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo -INPUT /usr/local/texlive/2015/texmf-dist/fonts/map/fontname/texfonts.map -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3enc.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/latex-fonts/lasy6.tfm -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg -INPUT /dev/null -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty -INPUT pard-report.aux -INPUT pard-report.aux -OUTPUT pard-report.aux -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm -INPUT figure/leopard.png -INPUT pard-report.toc -INPUT pard-report.toc -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr8.tfm -INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr6.tfm -OUTPUT pard-report.toc -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT figure/release.png -INPUT figure/architecture.png -INPUT figure/pard-node-in.png -INPUT figure/timeline.png -INPUT pard-report.aux diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 0d8d697..ed20e7a 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -95,13 +95,7 @@ \subsection{使用说明} \textit{pard-assembly/target}目录下的\textit{.zip}或\textit{.tar.gz}文件即为部署文件。 -解压后目录结构如图\ref{release} -\begin{figure}[htbp] - \centering - \includegraphics[width=\linewidth]{figure/release.png} - \caption{发布版目录结构} - \label{fig:release} -\end{figure} +解压后目录结构如图\ref{fig:release} \item Pard Server的启动: \lstinline[language=bash]|./sbin/pard-server start/run| @@ -130,6 +124,15 @@ \subsection{使用说明} \end{itemize} \end{enumerate} + +\begin{figure}[htbp] + \centering + \includegraphics[scale=0.9]{figure/release.jpg} + \caption{发布版目录结构} + \label{fig:release} +\end{figure} + + \subsection{项目管理} Pard的开发利用Github进行协同,并且代码都开源在Github上。\textit{https://github.com/dbiir/pard} @@ -207,6 +210,16 @@ \subsection{时间安排} \section{各模块详细设计} \subsection{执行流程} +总体执行流程如图\ref{fig:exec-flow}。 + +\begin{figure}[htbp] + \centering + \includegraphics[width=\linewidth]{figure/exec-flow.png} + \caption{总体执行流程} + \label{fig:exec-flow} +\end{figure} + + package cn.edu.ruc.iir.pard.scheduler; job @@ -248,9 +261,26 @@ \subsubsection{Join 流程} \subsection{节点通信} 通讯任务依据数据传输量的大小,和任务本身性质,可以自然的分为两类: +一类是描述节点要负责的任务本身的通知,数据量很小,我们选用RPC技术来实现; +另一类是因数据partition产生的大批量数据传输,数据量通常很大,我们选用Netty框架来实现。 +Insert、Delete、Load等返回值比较少,不需要太多交互通信的也都是用RPC来做的, +其余大批量通信比较多的涉及到Netty。 +Pard有对Byte array做可选压缩的功能, + + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.7\linewidth]{figure/iobound.png} + \caption{Pard inbound outbound} + \label{fig:iobound} +\end{figure} + +Pard中Netty 的事件可以分为 Inbound 和 Outbound 事件. +从图\ref{fig:iobound}可以看出, inbound 事件和 outbound 事件的流向是不一样的, inbound 事件的流行是从下至上, 而 outbound 刚好相反, 是从上到下. 并且 inbound 的传递方式是通过调用相应的 \lstinline|ChannelHandlerContext.fireIN_EVT()| 方法, 而 outbound 方法的的传递方式是通过调用 \lstinline|ChannelHandlerContext.OUT_EVT()| 方法. 例如 \lstinline|ChannelHandlerContext.fireChannelRegistered()| 调用会发送一个 \textit{ChannelRegistered} 的 inbound 给下一个ChannelHandlerContext, 而 \lstinline|ChannelHandlerContext.bind| 调用会发送一个 \textit{bind} 的 outbound 事件给 下一个 ChannelHandlerContext. + + -pipeline Netty inbound outbound @@ -266,7 +296,7 @@ \subsection{SQL解析} 语义语法解析 Antlrv4 - +Pard支持的语法如下: \begin{lstlisting} statement : query #statementDefault @@ -317,12 +347,9 @@ \subsection{SQL解析} ; \end{lstlisting} -支持基本的Select语句,如 - -select * from ASG where eno<’E1020’ and eno>=’E0990’ - - -expression and or not +目前并没有实现全部的完整SQL功能,只 +支持基本的Select语句,也就是验收要求的部分,如 +\lstinline|select * from ASG where eno<’E1020’ and eno>=’E0990’| From 4edaaa376b27a1ddff51eed31ea79b591c33538f Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 17:09:09 +0800 Subject: [PATCH 62/75] add sth about alias. --- .../cn/edu/ruc/iir/pard/catalog/Column.java | 10 ++ .../ruc/iir/pard/scheduler/TaskScheduler.java | 98 ++++++++++++++++++- 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java index 5b90f49..0ee0568 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/catalog/Column.java @@ -169,4 +169,14 @@ public void setTableName(String tableName) { this.tableName = tableName; } + + public String toString() + { + if (tableName == null) { + return columnName; + } + else { + return tableName + "." + columnName; + } + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index e6e27d1..427b1d5 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -385,6 +385,94 @@ public Expr getTableFilterNode(PlanNode node) return new TrueExpr(); } //TODO: add projection. + public PlanNode setFilterAlias(PlanNode node, String alias, String oldTableName) + { + node = NodeHelper.copyNode(node); + PlanNode root = node; + PlanNode pNode = null; + do { + PlanNode oldNode = node; + PlanNode o = null; + if (node instanceof FilterNode) { + FilterNode filter = (FilterNode) node; + Expr expr = Expr.parse(filter.getExpression()); + expr = Expr.replaceTableName(expr, oldTableName, alias); + filter = new FilterNode(expr.toExpression()); + o = filter; + } + if (oldNode == root) { + root = node; + } + if (o != null) { + o.setChildren(node.getLeftChild(), true, true); + node = o; + if (pNode != null) { + pNode.setChildren(node, true, true); + } + } + pNode = node; + node = node.getLeftChild(); + }while (node != null); + return root; + } + public PlanNode setAlias(PlanNode node, String alias, String oldTableName, String realTableName) + { + //System.out.println(node); + node = NodeHelper.copyNode(node); + PlanNode root = node; + PlanNode pNode = null; + do { + PlanNode oldNode = node; + PlanNode o = null; + if (node instanceof TableScanNode) { + TableScanNode scan = (TableScanNode) node; + if (scan.getTable().equals(oldTableName)) { + scan = new TableScanNode(scan.getSchema(), realTableName, scan.getSite()); + scan.setAlias(alias); + } + scan.setChildren(node.getLeftChild(), true, true); + if (pNode != null) { + pNode.setChildren(scan, true, true); + } + node = scan; + } + else if (node instanceof ProjectNode) { + List colList = new ArrayList(); + for (Column col : ((ProjectNode) node).getColumns()) { + col = new Column(col); + //System.out.println(col.getTableName() + " " + oldTableName + " " + alias); + if (col.getTableName().equals(oldTableName)) { + col.setTableName(alias); + } + colList.add(col); + } + ProjectNode p = new ProjectNode(colList); + p.setChildren(node.getLeftChild(), true, true); + if (pNode != null) { + pNode.setChildren(p, true, true); + } + node = p; + } + else if (node instanceof FilterNode) { + FilterNode filter = (FilterNode) node; + Expr expr = Expr.parse(filter.getExpression()); + expr = Expr.replaceTableName(expr, oldTableName, alias); + filter = new FilterNode(expr.toExpression()); + filter.setChildren(node.getLeftChild(), true, true); + if (pNode != null) { + pNode.setChildren(filter, true, true); + } + node = filter; + } + if (oldNode == root) { + root = node; + } + pNode = node; + node = node.getLeftChild(); + }while (node != null); + //System.out.println(root); + return root; + } public void processJoinTask(JoinNode node, Map joinMap, Map sendDataMap, List otherTask, Pointer joinTableName, Pointer dataTableName, String jobId, AtomicInteger jobOffset, ProjectNode proj, String randomString) { PlanNode joinNode = null; @@ -422,7 +510,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge else { throw new TaskSchedulerException(ErrCode.UnSupportedQuery, "below one union has more than one group of joins."); } - System.out.println("joinNode1" + joinNode); + //System.out.println("joinNode1" + joinNode); joinExpr = getTableFilterNode(joinNode); dataExpr = getTableFilterNode(dataNode); SendDataTask dataTask = sendDataMap.get(dataTable.getSite()); @@ -432,6 +520,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); tmpTableName = tmpTableName.replace('-', '_').replace('-', '_').replace('-', '_'); tmpTableName += randomString; + String tmpTableAlias = dataTableName.getValue() + "_0"; while (tmpTableName.contains(" ")) { tmpTableName = tmpTableName.replace(" ", ""); } @@ -466,6 +555,9 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge List clist = new ArrayList(); for (Column c : proj.getColumns()) { Column col = new Column(c); + if (node.getExprList().isEmpty()) { + col.setTableName(null); + } //设置为实际表的名字 但是因为别名的存在 所以目前不需要 //if (dataTableName.getValue().equals(col.getTableName())) { // col.setTableName(tmpTableName); @@ -484,6 +576,8 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge //System.out.println("joinNode1" + joinNode); //join.addJoinChild(orFilterNode(NodeHelper.copyNode(joinNode), joinTaskSingleTableExpr, dataTableName.getValue(), tmpTableName)); PlanNode dataCopy = NodeHelper.copyNode(dataNode); + dataCopy = setAlias(dataCopy, tmpTableAlias, dataTableName.getValue(), tmpTableName); + /* PlanNode tmp = dataCopy; if (dataCopy instanceof TableScanNode) { TableScanNode scan = (TableScanNode) dataCopy; @@ -501,7 +595,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge } tmp = tmp.getLeftChild(); } - } + }*/ join.addJoinChild(dataCopy); joinTask = new JoinTask(joinTable.getSite()); if (needDropTable) { From 12d75db58871d3f358d7b2125840bd1dd23c8189 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 17:15:31 +0800 Subject: [PATCH 63/75] fix horizon join. --- .../cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 427b1d5..49b8e1b 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -58,6 +58,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -552,11 +553,18 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge JoinTask joinTask = joinMap.get(joinTable.getSite()); if (joinTask == null) { //Do sth. + Iterator iter = node.getJoinSet().iterator(); + String common = null; + if (iter.hasNext()) { + common = iter.next(); + } List clist = new ArrayList(); for (Column c : proj.getColumns()) { Column col = new Column(c); if (node.getExprList().isEmpty()) { - col.setTableName(null); + if (!col.getColumnName().equals(common)) { + col.setTableName(null); + } } //设置为实际表的名字 但是因为别名的存在 所以目前不需要 //if (dataTableName.getValue().equals(col.getTableName())) { From b7f1826cc036543c64061890a62fa621056a20b4 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 17:19:06 +0800 Subject: [PATCH 64/75] fix null pointer --- .../ruc/iir/pard/connector/postgresql/PostgresConnector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index 6b50e46..bd255b1 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -808,6 +808,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) { String tmpTableName = task.getTmpTableName(); PlanNode rootNode = task.getNode(); + boolean isVertical = false; try { Statement statement = conn.createStatement(); StringBuilder joinSQL = new StringBuilder("SELECT "); @@ -852,7 +853,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (isProject) { List columns = projectNode.getColumns(); for (Column column : columns) { - if (!column.getTableName().isEmpty()) { + if (column.getTableName() != null && !column.getTableName().isEmpty()) { joinSQL.append(column.getTableName()).append("."); } joinSQL.append(column.getColumnName()); From d8e711b629f5c90791327ca7cb05669789c12b5d Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 17:19:32 +0800 Subject: [PATCH 65/75] udpate doc --- doc/figure/execution_flow.key | Bin 405618 -> 404207 bytes doc/pard-report.tex | 58 ++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/doc/figure/execution_flow.key b/doc/figure/execution_flow.key index cf1a87cff52efea855bcd3dac9149d16894b9a57..4135597efffb6bc47604779eb9b9ccbfd55df220 100644 GIT binary patch delta 66526 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 AlK=n! delta 67312 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 CDCaH! diff --git a/doc/pard-report.tex b/doc/pard-report.tex index 91189e1..a124830 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -216,42 +216,44 @@ \subsection{执行流程} \label{fig:ef} \end{figure} -job - -ABORTED(0), BEGIN(1), PARSING(2), PLANNING(3), SCHEDULING(4), EXECUTING(5), DONE(6), FAILED(-1); - - -getNext() 状态转换 - - - -记录各个状态的job供用户查看。 -private final List doneJobs; -private final List abortedJobs; -private final List failedJobs; - - -错误 -cn.edu.ruc.iir.pard.planner.ErrorMessage - - +在PardServer中,每个客户端连接由一个单独的线程负责,通过socket方式连接。 +用户输入的SQL语句会提交到\textit{JobScheduler}中,创建一个新的\textit{Job}。JobSchdueler会维护和更新该Job的状态信息。具体流程如下: +\begin{itemize} +\item SQL语句先由\textit{Pard Parser}进行语义解析,得到一个抽象语法树(AST),同时Job的状态更新为\textit{PARSED}。 +\item 抽象语法树由\textit{Pard Planner}制定逻辑查询计划,同时Job的状态更新为\textit{PLANNING}。 +\item 生成的逻辑查询计划由\textit{Pard Optimizer}负责进行优化,同时Job的状态更新为\textit{SCHEDULING}。 +\item 优化后的查询计划交给\textit{Task Scheduler}生成执行的任务,并进行任务的调度、分发和监控,各节点负责接收任务并执行。 +同时Job的状态更新为\textit{EXECUTING}。 +\item 任务执行完毕以后,Job的最终状态为三种,\textit{DONE}、\textit{ABORTED}和\textit{FAILED}。这三种状态分别表示执行顺利完成、执行被放弃和执行失败。 +\end{itemize} -=============== -package cn.edu.ruc.iir.pard.planner.ddl; -dml 优化具体 韩涵 +在查询执行过程中,每次任务执行时都需要通过NodeKeeper同步当前集群的节点状态, +如果有节点状态为非在线,则该查询转为\textit{ABORTED}状态,并刷出日志提醒用户。 -\subsubsection{Insert/Delete 流程} -RPC +在JobScheduler中记录了该Server所有正在执行的job的情况,并且已执行完的Job根据三种状态,分别维护了一个列表。 +这些信息可以提供给web端进行状态显示。 -\subsubsection{Load 流程} -返回值比较少,返回状态 +\subsubsection{CREATE/DROP/INSERT 执行流程} +\textit{CREATE/DROP/INSERT} 生成执行任务后,任务将通过RPC的方式发送给对应节点,并返回执行结果。 -\subsubsection{Select 流程} +\subsubsection{LOAD 执行流程} +\textit{LOAD} 生成执行任务后,共有两类task。 +一类在本地读取文件,并按照数据划分的规则将文件内容划分后存储在内存中; +另一类将内存中划分后的数据发送到对应节点,并调用节点的Executor执行本地数据库的LOAD操作。 +最后收集各节点的执行状态,返回最终状态给用户。 +\subsubsection{SELECT 执行流程} +单表的\textit{SELECT} 生成执行任务后,分发给对应节点执行。任务中包含查询执行的操作树,节点的Executor调用本的Connector。 +本地Connector根据查询树生成对应的SQL语句,如适应于PostgreSQL语法规则的SQL语句。 +Connector执行的结果以Block的形式流式地返回给Executor,即Executor每次读取一个Block,而不是一次读取整个结果集, +这种方式有效地节省了内存的使用,防止数据量大时内存不够。 -\subsubsection{Join 流程} +\subsubsection{JOIN 执行流程} +\subsubsection{错误信息} +查询执行过程可能产生各种错误,对此,系统设计了一套错误信息。 +% todo error message list \subsection{节点通信} 通讯任务依据数据传输量的大小,和任务本身性质,可以自然的分为两类: From 7422c66f4482df5e2f98f1d5f201b02961f9346f Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 17:25:43 +0800 Subject: [PATCH 66/75] add column item. --- .../main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 49b8e1b..8fa2d54 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -561,7 +561,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge List clist = new ArrayList(); for (Column c : proj.getColumns()) { Column col = new Column(c); - if (node.getExprList().isEmpty()) { + if (!node.getJoinSet().isEmpty()) { if (!col.getColumnName().equals(common)) { col.setTableName(null); } From 83cb0120c4b8b0ade92d6c03136c83deb8fad5ac Mon Sep 17 00:00:00 2001 From: withchencheng Date: Tue, 16 Jan 2018 17:28:37 +0800 Subject: [PATCH 67/75] 111 --- doc/pard-report.tex | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/doc/pard-report.tex b/doc/pard-report.tex index dffdebe..7b3f29e 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -210,7 +210,7 @@ \subsection{时间安排} \section{各模块详细设计} \subsection{执行流程} -<<<<<<< HEAD + 总体执行流程如图\ref{fig:exec-flow}。 \begin{figure}[htbp] @@ -222,16 +222,7 @@ \subsection{执行流程} package cn.edu.ruc.iir.pard.scheduler; -======= -查询语句的执行流程如图\ref{fig:ef} -\begin{figure}[htbp] - \centering - \includegraphics[width=\linewidth]{figure/execution_flow.pdf} - \caption{查询执行流程} - \label{fig:ef} -\end{figure} ->>>>>>> 8bfb7829fab453bc7ee5983de05fae8bb690d439 job From 493d3130c0c1efc439f2ea7b8d1b735aab890ac4 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 18:01:08 +0800 Subject: [PATCH 68/75] commit task --- .../ruc/iir/pard/scheduler/TaskScheduler.java | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 8fa2d54..c30000d 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -375,6 +375,16 @@ public TableScanNode getTableScanNode(PlanNode node) } return null; } + public ProjectNode getProjectNode(PlanNode node) + { + while (node != null) { + if (node instanceof ProjectNode) { + return (ProjectNode) node; + } + node = node.getLeftChild(); + } + return null; + } public Expr getTableFilterNode(PlanNode node) { while (node != null) { @@ -558,25 +568,17 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge if (iter.hasNext()) { common = iter.next(); } - List clist = new ArrayList(); - for (Column c : proj.getColumns()) { - Column col = new Column(c); - if (!node.getJoinSet().isEmpty()) { - if (!col.getColumnName().equals(common)) { - col.setTableName(null); - } + /* + if ((!node.getJoinSet().isEmpty()) && node.getExprList().isEmpty()) { + if (!col.getColumnName().equals(common)) { + col.setTableName(null); } - //设置为实际表的名字 但是因为别名的存在 所以目前不需要 - //if (dataTableName.getValue().equals(col.getTableName())) { - // col.setTableName(tmpTableName); - //} - clist.add(col); - } - PlanNode output = new OutputNode(); - PlanNode p = new ProjectNode(clist); - output.setChildren(p, true, true); + }*/ + //设置为实际表的名字 但是因为别名的存在 所以目前不需要 + //if (dataTableName.getValue().equals(col.getTableName())) { + // col.setTableName(tmpTableName); + //} JoinNode join = new JoinNode(); - p.setChildren(join, true, true); join.getJoinSet().addAll(node.getJoinSet()); join.getExprList().addAll(node.getExprList()); //TODO: add children. @@ -613,6 +615,31 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge joinTask.setTmpTableName(null); } joinTask.setTaskId(jobId + "_" + jobOffset.addAndGet(1)); + PlanNode output = new OutputNode(); + ProjectNode leftProject = getProjectNode(join.getJoinChildren().get(0)); + ProjectNode rightProject = getProjectNode(join.getJoinChildren().get(1)); + List clist = new ArrayList(); + for (Column c : proj.getColumns()) { + boolean hit = false; + for (Column lc : leftProject.getColumns()) { + if (lc.getColumnName().equals(c.getColumnName())) { + clist.add(lc); + hit = true; + break; + } + } + if (!hit) { + for (Column rc : rightProject.getColumns()) { + if (rc.getColumnName().equals(c.getColumnName())) { + clist.add(rc); + break; + } + } + } + } + PlanNode p = new ProjectNode(clist); + output.setChildren(p, true, true); + p.setChildren(join, true, true); joinTask.setNode(output); //System.out.println("joinNode1" + p); joinMap.put(joinTable.getSite(), joinTask); From 29a77023150cc0e98a825f6518b5161b4129af77 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 18:38:09 +0800 Subject: [PATCH 69/75] add test. --- .../connector/postgresql/PostgresConnector.java | 2 +- .../ruc/iir/pard/server/PardQueryHandlerTest.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index bd255b1..dbeddb7 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -853,7 +853,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (isProject) { List columns = projectNode.getColumns(); for (Column column : columns) { - if (column.getTableName() != null && !column.getTableName().isEmpty()) { + if (column.getTableName() != null) { joinSQL.append(column.getTableName()).append("."); } joinSQL.append(column.getColumnName()); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index 9942761..8274858 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -1,6 +1,7 @@ package cn.edu.ruc.iir.pard.server; import cn.edu.ruc.iir.pard.executor.connector.JoinTask; +import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.planner.PardPlanner; @@ -8,6 +9,9 @@ import cn.edu.ruc.iir.pard.planner.ddl.UsePlan; import cn.edu.ruc.iir.pard.planner.dml.QueryPlan; import cn.edu.ruc.iir.pard.planner.dml.QueryTestPlan; +import cn.edu.ruc.iir.pard.scheduler.Job; +import cn.edu.ruc.iir.pard.scheduler.JobScheduler; +import cn.edu.ruc.iir.pard.scheduler.JobScheduler.JobState; import cn.edu.ruc.iir.pard.scheduler.TaskScheduler; import cn.edu.ruc.iir.pard.sql.parser.SqlParser; import cn.edu.ruc.iir.pard.sql.tree.Statement; @@ -25,8 +29,8 @@ public void executeQuery() UsePlan.setCurrentSchema("book"); //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; //String sql = "select * from book@pard0"; - //String sql = "select * from book,orders where book.id=orders.book_id"; - String sql = "select * from customer"; + String sql = "select * from book,orders where book.id=orders.book_id"; + //String sql = "select * from customer"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); @@ -45,12 +49,12 @@ else if (t instanceof JoinTask) { } } System.out.println(PardServlet.planList.size()); - PardWebServer.main(new String[0]); - /* + //PardWebServer.main(new String[0]); + Job job = JobScheduler.INSTANCE().newJob(); task.forEach(job::addTask); job.setJobState(JobState.EXECUTING); job.setPlan(plan); - TaskScheduler.INSTANCE().executeJob(job);*/ + PardResultSet rs = TaskScheduler.INSTANCE().executeJob(job); } } From 22151dd4bd623e800bb7a3a34d146c133aac8a24 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 18:42:05 +0800 Subject: [PATCH 70/75] remove unncessary exceptions --- .../main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java | 3 --- .../src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index 569c7de..e645d46 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -76,9 +76,6 @@ public void run() catch (IOException e) { e.printStackTrace(); } - catch (Exception e2) { - e2.printStackTrace(); - } } public PardResultSet executeQuery(String sql) diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java index 9dbd902..5a57426 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java @@ -19,7 +19,7 @@ public void executeQuery() JobScheduler scheduler = JobScheduler.INSTANCE(); TaskScheduler taskScheduler = TaskScheduler.INSTANCE(); PardQueryHandler handler = new PardQueryHandler(null, scheduler, taskScheduler); - String sql = "load \"/Users/Jelly/Downloads/eval_db/book.tsv\" into book.book"; + String sql = "select * from booktest.customer"; PardResultSet resultSet = handler.executeQuery(sql); System.out.println(resultSet); } From 52f05758f9b496d1280c857d1aac352a6bddc892 Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 19:46:26 +0800 Subject: [PATCH 71/75] with table alias. --- .../java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java | 2 +- .../connector/postgresql/PostgresConnector.java | 5 +++++ .../edu/ruc/iir/pard/scheduler/TaskScheduler.java | 10 ++++++++-- .../ruc/iir/pard/server/PardQueryHandlerTest.java | 14 ++++++++++---- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java index 91ecabe..930186a 100644 --- a/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java +++ b/pard-catalog/src/main/java/cn/edu/ruc/iir/pard/etcd/EtcdUtil.java @@ -277,7 +277,7 @@ private static Schema convertSchema(Schema schema) //System.out.println(json.toString()); Column col = (Column) JSONObject.toBean(json, Column.class); columnHashMap.put(obj.toString(), col); - if (col.getTableName() == null) { + if (col.getTableName() == null || col.getTableName().isEmpty()) { col.setTableName(table.getTablename()); } } diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index dbeddb7..bb41fac 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -552,6 +552,7 @@ private PardResultSet executeSendDataTask(Connection conn, SendDataTask task) Statement statement = conn.createStatement(); StringBuilder querySQL = new StringBuilder("select "); PlanNode rootNode = task.getNode(); + System.out.println(rootNode); List nodeList = new ArrayList<>(); int nodeListCursor = 0; FilterNode filterNode = null; @@ -808,6 +809,7 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) { String tmpTableName = task.getTmpTableName(); PlanNode rootNode = task.getNode(); + System.out.println(rootNode); boolean isVertical = false; try { Statement statement = conn.createStatement(); @@ -853,10 +855,13 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (isProject) { List columns = projectNode.getColumns(); for (Column column : columns) { + /* if (column.getTableName() != null) { joinSQL.append(column.getTableName()).append("."); } joinSQL.append(column.getColumnName()); + joinSQL.append(",");*/ + joinSQL.append(column.toString()); joinSQL.append(","); } joinSQL = new StringBuilder(joinSQL.substring(0, joinSQL.length() - 1)); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index c30000d..77330dc 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -52,6 +52,7 @@ import cn.edu.ruc.iir.pard.sql.expr.Expr.LogicOperator; import cn.edu.ruc.iir.pard.sql.expr.SingleExpr; import cn.edu.ruc.iir.pard.sql.expr.TrueExpr; +import cn.edu.ruc.iir.pard.sql.tree.ComparisonExpression; import cn.edu.ruc.iir.pard.sql.tree.Expression; import cn.edu.ruc.iir.pard.sql.tree.Row; import com.google.common.collect.ImmutableList; @@ -531,7 +532,7 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge String tmpTableName = "tmp_" + dataTableName.getValue() + "_" + jobId + "_" + joinTable.getSite(); tmpTableName = tmpTableName.replace('-', '_').replace('-', '_').replace('-', '_'); tmpTableName += randomString; - String tmpTableAlias = dataTableName.getValue() + "_0"; + String tmpTableAlias = dataTableName.getValue() + "p0"; while (tmpTableName.contains(" ")) { tmpTableName = tmpTableName.replace(" ", ""); } @@ -580,7 +581,12 @@ else if ((rightTable.getTable().equals(joinTableName.getValue()) && leftTable.ge //} JoinNode join = new JoinNode(); join.getJoinSet().addAll(node.getJoinSet()); - join.getExprList().addAll(node.getExprList()); + //join.getExprList().addAll(node.getExprList()); + for (Expression expr : node.getExprList()) { + Expr e = Expr.parse(expr); + e = Expr.replaceTableName(e, dataTableName.getValue(), tmpTableAlias); + join.getExprList().add((ComparisonExpression) e.toExpression()); + } //TODO: add children. join.addJoinChild(NodeHelper.copyNode(joinNode)); //System.out.println("joinNode1" + joinNode); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index 8274858..21b0521 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -26,29 +26,34 @@ public class PardQueryHandlerTest @Test public void executeQuery() { - UsePlan.setCurrentSchema("book"); + UsePlan.setCurrentSchema("booktest"); //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; //String sql = "select * from book@pard0"; - String sql = "select * from book,orders where book.id=orders.book_id"; - //String sql = "select * from customer"; + //String sql = "select * from book,orders where book.id=orders.book_id"; + String sql = "select * from customer"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); - plan.setJobId("aa"); + plan.setJobId("customer_k"); + QueryPlan qPlan = (QueryPlan) plan; + System.out.println(qPlan.getPlan()); List task = TaskScheduler.INSTANCE().generateTasks(plan); PardServlet.planList.add((QueryPlan) plan); for (Task t : task) { System.out.println(t.getTaskId()); if (t instanceof SendDataTask) { QueryPlan p = new QueryTestPlan(((SendDataTask) t).getNode(), "send_Data_" + t.getTaskId()); + System.out.println(p.getPlan()); PardServlet.planList.add(p); } else if (t instanceof JoinTask) { QueryPlan p = new QueryTestPlan(((JoinTask) t).getNode(), "Join_" + t.getTaskId()); + System.out.println(p.getPlan()); PardServlet.planList.add(p); } } System.out.println(PardServlet.planList.size()); + //PardWebServer.main(new String[0]); Job job = JobScheduler.INSTANCE().newJob(); @@ -56,5 +61,6 @@ else if (t instanceof JoinTask) { job.setJobState(JobState.EXECUTING); job.setPlan(plan); PardResultSet rs = TaskScheduler.INSTANCE().executeJob(job); + PardWebServer.main(new String[0]); } } From 94daec983c3bf2c3da8abc71e9ae31ada38e3caa Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 20:46:27 +0800 Subject: [PATCH 72/75] a version that can execute join normally. --- .../cn/edu/ruc/iir/pard/client/PardClient.java | 6 ++---- .../edu/ruc/iir/pard/client/TestPardClient.java | 9 +++++++++ .../connector/postgresql/PostgresConnector.java | 17 +++++++++++------ .../ruc/iir/pard/server/PardQueryHandler.java | 9 +++++++++ .../iir/pard/server/PardQueryHandlerTest.java | 3 ++- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 8041daf..4b93495 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -76,18 +76,16 @@ public void run() counter++; } System.out.println(pretty); - System.out.println("Selected " + counter + " tuples"); - System.out.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); + System.err.println("Selected " + counter + " tuples"); + System.err.println("Execution time: " + ((double) resultSet.getExecutionTime()) / 1000 + "s"); if (resultSet.getSemanticErrmsg() != null) { System.err.println("Semantic Status:" + resultSet.getSemanticErrmsg()); - System.out.println("Semantic Status:" + resultSet.getSemanticErrmsg()); } } else { System.err.println(resultSet.getStatus().toString()); if (resultSet.getSemanticErrmsg() != null) { System.err.println(resultSet.getSemanticErrmsg()); - System.out.println(resultSet.getSemanticErrmsg()); } } } diff --git a/pard-client/src/test/java/cn/edu/ruc/iir/pard/client/TestPardClient.java b/pard-client/src/test/java/cn/edu/ruc/iir/pard/client/TestPardClient.java index a370f77..af1e0d5 100644 --- a/pard-client/src/test/java/cn/edu/ruc/iir/pard/client/TestPardClient.java +++ b/pard-client/src/test/java/cn/edu/ruc/iir/pard/client/TestPardClient.java @@ -32,4 +32,13 @@ private void testPrettyTable() System.out.println(RowConstructor.printRow(rowConstructor.build(), ImmutableList.of(DataType.VARCHAR.getType(), DataType.INT.getType(), DataType.DOUBLE.getType()))); } + + @Test + public void testClient() + { + String host = "10.77.40.31"; + int port = 11013; + String[] args = {host, port + ""}; + PardClient.main(args); + } } diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index bb41fac..b1a1ab4 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -874,6 +874,8 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) StringBuilder joinCondition = new StringBuilder(" WHERE "); StringBuilder whereClause = new StringBuilder(" "); List schemaTableName = new ArrayList<>(); + List tableNameArray = new ArrayList<>(); + List tableAliasArray = new ArrayList<>(); List joinChildren = joinNode.getJoinChildren(); Iterator it = joinChildren.iterator(); Boolean isFirst = true; @@ -919,24 +921,27 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) if (aliasName == null) { fromClause.append(schemaName + "." + tableName); fromClause.append(" , "); - schemaTableName.add(schemaName + "." + tableName); + tableAliasArray.add(tableName); } else { fromClause.append(schemaName + "." + tableName + " as " + aliasName); fromClause.append(" , "); - schemaTableName.add(schemaName + "." + tableName); + tableAliasArray.add(aliasName); } + schemaTableName.add(schemaName + "." + tableName); + tableNameArray.add(tableName); isFirst = false; } else { if (aliasName == null) { fromClause.append(schemaName + "." + tableName); - schemaTableName.add(schemaName + "." + tableName); + tableAliasArray.add(tableName); } else { fromClause.append(schemaName + "." + tableName + " as " + aliasName); - schemaTableName.add(schemaName + "." + tableName); + tableAliasArray.add(aliasName); } + schemaTableName.add(schemaName + "." + tableName); } } } @@ -946,8 +951,8 @@ private PardResultSet executeJoin(Connection conn, JoinTask task) } else { String joinColumn = ((String) (joinNode.getJoinSet().iterator().next())); - for (int i = 0; i < schemaTableName.size(); i++) { - joinCondition.append(schemaTableName.get(i) + "." + joinColumn); + for (int i = 0; i < tableAliasArray.size(); i++) { + joinCondition.append(tableAliasArray.get(i) + "." + joinColumn); if (i != schemaTableName.size() - 1) { joinCondition.append(" = "); } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java index 569c7de..2a403a7 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/server/PardQueryHandler.java @@ -58,10 +58,19 @@ public PardQueryHandler( @Override public void run() { + int c = 0; try (BufferedReader input = new BufferedReader( new InputStreamReader(socket.getInputStream()))) { while (true) { String line = input.readLine(); + if (line == null) { + //logger.info("Empty line"); + c++; + if (c > 10) { + break; + } + continue; + } if (line.equalsIgnoreCase("EXIT") || line.equalsIgnoreCase("QUIT")) { logger.info("CLIENT QUIT"); diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index 21b0521..d7ff212 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -30,7 +30,8 @@ public void executeQuery() //String sql = "select Book.title,Book.copies,Publisher.name,Publisher.nation from Book,Publisher where Book.publisher_id=Publisher.id and Publisher.nation='USA' and Book.copies > 1000"; //String sql = "select * from book@pard0"; //String sql = "select * from book,orders where book.id=orders.book_id"; - String sql = "select * from customer"; + //String sql = "select * from customer"; + String sql = "select customer_id,quantity from orders where quantity<8"; Statement stmt = parser.createStatement(sql); PardPlanner planner = new PardPlanner(); Plan plan = planner.plan(stmt); From 9c10b9729392902872d13fd4578c1c6daf06fc39 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Tue, 16 Jan 2018 20:54:20 +0800 Subject: [PATCH 73/75] ready for debug --- .../edu/ruc/iir/pard/client/PardClient.java | 173 ------------------ .../postgresql/PostgresConnector.java | 3 + .../iir/pard/executor/PardTaskExecutor.java | 1 + .../iir/pard/scheduler/QueryJobExecutor.java | 3 +- .../cn/edu/ruc/iir/pard/TestQueryHandler.java | 2 +- 5 files changed, 7 insertions(+), 175 deletions(-) diff --git a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java index 8041daf..c802efc 100644 --- a/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java +++ b/pard-client/src/main/java/cn/edu/ruc/iir/pard/client/PardClient.java @@ -109,181 +109,8 @@ public void run() System.exit(0); } - /* - public PardClient() - { - this.inputStream = null; - this.outWriter = new BufferedWriter(new OutputStreamWriter(System.out)); - this.scanner = new Scanner(System.in); - } - public void testrun() - { - System.out.println("Welcome to Pard."); - while (true) { - System.out.print("pard>"); - String line = scanner.nextLine(); - if (line.equalsIgnoreCase("QUIT") || line.equalsIgnoreCase("EXIT")) { - break; - } - else { - try { - String[] queries = line.split(";"); - for (String q : queries) { - outWriter.write(q); - outWriter.newLine(); - outWriter.flush(); - //Object obj = inputStream.readObject(); - PardResultSet prs = new PardResultSet(PardResultSet.ResultStatus.OK); - List columns0 = new ArrayList<>(); - Column col0 = new Column(); - col0.setDataType(DataType.CHAR.getType()); - col0.setLen(20); - col0.setColumnName("name"); - Column col1 = new Column(); - col1.setDataType(DataType.INT.getType()); - col1.setColumnName("id"); - col1.setKey(1); - Column col2 = new Column(); - col2.setDataType(DataType.CHAR.getType()); - col2.setLen(50); - col2.setColumnName("alma mater"); - Column col3 = new Column(); - col3.setDataType(DataType.FLOAT.getType()); - col3.setLen(20); - col3.setColumnName("score"); - columns0.add(col0); - columns0.add(col1); - columns0.add(col3); - columns0.add(col2); - prs.setSchema(columns0); - Object obj = prs; - String temp = null; - if (obj instanceof PardResultSet) { - PardResultSet resultSet = (PardResultSet) obj; - if (resultSet.getStatus() == PardResultSet.ResultStatus.OK) { - List columns = resultSet.getSchema(); - System.out.println(resultSet.toString()); - final List colNames = new ArrayList<>(); - final List colTypes = new ArrayList<>(); - columns.forEach(c -> { - colNames.add(c.getColumnName()); - colTypes.add(c.getDataType()); - }); - Object[] header = colNames.toArray(); - String[] tableHeader = new String[header.length]; - for (int i = 0; i < tableHeader.length; i++) { - tableHeader[i] = (String) header[i]; - } - PrettyTable pretty = new PrettyTable(tableHeader); - - for (int i = 0; i < 100000; i++) { - RowConstructor rc1 = new RowConstructor(); - rc1.appendString("TOMTOMTOM"); - rc1.appendInt(121345); - rc1.appendFloat(78.2f); - rc1.appendString("RUCRUCRUCRUCRUCRUC"); - Row row1 = rc1.build(); - temp = rc1.printRow(row1, colTypes); - String[] r1 = temp.split("\t"); - RowConstructor rc2 = new RowConstructor(); - rc2.appendString("TOMTOMTOMTOMTOMTOMTOMTOMTOM"); - rc2.appendInt(1213415565); - rc2.appendFloat(78.24848f); - rc2.appendString("RUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUCRUC"); - Row row2 = rc2.build(); - temp = rc2.printRow(row2, colTypes); - String[] r2 = temp.split("\t"); - RowConstructor rc3 = new RowConstructor(); - rc3.appendString("TOM"); - rc3.appendInt(1214); - rc3.appendFloat(78.24848136f); - rc3.appendString("RUC"); - Row row3 = rc3.build(); - temp = rc3.printRow(row3, colTypes); - String[] r3 = temp.split("\t"); - RowConstructor rc4 = new RowConstructor(); - rc4.appendString("T"); - rc4.appendInt(121345); - rc4.appendFloat(78.2f); - rc4.appendString("R"); - Row row4 = rc4.build(); - temp = rc4.printRow(row1, colTypes); - String[] r4 = temp.split("\t"); - RowConstructor rc5 = new RowConstructor(); - rc5.appendString("OM"); - rc5.appendInt(1213415565); - rc5.appendFloat(78.24848f); - rc5.appendString("UCR"); - Row row5 = rc5.build(); - temp = rc5.printRow(row5, colTypes); - String[] r5 = temp.split("\t"); - RowConstructor rc6 = new RowConstructor(); - rc6.appendString("OMT"); - rc6.appendInt(1214); - rc6.appendFloat(78.248481f); - rc6.appendString("CRU"); - Row row6 = rc6.build(); - temp = rc6.printRow(row3, colTypes); - String[] r6 = temp.split("\t"); - RowConstructor rc7 = new RowConstructor(); - rc7.appendString("hebe"); - rc7.appendInt(7899); - rc7.appendFloat(784.51f); - rc7.appendString("irc"); - Row row7 = rc7.build(); - temp = rc7.printRow(row7, colTypes); - String[] r7 = temp.split("\t"); - pretty.addRow(r1); - pretty.addRow(r2); - pretty.addRow(r3); - pretty.addRow(r4); - pretty.addRow(r5); - pretty.addRow(r6); - pretty.addRow(r7); - } - - long st = System.currentTimeMillis(); - System.out.println(pretty); - long et = System.currentTimeMillis(); - System.out.println("TIME " + (et - st)); - System.out.println(pretty.rowSize()); - } - else { - System.out.println(resultSet.getStatus().toString()); - } - } - else { - System.out.println("Client receive unknown object"); - } - } - } - catch (IOException e) { - e.printStackTrace(); - break; - } - catch (Exception e) { - e.printStackTrace(); - } - } - } - System.out.println("Bye Pard"); - System.exit(0); - } - private static void testPrettyTable() - { - PrettyTable table = new PrettyTable("Firstname", "Lastname", "Email", "Phone"); - table.addRow("John", "Doe", "johndoe@nothing.com", "+2137999999"); - table.addRow("Jane", "Doe", "janedoe@nothin.com", "+2137999999"); - System.out.println(table); - PardClient pc = new PardClient(); - pc.testrun(); - } - */ - public static void main(String[] args) { - //testPrettyTable(); - if (args.length != 2) { System.out.println("PardClient "); System.exit(-1); diff --git a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java index bb41fac..1d45382 100644 --- a/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java +++ b/pard-connector-postgresql/src/main/java/cn/edu/ruc/iir/pard/connector/postgresql/PostgresConnector.java @@ -464,6 +464,9 @@ private PardResultSet executeQuery(Connection conn, QueryTask task) } logger.info("QUERY SUCCESSFULLY"); PardResultSet prs = new PardResultSet(PardResultSet.ResultStatus.OK, columns); + for (Column column : columns) { + logger.info("PROJECT Columns: " + column.getColumnName()); + } prs.setJdbcResultSet(rs); prs.setJdbcConnection(conn); return prs; diff --git a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java index 5c0de21..61e9e1f 100644 --- a/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java +++ b/pard-executor/src/main/java/cn/edu/ruc/iir/pard/executor/PardTaskExecutor.java @@ -97,6 +97,7 @@ private Block executeSendData(Task task) Column col0 = new Column(); col0.setDataType(DataType.INT.getType()); col0.setColumnName("id"); + col0.setTableName(((SendDataTask) task).getSchemaName()); column.add(col0); Block block = new Block(column, 50 * 1024 * 1024, seq, taskId); block.setSequenceHasNext(false); diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java index 3a8027c..92b1846 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/QueryJobExecutor.java @@ -56,7 +56,8 @@ public void init() } } } - public void executeFirstPhase() + + private void executeFirstPhase() { BlockingQueue blocks = new LinkedBlockingQueue<>(); for (SendDataTask task : sendDataTask) { diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java index 5a57426..eb5c11c 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/TestQueryHandler.java @@ -19,7 +19,7 @@ public void executeQuery() JobScheduler scheduler = JobScheduler.INSTANCE(); TaskScheduler taskScheduler = TaskScheduler.INSTANCE(); PardQueryHandler handler = new PardQueryHandler(null, scheduler, taskScheduler); - String sql = "select * from booktest.customer"; + String sql = "delete from booktest.customer where 1=1"; PardResultSet resultSet = handler.executeQuery(sql); System.out.println(resultSet); } From a5548e4d51868b4153a76e2a74f0eb93ce67193d Mon Sep 17 00:00:00 2001 From: hagen666 Date: Tue, 16 Jan 2018 21:27:17 +0800 Subject: [PATCH 74/75] add sth. --- .../ruc/iir/pard/connector/postgresql/TestConnector.java | 5 ++++- .../java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java | 3 ++- .../cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java | 7 +++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java b/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java index 93d89fa..65da2cf 100644 --- a/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java +++ b/pard-connector-postgresql/src/test/java/cn/edu/ruc/iir/pard/connector/postgresql/TestConnector.java @@ -43,7 +43,7 @@ public class TestConnector @BeforeTest public void init() { - configuration.init("../pard-main/etc/pard.properties"); + configuration.init("../pard-main/etc/pard-wentao.properties"); } @Test @@ -213,4 +213,7 @@ public void testSendData() PardUserConfiguration configuration = PardUserConfiguration.INSTANCE(); Connector connector = PostgresConnector.INSTANCE(); } + public void testQuery() + { + } } diff --git a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java index 77330dc..db7408a 100644 --- a/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java +++ b/pard-main/src/main/java/cn/edu/ruc/iir/pard/scheduler/TaskScheduler.java @@ -326,6 +326,7 @@ else if (joinNode != null) { public QueryTask singleSiteTableTask(PlanNode node, String jobId, AtomicInteger jobOffset) { TableScanNode tableScanNode = null; + PlanNode root = node; if (node instanceof TableScanNode) { tableScanNode = (TableScanNode) node; } @@ -339,7 +340,7 @@ public QueryTask singleSiteTableTask(PlanNode node, String jobId, AtomicInteger if (tableScanNode == null) { return null; } - QueryTask task = new QueryTask(tableScanNode.getSite(), NodeHelper.copyNode(node)); + QueryTask task = new QueryTask(tableScanNode.getSite(), NodeHelper.copyNode(root)); task.setTaskId(jobId + "-" + jobOffset.addAndGet(1)); return task; } diff --git a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java index d7ff212..31d144c 100644 --- a/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java +++ b/pard-main/src/test/java/cn/edu/ruc/iir/pard/server/PardQueryHandlerTest.java @@ -2,6 +2,7 @@ import cn.edu.ruc.iir.pard.executor.connector.JoinTask; import cn.edu.ruc.iir.pard.executor.connector.PardResultSet; +import cn.edu.ruc.iir.pard.executor.connector.QueryTask; import cn.edu.ruc.iir.pard.executor.connector.SendDataTask; import cn.edu.ruc.iir.pard.executor.connector.Task; import cn.edu.ruc.iir.pard.planner.PardPlanner; @@ -52,6 +53,12 @@ else if (t instanceof JoinTask) { System.out.println(p.getPlan()); PardServlet.planList.add(p); } + else if (t instanceof QueryTask) { + QueryTask tt = (QueryTask) t; + QueryPlan p = new QueryTestPlan(tt.getPlanNode(), "table_" + t.getTaskId().replace('-', '_')); + System.out.println(p.getPlan()); + PardServlet.planList.add(p); + } } System.out.println(PardServlet.planList.size()); From 3af2de650dcd8b8884a7645edfbac6daec087413 Mon Sep 17 00:00:00 2001 From: withchencheng Date: Tue, 16 Jan 2018 21:54:04 +0800 Subject: [PATCH 75/75] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=85=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E3=80=81=E8=8A=82=E7=82=B9=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/pard-report.fls | 154 ++++++++++++++++++++++++++++++++++++++++++++ doc/pard-report.tex | 128 ++++++++++++++++++++++++++++++++++-- 2 files changed, 275 insertions(+), 7 deletions(-) create mode 100644 doc/pard-report.fls diff --git a/doc/pard-report.fls b/doc/pard-report.fls new file mode 100644 index 0000000..206f1ab --- /dev/null +++ b/doc/pard-report.fls @@ -0,0 +1,154 @@ +PWD /Users/Jelly/Developer/pard/doc +INPUT /usr/local/texlive/2015/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-var/web2c/xetex/xelatex.fmt +INPUT pard-report.tex +OUTPUT pard-report.log +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/ctexart.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/expl3-code.tex +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3unicode-data.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fix-cm.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ms/everysel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctexopts.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size12.clo +INPUT /usr/local/texlive/2015/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-patches.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmss.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xetex-def/xetex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xunicode/xunicode.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ulem/ulem.sty +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/latex-fonts/lasy6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/environ/environ.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/trimspaces/trimspaces.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cjk/texinput/CJKfntef.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/zhnumber.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/zhnumber/config/zhnumber-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg +INPUT /dev/null +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/ctex/config/ctex.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/enumerate.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +INPUT pard-report.aux +INPUT pard-report.aux +OUTPUT pard-report.aux +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT figure/leopard.png +INPUT pard-report.toc +INPUT pard-report.toc +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr8.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr6.tfm +OUTPUT pard-report.toc +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/euenc/eu1lmtt.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstlang1.sty +INPUT figure/release.png +INPUT figure/architecture.png +INPUT figure/pard-node-in.png +INPUT figure/timeline.png +INPUT figure/execution_flow.pdf +INPUT pard-report.aux diff --git a/doc/pard-report.tex b/doc/pard-report.tex index c222503..cf0a095 100644 --- a/doc/pard-report.tex +++ b/doc/pard-report.tex @@ -280,25 +280,129 @@ \subsection{节点通信} \end{figure} Pard中Netty 的事件可以分为 Inbound 和 Outbound 事件. -从图\ref{fig:iobound}可以看出, inbound 事件和 outbound 事件的流向是不一样的, inbound 事件的流行是从下至上, 而 outbound 刚好相反, 是从上到下. 并且 inbound 的传递方式是通过调用相应的 \lstinline|ChannelHandlerContext.fireIN_EVT()| 方法, 而 outbound 方法的的传递方式是通过调用 \lstinline|ChannelHandlerContext.OUT_EVT()| 方法. 例如 \lstinline|ChannelHandlerContext.fireChannelRegistered()| 调用会发送一个 \textit{ChannelRegistered} 的 inbound 给下一个ChannelHandlerContext, 而 \lstinline|ChannelHandlerContext.bind| 调用会发送一个 \textit{bind} 的 outbound 事件给 下一个 ChannelHandlerContext. - +从图\ref{fig:iobound}可以看出, inbound 事件和 outbound 事件的流向是不一样的, inbound 事件的流行是从下至上, 而 outbound 刚好相反, 是从上到下。并且 inbound 的传递方式是通过调用相应的 \lstinline|ChannelHandlerContext.fireIN_EVT()| 方法, 而 outbound 方法的的传递方式是通过调用 \lstinline|ChannelHandlerContext.OUT_EVT()| 方法。 例如 \lstinline|ChannelHandlerContext.fireChannelRegistered()| 调用会发送一个 \textit{ChannelRegistered} 的 inbound 给下一个ChannelHandlerContext, 而 \lstinline|ChannelHandlerContext.bind| 调用会发送一个 \textit{bind} 的 outbound 事件给 下一个 ChannelHandlerContext。 +\lstinline|PardFileExchangeClient| 的 \lstinline|run| 方法的pileline就加入了新的 +\lstinline|ExchangeFileSendHandler|( \lstinline|extends ChannelInboundHandlerAdapter| )的实例。 +网络传输是只能传输byte array的,拿到后要做语义解析。我们开始自己做了一个Object Encoder和Decoder, +还有使用gzip算法做数据压缩的可选功能。 +Netty自己也实现了解析byte array的这类需求,叫编解码技术。 +服务器编码数据后发送到客户端,客户端需要对数据进行解码。编解码器由两部分组成:编码器、解码器。 +解码器:负责将消息从字节或其他序列形式转成指定的消息对象; +编码器:将消息对象转成字节或其他序列形式在网络上传输。 +我们的编解码其都是ChannelHandler的实现。 +入站“ByteBuf”读取bytes后由 ToIntegerDecoder 进行解码,然后将解码后的消息存入List集合中,然后传递到ChannelPipeline中的下一个ChannelInboundHandler。 \subsection{元数据} -元数据模型 etcd +Pard使用etcd,以Key-Value形式存储GDD。etcd 的官方定义是: +\begin{quote} + A highly-available key value store for shared configuration and service discovery. +\end{quote} +实际上,etcd作为一个受到Zookeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更具有以下4个特点: +\begin{enumerate} + \item 简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用; + \item 安全:可选SSL客户认证机制; + \item 快速:每个实例每秒支持一千次写操作; + \item 可信:使用Raft算法充分实现了分布式。 +\end{enumerate} +所以我们选用etcd存储GDD。 +Pard的一个亮点是基于etcd的watch机制,减少了IO的操作。 +只有当GDD发生改变时,才去取数据,更新。 +我们使用etcd的持久监听(stream),当有事件时,会连续触发,不需要客户端重新发起监听。 +因为GDD本来就很小,所我们在内存中维护GDD。 +Pard watch的有site、schema、user,每个站点开启三个Thread来watch。 +调用 \lstinline| watcher.listen()| 方法持续的watch。 + + +元数据模型关键结构如下: +\begin{lstlisting} +public class GDD { +HashMapsiteList; +HashMapschemaList; +HashMapuserList; +} + +public class Site { +int Id; +String name; +String ip; +int port; +boolean isLeader; +} + +public class Schema { +String name; +int id; +List

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≷q4`Iu3F8>0vF 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

EG6Br6ss5v3P`k4rON8MouR$ZPjx$DO=ye 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%0D@@he~J!MEQyfVul`Vrz!L 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�yhN+C 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�SBA{S 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

6zR==>2?X+zKjM7Zh_GyO3D)=!vR>6O!H<;H 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 Eg2~{>jQ{`u literal 372757 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⋙=+@v9TUlI^>?z#Kb-z}fc z_~&sq&%e@eBQ~lHg!Ed;v2qoweQW5FZe)gEY4DQhB7a+caK+j&fZ?{~vP4!yo~~X9 zu>c@s*LvAmOrkDXr7OmY8xw!3D!Vp&rk8g!+jilodkc~1#T`zunQTsLO#rnC?~3dXg+CAj3L5@i`NPY5L_QAI4W7KkLw@KX-3Pq?+6Mc9Lfz{=7fEa$pC;ID3oK6-%R4 zP2V)n#R@8z2%46@mHSxDqSt3Y16eXtm&0q))pw28Mo+2=E8~Fk+vPG+8?EgJan+~& zJby?fBB*|L>_G)U>ah7@=Q{RoSgpcbZr0Ko&kb6S8GekDt{$l$u%wYJc&v}?VzJ~2 zdQ?ct@04w5(=KK+iFoX>of63e?tRUWoNt#n*nQn=Ax9Q<6JJ@#E@jVr&oY~#eg2Tbm}OoG4<4>5)K~u6oP%v0w0n_jO}}{dwWM}x zE4x~d0+YS*C)YCn`IT6>X) z0V#2BaOds7guU8|dflR_Z>e@lAoU!*y;j+v<0Kh!TproGFWf|}T>5rfr-8eVSO|zk z-~EoleXUs##w(gr;GuICK5ho~F;H9|NC7p%BNk$zJHFD#f}!1VI9l>O3{^@s}q?kk#qeA~it9w%+X>8UI{?Qp?x*|Gw|v;(H@Io#mq;*dlT9 zwejAd-kWB}sq!m9$Xy-EUIQ7qEdoaJVFqy*o(QmsX1RYLcnme1e(Hyf1i19S`KtnxgW1-7%i=&Me3#ZHf(4m|Ar*83CYEw-2#` z78763YB@CVvTO?ay^2_6i(Xxr`eWJo(pmf0R$+X3&2Rkbpl^&6!fXCHTLkJq9evvP z@sgpX_Pab!z-(Ogw)Leb4kUMiQrA!{&(AdB;MncJ{o7TAIT5iSf#-3E-Lb%83^Vol zzUH&&zTiE}G8?_MAKtX_&i>-4@!FlBqN-w--NCr5)6D|=580A^X(96N)@^+FF#chIf*PZoAg7_$O1SM;}pJ&n;<5U0dvBpCJK* zp_$68tUSGcJdodO_}z||>2mHt`d`J_#uPqqEGH1S7|K)} zpX3A%e%yDlq%mOSYrNngsX2l1MT-P}s~y6eaBCdxe0R17^%Jy9@5&q0{8XI+t&LE% zP_6`_auGI&YK6U=s9jCKzJn3zdtQ{>$=zgB4fXJ2@_xZyi;ZMSvQ+A_)oFH7iCbqt zvpI*yG!X^%muUC6f~5?`A`gC6mhUb29fS&m&Hf811$h%bjh%@|LU(Y$uzD;OG>{75 zG*z)ZY>ZT&+E!>1&UD@Be4LV%N0{xHmqRb4&b%;27VzzZaaTfh zPL7=w&_6;-r^6`#q4ntU#n@A*WAwe^r$9os^_2%2!ImVjGNMw^>(U692NK3PvugYa z3i5H8>UA=uu-vDwu_MJsldxH~N-81VH4KMR7jiPJSGE3)QQk28YJ&omAMMbt`DA_hm%3623w85D|UqxJB1!q9A3=eC_g5#dj>dq}`4FF#VXKB7TA z48Co^UF+Lwf$>5M;wT1Mz)1%!K{IQm;L*b%`)wF#u2wc#HkcIkCU9Cs3zD|53O~?C zz|r&9{hXoog*=-PaNK&I(9yybc2z6%7yH{6;^$u^E?-9q_{L9aW0cSSUBy4TJnhuU$)&@dbRxey$em00Eu^V{ zOjo{; zXlm}U93~B7xgZs4VgbZv>z&)jWmzoBTOKOCYWSkCk;BikZYAwEa5*~`5jdW^E;PsS z`9_&V_O%Y3)UdxU3kP$PU6;IkzG^peI3P_iB431pYxv&Ks;gry7YpzoYkyuFlAT-} zeaIdTZE|WxQrmS1aRj$Eu@8AUn4Tp@`rP`ki^t#%B+t9OrzaHEWFN+^Hm&=os{y>s z))CO`upV@$Rm?#Urp%2zuoUg+ThL=|a>>?SEHy{B9=XUV{Zc0{`Z`G#;<+9_c@>oZ zw%1AC$DD_Mb@uz|PeXm&Zk7;yxc5Ht!08uf77J}6Ga58F!;t(ECwR9lc2h;`tR~DG z)8mk`UV$BUl$-6<5`f);K|Z%%8|p-ViI3rXgS4Mp3jQ;Ip!i!fj783c)T{$g$dho( zNK9a-P&hsJp<;n&=babFnyf0TQwm=ZNa`F9^6$(Xe)mVhvN35```{X+Vr!ESnV=cH zV2`E&qBy=pq{dX+EfttqA^}h)yG?EDDMcT*hx(0DOavw>%N~m~w&;+>0%Ne^h@Z@% zKPgyz*D~*G3qvw{9E|X9(2E4rOD)hez99O4Tt8>C3N6G>F{$6M!*K-b%gU2?ckAB0 zN4`*zIYu{#aHuTWul%w6S|GXm_3||CJXb#lqTcRlOiXLQq*7Uvk4u3^^^JnvbBu#a zF)Z#6iu&4Ux$AKU*74N`i|NqK$j?4#} z-Pm(>qNO8ND%6K5`O$(!(7r?M!s9gaUWJuht`v`WUox>=R_kwE%1@;A zq+sVdxCxC2dEs9G=z;bU7i=S|!gIHU_Nyv{w(&=M)u3cRJ@WYtbOqo{ceEMrEzsOE zPMQGAs+X)8rlkn>2V$xzo4JzIA#>V$^0Lu|VQu&gpYX4baw+2^Y9{<mGAyaDfiv zT~2)@-0S5QT^miZz@EDX`C_BcGF69V1Hkq1&7}rB3#!b z3LMW`aDqas+Xej3HgLk6B4hVC&3gIT6et5dNJpP;cR09)rsTI9p^4NgiTSiMfi|^b}=iPe$UhwEJ z%Qqib$vE@%yX3I^nJCWZshNTWgKs&CF2yJqD{o=F>ly>X3zQvLB_s8D=Nmsso8zqx~jQf=Z!f^t5##@+;v}^GsID+>U8;2BbkU3T|>>Jtd+lC4v?xxPuB#))ln)v^^;?BJl)4#m;3)4hi zojSaLet27?g1ULVqEVH*PCx0qZRN_KSB;h{ejnaNBEMTXnxg{c^If+8G={`v{LT#A zBkkS)L?7i+vbGMI{HxLCv6tl#!}L!`wx@0lWVB5kj9VS>?Qx~ASIIfIpktIPYS>-};*n8`nfX$vMp5w;yQoVNt zfoCY~n)(^8Uw7sI_08=twA3-DWicp8;4#aZjgcH<(9~=_E(r2>u)u@IU~49Kk;k%^ zDEBFv=|ucB&vD=M!FTUp*4KSH)a|Os5O=NQd1<%gO@>&+R{?;@etAbg2>4yJKKgv+ zNso&4%tf=n!F%nHY--GkLkv-kRAihtnu0PQjPW*Ru>jZ z9I8*foKb8I;Ag-JfmaPRKBV)x<|=37yl>P07%`4^k5Zvu%1g=%bv%u+0NaB{it*2m z2fIv$csOU@*@Dk(HY<2`_ECeh_zyoiI$gLL@I2mT=0%44o%e|Bn3X6(F3+~^J|Wq3 z>it$jOK2_6gqPcAy>j`D2R_%i=(HMy$lkjQnZv!>Tm8%;DyFC|SeP+w?E>&iGc)i( zKnbURy*ft$Ui|tY&3w^T>wVhLWUB1q>7RBQWB9&sbOrD*Q=ntEecL<To2;BWJf0`1A8YfK&P;=``3?=3mn zOIbn}x(hExbdB_+G25+6-71bp(j>2@+q=cg@=3bQjrB7z=E?HFjRnLYKmVS+XW~1d ztUla$E9t4c%o)TWlQP18u5F(>uV5TWxA;cOZa52*ikmX^$F=s_2lW<*!*`v!h(`4( z3G_$oi@Lpu#y{o)k2fOwmoM_@*=m;3s@KCh;wij-WVqC3e7)VXyaCfc>`R(L) z_%k<_v}%5;Ja-nWqzU{4d|Qv`GFJ6l_mJO}%ZLC4?zXqun$1&3(P24se&7d;O?a&T zuAac}0Vz}8wmkS6U75gz$yTWN1z&JIe2g|?O*GKJ2S&s%78BgpVS#IU;(P##nsb@U zIh>%v?#tXqV5iKiw?ZmYJYWOhcsAHza45Qa0WzU325z#S(!6Vrfx%0IFTL(U#??RRdAVgi%N-h3PyB2$f?~fh`7dwUO7{&>{eSVDr#8nx@~ zJe@$X;i$cP{9OqyUj?b!`!s&H{Qk@AYHU$qZHb=TL2vnY+@1$fBQiK1rktB^ztDl4 zzecoc=@rVvRDJHsS2S*(u~U0*W5Ivxb`YnX(TYyIKc> zN=qRvYfNPO0P@WZ;0lICLe7NcOcmE%UnDw!+n~&2?9_KO0-Dq;kwu7jmF^Y-D|qX@ zr@}w}Z4dIRfBtk_Ntov9|MZDiaLorHh(DG+T|LaF<}0&Nvc+HKl7rtMBesZWsR!bv zP#^X7h_tnD$D{bsSAHJ=30rfVRyVfF@Fn?$e40Lbt9`Oob4at>33ql}h^!jbq$;3i zzpooxFWOnN=GwkikffQH4jH4x3Dj#-+twHOEuxNU4iNIOFtn`E6G}I-!bz zr1~Ey`0gs@E<8lPnaq?Ib3XMo6X)&LAAE_drPP`?1$(Rc?`9$o=c}rMXJ?*X<+T9`n)va2 z9Ke!^%`_WF9(WU8~(%FN6C%bxC7tcsp!UAIv#3qe5H$wiur z_e(d&OPu&6Up3!hZ?QOj5Gi1uxBI23>fS*bjZ)G)->B^T4l&h1B~QqUf0X*M`@zGx znHyELD;AGGTg{8TAsH*U5i3X|!e(M6TV@w>n<9m*!ps$Q^jy-_xh?E$0P4i_bN6X`b9nIzmKff)(GCdzKg>YaG549DFr&PXNntz5yeXxkQW zIJ+`<)}x$peFgG%M$z1MKI|Bp}k z@Cxn_omNd`QVr_S|v^b8q@s#`kA+R2%YK{>`t=a~AEnk?{@+e1ra$G-wc z?xCN#_ z_e;k*L2HMec}1H{Xqy|geRAcmQ~j)FNE5;5DbDTVT#0l4)vsl^NY}U}6Jio=B&+9Z z_n0ekv}vMAtrR>ftlWx2EE4+5lh!7iK7Y6`;HEKHza}ww#Zn}G{~|f*9^!iD#Aa}O zry(y|zn#yV!r3hzdnGo+>2f-{_jy27;c%aXGZWG~;PX8%<|#CJOX*@)l4W78#jg#% zlH7DgwOhVH$Ge^s(_AdvgH?*JTgUX2c@p5?Fe(jS z$VJDy+n#1ID7iDab8B&OnM0aJM_0dRgut2Q)pWs@`+6?|#2oCGK%#JuCSk@9QPkcV z1lFd_6E0j08-4w?!g>?udspuOn-YkgtltcgBK9~!zsWT7OD-!&|0cu=RqknKglE=z zO%{SO1v2Vce~C6>sM4N8DosaUj)o44ur*&?7tMG%B^CO|zFX za@Kh#2l+^u@+<(6+C|&w6GRDH0XAe{>q)T4`5MyGSG##>+yNPr(_w{Eif7YO^Ny;3bO(5nlV`&(sPN?rodT%NRxQA(bPb+M^{8P8*K zN_`l7eWSPKZBC_3v5Q)kFcZGyS@xDMxXw}*mLJ#Nb0~UoYMPn8L3H2d+mL@1n~;~- zETe96%ty+M=v>@)pL1<2fvW z21f9ZK~jMZFkG{GMe1)gw%)4~=R!D(PS(<&uiNk;8h*Rrx=rq9?w@>KwDUq9Xs^)f z9u@X&XEk>59Hd6!@>uO@s$D%#{xh~$wSJZXv5~?n{p54>6SK3D+eRI?LWsrdi6Nj5 zw1ffCw}LnL+TV<6(h^&7l|G?T{ylmlH3cZJO$<7oMl7#ry9&;*5%8O0yLUu4Yf!A4%lFj+X4Sp4Ue@YFSGGEo|_bp7fYQ1yI>u*O~4egq%e@4wH z2Q~sVuHVwRAaL}9;7)6;u_%YzZy~49UP>7o;lp;Dg*)lb#w><9lD9k(N%Z7okK;>F zpJMdte#yCD_N3&G$vz5nu)kKi>u!MVgwj=9*pB~nYdT6+(JR9)Yqraej`uY)H;a(g z0XA=smg?)f52MQq_1R**4ORvC-QUb=ce-|sewt`3uxnq#DgI}9+~B1`tN0ah*sdNl zWw>?ZJg;^Pl+oN?P3Hc@WBvmA@q!{_3SH4c>r>2b+GGmED{1?UclKho&-6imgf0B} z`brQt5w~~C!W|n3KZ_NZR>I8gMnlF2Xtky5+y7i?TMo;%f$ho4p0}TrH2(RfNUrsi z^&?2rXKkRbMEM{GiwS?<@LYMv#97>!#OCUC185Z6B0?f6A~g1rY6X7B?iB1S_ZI;D zwO&h(7BDk(B;F^F*W7=#_=U7-HhCq9zN8$e9qY@PF@>Ap)W@%Ccj1Ftv_0BjCL)WT zOZ&X$t0k(>SHXN(Qky(OzmaZH?GzB0%F>_8F=+GmNh9-Xml0E>C2La8g>HLAmbX|{ zvAH-g)eoA)^QG)P94-!qFqI-t3daZUc>aX0)@RqZIy_qn;h})DZx7ExF%2V{kS;Kz z<*A8s8Eu&3UkwYg2#Tr6P>Fyd6HseEb+_R0Z)Ia^1Q^^Sj&fjTnnRI`7z`8K*~N@9 zxzkASbbEBlD5UlDEdDG(lDlUzoytn6M{#brVJ)6p?feUEa>aD$R3y%mZw zk6LJ^t9d_P%TDrn`w0+;OWa)&_V2N8;#csn2JCN5(S#W5@rm_}Z^ueb0nP^cQ)|%> zOZcszsX3M^8`xfMObtCoinfZRt5#H(=|VeRnhXJ#}+LFD7sXECSy4{|Fvp5g_^WC&K2|v6S zJii@)(7WZFn*Xm(SA|1pzY5Y~-r-1ngI?EsLSo}*K!f&-PaHVqBep`lZl1@s{yE#O z7jh4ObynQnDzL%pRqdvpc;l@3IU(TE_$?L_&2yj*`A0|vh5aPV7&iK}{G-Gc zHAgC%JyN+cStww%7Idu4wXef1x3`nZkLj9sdfH71 zj2D0uOBIc`t&#caTO9(HtzfsJlV*NLUZ>60>t-mt;0rA!WvkQ+FK^f0_#xMM)`K); z1*fhP${vxg^Gk294%18PQs7&4onsTP1vO{83kLXems_s+IoQP>3u=4|ojBpr1bT8Y zXkMGq+M_^_^17yCn|5RSott~7Y!pAlACON8Wm}8PVV@*RX-#T2DuK0^{Ah#2wdFbY zt1KQm{qTPCpKreF{`rU}2i58-{&AQ(uNTStsNn4JWcN+54}EOk;n&H;P-)s-)D0-* zun}J&a4IXO&^$JI550D5!{coK8vb-b>^W%d|7%Ba%!hZ;Yz{8LmLf5^CE272h%+6H zjz!b37WDt(jt!qHfz?x*jO)3K?R{bf9q26k-JBajQ^&$EKE4sQBCyeG^xeMWe^V#N z_!AKR%60J>Z(H6AA2}*sKI)jOj?PNpnr7R$4im64C=tSnL{HNhE?AAaKrUT$d~faD z*j_*vpFB&+<3*vT#l2C4qOO!V@G51gj}A-Leps*STFEMTJ~OS#-NZ@^>RL|Gq^kR& zZc#(WqsbHGt>Um2gk;%3+%TBg;elwTtb8sfcD}mle+->xAQXNa#_wDl87E}BBV|-( z_Bbn4R;B*P3}x?iI2^Jv&MI`aq$#V&IAmv?Q8??Ii&Mto;+*yO{`d0x;`@8P&+~a2 zeaI^{@i38pwZl*KHbr8hz%Rr81$Felj@lB>TQbmr&F>v^I7a`Awm6ClCymvn+VUlg zdGz&K#0(zNZb%OrK{Qctjt9v9v?~r<@)eGttSu*Wh2QurdKG%t1F&;KYmAxgdfuYk z;{H-X(X^b?$`SeR?+1u@{mHFUa#QnQ0MevemvSai&p zem9)-3__L5tc-awnUn+#_C05;xv;5K?Vp8$mfFw%O2p6kuVQRK`*E`RH#X`sY<3B@ za+aiPEZX6$h>b|~A7|l)W3hvv5If9MDB>Blaz{5Lb^e1_-_={1u(2KB+b5meXe(r5 z$(JZ>lBCP9@j)3(doDo&gpO94f$RR~ZzWep@zr|s8N5&Zr;pUrJj-Jfd|Gh@#=&dC z&9}Ng#`8JUN@L$?H-Ddsc>d;ONF%@grVp9VS7M(*wWa$7`Z^|(W~+1P(RGA8xuR8W z5Q~f?BG*uxAyKi5wt4-Xr?h}4HfWqC zHC5+msq~u74_b|z+@(a7R*^Jh5pb2Ual`mxSX(n%@;{txaLIE>iOwM`MI1C__=ixS z4f}3lrdnVTbMpDb@7N7fdYVO3b4`aONQ&Xi#T@SkyH3`m`9q9()wvls=EiwF;!c!J zg<5YAVv8mjYFOWvFbzz*5M-x9((y|O59s09sm7sWcvH%mhce`p-1 z#(zF%{3?d3-daeIQ%@Rw^ILo|x-{L<>+d&WkIqedUArsSi;hN2?#i5wzb=9*tAPu@ z%s#CiwUFe5vQ+2FMk4*vh1pLBwiNekBv?imqh4SpH4cu1G#Y$ZGt#TVK8=Hu>{ZUI zy~z4%uHUfqhDqOZq3fW#0)JQzomqZ$8t$D@;7HEZ{TxS`}eGd4cf9{m`kBWVAPe68}C${sw;Vl`gqV#Ka3{)5^F=uSUG+fCNwEK;Yi9YhGL)=DO( zcW>ZJBeW3f`ceDbp2D)jY2o%;v*2r^0_ab2Z$U@@{#r(p11WNXYCG?&O1cbEYaa_~ zZfP~bHoZhp8jn6*YY!Ek8(fTEQ1LiS&$iJ2a!Q?#g>s}(DA-;rM-smnwi}XmjFg3# zsmU3uS;TBF4g-xV7ik!de;l_0*>+aB81OOUN<*;0&!SSpvEcdmq@#qm+t6M29Deo1 zm+B??WcyhD_ie$q5!N658^~(gz5rSDkw*qvrOCDI#e2!u5J z>_^zD8KtF#Xo;iU)C|IV(L0rEwcC#ptpCKBu)N;N>Ua}eI*LVcBbJSf5WDZ6 zrYUB0n(5lA9R(nNfTB9WC4DdU_Sbr{acN!&5Y1AlMIV45q$u8kDjdKw#x03fqgS%8 zPoXl|ELO6r(#=Y^=CfEKK1j$j)nGiWBcF3siqD?z0$(Xwy<3%_bKKu)l46fvDjQz9 z8kEL*enV?5c!7~(w91Uj3i`wq-GSW%MdCJk(UhJNVP?QC^*f?#`QS>EflkD;Rg{sQ zvG?76X=Pnxt=BPa{w(5+b8+x7ciqC2? zHV_5vi0N#ZaL$;Y?BA8X+SI321t9(0eccG0c(CJHzD*Ou;vxf02Uvyj31Q7xz{$ZPB@enYrPMb>t9LS zytR~v_1NVbW~pPB5&oH_kp2iuBcL8D*d$R*y*=fGmxwnO&6f6+m|L^y7}E_wFeg}ZiS)=bk|`g%5V=dG4eZfn?R^mJXm7F|dfJ2k5~ z(s{VQmhArE1N#{7yEW)y8bBBAi(g7%Ya+3nmM5tI$2A#zdHeNICUtE>a$P|P}LZcI2MU^{_Vx6_}?K=1ht!7?l8yeD`;|YHo;K| zPwM&1&x}h;laYe7D&T|6ry%H{#+)xHNDdzoXAPR+XysMhf5d>!{~X1q$9P_?hyh0D zW-LyvCaT^l1y;-ZUK(JMF$_)nN-@tycnc>GB5Tvgxu|e~$ps^D^;ecT?lbPUGz;`o zcu6uC#umzGex1+uaTZWfk3oQK87E_dOo7>P4o@wET4Ucy%yf5k8~Gi1o_G@J8O`>s zgaIaBdu=eq?1T#MX>M_(W|eiz1t;(pl_g2~AiLmBuTBDL_gm%}vxHPli|*Uq(2L{y ze(}hokC#tM;zC2~!1ZYKS!bU2EO;jw2g;EVQs-3CkAatEWP?PqiT=X(KjuaD6qB3M7dm8;A0$6 z@I|c_(6f{|+C1a;51-r=`e)Dw6R2UwGYP(~fFmjvar~0n<6E^reF#jQ&Gc zseRj^A#o9?-@jV0g+mYo(geW939W5kSss34p5bnQKBi?CmaAffHwfH(2e*7tbJMS% zfs=K*6dkO!Lxe|{+g;4R-^XSVA8k?gvOLp0l5Peu_%OQxC_KcmRDp?R z2G3W;>RDpqb=N^@pa7HUlk9o&9>&6$6J0Mi4|Q3vl5%`wO)*2Q-0C$aR;h)JUyK%2 zxC_dtpQ2na*~yCfsWQ)1g50Nb6~(|yLy{qrWC~dF9E~fo+huXG7tP|@<+9*2#zahw zveXPx_Y!87`&HK2{_RV~oxvVCyisTo-KAhUSp-3p)ABfcl`5i z=g`f%ZAyJ7GrP^>49wxi=M%qyj42Ei6Q$v-@^OYpYgbb%u$EZWzOk({o>Yp7CE%l_e}bLRaAmtg9)r zV4alRn}3hU!ch!`!St)Re2O=Hj*$kaomH`0udBH+hD*JEOyYs_ehYtHk^(=FiBNIA z69|reZn!~`Q@nl$sqaQJyyvL!;feMRUlFBSZg9V~tP8uB${+2Y^;oO|Gk3+2ysyUA z#T~=uNgobZN-&n=3!>Jng~WMe6xoSFGT=Vem-DQRkGmhMzo7ZZk1jMx^o615FE9En zxScCme&AzIVTQ0f$eE9ACg0O7L1L=-oV)!fBw?sZF!c>;FxGSOwvfo4p3hPIXhe!l z!qIO4uYCtrYO7`yZMK7W$QiwQ<{JjYRG_n)tglhVLrq02SagkhztZQNmn%o~7$bTa zlVR_Si?%^+6{cjIdy)z<%S=cVOXgZua?D@sHwJ5sncR+iMth->Ih`X;DP!!&Q56mC z-Ls}v{fwh!orq8q&%h^0hM4htAxCkJ&mY<9rppx@{5fQaM}_y~_gIK(r1W~-`{sES zBa5;Q*8n3j;<)Dz4Zu`aVSp!%T>F(A)YWZ``#LY?R$MW64B2rRgAEc{)m=U_lqjb| zi%GK%=-WdM7X5Mi!zrGQs-_FOI?G_$Q0E*_Nho^7c$LvYc5GQyAPlpN7~exb--|{~ zOJ`KfhFllnYrhmPvt#gBSc{3coZeUy$gT_C4xqT6%qBru4`1ZtxjlZ4VeD|?VKbi@ z_EFNA$L<>YEX^*I8d@`lZ=e9vD(t^)hR*Sr6E zwO04pS%L_wo8ddBqsLmE~CWM$1xYaXQbg)YCR+Xe!(`H4;`>pu+Kiz8} z=6Jl%vdf_q!sM#rWv!hhgU?&;TDtRY)N57%y1K9e@RD&+;WuVU*WKE`IM}MJhNS@m z?X{(Z@3NoE?F~o!7g){n8m~*fZpl~14~*tqCAFb&lEu^C`A>Aa9DB>22;Se7rl({H zmIQ$Z?ecl~nx!m-5jZL!&7ZdPL<>OwDl?zPs2oh%3mkX$+Wx1&moHHm^I9g=xQV>G zygs7YGdD{?a7cxsYyJ1k0>8C5!%2km>_yU)C$Z&u_yaB&Ux{6&PpWc!$@|!TfVULI zNDkq@dE@!}gX&CaA+ug_hglo|GN>%UqOR^{rx02@5I`)T$GY@$Q9) zDv~a0eXA-FER@sr1Wk5U@ZHK7`_g`nP~~d6tRuezr05L_mqKD95AJ?t3UznhvjdxH zS8oRteyVRD9Vx}O2AAk#Wfs?lt{uMp-Yj8Gr*R#}l5fo+l&T9RQwG$iSGOkSM0zEc z@61LAx6QHDZmNU?1j@>k9j7Rev9CT$vV;Td&IbY-(pq-UVF&-BS!>HvnmU7+cj$(n z>0<&Nusxj>wgaV4gHL0=2)D+63KipZAhkXOJQ`Gm{aodKJ?!T$5MK*x8*n*twg{}Q z0VkbINc8#WER}YDG1;|21YRi8(k?TN9(=ma^f7OI!z>`A)Q_xoa=!y(RohjfIE*<- zQU$4!|F$S=Diuh>t`0HcZ!LLHUkM$LFC9p5{JPT-F%q>>5(9E|2z6gov8)<+n()4W zbTS|HFEqgkMGMq{B>pioln|)oU7zRNv$3~9+N?9M_zfQ-<)UiA$|UdRQ;EXBha4H*uq6=P?0EdwAvm@0Lj%F90pO^44efp3e3eYaxe9)H%@0 z3ovX*3LG+S-#3Z+Yb9pn zd1$tV?af2EJa)}`C=`v_cjlD6`aOL!ms|rQ-%USl5YVA->nI8|9y6kz>O9Oe!Kfvp zHJWlM=_+`pdH+cOQrEx2d!3;|$Ht4w&DYw05Lwa$Sc~apJs}JHV*+j1bz<%Ui`K1nUVQ00>_Jv^n2@s-s?s7xvmHLK`szgA7yf`!D8ZWRVrl-UG*Kkf zY6>)`0drK?7 z!huN=1M<~a|1g~m4C-q;jHxJF%n!>kpi`~6@%zuy)GghL;ZR*WO|DCgv_Ibr)5bBa z627zb$tR(90EdVIkY_%cs4hCwo6K}wSzwVsY@7n_vU*Mo+din7sK!Kk$tf7Pcz>Ez z5`XxL{qN(diLwm-EXEsQd+$!^LYIGnz!+Y%#T)1T%g-?w%}?wwVsyOB21RNtdia9z z#b>#XjO_sB6Jbyd9s=cM94^>+$Z0hqiLtu}EL=yQK=NnfBs^xBAJyRr2PQ-cYK6#jM8N8s3@v9nD1P=^w=F!vB|8e8f@Gx7VG%-2`A3t$S$pEx{>uU zwK84SkCPUQCh23i8)VoeLWp8ayfMytFF|bZiT#9|+m}E(zP|fYpPqEEazJ_08(xj7 zI|D0n5adCacg?+Q3mDhyc;VSBr!BOp%o^EX23$CE3L{Q*lW0oTv0TFa`|p@+0{ zvWx|_iG6arZ+j)hBsD_a<4qj!#Cu26+3XH5zodPMiA{$l!j}ZHnH3Uukios_{UY|M zaqAE(`J_6l_|E!twP+Hsmo=&&o))kDhjdY!`fj7$mAu-4Hli9wBiA(p zP)7o+1rY2%FiJK+ax83M`@TuV?CAxSE-5`-m$di2-fxM!xJU+3mu6x=Z(R4;j14LY z!59D9F*<&V`6h8{xcZcVuvIMgQG15CEKbN({Z-WP^~<&9jotRq6taR z$xaV_hrX_UJ|^(jUi=>EMKq;C%ZI~i{c%AI;9JMSIx)_VA;sgdN9|XdEYHD5SFe3O zIrT9?(j_T|xKGSDFux(&^9vnvTVC(A`CKKHU~HFFH-!dRo!ZMx7HK<8;XlEnk2?=5 z{Nae$`0B4w*`L>0bN7n$@ymyNMcGH}8_KQMyWpMt=qW?^<|x|s5Pt@NrOOv!F+Ky)KL zE!O9J-Vq3^Q1Rb(Q)r1@O{bRW$e21gG}^lEtV^>n;6{@AS{=69E*b>C4Z+XiWqkN@HIC#l(PEkcY~aSc$5_2OUO0- zV7J|#d+90Wb3TtFzK00l7rY~Ix~%1EUX?R#pbkru_Hb8mkX}*G`hYl8!p~{)q5#sN zEowF*Yuow145Cm)k+rvlp*=D&F^>*uPC_-s4sK(SIp?bKy+PWOby>Gd5DcacDvxCE7tl=M2#R{^bV5ck z*$KEi=D?BK_+nJ}nNc!_v)EKFft!^uM|HL(Tlo~r>gZF=vB{%Cyc$YLq>n02J+EVE z2^_tBF6A-x>l%?BO2N6J>OBiMc+nLYVe2xu_3qjp^ekmoyNgaIg79Koc zxc>Lf^je<7Dj*eu;&c0jZJvN-n(;FxwBi7lI&6MQ`GR`keH*x!^>zk19&g>1_0 z6qHyBW-Kyy&hIw!hUn}padrU4-579BA%@qJ-SY@MB}oz7ii2T_#uJ5vS2@2^z< zB-r?~z1n!^2Qvf@)mvn+wl0Fio1@lf*OAcEuNG#?r)5<)<#HG_38=mCyMye3rj*vg zr7j@-NlrfA)eq}7v2Ua}U1z?eU0?`m&BV

)R3#xM5G!V|+FNM{NTR9XNoLIH>T-Lxffz;nvOfFuO8_GMDJs?La_+fjwCV zp;!zae+4S*YH;WN1j5n01UPFrcA^K-Y%S)t>fvx#V>dU0uDW$p6_()_`|$2B-^1$C zHtgZ(c ztOROFL}E5XQ+3#iwcyeHExhx_RV>ejusFSn`*+50bmS}=TXu14asu}HvuJ7`#G!sW zP8=#=eC~4`fBFSH^U^=V>dFS@XYNU4ltE0KVstx?U;X?#{@efNFA(0?z>z~2WLBN% z8ydvs=7z}UK}v#@>o+IS(%d0|SS_x6d<|lS5#JG~p30!7uN&RXjpn;Me5ibEd=5FA z4}t0q==z4vdSyfT1+;XzE!E+Z!VGZN&SI&)F_ zHsQkA9(?_)2l4xV@J)1e)uFuHf#$|G31U_;C30SqV2j@ddj7fR(cjyPOd^I%Mgr?} z#C-Q>WiEt+htHv<=P-WslXviNY#k?$w!yu(jtesXfBc8Pg~qyCRLahx%pz`6QtH2>0&I$)0fF=8Xxw_0DC?PS2RH9!H`%EX+^f z@Nh4_^7M0v#@2ED#yqyRHn6?5hF`z&zO*l+%2S5=`gWvbtbP55Fwj4Mkpq4Sa3q2& z+rn1LgAJMAkFVarS}?)@=LbL3AHt*~)Q!rVL5uae^-Ed)$vUNs6Q?W=R~17&vj5G$6*fI;2i;NrNCFO29+IDcy=B)Yy=A zj=>ZIErTyhgEEK#H@BHA{~A$S9=+tg~*1o8eUqaw!M98wt3U(}0`TPN&e#wB#r z8Jnw0MP5u+yTyw+!Q#8W{wXN+Xig%e%)MkjxXEz~@YxtPkSA&A&z!K8vN>cw364vNzV6vvg+0A~IROc)qV6&WSZS`{cv)u=qdlO4RG5*PJ_-md*Nv{hqgY;A zzza{F!qb!2EPtHc*)aZ)5oX{_lT^zy0w~@o)akFEKMeDS=Ke)`LOJ%`c&$ zt__9k9%8`|<|ZFuX6B&;m~(jR?GG8k;)Q3wVy?n&Yy`2sDS=*HHR_w{P*J{%;qH12 z4IV&OXRibR)v`WaxN_yD1Tm|~l~rIP9LDJQxCA#F5*)PS`4^u3SseIugbG=j3e$43`LM?02}$jQkt?U>jgx4R6X?Ht~F`%}F0_TQOjc@P&e9XNjYY23OxgN^kpS_k{_)vtdO zU;E~3c>Q;O6ZV0NKlq_#Kxt)YIIIm!;CDy3iD_i$plD18+RiqD5=hX964XG@c!;?({VgLSXf#yvM_|q~E4EukRg8(yve**GO1xyxD$_1J zo&3!rF@XI1vr`PVy@=26cJOP8q-7p3HAYd4ne^c+? zXoNXQdwbS5GAIb^=?Hn{h!r|Mj+^>bgGrzvr7n1^x+gw$L)nauj6SV7GP0Xr^CKNP zS&rG#iTM_X;bSNld61^Xhxn9{A4a6cOz=QME?7oK#4&WlAr$q*WOO8L9ofY6(j@6nA!^@Pd69tb)pJlVgV7~D~+MEZW$1)SIP*6TgPt-GI zv7ECtMr*C|A!D}Z@|ND&mv}5Qz+jnkPhMQJ{1sn=Cv_&ck|MuDC1~b3GP4gvS7sd& zSN@DtQf43aRr+QQL^oXb)>wHJhw|`>D4*Z6=Gl@#=3NHilreJ7n1rZMmqb~Lx?*1@ z>X)?Hm--_;OV@0(WS~y0IkDCy_btopOI=%Y&SUD-noI5p)|c)(0?St4{o7sC59@U8 zaD8i;z&6$~*D`^$%{mo3mxd3S-6YB#lXz+{iZ=T^R#!I>4xB}y<0&zdS@hRr;Yp^j zwi-itFNwI&$wV7qbM+zY=|isZMXb3GVl13ROSdoeJ_FKI5@=N6-~Z$a{`~zZw4M1j(t(3Wxw~=f$?w9}cv0HL>E5}C-0F3lIpIU^ zNE2?{Tf^PEVLWyEFb0Q*F*Q4hzxbOs;r8xg;6MYu|2wbY#OVXr*_^_YhZ~Rxj+-}Y z#+P=`)_Y2V0XOd7-@#PSj=F=#;H|AgA#F!hWgA?9T7=RYICJJOLV*$Nmbbv2o<*bR zE?@VI=;S!=KODpH7h3Sl6UVTZ+{Vch2hiNzAPYT;jt-!ws|&k%AAIggc(OYfYRaI> zwJE`88IGQN3N~*y!qGH#!dvj!lIUtK!>J<`c=`D*IP&vIM|O~kxR8i(O=Xeai{S2^ zyW;RY5;VCaKzInR*NLyZ`W%Kv4$1K(?tXp~ezzAx!+ofz@S?e)*8H47KAXqn=rlqb zX*4u=@ye?Q@SSfxhuUh{bGaSZ_Oh6GIDz2m9Nv6;0`Fbk!t#0sJp%`D;p_#JJH2>x zdlan_a6EhI1P0n_Q0>g3t=a{T*t7S3{SIzky^rzP7)Cb>2t{M&nbblij<$L?s{Ia` z?=m#i^~*Y{#njx4*w8fmUSM;19#zgtlqDP}7dd=lS2x$U(Ko=~E%RYzX$uqg#>@%C zw)o}xrYc;zcv$Rg456(Qa(faFc&d;Rn-+;@u)ST7;92~)%tLFtTlVKJu3R3MvGbMt zT{PC!qr1Hezy8%H__zP==LqNQnBUkzVr>(1(^FVl9z#QuPXe4vKlq_;RwhE}F*i1I z+64`82&Kk>2EcN}mJ!fRZ;pv0|BP9+?6{Q_q>X2E%*$kuq($27%Rh^^7=1Z&6N!v* zFEuu%U5pa{Odp{|S@;m7-cKhGhwXf`gLc(&UJ?vQ(!h(Lw_?-@oPAiB8bcxk!gVex|Mn?5A_X zG9T*wGHAQiPu8l)#_^Dku3PGWW#Y0;$HgmjW*kL41s0XJ(Ulw%k9Fk3#5Ri#ugL6Q zi6E}tdQqCCxmnjDqoHB`_Qzn!SKM2|k95qq*ss`Md6)7hP)?4GbIme=ffbKAe(m#E z?}nn)Puu0c$MlH9HeQ`^yFKQZZLCun%y>$20&_z{4jCMB4VJdCFY%QYlk!wrT2?)> zo%O^mrKM$p;*dW3DNQ4*3^#3)z*F{qrQMBs`xZLuH!(cagk4)Zw$>{o{K?^P|2ArD zPHfFK1DQHhmS=JHa0hC-s<5>iM_Pi4fZv5CpA8iWIlFg=Q_Jt5swp66ux$u#&mq0X zhi+@-4B!~%R|`mH#VKuU36DusI!7^3cMpd;w$NDLgo1Mzu}BQvEgJ|$_`$d}Il~vn zwB^Q1(1Yd8YK+h4ku21psck?UybZH+_vIu+989+hk!T1rivx({pU3h_0qb+`A(B|c z+NM`xfdjbn@e*#2t>gA&7LC0xqqXlPGP2w&0m7?OsI1(Opr#E^o_z|9-Zq&>AC|;vRt0L1NybneaAWA;Fjk^D zB==nCl=(V;_5hk1Jm~9fMSH6RR^AGH{J|9?=YfMq@!>}|@n?VeQ_L=ni~W&c(OE9~ z@T0%K3+ob$@R!Qnt^nSA^8?(zb02k$4Y+XOH1f6`^YCqFXCDp@9ySmBdwmW(_rfXs z(?9th&Yd|V!9h@T6&3zJLQT13`N5+7f_ZN3?F^u%c-;z{$M^XR>Y$fe@u7X9{495oFs*p8@AVF3Y z7DV1eGHI>`Miao~+y;W-ZS!1jWqBop6*eSjipOQomj*ZlEo&+@F#rDo9O5ZxUoF%7 z@c9TDT@nSWz#HtmYECiQh%vaH$XaUXD)O!H{pZGU<@7W3~CWqfDS{ADZ8<(vX-V& z;4%A?Kg-P7pLNxL1k2addxEQ zPui@bGiGk;$-5{gb0Zs*v?&-ligbz3oH7wdgD(a|%ImQlOhw1fHKswT2~1hXKBOsl z8i=!>t}6nMOWO=@DKqD>))O=sReYl_0lhV91$@?R9+i`zbV$?4C*{&{@VBYhhyB^k zIws;M9%a^grB8YatS1=x*(S&Qx-L&1*rK#ZpLr>L9Y<-s(k4E6bL^~Rph9^b2P{P# z>k5(;{18uXVX=+JY*!gMPWC6R;!y_nFYT*|pmHe?&z#^0$^TouRFW2xmI=h8JOtGP zWl$W-RobRJnGLd_Ocf;lG#<`0< zXgnCeia6?@y-BCIfJgHW(J*idhc12tuKGd5a&iXktC7IYE&5nPB77O|e(o8V{}L0bB(Esh~Pw}86VV=`Y=5~S=Q zoG4&99F<@$iRQX0+M^yvfy>u!OaByFJ34Xh!V~E0 z8$nO+Abjqmtd|(7s+-OCf#w&su@MYoSsaP#gIZr+X5m$9=Q!u|1OY=nc@42MzQ+=k|kHh9W?5?DtN zsFFZ%pbmAl0W{P$NI+SO^^GuQX0{}_p-tpZ6>*>1&2vNLm1XAbtC7PaNTd?DcV`|8 zOB-V6frCd*$zB@3(mJ1G+D7kSA1eHn$m}{XHygpsl4tp+-O~tr#ImQb%KCf)M#*KRQz4tKl>C22;A3+W}VD{JxXm(zq~SDWaHMT$iEA zt2gY!K!{&orO`59OXeSqQIWTK=$L$@OxgIG8|HF14IBAMqH}y~#3XTidgVrQ*0GJE zm@?&;M5khmDf`0g6R$VCYn0QR2sm?)VA(ZlCyBcll zk2>CW@Y>hhjw$I!U|D(TJgZY6P)?(7p+}vQ7yGc?)7~!HSBs7wUv zoqd!B=_(JU$MwpbiExxzCwdCu$?*OQeZp#YrFDO{*;YnCi2xj z1hx}YhdK_*KwH3DUF5}}QRO5sC!X?VKMndQgM!MUd`m&)Q(dS`1f|P4WX`cMSDp%5 zM_M{Zl+bS5gSW7O;YK%34phQtk6~hd6>~u!cFPZ7JMJ*A`t}Su5ZuUPel~?z<~|C( zWo$*-#JOCQ{ZTIgh)0r3)?^IZ;VDFRrV+`kiGxmJ;{Fo&Ey3>I9tm_h5Df02TmqpB z7d+_iS;LGN_xPS0?m8bH*zv5K10)tNVXcNu0m1*s&rWw zqH!;l=hv__GmC68Ar7P)2M=8|UqAlS_kM*f{|nf49mCw%9Nv8Mmsnm|f1rG-bB zOGME&d_sbpqbRtmQReX>o{quk-i1Hqf-hG|LUfBlgL>X$4jrihJWzee<)6TR-Eu7G#z{aG4}xc9T(wlI*Qur z3rI_#H}>i0*j$yMxb_?}fgvPwPO%v~2rl0cr(O@cCxG>pEjaRN{MM`I@#NVKG}Z0N znf@#SzN~pBW%$ThoPFl&_^ZGE8&p=i@%+m#!{znk)9Y8z+TAW|%`f}O3r9c##)e7^ zwALaofoQqUkK@Nrhz*i;P?o{qP#ZQvn|Ls`fYGrjSs5-IIB*D?5*#edEn{(M2~ACM zB9xEIqN~Sem&dWWnMPYzH`=>uVRPk>+{xqDZ(hTDzn;S4dWe-{PO!OYA$7Unn5+}17|V;8Yx47qq2 z#z&_Sjisf|C3ShkvwK+D48i7c!R0GQQ*#4$cEaXLN~W-9-h%t&+N!x)^3qqIK}D4h zH*Y?aplSv7JsbY`2j50VTL7EUgao!O30Aw1mcVd39Km)phHyNJ#^zca=;g&N#p3%{uNLL3Rz+*w|gmp$~87%_)2~}}UY_#eaurL_mr8$C_7@<=%$i`(! zoybT7XN-+`E^b7&i17rbE5D^Efq+ExTK@BSjWCPcGH)5{1ZJZE};~U`eE6$%dyHsF!G4ZoD0%3 zW0yMPh$KCJ9a_rfRwL!0{KaE}I$-i(KT!H*+SXXU1CO%{rC|N{{tS#ML(9k+-&$mKF4vNqO)wBeMtPn0<6z zsjdjbCocv!#AD*I)^ojb-LjvymyYGjWB9Th?63OPF)`_yE~UdVb;)C)W&$39(qdv? z#aEdKN?Y-Gtf2Cg%1U6J9>b65(+@n9l^Otu1n$^vfR{0Xuf1!P>OFuqfPg_I5D z)!lII+Ax3reZ-b#F#g~nJaVSoPW!mOyY9>8eCt!>-363aRiLG@(>!qO_Lkw;i2(%i4lK^DVt#Q2 zpI^NOZ@>Xx`5vkyZsZ$j!R;h!s{Ocl@vOv=?fCSQyZHRZT~yV1(bVXZafNW>wm9&t z4~LJQfxprt_AiI(T0d51cd#AIV<()IfS?jpRRLLVIn>lt$cbG}0*iHAxqK5hZrsGD zS8gCAj-3x>Gobk7lQA@lthM!>Xm094Lt`6STiTFFW+YfzmAR>q;HVGPm32~=kia%7 z0mzobI=e_nP_ich$oghbc3(=?qtkqZF|q5$db|vEl@k0^?_pze8>_1!baZs#g%@8m zzmXM<#nIN&hM~bhv`Fy9hno|LG`3?gboUQQAm~MCVa5F3)cfz=mHqESIGmR?#S?rx zJPz5fg}4OpNjVX)o9BCCJJ!i`U0nt0Yx~94XVKhJA-)RuPd~kmrR4~mo(%k=dz%C} z5@txSQw5*Qk$v!qFTN(O211PrH!lqvfksCS265G}lo|!zQlJB}ki_7KabPZH;<1r6 z!G+XIPm`N|vZ3|%70V1@wQQrDOa#eIi8+m9(eM$JHtDI+dkhA}GO7w}SN^=x!-qVnV~&CSl@4*V zp2n4RoEP?IVp-|3P5TlwCk-ZT(?k$$%UEQdC{IaW0?X!#NRgMytaHqEmX)v86?=y|GL_)PqQrAC~o4b<1%v z@t6)-X_|E`KwQ={*F8cUhEHZ~P-X$ukCutUKFV8pss8BbxzCgzLGerVtTHJd){~C* z(Rza6B}q6xmPPq9*Rg+@r{;>I@Z~l=CMYfPVOfuvQzouu<)i&rW*vdK)-%_nZO#n>WjxLD?WiaaZ5pEQyLnyXn)!j1*N5l?Mwvjsfaj7zVf=cv4wk6JD3X9 zBJ1lwL4p;&{%mu}yxRk?d-FJb#)F<-AM&s9cL*`jL7>`;?xssvPTDXj&Z(lZ0+p_Wc!)Ll$QfFP20Hi)Ct&kJF&i%kd?BCwdr5OnVv#qYZcLm=+$!o?!bBU z9R41X)oFxcR}fyjY(D7r`NRaW_8JV0yokp3C*ce9iL(yCQN{qz1$#zeu}l_S$yr~mr(9?pu3|Dr%oQ1wVlU%AAXJx zKYoBvIEm(-BL}<1sV2Q5;n2{{(U~sSp*}N00!8E+ST8vGMBNh$9Uv4+QEj2r_g6{4iR900Y z5!;d=)+0eft#r4cp`jHWoxSMkAHnl4zJ_vt9e(zUcX0jIs04Hi64Q7K7V!4l*WvLwO>mJ-C9o-DxPI*h zZeE+f%1Q{4s032s5PY&#?%$h}04j}iM*LG5zl<*XaW92h32Msr68PTtFXCI@dS2|V z7jC;3Uy%T6etr@kyn7i-ixZfeUd71acKn0yybQO~E@O?!o=w0lzQ3|EAi-NTdixu{ z7~pV|bEDE=>IUbA=jP@{w%+)#i~|#m3h@Y!jRTX=G0s^wot}*gb#XWv7zhsOFlTTf z_>Zqn@Ktm9ZgLUjfSqMf}sUr^aeSZ7$>9O+S0H|LElQhbEMOny0uS^k_iFN9r2n-xZ(FBar zpP)R}SSN9Ixi& zq3tY}29?@Z@d#X#rVk%*7l)(zmJS@mV_YWlCZFhn^h|&zXxtx`leFeo`4C7;`?3#n z#bH@-%`H`-!628qGW0nHIbuEci8(P~Yq1aO2^KBcN5ydws7LZ94rwW9U*?+FPCRqc zAnTPhl#T-1nOIM`b<9jWR@EsJo630f-L@Yg$H}iHsq3>a{gP7-C8+|-IX(8 zIoq#*1Npr;3VT(siy`0JnZ@*t9jq)iBNGt4dquu{lh6)ePw@F0WghIno?F8ClWp+V zJMjL!4FqlNNLKVA?>~l2SqEad22?dS0PYd?^K50AG6i9OjPHtPy$K9hyt9T&ML#X-&BK>sRQ!^dyl#i`+1{Pyqs4(7%uG4^0gY>Q8*xN-Z&1HAeE9c(4M;^>>O zv>HP)?Z&y&Pob}_23LRf=i-d((0Sw=xO#gU>$B51P$~1UwSjQjje=kPSk z9`t+Rlz_yO-^GQ~J$T`{L3Flw5KnHyUr~d!1P+t(R?ChlQKmV`)4v)sB(A?TBvSiRVcnFD10bRY_5Q6>ha>!$1v39!>+7PH^Ml7 zx?ALRV@iUqDsi=c@&{i-SI+^FuM$(UOITZ%U{!Sd;#Z%?*^_-p$G4FX+3EvzvI%Wy zZSTdMhf^p>K=b6OE>zVtNC3KvjZjF8NY;GCxV*A}7oIsGhIa*nL$#tC@sp^Qz8`hMHo4;5z?TSN#!ZtP5d~KFjd1!5U%;3T@6xNjj`a)p?zB0UPUWGMO zrLuUoCGAeP7z_5@;~5j34{5oALe27HxP zGV^*V+nI4324BX{=YQyEL@trCI5yUimSx-tdh;@ zLXS>V=~4H}$2bwGH^Rw3BX6-xP@XCWLFH#onr5u>M->pAmmInN_^>%|kXYFW>2N;iR5(ApMZ|VqL1eudt0cX3Mcyh0@d%`$fg2NF(dMh;91LIOwr+`u z?nFjjZWggkAM-4bVDXI~ODB2RTzsIK`e5KML9H1d*MO`OuH9nrL%CEAmdzfLW8)lU z>}Id%+LLx?@uVQn&$m)vCUG7)0vVIwn`hE^MEa7O0F(UXNY`{JPnARGmGwrSC3>OL zR$2L-nbI{teCAA?E8=`PDINCFa%sEPGiPGE(o*`0r^jqpeEBEG)|Ea6e{ADiQf}qJ zGW(XUC(=<+TEt;r?WbTJQ*Qn=g>?d^x9Rrfu!1F}la+E_?91-1N2c71oScD**@e@# z3$Hl;Tv}+Bxg~J%!09MQc$@3z0PN+R$U3-Qe6UF}SCegf$n2z1E^BWu7ZJR5G`D2U z2j4c9;}Sqsid^-`?v|mUU7UA5DJPXq)VCj$fUE}@ai;5wvq**)QD0q&c+`W|<{>=$ z2^uYMN?x~nj@d>bKKR2V*|1ECIBQw!wpu&3bMx>Nmhtl8HavHs4!vFC(B^I+ zyS;#Kzczx`ztM%KFAd}45AGnEj3b*)nP*9QdwQ|FxP%+G?jxQpLn`AIr!Hez3nH0H zng?hb>nre=fAt^GHhdVzF8nTbb8V<~96+nni*tQ7sH<@yl=fgf>X)D+i=X}S-(%NV zfYaLwucrfD{m0OA;usPVl&mj=B-mWV`6CXL?@r>x&`CV^?SGEu@>BT#{LlYyq;sn> z?|Bqbacr+Hp|Q$`W(isYZXf1nXE4xz0A9Zfjg8e3Xgt8XAAF2A-=4+b!A^YddoPMT zvg5+}i}=AG{X_HB->u*>KD+WC@r~ENjZZ$ijFshO96fp%M-LCkJcm(Lk;iX*_iJeB z=)}){^=nzjFb~}J_4ncVXJ0^dWeqlhL0rExhC6pB@Y+jfapw2|JaKvi-+bj+wAWSP zr57%Wzln;i*p)TYgty;)19J;=SYL_Y?!75oe=va?ckkof_pjndfAcnO-kHG%AKjKY zu$wok)`OEcI?{{_XU<_{=ooyiYD`Vd;rxXQXsS;kliHHFWe>}%)|Zwywj@{{>X*R1 z40rBK;XnQKGOm8UW`6k6Q&EYP;0oHins!_>m!g2j>sWcW}fC8@tLgK5kUA(Tkg%o0p&)o9()}_1K)v zv!3{pYhPMd#p5?Ttg8le@RoBUYeQWo!gB1E;SzL{EF(ilPlHQpbQ~5xLtPqaz|;U6 zJ|d?YR1#MiztCoWo^&$;KZ9Cc>eEMC^w*q6sfu3{?ftNoZ0O8YCG;*yri%rfh#Q$i^{wrQeW zU{0F*eXKX8SjS`5>-e>uZIoZfOHdj*1_kB$xL)*KE`f|w*7=@8=GT#vvry5E{4b}1 zC=+Lu=T+)5S?~Ng8%Gs#J`Zx@KyACS!gk$!QAHSTW6vIi$LkY(k;^ITq+I4BGl9M6 z44ykNh~|LEnG2$}CIJ_w5MF+OMn?mxcGpl{F^^5h27>+;II9mqq75WA?Fc2D`1JZ^ zl($_(q4q^Qj8&mfGlHzM7oqKStZvU?ZetvwmAj}+&7rTO8H2~4k#qPKBwa(uZRc^} zWF?MYv|&B6jcBw94sSWq;;42d5UI$N!JCaBQ&^CIZ3ixIGo~k;cyM_J+uP$fd7%$Y zjR#N>=)llOH|951P}equrL6*P+}Akd{DkVRa3& zQ+G|U^ZFnCcL)qTk6rsVDtsBFqU&(&Eh7~D0LlDA93B}!rQ46?NCr7rmU&iGd>{XzuDmMXev+@_O_7{k^e&fEZ&#VLu8AzOkb0?Z``baaT9({s`H!dR}0mJ1hZy_0vO5o>2xxYbp_Mn$v z{XKXL9(R@S*hO5{LU~n(oW0fJ%JqkGoR#{t1Pflg_{veZ#5RBY@hyDx!43TSgZI(U zQYGVaU~O#*n-b8}HZ;KDa${*_1CdA;i%aXccYhwU^E(K~b2xVP7|Ls^5!%_7V6PW7 z)v`V+9XNjB0P0&CWIx!^(JABi%D&FWFxcOQvxggHo>GWKE3mS@h2FvA65Pbl-BXXl zhg&6pT*X_z`W&P8M6P!~#?4!g(9+f@>n&@33#`ApSAyhvtSrsKR!H#2Hh=I#p6QrN zwz9L#m4za3bE~1U4AH(}+^@47k7ZabV@N}+21DEFIA!mfesmW6x~l0{Y;!Px;a{<@ zWxOn2R?xNYD6KlnxDkwD5ma+)hk*}$0*y|Q9&vfhB+?jX#(I5yT#rqk$GPRC>69#a z_UTY&md))qGL|}m;wbQVpPp5g|BTb3baar^A=?RxM}Dlg7Xus~Gm$p+OB^-O1m&r8 zR8F=tH?&HU;;3u{mTCC;3(v}<6iRWqL|9~9DIUwE&V;$*kS2kFi@6FTayl?iT{vsY7$yNs{856;s3~uxygx z@K=@1)y$&qnG;yv&r8;z0O?XjLaA=pPJHdFw_n&sx-1h)Y5#pmX=~29Ql4K1w(Fcz z9?C&}dL>DZi9=kKi=groM}rdLvW`jRVY}k9uJo8?m94bw^?D6W))_qcQ<{{8W%8oj zJhs+%9;tNN^yh=e`b{PF=h}7fHjd=H>L}AEfvm_U>smA?W$7>Oc+ZwBu5+17QMKKX zlz=mac(?_*Y(17%C$JUfhtr}sf20SVNDjxF>v7>o5EmOZ;0ta@;BgMqsR4v{b9nla z3tQ1?T%C)--+ob?Q6+piJ6^lkhJZJUP;v*^?VFHuV6;_r;Y3$AUVY&tg25E-O}8VI zeomyShFiuuv+@v^Z#_UZKZuH&0dX$dD68@zZ4+;s%;IE28ozTXfPwl9Zj5arQhgfs zT!jQ~30$2W$81y_)lv^`&w7#dG-5p#Ltk4R4i0r8m53r13F6GzQ@D8PqIGiMbYnG| zM?AlW>Y6GE0?Tmx@G;Sq8*cF%Kl=Co1Kxf2XYfg2v6>2@qQN2KJ&D-zDz>JVu(+Cs z-xiesXcmd2*f?LS=(d23H3=j<74Ri1Q03c&+mk^;#((hAA^iC-uOo?N96fmul~oO> ztn*9z9%`yQI3PjE!GU&!H#+H1aOds} zmREOh{^D2g)o*=I0--+aq;lx&sDVSAc}III`~e^CKe&T;KYSAo-yRy@Au%^wNZ0>y}rI2wUy#4%DmXx zSjXDxDxQDwJf3*+7~qbgwXGjrUB~h8(LDbAM>i4NPN1c|T>`d**krr3)tKjgP?koE ztjX!=M;PeuMN-xn&)NnCJJ8>EQ0VmF?wxU5{cOzanZ3dm?%!R*n}0Wr`L!fux{=Im z!sQ8}uh)&|pFJdjPgwR@0_)2OJoVHu{Qe*Ome}4s*>4Ga?bVl1U0IHy1DzNe>VVfL zHn{iP@BPr)m}0<7jKJd!UEJ&}tFckwCe>tiVX=-tJWW=eWu!^V+{zMXV3N?K!>0@^ ztMQ;AF&n-}ldqW@qtCx0T?O_re1wj<9VN#UhYt|5UgbBqVt^jw%bzh)MdP9dt8@&k zV@~~Ou7*_*g$H@<;~U-re;*CD@u6b2sZ7+VwiC3TJSei_GHF?9vaEdw%9F=5x};M& zCMF&;kuQNbOvGVQ-YO4sCe|x|&ZQhYZqqlKNV&|#V_>PW z5Qkv(v*dS4P|CnYWo6EG&Nt~QA11c(mICQ8@t8D9$H<({$y^bk4AQ2FZ8{EuP&9m$ zw&JjbS4Z@lO{_27D;5m~LmZ#QgZ&8>Es>>I*0kS7JgzfK--J?`2>c`h+e+t}z%mo- zS;sQ*Sf<>ngHk-oMj(!^O(q4^3GtY#Or@Yam}{9p9$F@yQW{M9lMAdbrNLu!0w(=c zZnmkcIxd3J(lHU3>lm~zaad*>kC}MPdJR_C#xmYa6{4fyf)mA}MiayIU*J%9(J^Khj$(dL-K%KabV{>&Oe&I?G}doa}8 zfmget7_fhYK;j|xvQaqQD@g9Fh{LQwUthfpHiL{?98|0Yk$ks#wb$m!BkRheqHY*Y zUk~zG2?E{Q$RuVZFmt2KTZz@+ChVDUl!ve4WTz8@4dp0A?Ca1T(cpx)r>^02k`SFakt^~ETOhBFODxG4mg6$ z&RvXO`&$WwK1DYD0GT}rh<4URP6^~>{{G?j{xf{#rQgNFu_^re&0nIBPGV_x43iIT zp|`UG@n{tH9?gi}9Kvf22M-;^S6_Y&8^H*E^{cD6`)~vAe0U$3oCB5B?RYRYhfhDe zia-0yALI7zQM~cX4-s4&!?9z>(a_W;CucSZq-x1gs~wHiK6G_-BN|KL+Kml(%L}NkZ$N)f zKVqppY{#;a=TKGW!!s{DgIl*BA|)qU?d=_S;?fZbUaB$r@S)6M#(dw4-{&puwl=z}2cPKS|7N+2bHlG~fc(Ia(u>WO1$ zsP$oZ_^?@@4fPImcDBIjambv9@#0I*$kxl@qYrl3XKl&jz9j{98 z_kCz=b;EN*a^n%WA=N3d%)~ZL+}P%FK99NCrCsR|nCqK4O2ax^7di}FBw08Xe`5?J z2^Go3(Mf>21MbclpI1<%P5DUa3-|E}hL+IhF>|&t z8GPx-Izyj$g3n{EV@|wM(0)cXSxh`TQ#?aQ;4w`Dl5@-g#9`vNX%uzr%n90$N$Hi+ zVp)xMX&ZCWP~-gN_EJ6bn6z1@RC<*}{xi2>%#}C+{kY%bHlb14mz^ymUzD>1hhvjW zc--O)|5dIV1EK>5|77xC0}-~!C^h+XMfI{;;Q}>l!pmOOjnCObM_});&9Zw zC8q79r7{S%8JG3b3zja)Q{`e}Ak02Y1nq0+P%V=9Ff-{Je975H8s@ni;lXzHlN{2by*q8cInFv}odMnlubo^{5kcRFl%0*mF z#9?9|y&a}|jCEE&OI{vZ>tkOp%!%{m@hF}q;##`0+L;LK$9ksHaWH3~N}lXbAPp9I zMMinEKNHJ}Yi@B08P*X`WhWS1`O9Xl`O)zaCQ~2ATyaAs$@Y>pH_4#Ufva1@*kO7{LnxF@ z${vZJzP5mcncGN27U0Y-B0Tj8daBp)kACL>+B@v{{MrX1cL;8~ADy+w@RNW0A^zQ; z{VncKPQmZ>Asvn3=?hQcyWjb~1a^DydTY?w(Sj4F4x_if3!CdpGKUby+bIs)k61De zXP_CutsOjkG>Q9OV zQfUeHoM>oh#xH*M7N#c0@xt?$@Y}!p4Xm#&?RtUdyvVyvAVe< ztIC1+P98u0@h_2;6RR_4j!GcWgI8XD4%HPkcy!TTRQfWK0fhy34+A%*p!&_8;{6q5`hHOf1U_R?&Js4{lAOg#p2wG2I9XGJmF2`mQTR=S4 zGk5ZVO=-zw(gxocCI%kj%y>nI!45m}wviem_A^&xWHFdqMteew4<-=EOa6%SWh26} z$t76hL&$nn#{@r8R-BAz<`t4X z1~CFU9>r6BDo5$uan4L_k)GjG#4V*`J#Rxa%WEP-RD8GW5tbPU5ZI>u83>zOAJUioh^KuG{bC#IO7)_N zby{EQ*tsVZSVw&*eI9dsrGb^o^yRXpTT5q@L+Pu2SV!8*n{}#pmN{nP5ZI5vc1=1C zmf5bnd93tw{H1abC_ixs+D1GAX_m^WyqFV|kIo6f{0Ob&GUEoXlooZzBU|wn6@j-k zd5hD~rf$VCVb?2$-z9q?f~x9Oj2w!fw)&wsyW40kkAUBzzkfG`MD7ss{)@=E`{AhW zN8Z~g`>O^c4RK`W-o=$`caW?+kI8TYwzl(F-Y6iFZo#hIEjD!qM^AduJa8Nfx#M`W z*^C;;VKmkBqu{DW&M}DO?nT7WgOsBldwd3nSJ6Eg*@tcvGBS_3b#YJkaHQLfe%mZ+ zK1O~=_Heuz;q^&zShFa^?%>b=mw$ze$By7% z{EL5#RB9W4{Z~IiZ%-5I>l=|wCUNi17#`id0%tyk#q}s|-krt5QXJ8^4U@||$e;?| z>T(1EDUojtsjYkPxl<^wYsIRg648Jiu3Q0It3lkoau10Ok!5Nb4c-76$6c*;!kx1n6!V9M`JAWTP{ZBu`>}&=vK6?>| z4;@2rZ5v~wG6yyF7#JMHl`B{Av!8#2SZo*bbK97jnKD1vdHwo5ghM%m;(KuUDsbt! zuShN@FkU~t`pVbP-r9k|!ETXx7611C{0U~4LU5KhV_{(jON(*DqH-eOO`)mV3$MqE zm8E4=ReA8OZ@q?N#|~pB8p7nGIXwH!(|GmOr?4)8cbf!q%}sR}IoOZHP7>Q28JX*x z!~(Q;m9o~|qMHiwsaf<5*WCMvp;^{F&!r*kJzg_J^F= zh(Xwu;D)>iDi6UjJ~U9WJb32MGbkRhEPp)fCM`V!r7UW+EJSG*1EV~77Ol6j=xq7p zj>J_%Nl;^K3=(e-m|6=|Uq%l`HY)%i4Ynx_f-!hd-uEzhGFbgsr?iRBL{QlXY}c}`M|QCu-u~j;5lZ{9o;mj!FL87K62ElpY$xd2*0~^j zxz6Z?CrQGhR93D7wGE{}eBzN86LASF6IW#*9^1&rde(~a=Zmwv4=TI4Le4-z`m1h9 zgJq7>&aag1Ip8#QYaQ(^%XsR77dsn|5L#Y=L!5ppF19pq94ncA+*uNP?XE;+K=!7b z@q05~T&(#BX9s36ne^cA76!2v=|ij7(6ZeG()K#o#JMzA-b8o(J)~AP&{8piesMmd zJ9aE=N3kAUM<@|MS;Z0L?G?!H#^fZF4>&i8ycsc60XVZc^mdG+qxKQH13ic?Z{gnE zze8uw2u4o4h_!?Zzj*r{_yRlVY!h2nn1Um9Tu$kapuQ~+U*#Ht>v2^1+eJG&_~?V5 zV0C34@x(U1_4Sv<5ylYQ+z>~#h^wE>A}+zvnw;sotDDV7_TupnqPY|bK0hj|`r)pq z1J8ZRz2)fZ=*RGpOK`W2AhPR3ATtencoDAHB7Xd*{~C5r0X6jj4EJ=(L`N_?J%#$J zPV{tDp|)urT|Khy_e7`eGgye&@!8GmXsGbvsq^O%TwTXs{KZcsSOkt9Z^7U|3wk=6 z;WWS7XXx(_~_~aR=1K^*+}BS=qk#~%VjI4#34J)$NK)WKlv^y0s)Lp zjG?Eu3r(%9SXo&?DxHGOTadsdhSB?T815gD040QLS3iTGNB~%ij@AS4x$F`wHkseR zf-Q%!$x*a)wIZE&;(z*o{s_ybs?46#mwTW%!41Mi};>Ql>~r6-<5y(@v8ogI8w{83O|5%UMi@cgsK(cj+( zewn$WsTy?^Zqbbs_Ms>KsN_R`G>n!(C(x+rhPLXgvbFIoz*d66yYvS8Yz zEWC|zE;=`sX?^GftiF~!S#d7R$%D><HKs?SnMY8d^h+>P*9raE9vX8l1$N;O@#zZjs z=J=&vlL?dzDe8)U7M=oi{usBo4wWD4G&jMIIWeIe1*2}Ou1 zFUn{3lF-q;tRGoq+vD5>Hk=<)rc9KT-6)SWSJa>NP^>j(3wX?R%sosR7Ot)xf(8cs z#dV9e>W*vG>>e`?&VjWajkpHSYPal^6*O7%Wvyk>V$NVigCa>%$2sIx7mnTRHyx+s z#HSs!=xZ=(jo17-y6_^fontESji|@{MZX+daeNj}>sc}_vwu-+spC~b2GJa!^@a0Y zTS86-^Ae1>QI-=qBxuP5lbF38MtZdYP2!jV2{y{)vk2HWvYq?1kX_?wUr8KT|{@{$Lf0da6;SWVgx%J-unXVBU7ZEU21n3_%@x>g5& z`4QONwK77t1XX^xvz3TDW3mUt@#QN}W#2(h>pj$#-^Tjr3MOL*u~vTx(Xz8#o6b+gWdyA!{?Ck zE-YjF?)$K9UWTXoA!@xF2(R2jL$eDfpOql&i2*Ff=aBdAp}L{d{IF*v9LCu*JvegW zAV$Zw@aEf#c=;Po~3 zm&@{3wq54UphF`EFg7uPwe=ljGdUbSJc!n&CPd@gSX!Te$LGL-;cnE{`bCBnoIHLA zHC5#ZMYfSlW|2wlVRdO8voq6p?wP~*7yt4PaB!qY_KX83PaeWfWCNoQK9>{XEZRG( zWsSIz%$8w!Wk+}>#J^S}7?VK6&buf+tgR)mycI)Qwq-D~BV*4Z7z|_d(IloP7esch zY#S-nl8d4C3(7A#`@vA-J`K?VSilMuxF6 zvk4dcxO8?HO-+8JCCJ{hClOy?!1(ASdIt{4Je`){JA*@q4@eN*W^U^c z{T4$Z`$5W9A6|y15p>H&CO3Y+#N76wQKbBcWZR+;o}+K7A*$IHj-oeJYWSuM(Rp7E&f&Atwt$98y8TP|Cq? zo*1zytI&{eLP+pRgGG`e_R9Oq)B)*nj!Xb5vhtXu ztTy4vBxMtf6cgnj4-Sz@{+ab*$u06o#w#V{?=rtUE7j&<0Onjzf*|8{a!$l~u*|U# z-;CMtku^(P4wSM>9ZMDq>vpA)Ny-jcOq_o+FVf%0#axJ)&mPFwc&pX=hK{vc=H$#q=o;Fx=1j0fsf7;{HN@A( zITXsny~FRPa6J5vJk9rF_!$Q3P580QoN{mub-!5qn78m4lyH4na*;O2r-2H`!hXDB zOZo-TzqaMM?%68+`Q0bBGms=WoD5v7y{N$ekMlB4(icjm-r~oANpwqjStodA56Q8a z2bnDDm2%MQa@}yP^Q44rTvukShMvql=SVn^mz{6R2@dI7^JdZJxT#CECuSa56daSd z?uDah+USXEi1Kl*QHR#ZcvZ-{O2+x&6*J~s2TY`IWHIBBAVAizS+mlQc!fe##*?OY z0arOvyA@d8jKNV^j+%~I3=AJZgV&2zw@nPL;q+IoK#w~W$v4@N}-n6X_QFJ4c zYed0OiJZ(2&#(A9Sz@t}m$Tz!Spd6^R&g4Y2#Zt6?76TVtweUW75=7S#BCA;m3hR0 zP>Hg}L=ibT1$Rm;@6JTv%51|fvc=+qSc-LHDc6mpqaVq1FVZqTUVYfj*I;X>3X_ox z7Po6maCYp#7IKN}2!}RM)7XTK$Q-U+e;b1X-J(Y~7U$*=jYyCdj>uX52HtxAF5LvIIcqNEWh2?DhNi=u1V|rm#)|l*1cLiR0?YGc1co7>>7h;7<6nvGUuP&5%DlvV3 z4QZh_GE^l&NeYSN0uJ@G;*SF!aN5sj`;>u@pXl|&)*%M#IJ-#Wnw}_Uu zdc?OKay%jPp2zW1eG&xhVmnj@m*0Bi^sAAK<B>#lFO2M#x| zCAtoWc2F5`qN&D*Tsj0hZsI-1#Jk<*^M3lKikq05`Qbj`L5R z$H;*bn0&Z`wTKfbn+NM#TjsU#gTtNJ-rmCe{02Vz`~e=0OMr|FLj3)!NRSU1|Ka0b z6SoYeWfZN=Z5e6f+|5SkgLnqT;97x>)lY+i$9>fx7&=lXWepS_2Q@NN<_9MQ!8kTC zFeFc$f*5nYVPMI?K*jpm0^(X{{MNG+yaFL+L=1w=x^$*Y)^j#AIt&b?jlmGy(u_V=;O z#;FR9{4-@~Ey}@TnFmW8qfheS6&to0I^-icX%UQb65>YR^xOh$H$d7_zfX@rM(LFi z%eY&Ol1Pi~R*l6&{t=JBIpVljM}7uhc}pr%GBT^fHvtus@UsF90m>z1Yd$z0Au0bU zEgn+__9yUa67|oZmbuX{`3tE0dfSwVp!LM#IG8M6*0U6x(@dI|OUq24Vev1{DT4<& zRvP@DYr@Q52@lRM;R`$;%Vueja*?L$kY%MqeG-q(khd(Y+q4$%QW-Rv{UGD#2?1}Z z8eJ7>5GbQL5*esFo+$8E@jfq0M)tGzC|92Jl_oQ{QqN-}V{x8|uR6B~aBW+Al5!Bw z*9kVa%m=lk7 zfPpCK@Jg43FS-{JtW#N(zd0_Bb3X|=NgN0H=z1nU&JlCs5h$zLJ4+r5EWI&kw$>?S zXJ56E{K%gzTM4@ahn_t-i%rj>uf7aV9qvVVaTYhmMq%Ge!!AKaJZr;hz6vo^2tARy z5Ep_z;o+3P$tR1m;jshKqLjvC}#UI}hw z?VIO`WN(RmEt4~Gx7c8Fy;}Mv#mTH?t1*{qM9ABTlw0`QqDYtVDv|UOI@#S8q1A%$ zZadl~065)eLjd<-OUxkP@gkdwi%eTMbGQ?JuUnjRPJ*8u1UFX^kEhT#bO7J_jc+0n zjiIBp4L*+#H?QBuVNtJoC&~P+Q-C zm0%1twN0WjhtwU#AO6wzF*-Vdn>QZ9<&NRySB6nj!!wM8`H7(lzZ1iU+R)WgD|(c9 zwYeoo$cn$T_Upv>I4*y74XZ0*`20=i?CwNH_VQ;}Kg0a&EQW>-A-n`ej|IaOnR!1Y$hvotcOAM84Vgd0_m3G>PG-edFh*EbY5Ka>`Mn_IXKI~ z5Z}lt##ZH(O4Dv~>cjA`a1|7nZ7dsn0oG|>>WqC9k2w?NV!bBL3u$P7Rwyr}t7BvS zILX{7uC}v3bLvdz~=!~UiEAh4{s7B8z# zpMz58#l(8@)Nv36g373gz`hoJ%MMT%3=&J}FcDvQQZAhj)+sH5($+fW zq{T$qTF3sRzt4Yv4v9-(ohi#d^YE`6^Ol{?ul6I3_9uKP8K8Rd&QG#J7&YwDtlSdDtyQ>vj!ELN; z1kpby8c&E!8EmY~z>!}^M^zf_)k$p5UBRz^ z`hOskSj3S-UgTrzm>r$RuYYkJld~ZSj@IE1IjcRxouwI_jE6ptn*5e$a#{0qo&LB_&ZXmw4ChoimvQUepoOa&!Bs# z9Zy_(20dN9ID760u73Ur{`Y@-7xy2mn6(v7#xb|P0)I^#YU-O1ip+@Ib4Wy%Bp}RV zVLgif{J(e=zxnMaQClfN{NfU37T2-5wIi~m@tdzdhi9KTiOKPMvaFpFsCA*evk#S3 z)wpQ^oxAWn_+^-2b#^ZE)wXJLa8w`vYByMy3jf%W0-_*Ay?Fc9CQ49hDG&8 z9Mu~GIZJmI7#ykBw=S%Q68D`JfiyH{AV(fF#ysO97+gslpLwoFfV@b7yi``JzhyX0 zVq4K6@Yu|uBvacKXpK)!}d~{6nIR>#X91Z zwkebbfTTfMEHkm5z`mqq@wXf&9j)>uXwEv~e;L?L=ch92_<2lFTFeQ=r9Ozuoa10S z%j`oumbFgn^_cSU*gQ}!W%g$u4W@`k9?S`>E7hseW3KwqTxBG%%sSFx&Qz)|_9y5u zLHm$iDJ|9!U+Gb1JtnBm*rzm+w&n!IA$^@+9+MVxrLSWnC~X3Bn#(*8OpY*StY;t`YwX_V?g%S@D0>)B6}0_&MnCdD-}*m$t(qjC1 zYwz;yM|k_{eJrFqktkH-!PpWemXe6(D&=gr2D{>9`5>sn$?x@8>s0w$xr|r-<0l0& zdFvJV8#4YEQ}wkJViZWC?J z8NA%HiGOq^g$s2B)FXl?j(OnE%9>u;!qZ3c_}#BMaiW>uH7PR=u&coZ=WYtiD~kw+ z*O8RK!;z1R4b7mCioxd*dna~!PMlgtPoK!)LRDo2zWW=m$RzCI)6Z^+GfZN1a*7`{ z$IGw0if{kscf`qGz&Bn#gOP3zdYWa8B8-zKMlf=)55M^7k0iLc3y+L{bz>9J6o19t ziEn-Lo5&@1usSt?q5k7C4<3ZJwy+gm#)HuXp&ys^u!mT51)FP=xNyD=zyEu$;poXe zy!`4@sIGV8?T=Owjpg9;^SeDFqMWq$^!11ilj!Vi#>Uzbu3x{6M`Ppo{Q5Y?r&kf& z+QfD^CBat;-+lc&PMtf7o42kbyc0trm&Q(Z8~@~={Wku=Z@iA+#)i4#y0pB4-Mn3# zc%uXzI|zmn5-`chkI#mw$uX&0Gp|ZNynhEj|HaRdjBMhGv*&T>@NsNNuz2eZzdpQ$ zMVXiN;0C(88*%Q;G2=@UGB3jiyF~6@@$tJ@m|DYNYcu|b|NeLI`gbm1WVjQ-%{9FF z_7#*@)WG4cz)muYiO~u8%l-JxfAC$jG}YnW%|~cy_F{Hv0~->QMz*&xGyMQhK63#T zRW@vfQfO%CL^u`2+*%AbZ?9oyehn+jF`PPjOoHqRJeZh=&EvxNUw;XHdmdLl{7?ei zD6*(Tc{M+|mbaiyfZgLmp+}Qkq$o-A3?UoTD4vhqjg%~T@9M7scDOul^SU+r zGg+Hb3>JeM+4RcW7!3w7vbiiA@|MIl;X%4==d&{eK9|G3{Nw%YEFZNNu^B8ecp|9m zI!--SV`K5KjGh`+Cd$cU;!;-x8fYB@>)1~X7mXNkm50_-Amyb7mw73Ux#A?bp&|Jf zW#xR)Sy)#z%x~8SElanSVPjBYuAa%U)yJAUmI>yF{UjMv&h}zbnVD-+9jFYHu}pFX zzLbGDW=x!$V&5-2FC8<%j8W}v`(jzaOM+OsmRZeA8`N)fSoCD^h!Nju4sPYkXjj&F00_9;F@yVOOTRAL~j^eV+ zL{J%ZEP91RpYKrGDwE33ep*Lh9m}Mn{D`acwTAwYmjBqQGDfT+IEG`ZUBzmR@e(8a&|j{JM(Q=$cRWc>UST1*5D+8}4^DL&sLrqsr(SbL%iaVmSZCggV8 zP~ZM!pu{OPp58wDJ+`aq`uD*32Id82vM-QBPX>ryI$d={dudYH{dk1>?D~kN_-?`?oi7=h~D6N2_@H!b^DS;wwl*?09%*1)qJ)59Dp(_QN#^5E4km zlZeL(7#L{9snbW%+E$N__6FGU8B|v`phtqW;gMGG7qA&NI&4*_t@WC(2(L*H^VyY$ zsBh|#;4O`f&<-3P2_hx1?!$Ch5Pi4(pOQ|%Flpt?#xE1i$H@oaE zC(;sl)s|Nym*2qR!W{{k?&FhBH%0eev~~3%likC@%)A7C+Y<1758a(D<~8|DIs_+u zzT1vSB!*aI8(YByZr+%X4VV$x`QUp5TM|^7=VE!$gDcnW$MRGf%X4Aedl*D}M;#9I z_2bd4M_8C!$HrCxu^qAT`8}j#3pjqLAD1qj6`giVpw@@lx)#yjZG8C2r)a36pNHT_ z5DAA+_UeCiV^234H-v6v0yp74h_NbI2A~w!mmodmz}l<^gqC$%t4L2a6P+!uz|isX z*JgDS?%(F(RS_{Zdse@Fu*%kDSN36fKS-g2_4@d^YLQW*f7UVZF@cVVS5~(FOUMkK z2v)!(&ZGGD4UG@`TKD@cXR7+3@ls=2YMe}eIet72NtB6o1Rk@m(jn~Yl=2YYDr;W_ z;yYb5yi!jd)SVnLsFOxhuWyGK<0`ovm}7#4c^G=4d*(Ve?MphP^Fp3q9yfCZ zT`vkMkAn80Lm(alBy|qNEgd5R6y?Wb0^2muV$i}e`>GQseZAVpWY(O>Pkhp0+3)w8 z?|+oaO&|~QCq07pAt*i73uV)K9_u)Htoqb(Fee?-W=?$8YXDhFgX7Wlt8F^JEVF+p zFD3$I)_Kx8rNzDk_S2+eR9@t-Iop*E`RUxSjfr)nseKfbruI{O1uZjI8OZ<3@~|%x zL1iaU55&{CWc4Idc9%&@)tv_Rf0T{^T+eTM6XF;Z09Y!{>M7>)-e;5;+@Y zmV)NCL|t7CIy-Bzw7P}A`N_LzZ104_SBKV)J{%Z14!-S^66YFRxr5#GIy`p1yiqA~ zS70a3D=HUp{$vZL#(s?}w?9Hu^xD!e3?$01I=O(s?k0%>LuhWdBOG0Y%UzEu|B(5p zU0ah2UF~J)?`c3Xz9T_Fv)E-Xmba(z=G$-J-OnHa7*Ja!>qiuM^ym>h_rfXBTojSe zIw~ZPj7BmtzCBb`mt%E(3BUT~BOE(=5z%lNKK$%c@jsjZStszwe3s$lnIUugY;yDg zUVr^OTHBl8aC=0q0RHsPeva6-1eZAE-TI9k>G4kf|o_yxHD@4Y?rJfzM;39kHKTBMmD(%zb%IP7GQe0fTzyZ zqrSFT0H7Juy=4|7}>9lO~xlv$kdtq}{wZ!y=_HJZM1ZocW-#bp}kM$={AK@{?zgmY5<# zk9@4)N!Fr_&Ejtv7d}|ZTU*ot`y1RMs3D?kG*U)ivS4{X-^f}-8&ZTdL|fQXT>%Bcr{9Ns}G-QTdCXxi|@WuFwaIw zGUJhYGge8Z#+tI2ex~$A&^ppIJc~K!k@AubKeTu25aWWRxTk=vz76%?% zbrx+Smyw(6L*~4wEAlY>isMna=|G5Y_!oH)m|J~`Ythi8V_+g)>FppL3v)Uoj)P_5 zF_E7JKcvqwvM&Q09g+LtgHxD2eX{kH}^3dZir&4*9 zH-YpCD#zcK2+S!D=_@Yj67*PU5=W1T!(#%ES+DpU7xl!PvUA>WHnxSu^BD(0gN0vh34KW_?+7~+SP!TaxW5* zb-274RM&XXSk;JVFeO2U8;4Jx7oC;klTWWB7R#c4kUzbUMI^Ezo+pjxo_`U4_{TrM z-13Hb$kpi$!0Gm5W%54W_?tgNJP|^5V-?mng9xr};1RzdwPaJa?uBs~B8ym;N(Rox=wwo(6;q5Ka$qs5N)A*VM2QK#(HdaS* z^|Q-ZU0oLY8^JeUe**oz9jNqqaqi?GnrbWX!rNj0Ag8 z{PmB1ipl_gcr$?;*JiM=u?Sy-tP8#{=ix7g@1d^ICPCSfIQ31W6F^OE8GPk#*j>Bk z+c8Hx4jQd4GeO3B-msy4>_?*$-3IX zk>d^Udu<4>OQ4*Q6FH{@{(R+LqM`5n)*<}f_fMml=)qb% zf1wj6PV%Q3Y8i=OVtfkky?Yg%y+hcFL}f#iq0;Hb?K}7J{`-$m+sNAYVTFalo zf-Gc{xcS5|(D^WsV66lO<`xhCWW$&sgBwyDHE*Nv5*lw&X^dlTM;U5jJj@1@Bf&LS z40sF5MJFViOO(RPpH4Y@u$!PooI2atgS5z6`f)q+0uddlF;GHJR-i=a;Pvj%*WS^`Z=&*JELX`Av3lED%A36|j{4dPjx43DC|^({Hp(J64e zB*Is46^Ls&BqNRB?>iI*kXC;S?~Aysvvf<~dSaQl)*E}4^CB?lu;!m<^w!$b;HA_# zX&<&}9i1tGW!4dg?G`O72xC1RB5`=Ex2v=dfw)Y6U$CHfip$*66~|&-ZP0dg(ggO? zL?9mfl?E|v(;$v=tHWken#5`!2w%0*DUaZC)pSXLT5E95t+6o-kx zWAav>+D>3!w&}6<(=kyl;wTMG+K*7|`nVr+w(A&l?sN=1CLZgwtbJ8R)d%Z{qjHzF z2}dy#e)&Hj`_^anu*)F<@tzyLbUD0fAM&;Y3XUB3qq1cV8A}aYWs<-v=|V#S2-+Nu)4aZJY*2BZNP*Af6l`AD3O2a&1$bqT z`?C>LX4kMAdVtZZe~$Z~{{@b8@8Z;85TWUJkY3Fpv>>DL_;Bi23o;U@+`ala7MJEw z)mVca30|&$dK)`idCUhB7@M3jyOXw@S30ghGNREfaj*mMivz!U^$I@u=tET1 zl;hm#6Bz36#PRk3YTZfPxqVpzfEc_U7t*OTmZlda5Qrm^-NMLlA5I@Vi^2XwXlSTK zRbUUtk2K==@g7V}&ElPRu3>Fm#^rC7;LDGLNBZ!s@4kTb#TX_YZD4TlxH#fwOi!i7 zv2Kf;73k<3LZIA(rh32dN#pIeZ{XVXd+6z{mB6l3PMTBr-~QJ>!@vJOe{N2`4;^Vo zON&?9+psXRiag2@Pl=6^Ior+IB=~6)dQB31q$ODK;_I&*!>N7X_aGCO6QnYad64>eS1dtA!4>MD%n3$bI zUV`tInkw|QHlwPxN@UxGzp5HdEp39|ZXOQ*^ux;tuFv4?`F>fGNvy7fu)YzI09?jc zS%v7_0;F9WIzEixW(Z>vpr)c>Svx^Awbh}yr3(KS+!?2GwL*-J00000 LNkvXXu0mjfN?fER literal 0 HcmV?d00001 diff --git a/doc/figure/leopard.png b/doc/figure/leopard.png index 7d9190afa8af7380686c38be89f5ef212582db63..60f01114bf4119cec8729ce6bf502de523582ddd 100644 GIT binary patch literal 382372 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 gNa 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≫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

tableList; +ListuserList; +//Statics statics; +} +public class Privilege { +int use;//1,read, 3, write,5create 7,delete; +int uid; +String username; +} +public class Table { +String tablename; +int id; +HashMapcolumns; +Listfragment; +ListuserList; +int isFragment; +Statics statics; +} + +public class Column { +int id; +int dataType; +String columnName; +int len; +int index;//0:none; 1:hashindex; 2:btreeindex; 3:others +boolean isKey; +} +public class Fragment { +int fragmentType;//0: horizontal;1:vertical +Listcondition; +Table subTable +int siteId; +Statics statics; +} +public class Condition { +String columnName; +int CompareType;//define less,great,equal.. +String value; +int dataType;//the datatype of value +} +public class Statics { +String columnName; +String min; +String max; +String mean; +String mode; +String median; +HashMapstaticList; +} +public class User { +int uid; +String username; +HashMaptableList; +HashMapschemaList; +} +\end{lstlisting} + -watch机制 \subsection{SQL解析} -语义语法解析 -Antlrv4 +语义语法解析使用Antlrv4。 +ANTLR—Another Tool for Language Recognition,可以根据输入的SQL命令和我们自定义的规则, +根据自动生成语法树, Pard支持的语法如下: \begin{lstlisting} @@ -375,7 +479,17 @@ \subsection{韩涵的小结} \subsection{黄文韬的小结} \subsection{陈成的小结} - +本门课程中,学习了分布式数据库的一些非常基础的知识,相比于另一门数据库管理系统实现,这门课就多在了分布式的部分, +数据如何partition,不同的partition方式下查询等操作如何优化。大作业确实非常challenging,比如Netty框架设计复杂精妙,我学习花了很大时间,一个个example的改、试,后来在师兄的帮助下才正确的运用在了项目中。 +前几次课与卢卫老师的大数据管理冲突,我都没来,后来觉得还是应该去一下明确本学期在课程上的投入。 +课程消耗精力太多的话,没时间做自己该负责的科研项目了。 +我认为,我们没有在预期时间完成任务的原因是当初系统设计的导向不是任务导向,当初可能要求太高了,各种复杂的结构、情况都考虑的话, +过早优化是万恶之源, +可能基本的任务都没完成就得不偿失了。 +通过这次大作业感受到搭建一个能够work的系统并不是一件容易的事 +情,总是会有莫名其妙的 bug 困扰着你并消磨你的热情;另一个体会是,永远不要把工作往 +后推,因为一到期末 deadline 很多,你并不会像自己预期那样高效,连续的熬夜也不能迅速 +打造完美的系统。