{"action":"created","comment":{"url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/comments/242453681","pull_request_review_id":185948866,"id":242453681,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MjQ1MzY4MQ==","diff_hunk":"@@ -4114,256 +2915,960 @@ public void reindexNodeByQuery(String query) throws IOException, AuthenticationE\n         }\n         finally\n         {\n-            if(request != null)\n-            {\n-                request.close();\n-            }\n-            \n-            if (refCounted != null)\n-            {\n-                refCounted.decref();\n-            }\n+            ofNullable(refCounted).ifPresent(RefCounted::decref);\n         }\n     }\n \n-    /* (non-Javadoc)\n-     * @see org.alfresco.solr.InformationServer#getUrl()\n-     */\n     @Override\n     public String getBaseUrl()\n     {\n         return baseUrl;\n     }\n \n-    /* (non-Javadoc)\n-     * @see org.alfresco.solr.InformationServer#getPort()\n-     */\n     @Override\n     public int getPort()\n     {\n         return port;\n     }\n \n-    /* (non-Javadoc)\n-     * @see org.alfresco.solr.InformationServer#getHostName()\n-     */\n     @Override\n     public String getHostName()\n     {\n        return hostName;\n     }\n \n+    @Override\n     public void setCleanContentTxnFloor(long cleanContentTxnFloor)\n     {\n-        this.cleanContentTxnFloor = cleanContentTxnFloor;\n+        // Nothing to be done here\n     }\n \n-    public void setCleanCascadeTxnFloor(long cleanCascadeTxnFloor) {\n-        this.cleanCascadeTxnFloor = cleanCascadeTxnFloor;\n+    @Override\n+    public void setCleanCascadeTxnFloor(long cleanCascadeTxnFloor)\n+    {\n+        // Nothing to be done here\n     }\n \n-\n-    class DocListCollector implements Collector, LeafCollector\n+    public SolrContentStore getSolrContentStore()\n     {\n-        private IntArrayList docs = new IntArrayList();\n-        private int docBase;\n-\n-        public IntArrayList getDocs()\n-        {\n-            return this.docs;\n-        }\n+        return solrContentStore;\n+    }\n \n-        public boolean needsScores() {\n-            return false;\n-        }\n+    public Properties getProps()\n+    {\n+        return props;\n+    }\n \n-        public LeafCollector getLeafCollector(LeafReaderContext context) {\n-            this.docBase = context.docBase;\n-            return this;\n-        }\n+    private void putTransactionState(UpdateRequestProcessor processor, SolrQueryRequest request, Transaction tx) throws IOException\n+    {\n+        SolrDocument txState = getState(core, request, \"TRACKER!STATE!TX\");\n+        String version = version(txState, FIELD_S_TXCOMMITTIME, FIELD_S_TXID, tx.getCommitTimeMs(), tx.getId());\n \n-        public void setScorer(Scorer scorer)\n+        if (version != null)\n         {\n+            SolrInputDocument input = new SolrInputDocument();\n+            input.addField(FIELD_SOLR4_ID, \"TRACKER!STATE!TX\");\n+            input.addField(FIELD_VERSION, version);\n+            input.addField(FIELD_S_TXID, tx.getId());\n+            input.addField(FIELD_S_INTXID, tx.getId());\n+            input.addField(FIELD_S_TXCOMMITTIME, tx.getCommitTimeMs());\n+            input.addField(FIELD_DOC_TYPE, DOC_TYPE_STATE);\n \n-        }\n-\n-        public void collect(int doc)\n-        {\n-            docs.add(doc + docBase);\n+            AddUpdateCommand cmd = new AddUpdateCommand(request);\n+            cmd.overwrite = true;\n+            cmd.solrDoc = input;\n+            processor.processAdd(cmd);\n         }\n     }\n \n-    class TxnCacheFilter extends DelegatingCollector\n+    private boolean isInIndexImpl(String ids)\n     {\n-\n-        private NumericDocValues currentLongs;\n-        private Map txnLRU;\n-\n-        public TxnCacheFilter(Map txnLRU)\n+        try (SolrQueryRequest request = newSolrQueryRequest())\n         {\n-            this.txnLRU = txnLRU;\n-        }\n+            SolrRequestHandler handler = core.getRequestHandler(REQUEST_HANDLER_GET);\n+            ModifiableSolrParams newParams =\n+                    new ModifiableSolrParams(request.getParams())\n+                            .set(\"ids\", ids);\n+            request.setParams(newParams);\n \n-        public void doSetNextReader(LeafReaderContext context) throws IOException\n-        {\n-            super.doSetNextReader(context);\n-            currentLongs = context.reader().getNumericDocValues(FIELD_INTXID);\n+            return executeQueryRequest(request, newSolrQueryResponse(), handler).getNumFound() > 0;\n         }\n+    }\n \n-        public void collect(int doc) throws IOException\n+    private void canUpdate()\n+    {\n+        activeTrackerThreadsLock.readLock().lock();\n+        try\n         {\n-            long txnId = currentLongs.get(doc);\n-\n-            //System.out.println(\"########### Floor Filter #############:\"+doc+\":\"+txnId);\n-\n-            if(!txnLRU.containsKey(txnId))\n+            if (!activeTrackerThreads.contains(Thread.currentThread().getId()))\n             {\n-                this.leafDelegate.collect(doc);\n+                throw new TrackerStateException(\"The trackers work was rolled back by another tracker error\");\n             }\n         }\n+        finally\n+        {\n+            activeTrackerThreadsLock.readLock().unlock();\n+        }\n     }\n \n-    class TxnFloorFilter extends DelegatingCollector\n+    private String baseUrl(Properties properties)\n     {\n+        return ofNullable(ConfigUtil.locateProperty(SOLR_BASEURL, properties.getProperty(SOLR_BASEURL)))\n+                .map(value -> (value.startsWith(\"/\") ? \"\" : \"/\") + value + \"/\" + core.getName() + \"/\")\n+                .orElse(null);\n+    }\n \n-        private NumericDocValues currentLongs;\n-        private long txnFloor;\n-        private Map txnCache;\n+    private int portNumber(Properties properties)\n+    {\n+        String portNumber =\n+                ofNullable(ConfigUtil.locateProperty(SOLR_PORT, properties.getProperty(SOLR_PORT)))\n+                        .filter(value -> value.trim().length() > 0)\n+                        .orElseGet(() -> {\n+                            String jettyPort = System.getProperty(\"jetty.port\");\n+                            LOGGER.debug(\"Using jetty.port \", jettyPort);\n+                            return jettyPort;\n+                        });\n \n+        return ofNullable(portNumber)\n+                .map(value -> {\n+                    try\n+                    {\n+                        return Integer.parseInt(value);\n+                    } catch (NumberFormatException exception)\n+                    {\n+                        LOGGER.error(\"Failed to find a valid solr.port number, the default value is in shared.properties\");\n+                        throw exception;\n+                    } })\n+                .orElse(0);\n+    }\n \n-        public TxnFloorFilter(long txnFloor, Map txnCache)\n+    private boolean isInIndex(long id, LRU cache, String fieldName, boolean populateCache, SolrCore core) throws IOException\n+    {\n+        if(cache.containsKey(id))\n         {\n-            this.txnCache = txnCache;\n-            this.txnFloor = txnFloor;\n+            return true;\n         }\n-\n-        public void doSetNextReader(LeafReaderContext context) throws IOException\n+        else\n         {\n-            super.doSetNextReader(context);\n-            currentLongs = context.reader().getNumericDocValues(FIELD_INTXID);\n+            RefCounted<SolrIndexSearcher> refCounted = null;\n+            try\n+            {\n+                if(populateCache)\n+                {\n+                    cache.put(id, null); // Safe to add this here because we reset this on rollback.\n+                }\n+                refCounted = core.getSearcher();\n+                SolrIndexSearcher searcher = refCounted.get();\n+                FieldType fieldType = searcher.getSchema().getField(fieldName).getType();\n+                TermQuery q = new TermQuery(new Term(fieldName, fieldType.readableToIndexed(Long.toString(id))));\n+                TopDocs topDocs = searcher.search(q, 1);\n+                return topDocs.totalHits > 0;\n+            }\n+            finally\n+            {\n+                ofNullable(refCounted).ifPresent(RefCounted::decref);\n+            }\n         }\n+    }\n \n-        public void collect(int doc) throws IOException\n+    private void lock(Object id) throws IOException\n+    {\n+        long startTime = System.currentTimeMillis();\n+        while(!lockRegistry.add(id))\n         {\n-            long txnId = currentLongs.get(doc);\n-\n-            //System.out.println(\"########### Floor Filter #############:\"+doc+\":\"+txnId);\n+            try\n+            {\n+                Thread.sleep(100);\n+            }\n+            catch (InterruptedException e)\n+            {\n+                // I don't think we are concerned with this exception.\n+            }\n \n-            if(txnId >= txnFloor)\n+            if(System.currentTimeMillis() - startTime > 120000)","path":"alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java","position":3977,"original_position":3977,"commit_id":"28bafdc7e872d9278b6052a2d67e2ad7c2006509","original_commit_id":"28bafdc7e872d9278b6052a2d67e2ad7c2006509","user":{"login":"tpage-alfresco","id":11535082,"node_id":"MDQ6VXNlcjExNTM1MDgy","avatar_url":"https://avatars3.githubusercontent.com/u/11535082?v=4","gravatar_id":"","url":"https://api.github.com/users/tpage-alfresco","html_url":"https://github.com/tpage-alfresco","followers_url":"https://api.github.com/users/tpage-alfresco/followers","following_url":"https://api.github.com/users/tpage-alfresco/following{/other_user}","gists_url":"https://api.github.com/users/tpage-alfresco/gists{/gist_id}","starred_url":"https://api.github.com/users/tpage-alfresco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tpage-alfresco/subscriptions","organizations_url":"https://api.github.com/users/tpage-alfresco/orgs","repos_url":"https://api.github.com/users/tpage-alfresco/repos","events_url":"https://api.github.com/users/tpage-alfresco/events{/privacy}","received_events_url":"https://api.github.com/users/tpage-alfresco/received_events","type":"User","site_admin":false},"body":"There's a constant for two minutes we could use at the top of this file.","created_at":"2018-12-18T09:07:01Z","updated_at":"2018-12-18T09:18:25Z","html_url":"https://github.com/Alfresco/SearchServices/pull/72#discussion_r242453681","pull_request_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/comments/242453681"},"html":{"href":"https://github.com/Alfresco/SearchServices/pull/72#discussion_r242453681"},"pull_request":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72"}}},"pull_request":{"url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72","id":237619863,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM3NjE5ODYz","html_url":"https://github.com/Alfresco/SearchServices/pull/72","diff_url":"https://github.com/Alfresco/SearchServices/pull/72.diff","patch_url":"https://github.com/Alfresco/SearchServices/pull/72.patch","issue_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/72","number":72,"state":"closed","locked":false,"title":"[ Search 1280 ] SolrInformationServer refactor","user":{"login":"agazzarini","id":7569632,"node_id":"MDQ6VXNlcjc1Njk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/7569632?v=4","gravatar_id":"","url":"https://api.github.com/users/agazzarini","html_url":"https://github.com/agazzarini","followers_url":"https://api.github.com/users/agazzarini/followers","following_url":"https://api.github.com/users/agazzarini/following{/other_user}","gists_url":"https://api.github.com/users/agazzarini/gists{/gist_id}","starred_url":"https://api.github.com/users/agazzarini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agazzarini/subscriptions","organizations_url":"https://api.github.com/users/agazzarini/orgs","repos_url":"https://api.github.com/users/agazzarini/repos","events_url":"https://api.github.com/users/agazzarini/events{/privacy}","received_events_url":"https://api.github.com/users/agazzarini/received_events","type":"User","site_admin":false},"body":"The PR contains a formal refactor of SolrInformationServer, including: \r\n\r\n- order and modifier (private, public) of member instances\r\n- formatting rules (e.g. curly braces on new line, spaces) \r\n- private methods moved to the bottom\r\n- unused members (methods / variables) removal\r\n- constants (e.g. CommonParams.Q) instead of redundant literals\r\n- unnecessary boxing / unboxing removal\r\n- generics\r\n- System.out removal\r\n- a logger utility for isolating / removing conditional statements within the class\r\n- compose methods for removing the most evident code duplications\r\n- minimal unit test \r\n\r\nThe PR will contain a lot of commits with a fine level of granularity, because after each change I executed the whole SearchServices test suite, in order to make sure everything was still working.  ","created_at":"2018-12-11T10:14:14Z","updated_at":"2018-12-18T09:18:24Z","closed_at":"2018-12-17T11:55:30Z","merged_at":"2018-12-17T11:55:30Z","merge_commit_sha":"269335d3acbc747b135ac8727242502d1c4fa449","assignee":{"login":"agazzarini","id":7569632,"node_id":"MDQ6VXNlcjc1Njk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/7569632?v=4","gravatar_id":"","url":"https://api.github.com/users/agazzarini","html_url":"https://github.com/agazzarini","followers_url":"https://api.github.com/users/agazzarini/followers","following_url":"https://api.github.com/users/agazzarini/following{/other_user}","gists_url":"https://api.github.com/users/agazzarini/gists{/gist_id}","starred_url":"https://api.github.com/users/agazzarini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agazzarini/subscriptions","organizations_url":"https://api.github.com/users/agazzarini/orgs","repos_url":"https://api.github.com/users/agazzarini/repos","events_url":"https://api.github.com/users/agazzarini/events{/privacy}","received_events_url":"https://api.github.com/users/agazzarini/received_events","type":"User","site_admin":false},"assignees":[{"login":"agazzarini","id":7569632,"node_id":"MDQ6VXNlcjc1Njk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/7569632?v=4","gravatar_id":"","url":"https://api.github.com/users/agazzarini","html_url":"https://github.com/agazzarini","followers_url":"https://api.github.com/users/agazzarini/followers","following_url":"https://api.github.com/users/agazzarini/following{/other_user}","gists_url":"https://api.github.com/users/agazzarini/gists{/gist_id}","starred_url":"https://api.github.com/users/agazzarini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agazzarini/subscriptions","organizations_url":"https://api.github.com/users/agazzarini/orgs","repos_url":"https://api.github.com/users/agazzarini/repos","events_url":"https://api.github.com/users/agazzarini/events{/privacy}","received_events_url":"https://api.github.com/users/agazzarini/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72/commits","review_comments_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72/comments","review_comment_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/72/comments","statuses_url":"https://api.github.com/repos/Alfresco/SearchServices/statuses/28bafdc7e872d9278b6052a2d67e2ad7c2006509","head":{"label":"Alfresco:fix/SEARCH-1280_informationserver_refactor","ref":"fix/SEARCH-1280_informationserver_refactor","sha":"28bafdc7e872d9278b6052a2d67e2ad7c2006509","user":{"login":"Alfresco","id":391127,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTEyNw==","avatar_url":"https://avatars2.githubusercontent.com/u/391127?v=4","gravatar_id":"","url":"https://api.github.com/users/Alfresco","html_url":"https://github.com/Alfresco","followers_url":"https://api.github.com/users/Alfresco/followers","following_url":"https://api.github.com/users/Alfresco/following{/other_user}","gists_url":"https://api.github.com/users/Alfresco/gists{/gist_id}","starred_url":"https://api.github.com/users/Alfresco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Alfresco/subscriptions","organizations_url":"https://api.github.com/users/Alfresco/orgs","repos_url":"https://api.github.com/users/Alfresco/repos","events_url":"https://api.github.com/users/Alfresco/events{/privacy}","received_events_url":"https://api.github.com/users/Alfresco/received_events","type":"Organization","site_admin":false},"repo":{"id":79112912,"node_id":"MDEwOlJlcG9zaXRvcnk3OTExMjkxMg==","name":"SearchServices","full_name":"Alfresco/SearchServices","private":false,"owner":{"login":"Alfresco","id":391127,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTEyNw==","avatar_url":"https://avatars2.githubusercontent.com/u/391127?v=4","gravatar_id":"","url":"https://api.github.com/users/Alfresco","html_url":"https://github.com/Alfresco","followers_url":"https://api.github.com/users/Alfresco/followers","following_url":"https://api.github.com/users/Alfresco/following{/other_user}","gists_url":"https://api.github.com/users/Alfresco/gists{/gist_id}","starred_url":"https://api.github.com/users/Alfresco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Alfresco/subscriptions","organizations_url":"https://api.github.com/users/Alfresco/orgs","repos_url":"https://api.github.com/users/Alfresco/repos","events_url":"https://api.github.com/users/Alfresco/events{/privacy}","received_events_url":"https://api.github.com/users/Alfresco/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Alfresco/SearchServices","description":"Alfresco Search Services","fork":false,"url":"https://api.github.com/repos/Alfresco/SearchServices","forks_url":"https://api.github.com/repos/Alfresco/SearchServices/forks","keys_url":"https://api.github.com/repos/Alfresco/SearchServices/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Alfresco/SearchServices/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Alfresco/SearchServices/teams","hooks_url":"https://api.github.com/repos/Alfresco/SearchServices/hooks","issue_events_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/events{/number}","events_url":"https://api.github.com/repos/Alfresco/SearchServices/events","assignees_url":"https://api.github.com/repos/Alfresco/SearchServices/assignees{/user}","branches_url":"https://api.github.com/repos/Alfresco/SearchServices/branches{/branch}","tags_url":"https://api.github.com/repos/Alfresco/SearchServices/tags","blobs_url":"https://api.github.com/repos/Alfresco/SearchServices/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Alfresco/SearchServices/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Alfresco/SearchServices/git/refs{/sha}","trees_url":"https://api.github.com/repos/Alfresco/SearchServices/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Alfresco/SearchServices/statuses/{sha}","languages_url":"https://api.github.com/repos/Alfresco/SearchServices/languages","stargazers_url":"https://api.github.com/repos/Alfresco/SearchServices/stargazers","contributors_url":"https://api.github.com/repos/Alfresco/SearchServices/contributors","subscribers_url":"https://api.github.com/repos/Alfresco/SearchServices/subscribers","subscription_url":"https://api.github.com/repos/Alfresco/SearchServices/subscription","commits_url":"https://api.github.com/repos/Alfresco/SearchServices/commits{/sha}","git_commits_url":"https://api.github.com/repos/Alfresco/SearchServices/git/commits{/sha}","comments_url":"https://api.github.com/repos/Alfresco/SearchServices/comments{/number}","issue_comment_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/comments{/number}","contents_url":"https://api.github.com/repos/Alfresco/SearchServices/contents/{+path}","compare_url":"https://api.github.com/repos/Alfresco/SearchServices/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Alfresco/SearchServices/merges","archive_url":"https://api.github.com/repos/Alfresco/SearchServices/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Alfresco/SearchServices/downloads","issues_url":"https://api.github.com/repos/Alfresco/SearchServices/issues{/number}","pulls_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls{/number}","milestones_url":"https://api.github.com/repos/Alfresco/SearchServices/milestones{/number}","notifications_url":"https://api.github.com/repos/Alfresco/SearchServices/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Alfresco/SearchServices/labels{/name}","releases_url":"https://api.github.com/repos/Alfresco/SearchServices/releases{/id}","deployments_url":"https://api.github.com/repos/Alfresco/SearchServices/deployments","created_at":"2017-01-16T11:42:38Z","updated_at":"2018-12-17T11:55:34Z","pushed_at":"2018-12-17T18:15:45Z","git_url":"git://github.com/Alfresco/SearchServices.git","ssh_url":"git@github.com:Alfresco/SearchServices.git","clone_url":"https://github.com/Alfresco/SearchServices.git","svn_url":"https://github.com/Alfresco/SearchServices","homepage":"","size":4248,"stargazers_count":8,"watchers_count":8,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"archived":false,"open_issues_count":6,"license":null,"forks":8,"open_issues":6,"watchers":8,"default_branch":"master"}},"base":{"label":"Alfresco:master","ref":"master","sha":"68d0d34a39a118fa87b53dd3d4163cfe175c321b","user":{"login":"Alfresco","id":391127,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTEyNw==","avatar_url":"https://avatars2.githubusercontent.com/u/391127?v=4","gravatar_id":"","url":"https://api.github.com/users/Alfresco","html_url":"https://github.com/Alfresco","followers_url":"https://api.github.com/users/Alfresco/followers","following_url":"https://api.github.com/users/Alfresco/following{/other_user}","gists_url":"https://api.github.com/users/Alfresco/gists{/gist_id}","starred_url":"https://api.github.com/users/Alfresco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Alfresco/subscriptions","organizations_url":"https://api.github.com/users/Alfresco/orgs","repos_url":"https://api.github.com/users/Alfresco/repos","events_url":"https://api.github.com/users/Alfresco/events{/privacy}","received_events_url":"https://api.github.com/users/Alfresco/received_events","type":"Organization","site_admin":false},"repo":{"id":79112912,"node_id":"MDEwOlJlcG9zaXRvcnk3OTExMjkxMg==","name":"SearchServices","full_name":"Alfresco/SearchServices","private":false,"owner":{"login":"Alfresco","id":391127,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTEyNw==","avatar_url":"https://avatars2.githubusercontent.com/u/391127?v=4","gravatar_id":"","url":"https://api.github.com/users/Alfresco","html_url":"https://github.com/Alfresco","followers_url":"https://api.github.com/users/Alfresco/followers","following_url":"https://api.github.com/users/Alfresco/following{/other_user}","gists_url":"https://api.github.com/users/Alfresco/gists{/gist_id}","starred_url":"https://api.github.com/users/Alfresco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Alfresco/subscriptions","organizations_url":"https://api.github.com/users/Alfresco/orgs","repos_url":"https://api.github.com/users/Alfresco/repos","events_url":"https://api.github.com/users/Alfresco/events{/privacy}","received_events_url":"https://api.github.com/users/Alfresco/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Alfresco/SearchServices","description":"Alfresco Search Services","fork":false,"url":"https://api.github.com/repos/Alfresco/SearchServices","forks_url":"https://api.github.com/repos/Alfresco/SearchServices/forks","keys_url":"https://api.github.com/repos/Alfresco/SearchServices/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Alfresco/SearchServices/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Alfresco/SearchServices/teams","hooks_url":"https://api.github.com/repos/Alfresco/SearchServices/hooks","issue_events_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/events{/number}","events_url":"https://api.github.com/repos/Alfresco/SearchServices/events","assignees_url":"https://api.github.com/repos/Alfresco/SearchServices/assignees{/user}","branches_url":"https://api.github.com/repos/Alfresco/SearchServices/branches{/branch}","tags_url":"https://api.github.com/repos/Alfresco/SearchServices/tags","blobs_url":"https://api.github.com/repos/Alfresco/SearchServices/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Alfresco/SearchServices/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Alfresco/SearchServices/git/refs{/sha}","trees_url":"https://api.github.com/repos/Alfresco/SearchServices/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Alfresco/SearchServices/statuses/{sha}","languages_url":"https://api.github.com/repos/Alfresco/SearchServices/languages","stargazers_url":"https://api.github.com/repos/Alfresco/SearchServices/stargazers","contributors_url":"https://api.github.com/repos/Alfresco/SearchServices/contributors","subscribers_url":"https://api.github.com/repos/Alfresco/SearchServices/subscribers","subscription_url":"https://api.github.com/repos/Alfresco/SearchServices/subscription","commits_url":"https://api.github.com/repos/Alfresco/SearchServices/commits{/sha}","git_commits_url":"https://api.github.com/repos/Alfresco/SearchServices/git/commits{/sha}","comments_url":"https://api.github.com/repos/Alfresco/SearchServices/comments{/number}","issue_comment_url":"https://api.github.com/repos/Alfresco/SearchServices/issues/comments{/number}","contents_url":"https://api.github.com/repos/Alfresco/SearchServices/contents/{+path}","compare_url":"https://api.github.com/repos/Alfresco/SearchServices/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Alfresco/SearchServices/merges","archive_url":"https://api.github.com/repos/Alfresco/SearchServices/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Alfresco/SearchServices/downloads","issues_url":"https://api.github.com/repos/Alfresco/SearchServices/issues{/number}","pulls_url":"https://api.github.com/repos/Alfresco/SearchServices/pulls{/number}","milestones_url":"https://api.github.com/repos/Alfresco/SearchServices/milestones{/number}","notifications_url":"https://api.github.com/repos/Alfresco/SearchServices/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Alfresco/SearchServices/labels{/name}","releases_url":"https://api.github.com/repos/Alfresco/SearchServices/releases{/id}","deployments_url":"https://api.github.com/repos/Alfresco/SearchServices/deployments","created_at":"2017-01-16T11:42:38Z","updated_at":"2018-12-17T11:55:34Z","pushed_at":"2018-12-17T18:15:45Z","git_url":"git://github.com/Alfresco/SearchServices.git","ssh_url":"git@github.com:Alfresco/SearchServices.git","clone_url":"https://github.com/Alfresco/SearchServices.git","svn_url":"https://github.com/Alfresco/SearchServices","homepage":"","size":4248,"stargazers_count":8,"watchers_count":8,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"archived":false,"open_issues_count":6,"license":null,"forks":8,"open_issues":6,"watchers":8,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72"},"html":{"href":"https://github.com/Alfresco/SearchServices/pull/72"},"issue":{"href":"https://api.github.com/repos/Alfresco/SearchServices/issues/72"},"comments":{"href":"https://api.github.com/repos/Alfresco/SearchServices/issues/72/comments"},"review_comments":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72/comments"},"review_comment":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Alfresco/SearchServices/pulls/72/commits"},"statuses":{"href":"https://api.github.com/repos/Alfresco/SearchServices/statuses/28bafdc7e872d9278b6052a2d67e2ad7c2006509"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"tpage-alfresco"}}