/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

 Change Log

Release Notes - S2Graph - Version 0.2.0

** Sub-task
    * [S2GRAPH-129] - Restrict direct access on Edge's properties from other classes.
    * [S2GRAPH-130] - Edge.propsWithTs data type should be changed into mutable to support setter interface exist in tp3.
    * [S2GRAPH-131] - Add actual implementation on interfaces from TinkerPop3 structure package.
    * [S2GRAPH-148] - Provide Gremlin Plugin
    * [S2GRAPH-152] - Add IndexType on Management's createIndex
    * [S2GRAPH-153] - Implement IndexProvider(for Mixed IndexType) class
    * [S2GRAPH-157] - Check proper apache license header on all files for release 0.2.0
    * [S2GRAPH-158] - Bug fix on String type InnerVal encoding to use UTF-8 charsetName.
    * [S2GRAPH-160] - Remove warning while package
    * [S2GRAPH-161] - Update CHANGES file with correct release version
    * [S2GRAPH-163] - Update version.sbt after release
    * [S2GRAPH-180] - Implement missing Management API
    * [S2GRAPH-197] - Provide S2graphSink for non-streaming dataset
    * [S2GRAPH-205] - too many initialize S2Graph when writeBatchMutate on S2GraphSink
    * [S2GRAPH-201] - Provide S2GraphSource
    * [S2GRAPH-218] - add operations not supported on sql

** Bug
    * [S2GRAPH-159] - Wrong syntax at a bash script under Linux
    * [S2GRAPH-168] - Fix args order mismatch when use addServiceColumnProp
    * [S2GRAPH-176] - Fix compile error on LabelMeta
    * [S2GRAPH-179] - Add defaultValue on ColumnMeta
    * [S2GRAPH-178] - Fix null pointer error on BulkLoader
    * [S2GRAPH-181] - MutateVertices yield different state with different storage type
    * [S2GRAPH-184] - spark driver exit abnormally in the loader of s2jobs
    * [S2GRAPH-186] - fix wrong escaping of double quotation marks
    * [S2GRAPH-187] - Make toQuery use toVertex to parse vertex from query JSON on RequestParser
    * [S2GRAPH-188] - migrate log4j.properties to log4j2.xml
    * [S2GRAPH-189] - graphiql.html file not found
    * [S2GRAPH-190] - Remove unnecessary TC JsonBenchmarkSpec
    * [S2GRAPH-191] - Providing request / response logging to GraphQL server and removing println
    * [S2GRAPH-192] - could not find service column when creating the label
    * [S2GRAPH-195] - could not create indices using S2GraphQL
    * [S2GRAPH-196] - Apply Query Parameter to Label Fetch in S2GraphQL
    * [S2GRAPH-220] - Filter clause is not working on AnnoyModelFetcher
    * [S2GRAPH-228] - GraphQL empty variable fields on post request cause spray.json.DeserializationException
    * [S2GRAPH-243] - Limit bug on 'graph/getEdges' 

** Improvement
    * [S2GRAPH-72] - Support Apache TinkerPop and Gremlin
    * [S2GRAPH-121] - Create `Result` class to hold traverse result edges.
    * [S2GRAPH-122] - Change data types of Edge/IndexEdge/SnapshotEdge.
    * [S2GRAPH-132] - Support buffering for 'Increment RPC'
    * [S2GRAPH-133] - Deprecating Vagrant environment.
    * [S2GRAPH-135] - Change the way LabelIndexOption is implemented and improve it
    * [S2GRAPH-165] - Add TinkerPop support documentation on README
    * [S2GRAPH-167] - Provide Vertex CSV File BulkLoad
    * [S2GRAPH-169] - Separate multiple functionalities on Storage class into multiple Interface.
    * [S2GRAPH-170] - Create Interface for S2Edge/S2Vertex/S2Graph.
    * [S2GRAPH-182] - Version up spark dependencies.
    * [S2GRAPH-198] - Skip json Decode error and continue.
    * [S2GRAPH-199] - Changing query more intuitively by using `columnName` instead of `from/to` in label field name.
    * [S2GRAPH-200] - docker image could not include extra jars.
    * [S2GRAPH-204] - Avoid N + 1 queries in GraphQL
    * [S2GRAPH-207] - Provides a way to query data with the value of the Vertex property in a GraphQL query
    * [S2GRAPH-193] - Add README for S2Jobs sub-project
    * [S2GRAPH-209] - GlobalIndex supports field data types such as Numeric to enable Range Query
    * [S2GRAPH-210] - Rename package `mysqls` to `schema`
    * [S2GRAPH-213] - Abstract Query/Mutation from Storage.
    * [S2GRAPH-214] - Add REAME for movielens examples
    * [S2GRAPH-216] - Provide a transform directive in the GraphQL query result.
    * [S2GRAPH-221] - Unify configurations for bulk and mutate in S2GraphSink.
    * [S2GRAPH-230] - ResourceManager onEvict cause segmentation fault with AnnoyModelFetcher 
    * [S2GRAPH-231] - Change the GraphQL type name to a valid string.
    * [S2GRAPH-232] - Elimination of inefficiency due to duplication in GraphQL schema generation.
    * [S2GRAPH-235] - Fix typo errors in S2GraphQL MD.

