{"action":"created","comment":{"url":"https://api.github.com/repos/pravega/pravega/pulls/comments/124803682","pull_request_review_id":47128018,"id":124803682,"diff_hunk":"@@ -0,0 +1,359 @@\n+/**\n+ * Copyright (c) 2017 Dell Inc., or its subsidiaries. All Rights Reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ */\n+package io.pravega.segmentstore.server.host;\n+\n+import com.emc.object.Range;\n+import com.emc.object.s3.S3Config;\n+import com.emc.object.s3.S3Exception;\n+import com.emc.object.s3.S3ObjectMetadata;\n+import com.emc.object.s3.bean.AccessControlList;\n+import com.emc.object.s3.bean.CompleteMultipartUploadResult;\n+import com.emc.object.s3.bean.CopyPartResult;\n+import com.emc.object.s3.bean.DeleteObjectsResult;\n+import com.emc.object.s3.bean.GetObjectResult;\n+import com.emc.object.s3.bean.ListObjectsResult;\n+import com.emc.object.s3.bean.PutObjectResult;\n+import com.emc.object.s3.bean.S3Object;\n+import com.emc.object.s3.jersey.S3JerseyClient;\n+import com.emc.object.s3.request.CompleteMultipartUploadRequest;\n+import com.emc.object.s3.request.CopyPartRequest;\n+import com.emc.object.s3.request.DeleteObjectsRequest;\n+import com.emc.object.s3.request.PutObjectRequest;\n+import com.emc.object.s3.request.SetObjectAclRequest;\n+import io.pravega.common.io.FileHelpers;\n+import io.pravega.segmentstore.contracts.BadOffsetException;\n+import io.pravega.segmentstore.server.store.ServiceBuilder;\n+import io.pravega.segmentstore.server.store.ServiceBuilderConfig;\n+import io.pravega.segmentstore.server.store.StreamSegmentStoreTestBase;\n+import io.pravega.segmentstore.storage.Storage;\n+import io.pravega.segmentstore.storage.StorageFactory;\n+import io.pravega.segmentstore.storage.impl.bookkeeper.BookKeeperConfig;\n+import io.pravega.segmentstore.storage.impl.bookkeeper.BookKeeperLogFactory;\n+import io.pravega.segmentstore.storage.impl.exts3.EXTS3StorageTest;\n+import io.pravega.segmentstore.storage.impl.exts3.ExtS3Storage;\n+import io.pravega.segmentstore.storage.impl.exts3.ExtS3StorageConfig;\n+import io.pravega.segmentstore.storage.impl.exts3.ExtS3StorageFactory;\n+import io.pravega.segmentstore.storage.impl.rocksdb.RocksDBCacheFactory;\n+import io.pravega.segmentstore.storage.impl.rocksdb.RocksDBConfig;\n+import java.io.ByteArrayInputStream;\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.net.URI;\n+import java.net.URISyntaxException;\n+import java.nio.ByteBuffer;\n+import java.nio.channels.Channels;\n+import java.nio.channels.FileChannel;\n+import java.nio.file.Files;\n+import java.nio.file.Path;\n+import java.nio.file.Paths;\n+import java.nio.file.StandardOpenOption;\n+import java.util.ArrayList;\n+import java.util.Date;\n+import java.util.HashMap;\n+import java.util.Map;\n+import java.util.Properties;\n+import java.util.concurrent.ConcurrentHashMap;\n+import java.util.concurrent.ConcurrentMap;\n+import lombok.SneakyThrows;\n+import org.junit.After;\n+import org.junit.Before;\n+\n+/**\n+ * End-to-end tests for SegmentStore, with integrated Storage and DurableDataLog.\n+ */\n+public class ExtS3IntegrationTest extends StreamSegmentStoreTestBase {\n+    //region Test Configuration and Setup\n+\n+    private static final int BOOKIE_COUNT = 3;\n+    private BookKeeperRunner bookkeeper = null;\n+    private String baseDir;\n+\n+    /**\n+     * Starts BookKeeper.\n+     */\n+    @Before\n+    public void setUp() throws Exception {\n+        bookkeeper = new BookKeeperRunner(this.configBuilder, BOOKIE_COUNT);\n+        bookkeeper.initialize();\n+\n+        String endpoint = \"http://127.0.0.1:9020\";\n+        URI uri = URI.create(endpoint);\n+        Properties properties = new Properties();\n+        properties.setProperty(\"s3proxy.authorization\", \"none\");\n+        properties.setProperty(\"s3proxy.endpoint\", endpoint);\n+        properties.setProperty(\"jclouds.provider\", \"filesystem\");\n+        properties.setProperty(\"jclouds.filesystem.basedir\", \"/tmp/s3proxy\");\n+        baseDir = Files.createTempDirectory(\"exts3_wrapper\").toString();\n+\n+        this.configBuilder.include(ExtS3StorageConfig.builder()\n+                                                     .with(ExtS3StorageConfig.EXTS3_BUCKET, \"kanpravegatest\")\n+                                                     .with(ExtS3StorageConfig.EXTS3_ACCESS_KEY_ID, \"x\")\n+                                                     .with(ExtS3StorageConfig.EXTS3_SECRET_KEY, \"x\")\n+                                                     .with(ExtS3StorageConfig.EXTS3_URI, \"http://localhost:9020\"));\n+    }\n+\n+    /**\n+     * Shuts down BookKeeper and cleans up file system directory\n+     */\n+    @After\n+    public void tearDown() throws Exception {\n+        bookkeeper.close();\n+        FileHelpers.deleteFileOrDirectory(new File(baseDir));\n+    }\n+\n+    //endregion\n+\n+    //region StreamSegmentStoreTestBase Implementation\n+\n+    @Override\n+    protected ServiceBuilder createBuilder(ServiceBuilderConfig builderConfig) {\n+        return ServiceBuilder\n+                .newInMemoryBuilder(builderConfig)\n+                .withCacheFactory(setup -> new RocksDBCacheFactory(builderConfig.getConfig(RocksDBConfig::builder)))\n+                .withStorageFactory(setup -> {\n+                    StorageFactory f = new ExtS3StorageFactory(\n+                            setup.getConfig(ExtS3StorageConfig::builder), setup.getExecutor());\n+                    return new ExtS3ListenableStorageFactory(f, builderConfig.getConfig(ExtS3StorageConfig::builder));","path":"segmentstore/server/host/src/test/java/io/pravega/segmentstore/server/host/ExtS3IntegrationTest.java","position":125,"original_position":125,"commit_id":"194bcccb73cff2095498d717fae3e6218761ed56","original_commit_id":"d0493fdf3f076cc767a997d21e607120f7f77a34","user":{"login":"arvindkandhare","id":2305381,"avatar_url":"https://avatars2.githubusercontent.com/u/2305381?v=3","gravatar_id":"","url":"https://api.github.com/users/arvindkandhare","html_url":"https://github.com/arvindkandhare","followers_url":"https://api.github.com/users/arvindkandhare/followers","following_url":"https://api.github.com/users/arvindkandhare/following{/other_user}","gists_url":"https://api.github.com/users/arvindkandhare/gists{/gist_id}","starred_url":"https://api.github.com/users/arvindkandhare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arvindkandhare/subscriptions","organizations_url":"https://api.github.com/users/arvindkandhare/orgs","repos_url":"https://api.github.com/users/arvindkandhare/repos","events_url":"https://api.github.com/users/arvindkandhare/events{/privacy}","received_events_url":"https://api.github.com/users/arvindkandhare/received_events","type":"User","site_admin":false},"body":"This follows the same pattern. The `createStorageAdapter` method is different.","created_at":"2017-06-29T13:46:44Z","updated_at":"2017-06-29T13:46:44Z","html_url":"https://github.com/pravega/pravega/pull/1396#discussion_r124803682","pull_request_url":"https://api.github.com/repos/pravega/pravega/pulls/1396","_links":{"self":{"href":"https://api.github.com/repos/pravega/pravega/pulls/comments/124803682"},"html":{"href":"https://github.com/pravega/pravega/pull/1396#discussion_r124803682"},"pull_request":{"href":"https://api.github.com/repos/pravega/pravega/pulls/1396"}}},"pull_request":{"url":"https://api.github.com/repos/pravega/pravega/pulls/1396","id":124071421,"html_url":"https://github.com/pravega/pravega/pull/1396","diff_url":"https://github.com/pravega/pravega/pull/1396.diff","patch_url":"https://github.com/pravega/pravega/pull/1396.patch","issue_url":"https://api.github.com/repos/pravega/pravega/issues/1396","number":1396,"state":"open","locked":false,"title":"Issue 1395: Extended S3 based Tier 2 implementation","user":{"login":"arvindkandhare","id":2305381,"avatar_url":"https://avatars2.githubusercontent.com/u/2305381?v=3","gravatar_id":"","url":"https://api.github.com/users/arvindkandhare","html_url":"https://github.com/arvindkandhare","followers_url":"https://api.github.com/users/arvindkandhare/followers","following_url":"https://api.github.com/users/arvindkandhare/following{/other_user}","gists_url":"https://api.github.com/users/arvindkandhare/gists{/gist_id}","starred_url":"https://api.github.com/users/arvindkandhare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arvindkandhare/subscriptions","organizations_url":"https://api.github.com/users/arvindkandhare/orgs","repos_url":"https://api.github.com/users/arvindkandhare/repos","events_url":"https://api.github.com/users/arvindkandhare/events{/privacy}","received_events_url":"https://api.github.com/users/arvindkandhare/received_events","type":"User","site_admin":false},"body":"**Change log description**\r\n* Implement extended S3 based Tier 2.\r\n\r\n**Purpose of the change**\r\nFixes  #1395 \r\n\r\n**What the code does**\r\n* Implement Tier 2 using extended S3 API.\r\n\r\n**How to verify it**\r\nPoint the unit test code to a FnF Pravega simulator.","created_at":"2017-06-05T22:08:43Z","updated_at":"2017-06-29T13:46:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c2f7390deabb4d0dbcff5f4a7dbda0f38191972d","assignee":{"login":"fpj","id":572920,"avatar_url":"https://avatars0.githubusercontent.com/u/572920?v=3","gravatar_id":"","url":"https://api.github.com/users/fpj","html_url":"https://github.com/fpj","followers_url":"https://api.github.com/users/fpj/followers","following_url":"https://api.github.com/users/fpj/following{/other_user}","gists_url":"https://api.github.com/users/fpj/gists{/gist_id}","starred_url":"https://api.github.com/users/fpj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fpj/subscriptions","organizations_url":"https://api.github.com/users/fpj/orgs","repos_url":"https://api.github.com/users/fpj/repos","events_url":"https://api.github.com/users/fpj/events{/privacy}","received_events_url":"https://api.github.com/users/fpj/received_events","type":"User","site_admin":false},"assignees":[{"login":"fpj","id":572920,"avatar_url":"https://avatars0.githubusercontent.com/u/572920?v=3","gravatar_id":"","url":"https://api.github.com/users/fpj","html_url":"https://github.com/fpj","followers_url":"https://api.github.com/users/fpj/followers","following_url":"https://api.github.com/users/fpj/following{/other_user}","gists_url":"https://api.github.com/users/fpj/gists{/gist_id}","starred_url":"https://api.github.com/users/fpj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fpj/subscriptions","organizations_url":"https://api.github.com/users/fpj/orgs","repos_url":"https://api.github.com/users/fpj/repos","events_url":"https://api.github.com/users/fpj/events{/privacy}","received_events_url":"https://api.github.com/users/fpj/received_events","type":"User","site_admin":false},{"login":"tkaitchuck","id":4756752,"avatar_url":"https://avatars2.githubusercontent.com/u/4756752?v=3","gravatar_id":"","url":"https://api.github.com/users/tkaitchuck","html_url":"https://github.com/tkaitchuck","followers_url":"https://api.github.com/users/tkaitchuck/followers","following_url":"https://api.github.com/users/tkaitchuck/following{/other_user}","gists_url":"https://api.github.com/users/tkaitchuck/gists{/gist_id}","starred_url":"https://api.github.com/users/tkaitchuck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkaitchuck/subscriptions","organizations_url":"https://api.github.com/users/tkaitchuck/orgs","repos_url":"https://api.github.com/users/tkaitchuck/repos","events_url":"https://api.github.com/users/tkaitchuck/events{/privacy}","received_events_url":"https://api.github.com/users/tkaitchuck/received_events","type":"User","site_admin":false},{"login":"andreipaduroiu","id":14354377,"avatar_url":"https://avatars1.githubusercontent.com/u/14354377?v=3","gravatar_id":"","url":"https://api.github.com/users/andreipaduroiu","html_url":"https://github.com/andreipaduroiu","followers_url":"https://api.github.com/users/andreipaduroiu/followers","following_url":"https://api.github.com/users/andreipaduroiu/following{/other_user}","gists_url":"https://api.github.com/users/andreipaduroiu/gists{/gist_id}","starred_url":"https://api.github.com/users/andreipaduroiu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andreipaduroiu/subscriptions","organizations_url":"https://api.github.com/users/andreipaduroiu/orgs","repos_url":"https://api.github.com/users/andreipaduroiu/repos","events_url":"https://api.github.com/users/andreipaduroiu/events{/privacy}","received_events_url":"https://api.github.com/users/andreipaduroiu/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"tkaitchuck","id":4756752,"avatar_url":"https://avatars2.githubusercontent.com/u/4756752?v=3","gravatar_id":"","url":"https://api.github.com/users/tkaitchuck","html_url":"https://github.com/tkaitchuck","followers_url":"https://api.github.com/users/tkaitchuck/followers","following_url":"https://api.github.com/users/tkaitchuck/following{/other_user}","gists_url":"https://api.github.com/users/tkaitchuck/gists{/gist_id}","starred_url":"https://api.github.com/users/tkaitchuck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkaitchuck/subscriptions","organizations_url":"https://api.github.com/users/tkaitchuck/orgs","repos_url":"https://api.github.com/users/tkaitchuck/repos","events_url":"https://api.github.com/users/tkaitchuck/events{/privacy}","received_events_url":"https://api.github.com/users/tkaitchuck/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/pravega/pravega/pulls/1396/commits","review_comments_url":"https://api.github.com/repos/pravega/pravega/pulls/1396/comments","review_comment_url":"https://api.github.com/repos/pravega/pravega/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pravega/pravega/issues/1396/comments","statuses_url":"https://api.github.com/repos/pravega/pravega/statuses/194bcccb73cff2095498d717fae3e6218761ed56","head":{"label":"arvindkandhare:feature-ecs-tier2","ref":"feature-ecs-tier2","sha":"194bcccb73cff2095498d717fae3e6218761ed56","user":{"login":"arvindkandhare","id":2305381,"avatar_url":"https://avatars2.githubusercontent.com/u/2305381?v=3","gravatar_id":"","url":"https://api.github.com/users/arvindkandhare","html_url":"https://github.com/arvindkandhare","followers_url":"https://api.github.com/users/arvindkandhare/followers","following_url":"https://api.github.com/users/arvindkandhare/following{/other_user}","gists_url":"https://api.github.com/users/arvindkandhare/gists{/gist_id}","starred_url":"https://api.github.com/users/arvindkandhare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arvindkandhare/subscriptions","organizations_url":"https://api.github.com/users/arvindkandhare/orgs","repos_url":"https://api.github.com/users/arvindkandhare/repos","events_url":"https://api.github.com/users/arvindkandhare/events{/privacy}","received_events_url":"https://api.github.com/users/arvindkandhare/received_events","type":"User","site_admin":false},"repo":{"id":90913273,"name":"pravega","full_name":"arvindkandhare/pravega","owner":{"login":"arvindkandhare","id":2305381,"avatar_url":"https://avatars2.githubusercontent.com/u/2305381?v=3","gravatar_id":"","url":"https://api.github.com/users/arvindkandhare","html_url":"https://github.com/arvindkandhare","followers_url":"https://api.github.com/users/arvindkandhare/followers","following_url":"https://api.github.com/users/arvindkandhare/following{/other_user}","gists_url":"https://api.github.com/users/arvindkandhare/gists{/gist_id}","starred_url":"https://api.github.com/users/arvindkandhare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arvindkandhare/subscriptions","organizations_url":"https://api.github.com/users/arvindkandhare/orgs","repos_url":"https://api.github.com/users/arvindkandhare/repos","events_url":"https://api.github.com/users/arvindkandhare/events{/privacy}","received_events_url":"https://api.github.com/users/arvindkandhare/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/arvindkandhare/pravega","description":"Pravega - Streaming as a new software defined storage primitive","fork":true,"url":"https://api.github.com/repos/arvindkandhare/pravega","forks_url":"https://api.github.com/repos/arvindkandhare/pravega/forks","keys_url":"https://api.github.com/repos/arvindkandhare/pravega/keys{/key_id}","collaborators_url":"https://api.github.com/repos/arvindkandhare/pravega/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/arvindkandhare/pravega/teams","hooks_url":"https://api.github.com/repos/arvindkandhare/pravega/hooks","issue_events_url":"https://api.github.com/repos/arvindkandhare/pravega/issues/events{/number}","events_url":"https://api.github.com/repos/arvindkandhare/pravega/events","assignees_url":"https://api.github.com/repos/arvindkandhare/pravega/assignees{/user}","branches_url":"https://api.github.com/repos/arvindkandhare/pravega/branches{/branch}","tags_url":"https://api.github.com/repos/arvindkandhare/pravega/tags","blobs_url":"https://api.github.com/repos/arvindkandhare/pravega/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/arvindkandhare/pravega/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/arvindkandhare/pravega/git/refs{/sha}","trees_url":"https://api.github.com/repos/arvindkandhare/pravega/git/trees{/sha}","statuses_url":"https://api.github.com/repos/arvindkandhare/pravega/statuses/{sha}","languages_url":"https://api.github.com/repos/arvindkandhare/pravega/languages","stargazers_url":"https://api.github.com/repos/arvindkandhare/pravega/stargazers","contributors_url":"https://api.github.com/repos/arvindkandhare/pravega/contributors","subscribers_url":"https://api.github.com/repos/arvindkandhare/pravega/subscribers","subscription_url":"https://api.github.com/repos/arvindkandhare/pravega/subscription","commits_url":"https://api.github.com/repos/arvindkandhare/pravega/commits{/sha}","git_commits_url":"https://api.github.com/repos/arvindkandhare/pravega/git/commits{/sha}","comments_url":"https://api.github.com/repos/arvindkandhare/pravega/comments{/number}","issue_comment_url":"https://api.github.com/repos/arvindkandhare/pravega/issues/comments{/number}","contents_url":"https://api.github.com/repos/arvindkandhare/pravega/contents/{+path}","compare_url":"https://api.github.com/repos/arvindkandhare/pravega/compare/{base}...{head}","merges_url":"https://api.github.com/repos/arvindkandhare/pravega/merges","archive_url":"https://api.github.com/repos/arvindkandhare/pravega/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/arvindkandhare/pravega/downloads","issues_url":"https://api.github.com/repos/arvindkandhare/pravega/issues{/number}","pulls_url":"https://api.github.com/repos/arvindkandhare/pravega/pulls{/number}","milestones_url":"https://api.github.com/repos/arvindkandhare/pravega/milestones{/number}","notifications_url":"https://api.github.com/repos/arvindkandhare/pravega/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/arvindkandhare/pravega/labels{/name}","releases_url":"https://api.github.com/repos/arvindkandhare/pravega/releases{/id}","deployments_url":"https://api.github.com/repos/arvindkandhare/pravega/deployments","created_at":"2017-05-10T22:21:45Z","updated_at":"2017-05-10T22:21:49Z","pushed_at":"2017-06-29T01:02:13Z","git_url":"git://github.com/arvindkandhare/pravega.git","ssh_url":"git@github.com:arvindkandhare/pravega.git","clone_url":"https://github.com/arvindkandhare/pravega.git","svn_url":"https://github.com/arvindkandhare/pravega","homepage":"http://pravega.io","size":19369,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pravega:master","ref":"master","sha":"80a2f1374ad71e5ee94b338bda97bff87e24954e","user":{"login":"pravega","id":25698199,"avatar_url":"https://avatars2.githubusercontent.com/u/25698199?v=3","gravatar_id":"","url":"https://api.github.com/users/pravega","html_url":"https://github.com/pravega","followers_url":"https://api.github.com/users/pravega/followers","following_url":"https://api.github.com/users/pravega/following{/other_user}","gists_url":"https://api.github.com/users/pravega/gists{/gist_id}","starred_url":"https://api.github.com/users/pravega/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravega/subscriptions","organizations_url":"https://api.github.com/users/pravega/orgs","repos_url":"https://api.github.com/users/pravega/repos","events_url":"https://api.github.com/users/pravega/events{/privacy}","received_events_url":"https://api.github.com/users/pravega/received_events","type":"Organization","site_admin":false},"repo":{"id":63096822,"name":"pravega","full_name":"pravega/pravega","owner":{"login":"pravega","id":25698199,"avatar_url":"https://avatars2.githubusercontent.com/u/25698199?v=3","gravatar_id":"","url":"https://api.github.com/users/pravega","html_url":"https://github.com/pravega","followers_url":"https://api.github.com/users/pravega/followers","following_url":"https://api.github.com/users/pravega/following{/other_user}","gists_url":"https://api.github.com/users/pravega/gists{/gist_id}","starred_url":"https://api.github.com/users/pravega/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravega/subscriptions","organizations_url":"https://api.github.com/users/pravega/orgs","repos_url":"https://api.github.com/users/pravega/repos","events_url":"https://api.github.com/users/pravega/events{/privacy}","received_events_url":"https://api.github.com/users/pravega/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pravega/pravega","description":"Pravega - Streaming as a new software defined storage primitive","fork":false,"url":"https://api.github.com/repos/pravega/pravega","forks_url":"https://api.github.com/repos/pravega/pravega/forks","keys_url":"https://api.github.com/repos/pravega/pravega/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pravega/pravega/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pravega/pravega/teams","hooks_url":"https://api.github.com/repos/pravega/pravega/hooks","issue_events_url":"https://api.github.com/repos/pravega/pravega/issues/events{/number}","events_url":"https://api.github.com/repos/pravega/pravega/events","assignees_url":"https://api.github.com/repos/pravega/pravega/assignees{/user}","branches_url":"https://api.github.com/repos/pravega/pravega/branches{/branch}","tags_url":"https://api.github.com/repos/pravega/pravega/tags","blobs_url":"https://api.github.com/repos/pravega/pravega/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pravega/pravega/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pravega/pravega/git/refs{/sha}","trees_url":"https://api.github.com/repos/pravega/pravega/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pravega/pravega/statuses/{sha}","languages_url":"https://api.github.com/repos/pravega/pravega/languages","stargazers_url":"https://api.github.com/repos/pravega/pravega/stargazers","contributors_url":"https://api.github.com/repos/pravega/pravega/contributors","subscribers_url":"https://api.github.com/repos/pravega/pravega/subscribers","subscription_url":"https://api.github.com/repos/pravega/pravega/subscription","commits_url":"https://api.github.com/repos/pravega/pravega/commits{/sha}","git_commits_url":"https://api.github.com/repos/pravega/pravega/git/commits{/sha}","comments_url":"https://api.github.com/repos/pravega/pravega/comments{/number}","issue_comment_url":"https://api.github.com/repos/pravega/pravega/issues/comments{/number}","contents_url":"https://api.github.com/repos/pravega/pravega/contents/{+path}","compare_url":"https://api.github.com/repos/pravega/pravega/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pravega/pravega/merges","archive_url":"https://api.github.com/repos/pravega/pravega/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pravega/pravega/downloads","issues_url":"https://api.github.com/repos/pravega/pravega/issues{/number}","pulls_url":"https://api.github.com/repos/pravega/pravega/pulls{/number}","milestones_url":"https://api.github.com/repos/pravega/pravega/milestones{/number}","notifications_url":"https://api.github.com/repos/pravega/pravega/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pravega/pravega/labels{/name}","releases_url":"https://api.github.com/repos/pravega/pravega/releases{/id}","deployments_url":"https://api.github.com/repos/pravega/pravega/deployments","created_at":"2016-07-11T19:41:03Z","updated_at":"2017-06-28T21:44:41Z","pushed_at":"2017-06-29T13:32:27Z","git_url":"git://github.com/pravega/pravega.git","ssh_url":"git@github.com:pravega/pravega.git","clone_url":"https://github.com/pravega/pravega.git","svn_url":"https://github.com/pravega/pravega","homepage":"http://pravega.io","size":18920,"stargazers_count":79,"watchers_count":79,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":32,"mirror_url":null,"open_issues_count":303,"forks":32,"open_issues":303,"watchers":79,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pravega/pravega/pulls/1396"},"html":{"href":"https://github.com/pravega/pravega/pull/1396"},"issue":{"href":"https://api.github.com/repos/pravega/pravega/issues/1396"},"comments":{"href":"https://api.github.com/repos/pravega/pravega/issues/1396/comments"},"review_comments":{"href":"https://api.github.com/repos/pravega/pravega/pulls/1396/comments"},"review_comment":{"href":"https://api.github.com/repos/pravega/pravega/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pravega/pravega/pulls/1396/commits"},"statuses":{"href":"https://api.github.com/repos/pravega/pravega/statuses/194bcccb73cff2095498d717fae3e6218761ed56"}}}}
{"actor":{"display_login":"arvindkandhare"}}