{"action":"created","comment":{"url":"https://api.github.com/repos/caskdata/cdap/pulls/comments/71073067","id":71073067,"diff_hunk":"@@ -45,24 +53,78 @@\n \n   private static NamespacedLocationFactory namespacedLocationFactory;\n   private static StorageProviderNamespaceAdmin storageProviderNamespaceAdmin;\n+  private static NamespaceStore namespaceStore;\n+  private static TransactionManager transactionManager;\n+  private static DatasetService datasetService;\n \n   @BeforeClass\n   public static void setup() throws IOException {\n     CConfiguration cConf = CConfiguration.create();\n     cConf.set(Constants.CFG_LOCAL_DATA_DIR, TEMP_FOLDER.newFolder().getAbsolutePath());\n     cConf.setBoolean(Constants.Explore.EXPLORE_ENABLED, true);\n-    Injector injector = Guice.createInjector(new AppFabricTestModule(cConf));\n+    Injector injector = Guice.createInjector(Modules.override(new AppFabricTestModule(cConf)).with(\n+      new AbstractModule() {\n+        @Override\n+        protected void configure() {\n+          // use the DefaultNamespacedLocationFactory here to test proper namespace creation in storage handler and\n+          // not the NamespacedLocationFactoryTestClient\n+          bind(NamespacedLocationFactory.class).to(DefaultNamespacedLocationFactory.class);\n+        }\n+      }\n+    ));\n     namespacedLocationFactory = injector.getInstance(NamespacedLocationFactory.class);\n     storageProviderNamespaceAdmin = injector.getInstance(StorageProviderNamespaceAdmin.class);\n+    // start the dataset service for namespace store to work\n+    transactionManager = injector.getInstance(TransactionManager.class);\n+    transactionManager.startAndWait();\n+    datasetService = injector.getInstance(DatasetService.class);\n+    datasetService.startAndWait();\n+    // we don't use namespace admin here but the store because namespaceadmin will try to create the\n+    // home directory for namespace which we don't want. We just want to store the namespace meta in store\n+    // to look up during the delete.\n+    namespaceStore = injector.getInstance(NamespaceStore.class);\n   }\n \n   @Test\n-  public void test() throws ExploreException, SQLException, IOException {\n+  public void test() throws Exception {\n     NamespaceId myspace = new NamespaceId(\"myspace\");\n-    storageProviderNamespaceAdmin.create(new NamespaceMeta.Builder().setName(myspace.getNamespace()).build());\n+    NamespaceMeta myspaceMeta = new NamespaceMeta.Builder().setName(myspace.getNamespace()).build();\n+    // the create/delete will look up meta so store that too\n+    namespaceStore.create(myspaceMeta);\n+    storageProviderNamespaceAdmin.create(myspaceMeta);\n     Location namespaceLocation = namespacedLocationFactory.get(myspace.toId());\n     Assert.assertTrue(namespaceLocation.exists());\n     storageProviderNamespaceAdmin.delete(myspace);\n     Assert.assertFalse(namespaceLocation.exists());\n   }\n+\n+  @Test\n+  public void testNSWithCustomLocation() throws ExploreException, SQLException, IOException {\n+    NamespaceId customSpace = new NamespaceId(\"custom\");\n+    NamespaceMeta customSpaceMeta = new NamespaceMeta.Builder().setName(customSpace.getNamespace())\n+      .setRootDirectory(TEMP_FOLDER.getRoot().toString() + \"/\" + customSpace.getNamespace()).build();\n+    // the create/delete will look up meta so store that too\n+    namespaceStore.create(customSpaceMeta);\n+    try {\n+      storageProviderNamespaceAdmin.create(customSpaceMeta);\n+      Assert.fail(\"Expected exception to be thrown while creating namespace with custom location since the custom \" +\n+                    \"location does not exists at this point.\");","path":"cdap-app-fabric/src/test/java/co/cask/cdap/internal/app/namespace/StorageProviderNamespaceAdminTest.java","position":91,"original_position":91,"commit_id":"ed872c2cfba757c261dbce81183549eda22ddf65","original_commit_id":"ed872c2cfba757c261dbce81183549eda22ddf65","user":{"login":"bdmogal","id":3895099,"avatar_url":"https://avatars.githubusercontent.com/u/3895099?v=3","gravatar_id":"","url":"https://api.github.com/users/bdmogal","html_url":"https://github.com/bdmogal","followers_url":"https://api.github.com/users/bdmogal/followers","following_url":"https://api.github.com/users/bdmogal/following{/other_user}","gists_url":"https://api.github.com/users/bdmogal/gists{/gist_id}","starred_url":"https://api.github.com/users/bdmogal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdmogal/subscriptions","organizations_url":"https://api.github.com/users/bdmogal/orgs","repos_url":"https://api.github.com/users/bdmogal/repos","events_url":"https://api.github.com/users/bdmogal/events{/privacy}","received_events_url":"https://api.github.com/users/bdmogal/received_events","type":"User","site_admin":false},"body":"nit: does not exist","created_at":"2016-07-16T22:57:34Z","updated_at":"2016-07-16T22:57:34Z","html_url":"https://github.com/caskdata/cdap/pull/6009#discussion_r71073067","pull_request_url":"https://api.github.com/repos/caskdata/cdap/pulls/6009","_links":{"self":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/comments/71073067"},"html":{"href":"https://github.com/caskdata/cdap/pull/6009#discussion_r71073067"},"pull_request":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/6009"}}},"pull_request":{"url":"https://api.github.com/repos/caskdata/cdap/pulls/6009","id":76865861,"html_url":"https://github.com/caskdata/cdap/pull/6009","diff_url":"https://github.com/caskdata/cdap/pull/6009.diff","patch_url":"https://github.com/caskdata/cdap/pull/6009.patch","issue_url":"https://api.github.com/repos/caskdata/cdap/issues/6009","number":6009,"state":"open","locked":false,"title":"CDAP-6154 Custom Namespace Mapping for Filesystem","user":{"login":"rohitsinha54","id":1472867,"avatar_url":"https://avatars.githubusercontent.com/u/1472867?v=3","gravatar_id":"","url":"https://api.github.com/users/rohitsinha54","html_url":"https://github.com/rohitsinha54","followers_url":"https://api.github.com/users/rohitsinha54/followers","following_url":"https://api.github.com/users/rohitsinha54/following{/other_user}","gists_url":"https://api.github.com/users/rohitsinha54/gists{/gist_id}","starred_url":"https://api.github.com/users/rohitsinha54/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohitsinha54/subscriptions","organizations_url":"https://api.github.com/users/rohitsinha54/orgs","repos_url":"https://api.github.com/users/rohitsinha54/repos","events_url":"https://api.github.com/users/rohitsinha54/events{/privacy}","received_events_url":"https://api.github.com/users/rohitsinha54/received_events","type":"User","site_admin":false},"body":"Issue: https://issues.cask.co/browse/CDAP-6154\r\nBuild: http://builds.cask.co/browse/CDAP-DUT4347-1\r\nITN: http://builds.cask.co/browse/CDAP-ITM-5\r\n\r\nSummary\r\n-------------\r\n- Allow user to specify custom location to use for cdap namespace.\r\n- Custom locations are expected to be absolute path. A check is performed to ensure this before creating namespace.\r\n- If a custom location is provided we check for it to exists while creating namespace\r\n- If a custom location was provided we don't delete it while deleting namespace.\r\n- This works on standalone too. (Tested on unix system. It has not been tested on windows system)\r\n- Currently there is no CachingNamespaceQueryAdmin for performance improvement. It will be added in a separate PR. \r\n- The NamespacedLocationFactory now has a NamespaceQueryAdmin which it uses to look up namespace meta to give the correct location which is namespaced.\r\n- NamespacedLocationFactory now takes in RootLocationFactory rather than LocationFactory (whose basepath is cdap dir) since the custom mapping can be any absolute path and to work with these we need to work with root of the filesystem.\r\n- Added NamespacedLocationFactoryTestClient which is same as earlier NamespacedLocationFactory this is helpful in unit tests as it does not perform a namespace meta lookup and hence the unit tests does not need to  create namespace to get namespaced locations. \r\n- Added a LocationUnitTestModule which gives the same Module as LocationRuntimeModule.getInMemory ones but binds the NamespacedLocationFactory to the above mentioned NamespacedLocationFactoryTestClient to be used in tests. \r\n- DatasetService, DatasetInstanceService and DatasetTypeHandler now uses NamespaceQueryAdmin rather than NamespaceStore which it was doing earlier to avoid circular dependency in Guice injection. \r\n\r\nTODO:\r\n- [ ] Run integration tests on this branch\r\n- [ ] Test more rigorously on a cluster for edge cases\r\n- [ ] After Hbase Mapping is done fix the todo to clean the if statements. ","created_at":"2016-07-10T06:36:53Z","updated_at":"2016-07-16T22:57:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b4662484f953649bd6dc6700dae064bfce187bd1","assignee":{"login":"chtyim","id":885032,"avatar_url":"https://avatars.githubusercontent.com/u/885032?v=3","gravatar_id":"","url":"https://api.github.com/users/chtyim","html_url":"https://github.com/chtyim","followers_url":"https://api.github.com/users/chtyim/followers","following_url":"https://api.github.com/users/chtyim/following{/other_user}","gists_url":"https://api.github.com/users/chtyim/gists{/gist_id}","starred_url":"https://api.github.com/users/chtyim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chtyim/subscriptions","organizations_url":"https://api.github.com/users/chtyim/orgs","repos_url":"https://api.github.com/users/chtyim/repos","events_url":"https://api.github.com/users/chtyim/events{/privacy}","received_events_url":"https://api.github.com/users/chtyim/received_events","type":"User","site_admin":false},"assignees":[{"login":"chtyim","id":885032,"avatar_url":"https://avatars.githubusercontent.com/u/885032?v=3","gravatar_id":"","url":"https://api.github.com/users/chtyim","html_url":"https://github.com/chtyim","followers_url":"https://api.github.com/users/chtyim/followers","following_url":"https://api.github.com/users/chtyim/following{/other_user}","gists_url":"https://api.github.com/users/chtyim/gists{/gist_id}","starred_url":"https://api.github.com/users/chtyim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chtyim/subscriptions","organizations_url":"https://api.github.com/users/chtyim/orgs","repos_url":"https://api.github.com/users/chtyim/repos","events_url":"https://api.github.com/users/chtyim/events{/privacy}","received_events_url":"https://api.github.com/users/chtyim/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/caskdata/cdap/milestones/25","html_url":"https://github.com/caskdata/cdap/milestones/3.5","labels_url":"https://api.github.com/repos/caskdata/cdap/milestones/25/labels","id":1745860,"number":25,"title":"3.5","description":null,"creator":{"login":"rohitsinha54","id":1472867,"avatar_url":"https://avatars.githubusercontent.com/u/1472867?v=3","gravatar_id":"","url":"https://api.github.com/users/rohitsinha54","html_url":"https://github.com/rohitsinha54","followers_url":"https://api.github.com/users/rohitsinha54/followers","following_url":"https://api.github.com/users/rohitsinha54/following{/other_user}","gists_url":"https://api.github.com/users/rohitsinha54/gists{/gist_id}","starred_url":"https://api.github.com/users/rohitsinha54/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohitsinha54/subscriptions","organizations_url":"https://api.github.com/users/rohitsinha54/orgs","repos_url":"https://api.github.com/users/rohitsinha54/repos","events_url":"https://api.github.com/users/rohitsinha54/events{/privacy}","received_events_url":"https://api.github.com/users/rohitsinha54/received_events","type":"User","site_admin":false},"open_issues":10,"closed_issues":50,"state":"open","created_at":"2016-05-03T18:02:56Z","updated_at":"2016-07-16T22:38:49Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/caskdata/cdap/pulls/6009/commits","review_comments_url":"https://api.github.com/repos/caskdata/cdap/pulls/6009/comments","review_comment_url":"https://api.github.com/repos/caskdata/cdap/pulls/comments{/number}","comments_url":"https://api.github.com/repos/caskdata/cdap/issues/6009/comments","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/ed872c2cfba757c261dbce81183549eda22ddf65","head":{"label":"caskdata:feature/CDAP-6154-cust-ns-loc-map","ref":"feature/CDAP-6154-cust-ns-loc-map","sha":"ed872c2cfba757c261dbce81183549eda22ddf65","user":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"repo":{"id":22542759,"name":"cdap","full_name":"caskdata/cdap","owner":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/caskdata/cdap","description":"Cask Data Application Platform (CDAP)","fork":false,"url":"https://api.github.com/repos/caskdata/cdap","forks_url":"https://api.github.com/repos/caskdata/cdap/forks","keys_url":"https://api.github.com/repos/caskdata/cdap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caskdata/cdap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caskdata/cdap/teams","hooks_url":"https://api.github.com/repos/caskdata/cdap/hooks","issue_events_url":"https://api.github.com/repos/caskdata/cdap/issues/events{/number}","events_url":"https://api.github.com/repos/caskdata/cdap/events","assignees_url":"https://api.github.com/repos/caskdata/cdap/assignees{/user}","branches_url":"https://api.github.com/repos/caskdata/cdap/branches{/branch}","tags_url":"https://api.github.com/repos/caskdata/cdap/tags","blobs_url":"https://api.github.com/repos/caskdata/cdap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caskdata/cdap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caskdata/cdap/git/refs{/sha}","trees_url":"https://api.github.com/repos/caskdata/cdap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/{sha}","languages_url":"https://api.github.com/repos/caskdata/cdap/languages","stargazers_url":"https://api.github.com/repos/caskdata/cdap/stargazers","contributors_url":"https://api.github.com/repos/caskdata/cdap/contributors","subscribers_url":"https://api.github.com/repos/caskdata/cdap/subscribers","subscription_url":"https://api.github.com/repos/caskdata/cdap/subscription","commits_url":"https://api.github.com/repos/caskdata/cdap/commits{/sha}","git_commits_url":"https://api.github.com/repos/caskdata/cdap/git/commits{/sha}","comments_url":"https://api.github.com/repos/caskdata/cdap/comments{/number}","issue_comment_url":"https://api.github.com/repos/caskdata/cdap/issues/comments{/number}","contents_url":"https://api.github.com/repos/caskdata/cdap/contents/{+path}","compare_url":"https://api.github.com/repos/caskdata/cdap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caskdata/cdap/merges","archive_url":"https://api.github.com/repos/caskdata/cdap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caskdata/cdap/downloads","issues_url":"https://api.github.com/repos/caskdata/cdap/issues{/number}","pulls_url":"https://api.github.com/repos/caskdata/cdap/pulls{/number}","milestones_url":"https://api.github.com/repos/caskdata/cdap/milestones{/number}","notifications_url":"https://api.github.com/repos/caskdata/cdap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caskdata/cdap/labels{/name}","releases_url":"https://api.github.com/repos/caskdata/cdap/releases{/id}","deployments_url":"https://api.github.com/repos/caskdata/cdap/deployments","created_at":"2014-08-02T09:00:10Z","updated_at":"2016-07-16T03:40:41Z","pushed_at":"2016-07-16T22:38:50Z","git_url":"git://github.com/caskdata/cdap.git","ssh_url":"git@github.com:caskdata/cdap.git","clone_url":"https://github.com/caskdata/cdap.git","svn_url":"https://github.com/caskdata/cdap","homepage":"http://cdap.io","size":623832,"stargazers_count":135,"watchers_count":135,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":48,"mirror_url":null,"open_issues_count":30,"forks":48,"open_issues":30,"watchers":135,"default_branch":"develop"}},"base":{"label":"caskdata:develop","ref":"develop","sha":"466c4520528f3347bd244075ab1d59368a2d87a4","user":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"repo":{"id":22542759,"name":"cdap","full_name":"caskdata/cdap","owner":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/caskdata/cdap","description":"Cask Data Application Platform (CDAP)","fork":false,"url":"https://api.github.com/repos/caskdata/cdap","forks_url":"https://api.github.com/repos/caskdata/cdap/forks","keys_url":"https://api.github.com/repos/caskdata/cdap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caskdata/cdap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caskdata/cdap/teams","hooks_url":"https://api.github.com/repos/caskdata/cdap/hooks","issue_events_url":"https://api.github.com/repos/caskdata/cdap/issues/events{/number}","events_url":"https://api.github.com/repos/caskdata/cdap/events","assignees_url":"https://api.github.com/repos/caskdata/cdap/assignees{/user}","branches_url":"https://api.github.com/repos/caskdata/cdap/branches{/branch}","tags_url":"https://api.github.com/repos/caskdata/cdap/tags","blobs_url":"https://api.github.com/repos/caskdata/cdap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caskdata/cdap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caskdata/cdap/git/refs{/sha}","trees_url":"https://api.github.com/repos/caskdata/cdap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/{sha}","languages_url":"https://api.github.com/repos/caskdata/cdap/languages","stargazers_url":"https://api.github.com/repos/caskdata/cdap/stargazers","contributors_url":"https://api.github.com/repos/caskdata/cdap/contributors","subscribers_url":"https://api.github.com/repos/caskdata/cdap/subscribers","subscription_url":"https://api.github.com/repos/caskdata/cdap/subscription","commits_url":"https://api.github.com/repos/caskdata/cdap/commits{/sha}","git_commits_url":"https://api.github.com/repos/caskdata/cdap/git/commits{/sha}","comments_url":"https://api.github.com/repos/caskdata/cdap/comments{/number}","issue_comment_url":"https://api.github.com/repos/caskdata/cdap/issues/comments{/number}","contents_url":"https://api.github.com/repos/caskdata/cdap/contents/{+path}","compare_url":"https://api.github.com/repos/caskdata/cdap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caskdata/cdap/merges","archive_url":"https://api.github.com/repos/caskdata/cdap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caskdata/cdap/downloads","issues_url":"https://api.github.com/repos/caskdata/cdap/issues{/number}","pulls_url":"https://api.github.com/repos/caskdata/cdap/pulls{/number}","milestones_url":"https://api.github.com/repos/caskdata/cdap/milestones{/number}","notifications_url":"https://api.github.com/repos/caskdata/cdap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caskdata/cdap/labels{/name}","releases_url":"https://api.github.com/repos/caskdata/cdap/releases{/id}","deployments_url":"https://api.github.com/repos/caskdata/cdap/deployments","created_at":"2014-08-02T09:00:10Z","updated_at":"2016-07-16T03:40:41Z","pushed_at":"2016-07-16T22:38:50Z","git_url":"git://github.com/caskdata/cdap.git","ssh_url":"git@github.com:caskdata/cdap.git","clone_url":"https://github.com/caskdata/cdap.git","svn_url":"https://github.com/caskdata/cdap","homepage":"http://cdap.io","size":623832,"stargazers_count":135,"watchers_count":135,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":48,"mirror_url":null,"open_issues_count":30,"forks":48,"open_issues":30,"watchers":135,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/6009"},"html":{"href":"https://github.com/caskdata/cdap/pull/6009"},"issue":{"href":"https://api.github.com/repos/caskdata/cdap/issues/6009"},"comments":{"href":"https://api.github.com/repos/caskdata/cdap/issues/6009/comments"},"review_comments":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/6009/comments"},"review_comment":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/6009/commits"},"statuses":{"href":"https://api.github.com/repos/caskdata/cdap/statuses/ed872c2cfba757c261dbce81183549eda22ddf65"}}}}
{"actor":{"display_login":"bdmogal"}}