** New Feature
    * [S2GRAPH-123] - Support different index on out/in direction.
    * [S2GRAPH-125] - Add options field on Label model for controlling advanced options.
    * [S2GRAPH-166] - Provide embeddable storage backend using RocksDB.
    * [S2GRAPH-175] - Provide Elastic Search Index Provider.
    * [S2GRAPH-172] - Suggest to implement GraphQL as standard web interface for S2Graph.
    * [S2GRAPH-177] - Add support for createServiceColumn/addVertex APIs on GraphQL.
    * [S2GRAPH-185] - Support Spark Structured Streaming to work with data in streaming and batch.
    * [S2GRAPH-183] - Provide batch job to dump data stored in HBase into file.
    * [S2GRAPH-203] - Support "application/graphql" Content-Type header.
    * [S2GRAPH-206] - Generalize machine learning model serving.
    * [S2GRAPH-215] - Implement a Storage Backend for JDBC driver, such as H2, MySql using the Mutator and Fetcher interfaces.
    * [S2GRAPH-219] - Added query that includes all vertices and associated edges for GraphVisualize.
    * [S2GRAPH-222] - Support Not logical operator in WhereParser.
    * [S2GRAPH-223] - Support WhereParser on Vertex.

** Task
    * [S2GRAPH-162] - Update year in the NOTICE file.
    * [S2GRAPH-211] - Include 's2jobs' test in CI
    * [S2GRAPH-212] - Fix broken markdown on README.md.
    * [S2GRAPH-229] - 'Step' abstraction for combinable queries
    * [S2GRAPH-245] - Remove install hbase step on travis CI.
    * [S2GRAPH-246] - Integration of documents into the S2Graph project.

