Repository: incubator-s2graph Updated Branches: refs/heads/master cf1bc9150 -> f5d14ab92
[S2GRAPH-28] _to option gives wrong result on query. This resolves S2GRAPH-28. Renamed insertEdgesSync to mutateEdgesSync since deletions are also handled by this function. JIRA: [S2GRAPH-28] https://issues.apache.org/jira/browse/S2GRAPH-28 Pull Request: Closes #13 Authors: Hyunsung Jo: [email protected] Project: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/commit/f5d14ab9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/tree/f5d14ab9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/diff/f5d14ab9 Branch: refs/heads/master Commit: f5d14ab929debbe8250a256c3d55f9c62e85ef39 Parents: cf1bc91 Author: DO YUNG YOON <[email protected]> Authored: Tue Feb 23 16:06:18 2016 +0900 Committer: DO YUNG YOON <[email protected]> Committed: Tue Feb 23 16:06:18 2016 +0900 ---------------------------------------------------------------------- CHANGES | 5 ++- .../storage/hbase/AsynchbaseQueryBuilder.scala | 2 +- .../kakao/s2graph/core/Integrate/CrudTest.scala | 2 +- .../core/Integrate/IntegrateCommon.scala | 4 +- .../s2graph/core/Integrate/QueryTest.scala | 45 +++++++++++++++++--- .../core/Integrate/StrongLabelDeleteTest.scala | 10 ++--- .../core/Integrate/WeakLabelDeleteTest.scala | 4 +- 7 files changed, 55 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 347f9b6..bb927e8 100644 --- a/CHANGES +++ b/CHANGES @@ -21,7 +21,10 @@ Release 0.12.1 - unreleased S2GRAPH-20: bug fix in query option "sample". (Contributed by Hyunsung Jo<[email protected]>, committed by DOYUNG YOON) - + + S2GRAPH-28: _to option gives wrong result on query. + (Contributed by Hyunsung Jo<[email protected]>, committed by DOYUNG YOON) + TASKS S2GRAPH-2: Update document and quick start environment to have recent set-up command changes. http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/main/scala/com/kakao/s2graph/core/storage/hbase/AsynchbaseQueryBuilder.scala ---------------------------------------------------------------------- diff --git a/s2core/src/main/scala/com/kakao/s2graph/core/storage/hbase/AsynchbaseQueryBuilder.scala b/s2core/src/main/scala/com/kakao/s2graph/core/storage/hbase/AsynchbaseQueryBuilder.scala index 13cfc0d..b78669c 100644 --- a/s2core/src/main/scala/com/kakao/s2graph/core/storage/hbase/AsynchbaseQueryBuilder.scala +++ b/s2core/src/main/scala/com/kakao/s2graph/core/storage/hbase/AsynchbaseQueryBuilder.scala @@ -224,7 +224,7 @@ class AsynchbaseQueryBuilder(storage: AsynchbaseStorage)(implicit ec: ExecutionC parentEdge <- prevStepEdgesOpt.get } yield parentEdge - fetch(queryRequest, prevStepScore, isInnerCall = true, parentEdges) + fetch(queryRequest, prevStepScore, isInnerCall = false, parentEdges) } val grouped: Deferred[util.ArrayList[QueryRequestWithResult]] = Deferred.group(defers) http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/CrudTest.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/CrudTest.scala b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/CrudTest.scala index 1c09778..438b97d 100644 --- a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/CrudTest.scala +++ b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/CrudTest.scala @@ -173,7 +173,7 @@ class CrudTest extends IntegrateCommon { TestUtil.toEdge(ts, op, "e", srcId, tgtId, labelName, props) }) - TestUtil.insertEdgesSync(bulkEdges: _*) + TestUtil.mutateEdgesSync(bulkEdges: _*) for { label <- Label.findByName(labelName) http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/IntegrateCommon.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/IntegrateCommon.scala b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/IntegrateCommon.scala index e60b824..751a7a7 100644 --- a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/IntegrateCommon.scala +++ b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/IntegrateCommon.scala @@ -119,14 +119,14 @@ trait IntegrateCommon extends FunSuite with Matchers with BeforeAndAfterAll { jsResult } - def insertEdgesSync(bulkEdges: String*) = { + def mutateEdgesSync(bulkEdges: String*) = { val req = graph.mutateElements(parser.toGraphElements(bulkEdges.mkString("\n")), withWait = true) val jsResult = Await.result(req, HttpRequestWaitingTime) jsResult } - def insertEdgesAsync(bulkEdges: String*) = { + def mutateEdgesAsync(bulkEdges: String*) = { val req = graph.mutateElements(parser.toGraphElements(bulkEdges.mkString("\n")), withWait = true) req } http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/QueryTest.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/QueryTest.scala b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/QueryTest.scala index 633476e..0d2d82e 100644 --- a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/QueryTest.scala +++ b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/QueryTest.scala @@ -8,6 +8,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { import TestUtil._ val insert = "insert" + val delete = "delete" val e = "e" val weight = "weight" val is_hidden = "is_hidden" @@ -245,7 +246,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { val src = 100 val tgt = 200 - insertEdgesSync(toEdge(1001, "insert", "e", src, tgt, testLabelName)) + mutateEdgesSync(toEdge(1001, "insert", "e", src, tgt, testLabelName)) val result = TestUtil.getEdgesSync(queryParents(src)) val parents = (result \ "results").as[Seq[JsValue]] @@ -286,7 +287,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { toEdge(3003, insert, e, src, 3, testLabelName, Json.obj(weight -> 30)), toEdge(4004, insert, e, src, 4, testLabelName, Json.obj(weight -> 40)) ) - insertEdgesSync(bulkEdges: _*) + mutateEdgesSync(bulkEdges: _*) var result = getEdgesSync(querySingle(src, offset = 0, limit = 2)) var edges = (result \ "results").as[List[JsValue]] @@ -350,7 +351,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { toEdge(4004, insert, e, 2, 1, testLabelName, Json.obj(weight -> 40)) ) - insertEdgesSync(bulkEdges: _*) + mutateEdgesSync(bulkEdges: _*) // get edges val edges = getEdgesSync(queryScore(0, Map("weight" -> 1))) @@ -367,6 +368,40 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { edgesTo.reverse should be(ascOrderByTo) } + test("query with '_to' option after delete") { + val from = 90210 + val to = 90211 + val inserts = Seq(toEdge(1, insert, e, from, to, testLabelName)) + mutateEdgesSync(inserts: _*) + + val deletes = Seq(toEdge(2, delete, e, from, to, testLabelName)) + mutateEdgesSync(deletes: _*) + + def queryWithTo = Json.parse( + s""" + { "srcVertices": [ + { "serviceName": "$testServiceName", + "columnName": "$testColumnName", + "id": $from + }], + "steps": [ + { + "step": [{ + "label": "$testLabelName", + "direction": "out", + "offset": 0, + "limit": 10, + "_to": $to + }] + } + ] + } + """) + val result = getEdgesSync(queryWithTo) + (result \ "results").as[List[JsValue]].size should be(0) + + } + test("query with sampling") { def queryWithSampling(id: Int, sample: Int) = Json.parse( s""" @@ -467,7 +502,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { toEdge(ts, insert, e, 322, 3322, testLabelName) ) - insertEdgesSync(bulkEdges: _*) + mutateEdgesSync(bulkEdges: _*) var result = getEdgesSync(queryWithSampling(testId, sampleSize)) println(Json.toJson(result)) @@ -520,7 +555,7 @@ class QueryTest extends IntegrateCommon with BeforeAndAfterEach { override def initTestData(): Unit = { super.initTestData() - insertEdgesSync( + mutateEdgesSync( toEdge(1000, insert, e, 0, 1, testLabelName, Json.obj(weight -> 40, is_hidden -> true)), toEdge(2000, insert, e, 0, 2, testLabelName, Json.obj(weight -> 30, is_hidden -> false)), toEdge(3000, insert, e, 2, 0, testLabelName, Json.obj(weight -> 20)), http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/StrongLabelDeleteTest.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/StrongLabelDeleteTest.scala b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/StrongLabelDeleteTest.scala index 69a49b4..bdcdb9e 100644 --- a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/StrongLabelDeleteTest.scala +++ b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/StrongLabelDeleteTest.scala @@ -14,7 +14,7 @@ class StrongLabelDeleteTest extends IntegrateCommon { import TestUtil._ test("Strong consistency select") { - insertEdgesSync(bulkEdges(): _*) + mutateEdgesSync(bulkEdges(): _*) var result = getEdgesSync(query(0)) (result \ "results").as[List[JsValue]].size should be(2) @@ -56,7 +56,7 @@ class StrongLabelDeleteTest extends IntegrateCommon { println(result) (result \ "results").as[List[JsValue]].size should be(0) - insertEdgesSync(bulkEdges(startTs = deletedAt + 1): _*) + mutateEdgesSync(bulkEdges(startTs = deletedAt + 1): _*) result = getEdgesSync(query(20, direction = "in", columnName = testTgtColumnName)) println(result) @@ -136,7 +136,7 @@ class StrongLabelDeleteTest extends IntegrateCommon { val allRequests = Random.shuffle(insertRequests ++ deleteRequests) // val allRequests = insertRequests ++ deleteRequests val futures = allRequests.grouped(numOfConcurrentBatch).map { bulkRequests => - insertEdgesAsync(bulkRequests: _*) + mutateEdgesAsync(bulkRequests: _*) } Await.result(Future.sequence(futures), Duration(20, TimeUnit.MINUTES)) @@ -175,7 +175,7 @@ class StrongLabelDeleteTest extends IntegrateCommon { } val allRequests = Random.shuffle(insertRequests ++ deleteRequests) val futures = allRequests.grouped(numOfConcurrentBatch).map { bulkRequests => - insertEdgesAsync(bulkRequests: _*) + mutateEdgesAsync(bulkRequests: _*) } Await.result(Future.sequence(futures), Duration(20, TimeUnit.MINUTES)) @@ -223,7 +223,7 @@ class StrongLabelDeleteTest extends IntegrateCommon { allRequests.foreach(println(_)) val futures = Random.shuffle(allRequests).grouped(batchSize).map { bulkRequests => - insertEdgesAsync(bulkRequests: _*) + mutateEdgesAsync(bulkRequests: _*) } Await.result(Future.sequence(futures), Duration(20, TimeUnit.MINUTES)) http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/f5d14ab9/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/WeakLabelDeleteTest.scala ---------------------------------------------------------------------- diff --git a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/WeakLabelDeleteTest.scala b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/WeakLabelDeleteTest.scala index b80d9c7..1e2d836 100644 --- a/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/WeakLabelDeleteTest.scala +++ b/s2core/src/test/scala/com/kakao/s2graph/core/Integrate/WeakLabelDeleteTest.scala @@ -76,7 +76,7 @@ class WeakLabelDeleteTest extends IntegrateCommon with BeforeAndAfterEach { println(result) (result \ "results").as[List[JsValue]].size should be(0) - insertEdgesSync(bulkEdges(startTs = deletedAt + 1): _*) + mutateEdgesSync(bulkEdges(startTs = deletedAt + 1): _*) result = getEdgesSync(query(20, "in", testTgtColumnName)) (result \ "results").as[List[JsValue]].size should be(3) @@ -90,7 +90,7 @@ class WeakLabelDeleteTest extends IntegrateCommon with BeforeAndAfterEach { override def initTestData(): Unit = { super.initTestData() - insertEdgesSync(bulkEdges(): _*) + mutateEdgesSync(bulkEdges(): _*) } object WeakLabelDeleteHelper {
