Repository: incubator-s2graph Updated Branches: refs/heads/master 6610285ad -> b5908311a
add options variable on label model class. Project: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/commit/0e58f557 Tree: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/tree/0e58f557 Diff: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/diff/0e58f557 Branch: refs/heads/master Commit: 0e58f55722b48517f0db4a99d8e823dff4fffb2d Parents: 1c2bd04 Author: DO YUNG YOON <steams...@apache.org> Authored: Wed Mar 16 13:32:36 2016 +0900 Committer: DO YUNG YOON <steams...@apache.org> Committed: Thu Nov 10 05:46:17 2016 +0900 ---------------------------------------------------------------------- .../scala/org/apache/s2graph/core/Edge.scala | 3 +- .../org/apache/s2graph/core/Management.scala | 7 ++-- .../org/apache/s2graph/core/mysqls/Label.scala | 37 +++++++++----------- .../s2graph/core/rest/RequestParser.scala | 3 +- .../s2graph/core/TestCommonWithModels.scala | 12 +++---- 5 files changed, 30 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala ---------------------------------------------------------------------- diff --git a/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala b/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala index 0fab400..8813313 100644 --- a/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala +++ b/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala @@ -159,7 +159,8 @@ case class Edge(srcVertex: Vertex, } else { val outDir = labelWithDir.copy(dir = GraphUtil.directions("out")) val base = copy(labelWithDir = outDir) - List(base, base.reverseSrcTgtEdge) + val skipReverse = label.extraOptions.get("skipReverse").map(_.as[Boolean]).getOrElse(false) + if (skipReverse) List(base) else List(base, base.reverseSrcTgtEdge) } } http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/Management.scala ---------------------------------------------------------------------- diff --git a/s2core/src/main/scala/org/apache/s2graph/core/Management.scala b/s2core/src/main/scala/org/apache/s2graph/core/Management.scala index d5b4335..db2c5af 100644 --- a/s2core/src/main/scala/org/apache/s2graph/core/Management.scala +++ b/s2core/src/main/scala/org/apache/s2graph/core/Management.scala @@ -344,7 +344,8 @@ class Management(graph: Graph) { hTableTTL: Option[Int], schemaVersion: String = DEFAULT_VERSION, isAsync: Boolean, - compressionAlgorithm: String = "gz"): Try[Label] = { + compressionAlgorithm: String = "gz", + options: Option[String] = None): Try[Label] = { val labelOpt = Label.findByName(label, useCache = false) @@ -358,7 +359,7 @@ class Management(graph: Graph) { srcServiceName, srcColumnName, srcColumnType, tgtServiceName, tgtColumnName, tgtColumnType, isDirected, serviceName, indices, props, consistencyLevel, - hTableName, hTableTTL, schemaVersion, isAsync, compressionAlgorithm) + hTableName, hTableTTL, schemaVersion, isAsync, compressionAlgorithm, options) /* create hbase table */ val service = newLabel.service @@ -395,6 +396,6 @@ class Management(graph: Graph) { old.tgtService.serviceName, old.tgtColumnName, old.tgtColumnType, old.isDirected, old.serviceName, allIndices, allProps, - old.consistencyLevel, hTableName, old.hTableTTL, old.schemaVersion, old.isAsync, old.compressionAlgorithm) + old.consistencyLevel, hTableName, old.hTableTTL, old.schemaVersion, old.isAsync, old.compressionAlgorithm, old.options) } } http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala ---------------------------------------------------------------------- diff --git a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala index 90d3d67..ebbb4ba 100644 --- a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala +++ b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala @@ -23,7 +23,7 @@ import org.apache.s2graph.core.GraphExceptions.ModelNotFoundException import org.apache.s2graph.core.Management.JsonModel.{Index, Prop} import org.apache.s2graph.core.utils.logger import org.apache.s2graph.core.{GraphExceptions, GraphUtil, JSONParser} -import play.api.libs.json.Json +import play.api.libs.json.{JsValue, JsObject, Json} import scalikejdbc._ object Label extends Model[Label] { @@ -35,7 +35,8 @@ object Label extends Model[Label] { rs.int("src_service_id"), rs.string("src_column_name"), rs.string("src_column_type"), rs.int("tgt_service_id"), rs.string("tgt_column_name"), rs.string("tgt_column_type"), rs.boolean("is_directed"), rs.string("service_name"), rs.int("service_id"), rs.string("consistency_level"), - rs.string("hbase_table_name"), rs.intOpt("hbase_table_ttl"), rs.string("schema_version"), rs.boolean("is_async"), rs.string("compressionAlgorithm")) + rs.string("hbase_table_name"), rs.intOpt("hbase_table_ttl"), rs.string("schema_version"), rs.boolean("is_async"), + rs.string("compressionAlgorithm"), rs.stringOpt("options")) } def deleteAll(label: Label)(implicit session: DBSession) = { @@ -72,7 +73,8 @@ object Label extends Model[Label] { hTableTTL: Option[Int], schemaVersion: String, isAsync: Boolean, - compressionAlgorithm: String)(implicit session: DBSession = AutoSession) = { + compressionAlgorithm: String, + options: Option[String])(implicit session: DBSession = AutoSession) = { sql""" insert into labels(label, src_service_id, src_column_name, src_column_type, @@ -156,7 +158,8 @@ object Label extends Model[Label] { hTableTTL: Option[Int], schemaVersion: String, isAsync: Boolean, - compressionAlgorithm: String)(implicit session: DBSession = AutoSession): Label = { + compressionAlgorithm: String, + options: Option[String])(implicit session: DBSession = AutoSession): Label = { val srcServiceOpt = Service.findByName(srcServiceName, useCache = false) val tgtServiceOpt = Service.findByName(tgtServiceName, useCache = false) @@ -186,7 +189,8 @@ object Label extends Model[Label] { val createdId = insert(labelName, srcServiceId, srcColumnName, srcColumnType, tgtServiceId, tgtColumnName, tgtColumnType, isDirected, serviceName, serviceId, consistencyLevel, - hTableName.getOrElse(service.hTableName), hTableTTL.orElse(service.hTableTTL), schemaVersion, isAsync, compressionAlgorithm).toInt + hTableName.getOrElse(service.hTableName), hTableTTL.orElse(service.hTableTTL), schemaVersion, isAsync, + compressionAlgorithm, options).toInt val labelMetaMap = metaProps.map { case Prop(propName, defaultValue, dataType) => val labelMeta = LabelMeta.findOrInsert(createdId, propName, defaultValue, dataType) @@ -262,7 +266,8 @@ case class Label(id: Option[Int], label: String, isDirected: Boolean = true, serviceName: String, serviceId: Int, consistencyLevel: String = "strong", hTableName: String, hTableTTL: Option[Int], schemaVersion: String, isAsync: Boolean = false, - compressionAlgorithm: String) extends JSONParser { + compressionAlgorithm: String, + options: Option[String]) extends JSONParser { def metas = LabelMeta.findAllByLabelId(id.get) def metaSeqsToNames = metas.map(x => (x.seq, x.name)) toMap @@ -323,6 +328,11 @@ case class Label(id: Option[Int], label: String, jsValue <- innerValToJsValue(toInnerVal(prop.defaultValue, prop.dataType, schemaVersion), prop.dataType) } yield prop.name -> jsValue).toMap + lazy val extraOptions: Map[String, JsValue] = options match { + case None => Map.empty + case Some(v) => Json.parse(v).asOpt[JsObject].map { obj => obj.fields.toMap }.getOrElse(Map.empty) + } + def srcColumnWithDir(dir: Int) = { if (dir == GraphUtil.directions("out")) srcColumn else tgtColumn } @@ -353,26 +363,11 @@ case class Label(id: Option[Int], label: String, metaProps } - // def srcColumnInnerVal(jsValue: JsValue) = { - // jsValueToInnerVal(jsValue, srcColumnType, version) - // } - // def tgtColumnInnerVal(jsValue: JsValue) = { - // jsValueToInnerVal(jsValue, tgtColumnType, version) - // } - override def toString(): String = { val orderByKeys = LabelMeta.findAllByLabelId(id.get) super.toString() + orderByKeys.toString() } - // def findLabelIndexSeq(scoring: List[(Byte, Double)]): Byte = { - // if (scoring.isEmpty) LabelIndex.defaultSeq - // else { - // LabelIndex.findByLabelIdAndSeqs(id.get, scoring.map(_._1).sorted).map(_.seq).getOrElse(LabelIndex.defaultSeq) - // - //// LabelIndex.findByLabelIdAndSeqs(id.get, scoring.map(_._1).sorted).map(_.seq).getOrElse(LabelIndex.defaultSeq) - // } - // } lazy val toJson = Json.obj("labelName" -> label, "from" -> srcColumn.toJson, "to" -> tgtColumn.toJson, "isDirected" -> isDirected, http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala ---------------------------------------------------------------------- diff --git a/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala b/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala index f67a89b..7fa9e34 100644 --- a/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala +++ b/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala @@ -559,10 +559,11 @@ class RequestParser(config: Config) extends JSONParser { val schemaVersion = (jsValue \ "schemaVersion").asOpt[String].getOrElse(HBaseType.DEFAULT_VERSION) val isAsync = (jsValue \ "isAsync").asOpt[Boolean].getOrElse(false) val compressionAlgorithm = (jsValue \ "compressionAlgorithm").asOpt[String].getOrElse(DefaultCompressionAlgorithm) + val options = (jsValue \ "options").asOpt[JsValue].map(_.toString()) (labelName, srcServiceName, srcColumnName, srcColumnType, tgtServiceName, tgtColumnName, tgtColumnType, isDirected, serviceName, - indices, allProps, consistencyLevel, hTableName, hTableTTL, schemaVersion, isAsync, compressionAlgorithm) + indices, allProps, consistencyLevel, hTableName, hTableTTL, schemaVersion, isAsync, compressionAlgorithm, options) } def toIndexElements(jsValue: JsValue) = Try { http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala b/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala index c652e80..33a901d 100644 --- a/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala +++ b/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala @@ -134,22 +134,22 @@ trait TestCommonWithModels { def createTestLabel() = { implicit val session = AutoSession management.createLabel(labelName, serviceName, columnName, columnType, serviceName, columnName, columnType, - isDirected = true, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4") + isDirected = true, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4", None) management.createLabel(labelNameV2, serviceNameV2, columnNameV2, columnTypeV2, serviceNameV2, tgtColumnNameV2, tgtColumnTypeV2, - isDirected = true, serviceNameV2, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4") + isDirected = true, serviceNameV2, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4", None) management.createLabel(labelNameV3, serviceNameV3, columnNameV3, columnTypeV3, serviceNameV3, tgtColumnNameV3, tgtColumnTypeV3, - isDirected = true, serviceNameV3, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4") + isDirected = true, serviceNameV3, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4", None) management.createLabel(labelNameV4, serviceNameV4, columnNameV4, columnTypeV4, serviceNameV4, tgtColumnNameV4, tgtColumnTypeV4, - isDirected = true, serviceNameV4, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION4, false, "lg4") + isDirected = true, serviceNameV4, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION4, false, "lg4", None) management.createLabel(undirectedLabelName, serviceName, columnName, columnType, serviceName, tgtColumnName, tgtColumnType, - isDirected = false, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4") + isDirected = false, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4", None) management.createLabel(undirectedLabelNameV2, serviceNameV2, columnNameV2, columnTypeV2, serviceNameV2, tgtColumnNameV2, tgtColumnTypeV2, - isDirected = false, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4") + isDirected = false, serviceName, testIdxProps, testProps, consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4", None) } def service = Service.findByName(serviceName, useCache = false).get