Release 0.1.0 - Released

  NEW FEATURES

    S2GRAPH-34: Provide option to select which field in edge's properties to run timeDecay function (Committed by DOYUNG YOON).

    S2GRAPH-35: Provide normalize option on query (Committed by DOYUNG YOON).

    S2GRAPH-36: Provide Blocking API for Edge/Vertex operations (Committed by DOYUNG YOON).

    S2GRAPH-32: Support variable such as now, day, hour on query (Committed by DOYUNG YOON).

    S2GRAPH-45: Provide way to call specific bucket on experiment (Committed by DOYUNG YOON).

    S2GRAPH-33: Support weighted sum of multiple query results (Committed by DOYUNG YOON).

    S2GRAPH-50: Provide new HBase Storage Schema (Committed by DOYUNG YOON).

    S2GRAPH-60: Add divide operation to scorePropagateOp.
        	(Contributed by Junki Kim<wishoping@gmail.com>, committed by DOYUNG YOON).

    S2GRAPH-12: Add Label Name Swap Feature.
        	(Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by DOYUNG YOON).

  IMPROVEMENT

    S2GRAPH-14: Abstract HBase specific methods in Management and Label (Committed by DOYUNG YOON).

    S2GRAPH-24: Add counter config for readonly graph (Committed by Jaesang Kim).

    S2GRAPH-11: Performance tuning on sort by scoreSum on PostProcess (Committed by DOYUNG YOON).

    S2GRAPH-16: Performance tunning on where parser (Committed by DOYUNG YOON).

    S2GRAPH-37: Extract LockExpireDuration as configuration (Committed by DOYUNG YOON).

    S2GRAPH-39: Better exception message on converting between Json and InnerVal (Committed by DOYUNG YOON).

    S2GRAPH-40: PostProcess.toHashKey gives different hash key with same value when edge's label schema version is different
                (Committed by DOYUNG YOON).

    S2GRAPH-41: Refactor PostProcess's toSimpleVertexArrJson (Committed by DOYUNG YOON).

    S2GRAPH-44: Provide cache for WhereParser on query (Committed by DOYUNG YOON).

    S2GRAPH-53: Refactor Storage to decide which serializer/deserializer for IndexEdge/SnapshotEdge/Vertex
        	(Committed by DOYUNG YOON).

    S2GRAPH-55: Add param to enable epoll event loop in experimental netty http server (Committed by daewon).

    S2GRAPH-66: Optimize toEdge, IndexEdgeDeserializable using mutable Map. (Committed by DOYUN GYOON).

    S2GRAPH-22: Add missing shebang line to file.
        	(Contributed by Injun Song<ijsong@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-70: Automate the process of building a distribution package
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-82: Merge DeferCache and FutureCache (Committed by Daewon Jeong).

    S2GRAPH-116: using ASM and ByteBuddy to add a proxy to Asynchbase's Scanner.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-117: Cleaner logging library usage.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-115: Release binary artifacts to Maven Central.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-124: Change JSONParser from Trait to Object (Committed by DOYUNG YOON).

    S2GRAPH-127: Refactor ExceptionHander Object into Class (Committed by DOYUNG YOON).

  BUG FIXES

    S2GRAPH-18: Query Option "interval" is Broken.
                (Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by daewon)

    S2GRAPH-20: bug fix in query option "sample".
                (Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-28: _to option gives wrong result on query.
                (Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-38: Transform option gives wrong result since it transform degree edge too (Committed by DOYUNG YOON).

    S2GRAPH-42: Bug on EdgeTransformer with specific cases (Committed by DOYUNG YOON).

    S2GRAPH-43: Bug on offset when Interval is given on query (Committed by DOYUNG YOON).

    S2GRAPH-19: When query with duration error (Committed by DOYUNG YOON).

    S2GRAPH-63: Condition on partition strong edges and weak edges on mutateEdges is wrong (Committed by DOYUNG YOON).

    S2GRAPH-65: Deferred produce exception (Committed by DOYUNG YOON).

    S2GRAPH-64: incrementCounts yield type case exception (Committed by DOYUNG YOON).

    S2GRAPH-118: Fix compile error on test cases on loader project (Committed by DOYUNG YOON).

    S2GRAPH-120: Netty version is conflict with play 2.5.9 (Committed by DOYUNG YOON).

    S2GRAPH-126: SBT error when there is no ~/.m2/settings.xml
                 (Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-138: Fixed logging in Play! development mode
                 (Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

  TASKS

    S2GRAPH-2: Update document and quick start environment to have recent set-up command changes.
               (Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by daewon)

    S2GRAPH-5: Add Apache RAT to valid LICENSE errors. (Committed by DOYUNG YOON).

    S2GRAPH-17: Remove unnecessary abstraction layer, Storage. (Committed by DOYUNG YOON).

    S2GRAPH-57: Change package names into org.apahce.s2graph. (Committed by DOYUNG YOON).

    S2GRAPH-4: Update license headers in source codes. (Committed by DOYUNG YOON).

    S2GRAPH-61: Update README.md to have Apache mailing list.
        	(Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-71: Missing resolver in plugin settings.
                (Contributed by Injun Song<ijsong@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-30: Typo in README. (Contributed by Hyunsung Jo<hyunsung.jo@gmail.com>, committed by DOYUNG YOON).

    S2GRAPH-105: remove the full path on packaged tarball (Committed by Sergio Fernández).

  SUB TASKS

    S2GRAPH-9: Provide rest server using netty. (Committed by daewon).

    S2GRAPH-7: Abstract common codes for rest project into s2core. (Committed by daewon).

    S2GRAPH-31: Remove playframework dependencies on s2core/build.sbt. (Committed by DOYUNG YOON).

    S2GRAPH-69: Change IndexEdge's props data type. (Committed by DOYUNG YOON).

    S2GRAPH-87: LICENSE file should be changed. (Committed by Sergio Fernández).

    S2GRAPH-73: Add an SBT task and relevant scripts to construct a package for distribution.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-74: Add a script that starts/stops a local hbase server.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-75: Use an embedded database as the default metadata storage.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-81: Separate Serializable's toKeyValues into 3, toRowKey, toQualifier, toValue. (Committed by DOYUNG YOON).

    S2GRAPH-88: Add DISCLAIMER, LICENSE, NOTICE on packaging process.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON)

    S2GRAPH-89: Change version number on project. (Committed by DOYUNG YOON).

    S2GRAPH-91: Remove custom repository on project's build.sbt (Committed by DOYUNG YOON).

    S2GRAPH-93: Remove MySQL JDBC driver (Committed by DOYUNG YOON).

    S2GRAPH-98: Make test cases on multiple projects run sequentially (Committed by DOYUNG YOON).

    S2GRAPH-99: Reduce number of test run on test cases on org.apache.s2graph.rest.play.benchmark (Committed by DOYUNG YOON).

    S2GRAPH-96: Remove unmanaged dependencies(asynchbase) and speficy it on build.sbt. (Committed by DOYUNG YOON).

    S2GRAPH-97: Add KEYS file (Committed by DOYUNG YOON).

    S2GRAPH-95: Add sbt-pgp plugin on plugins.sbt (Committed by DOYUNG YOON).

    S2GRAPH-92: Add proper license headers on files with unknown licenses (Committed by DOYUNG YOON).

    S2GRAPH-100: Add BUILD.md to explain how to package from source, then add it into REAME.md (Committed by DOYUNG YOON).

    S2GRAPH-94: Add description for project layout on REAME.
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON).

    S2GRAPH-103: Remove dependencies on custom fork of asynchbase (Committed by DOYUNG YOON).

    S2GRAPH-102: Add more configuration optoins in application.conf (Committed by DOYUNG YOON).

    S2GRAPH-84: Test-case compilation error on `s2counter_loader` project (Committed by Jaesang Kim).

    S2GRAPH-104: force scalaz-stream, netty-http-pipelining dependencies version which is available on maven central (Committed by DOYUNG YOON).

    S2GRAPH-109: Merge duplicate test.sh into one same as `Your First Graph` on README.md (Committed by DOYUNG YOON).

    S2GRAPH-106: Remove warnings while package (Committed by DOYUNG YOON).

    S2GRAPH-112: Additional refinements in README.md
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON).

    S2GRAPH-111: typo fix: getServiceLable -> getServiceLabel
        	(Contributed by Jong Wook Kim<jongwook@nyu.edu>, committed by DOYUNG YOON).

    S2GRAPH-110: Add more committer's public key to KEYS file (Committed by DOYUNG YOON).

    S2GRAPH-113: Add license header on `bin/example.sh` (Committed by DOYUNG YOON).

    S2GRAPH-114: `MethodNotSupportedException` class in s2counter_core project miss license header (Committed by DOYUNG YOON).

    S2GRAPH-136: Validate TinkerPop3 interface with gremlin-test suite. (Committed by DOYUNG YOON).

  TEST

    S2GRAPH-21: Change PostProcessBenchmarkSpec not to store and fetch test data from storage. (Committed by DOYUNG YOON).

    S2GRAPH-108: Support continuous integration test.
    (Contributed by Injun Song<ijsong@gmail.com>, committed by DOYUNG YOON)

    S2GRAPH-144: [S2GRAPH-144] Travis icon in README is not proper link
    (Contributed by Injun Song<ijsong@gmail.com>, committed by Daewon Jeong)

    S2GRAPH-145: [S2GRAPH-145] Improve travis to cache maven directory
    (Contributed by Injun Song<ijsong@gmail.com>, committed by Daewon Jeong)
