{"action":"created","comment":{"url":"https://api.github.com/repos/real-logic/Aeron/pulls/comments/29496771","id":29496771,"diff_hunk":"@@ -0,0 +1,302 @@\n+/*\n+ * Copyright 2015 Kaazing Corporation\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+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package uk.co.real_logic.aeron.tools;\n+\n+import java.io.FileInputStream;\n+import java.io.FileNotFoundException;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.util.Properties;\n+\n+import org.apache.commons.cli.CommandLine;\n+import org.apache.commons.cli.CommandLineParser;\n+import org.apache.commons.cli.GnuParser;\n+import org.apache.commons.cli.HelpFormatter;\n+import org.apache.commons.cli.Options;\n+import org.apache.commons.cli.ParseException;\n+\n+import uk.co.real_logic.aeron.driver.Configuration;\n+import uk.co.real_logic.agrona.concurrent.BackoffIdleStrategy;\n+import uk.co.real_logic.agrona.concurrent.IdleStrategy;\n+\n+/**\n+ * Created by bhorst on 4/10/15.\n+ */\n+public class MediaDriverOptions\n+{\n+    // Command line options for media driver\n+    private final Options options;\n+\n+    // Properties containing Aeron settings.\n+    private Properties properties;\n+\n+    // The 5 idle strategies available for the Media Driver\n+    private IdleStrategy conductorIdleStrategy;\n+    private IdleStrategy senderIdleStrategy;\n+    private IdleStrategy receiverIdleStrategy;\n+    private IdleStrategy sharedNetworkIdleStrategy;\n+    private IdleStrategy sharedIdleStrategy;\n+\n+    public MediaDriverOptions()\n+    {\n+        options = new Options()\n+                .addOption(\"p\", \"properties\", true, \"A properties file containing Aeron options.\")\n+                .addOption(\"h\", \"help\", false, \"Display help message.\")\n+                .addOption(\"c\", \"conductor\", true, \"IdleStrategy class for the conductor thread.\")\n+                .addOption(\"s\", \"sender\", true, \"IdleStrategy class for the sender thread.\")\n+                .addOption(\"r\", \"receiver\", true, \"IdleStrategy class for the receiver thread.\")\n+                .addOption(\"n\", \"network\", true, \"IdleStrategy class for the shared network thread.\")\n+                .addOption(\"a\", \"shared\", true, \"IdleStrategy class for the shared thread.\");\n+\n+        // Idle strategies are null by default (Aeron should use its default if we pass null)\n+        conductorIdleStrategy = null;\n+        senderIdleStrategy = null;\n+        receiverIdleStrategy = null;\n+        sharedNetworkIdleStrategy = null;\n+        sharedIdleStrategy = null;\n+        properties = null;\n+    }\n+\n+    /**\n+     * Parse command line arguments for MediaDriverTool and call the setter functions.\n+     * @param args Command line arguments.\n+     * @return 0 on success, 1 if application should call {@link #printHelp(String)}\n+     * @throws org.apache.commons.cli.ParseException On string parsing error.\n+     */\n+    public int parseArgs(final String[] args) throws ParseException\n+    {\n+        final CommandLineParser parser = new GnuParser();\n+        final CommandLine command = parser.parse(options, args);\n+\n+        if (command.hasOption(\"help\"))\n+        {\n+            // Inform application the user wants help message.\n+            return 1;\n+        }\n+\n+        if (command.hasOption(\"properties\"))\n+        {\n+            this.properties = parseProperties(command.getOptionValue(\"properties\"));\n+        }\n+        String defaultValue;\n+        defaultValue = properties == null ? \"null\" : properties.getProperty(\"aeron.tools.mediadriver.sender\");\n+        senderIdleStrategy = parseIdleStrategy(command.getOptionValue(\"sender\", defaultValue));\n+\n+        defaultValue = properties == null ? \"null\" : properties.getProperty(\"aeron.tools.mediadriver.receiver\");\n+        receiverIdleStrategy = parseIdleStrategy(command.getOptionValue(\"receiver\", defaultValue));\n+\n+        defaultValue = properties == null ? \"null\" : properties.getProperty(\"aeron.tools.mediadriver.network\");\n+        sharedNetworkIdleStrategy = parseIdleStrategy(command.getOptionValue(\"network\", defaultValue));\n+\n+        defaultValue = properties == null ? \"null\" : properties.getProperty(\"aeron.tools.mediadriver.shared\");\n+        sharedIdleStrategy = parseIdleStrategy(command.getOptionValue(\"shared\", defaultValue));\n+\n+        defaultValue = properties == null ? \"null\" : properties.getProperty(\"aeron.tools.mediadriver.conductor\");\n+        conductorIdleStrategy = parseIdleStrategy(command.getOptionValue(\"conductor\", defaultValue));\n+        return 0;\n+    }\n+\n+    public void printHelp(final String applicationName)\n+    {\n+        final HelpFormatter formatter = new HelpFormatter();\n+        formatter.printHelp(applicationName + \" [options]\", options);\n+    }\n+\n+    public IdleStrategy getConductorIdleStrategy()\n+    {\n+        return conductorIdleStrategy;\n+    }\n+\n+    public void setConductorIdleStrategy(final IdleStrategy conductorIdleStrategy)\n+    {\n+        this.conductorIdleStrategy = conductorIdleStrategy;\n+    }\n+\n+    public IdleStrategy getSenderIdleStrategy()\n+    {\n+        return senderIdleStrategy;\n+    }\n+\n+    public void setSenderIdleStrategy(final IdleStrategy senderIdleStrategy)\n+    {\n+        this.senderIdleStrategy = senderIdleStrategy;\n+    }\n+\n+    public IdleStrategy getReceiverIdleStrategy()\n+    {\n+        return receiverIdleStrategy;\n+    }\n+\n+    public void setReceiverIdleStrategy(final IdleStrategy receiverIdleStrategy)\n+    {\n+        this.receiverIdleStrategy = receiverIdleStrategy;\n+    }\n+\n+    public IdleStrategy getSharedNetworkIdleStrategy()\n+    {\n+        return sharedNetworkIdleStrategy;\n+    }\n+\n+    public void setSharedNetworkIdleStrategy(final IdleStrategy sharedNetworkIdleStrategy)\n+    {\n+        this.sharedNetworkIdleStrategy = sharedNetworkIdleStrategy;\n+    }\n+\n+    public IdleStrategy getSharedIdleStrategy()\n+    {\n+        return sharedIdleStrategy;\n+    }\n+\n+    public void setSharedIdleStrategy(final IdleStrategy sharedIdleStrategy)\n+    {\n+        this.sharedIdleStrategy = sharedIdleStrategy;\n+    }\n+\n+    public Properties getProperties()\n+    {\n+        return properties;\n+    }\n+\n+    public void setProperties(final Properties properties)\n+    {\n+        this.properties = properties;\n+    }\n+\n+    /*\n+    Argument parsing code\n+     */\n+\n+    /**\n+     * Helper function to be used as a spy for properties file input stream.\n+     * @param filename The properties file\n+     * @return InputStream for reading the file.\n+     * @throws FileNotFoundException\n+     */\n+    InputStream newFileInputStream(final String filename) throws FileNotFoundException\n+    {\n+        return new FileInputStream(filename);\n+    }\n+\n+    private Properties parseProperties(final String arg) throws ParseException\n+    {\n+        final Properties p = new Properties();\n+\n+        // InputStream is AutoClosable\n+        try (final InputStream inputStream = newFileInputStream(arg))\n+        {\n+            p.load(inputStream);\n+        }\n+        catch (final IOException ex)\n+        {\n+            throw new ParseException(ex.getMessage());\n+        }\n+        return p;\n+    }\n+\n+    private IdleStrategy parseIdleStrategy(final String arg) throws ParseException\n+    {\n+        if (arg == null || arg.equalsIgnoreCase(\"NULL\"))\n+        {\n+            return null;\n+        }\n+        IdleStrategy strategy;\n+        if (arg.startsWith(BackoffIdleStrategy.class.getName()))\n+        {\n+            // this is a special case for BackoffIdleStrategy that allows us to pass in\n+            // the constructor parameters. At some point, we may want to add a generic way to\n+            // do this, but for now BackoffIdleStrategy gets special treatment.\n+            strategy = parseBackoffIdleStrategy(arg);\n+        }\n+        else\n+        {\n+            // Use reflection to create the new IdleStrategy with no parameters.\n+            try\n+            {\n+                final Class clazz = Class.forName(arg);\n+                strategy = (IdleStrategy)clazz.newInstance();\n+            }\n+            catch (final ClassNotFoundException ex)","path":"aeron-tools/src/main/java/uk/co/real_logic/aeron/tools/MediaDriverOptions.java","position":231,"original_position":231,"commit_id":"7da4480cf7afb219e78d9fcb163d28d126a3da39","original_commit_id":"7da4480cf7afb219e78d9fcb163d28d126a3da39","user":{"login":"mjpt777","id":760524,"avatar_url":"https://avatars.githubusercontent.com/u/760524?v=3","gravatar_id":"","url":"https://api.github.com/users/mjpt777","html_url":"https://github.com/mjpt777","followers_url":"https://api.github.com/users/mjpt777/followers","following_url":"https://api.github.com/users/mjpt777/following{/other_user}","gists_url":"https://api.github.com/users/mjpt777/gists{/gist_id}","starred_url":"https://api.github.com/users/mjpt777/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjpt777/subscriptions","organizations_url":"https://api.github.com/users/mjpt777/orgs","repos_url":"https://api.github.com/users/mjpt777/repos","events_url":"https://api.github.com/users/mjpt777/events{/privacy}","received_events_url":"https://api.github.com/users/mjpt777/received_events","type":"User","site_admin":false},"body":"Could be improved with Java 7 multiple exception catch blocks.","created_at":"2015-05-01T10:42:07Z","updated_at":"2015-05-01T10:42:07Z","html_url":"https://github.com/real-logic/Aeron/pull/108#discussion_r29496771","pull_request_url":"https://api.github.com/repos/real-logic/Aeron/pulls/108","_links":{"self":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/comments/29496771"},"html":{"href":"https://github.com/real-logic/Aeron/pull/108#discussion_r29496771"},"pull_request":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/108"}}},"pull_request":{"url":"https://api.github.com/repos/real-logic/Aeron/pulls/108","id":34506965,"html_url":"https://github.com/real-logic/Aeron/pull/108","diff_url":"https://github.com/real-logic/Aeron/pull/108.diff","patch_url":"https://github.com/real-logic/Aeron/pull/108.patch","issue_url":"https://api.github.com/repos/real-logic/Aeron/issues/108","number":108,"state":"open","locked":false,"title":"Doc, packaging, and tools for Aeron","user":{"login":"strangelydim","id":2837339,"avatar_url":"https://avatars.githubusercontent.com/u/2837339?v=3","gravatar_id":"","url":"https://api.github.com/users/strangelydim","html_url":"https://github.com/strangelydim","followers_url":"https://api.github.com/users/strangelydim/followers","following_url":"https://api.github.com/users/strangelydim/following{/other_user}","gists_url":"https://api.github.com/users/strangelydim/gists{/gist_id}","starred_url":"https://api.github.com/users/strangelydim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strangelydim/subscriptions","organizations_url":"https://api.github.com/users/strangelydim/orgs","repos_url":"https://api.github.com/users/strangelydim/repos","events_url":"https://api.github.com/users/strangelydim/events{/privacy}","received_events_url":"https://api.github.com/users/strangelydim/received_events","type":"User","site_admin":false},"body":"This is a big one...  Tools for performance testing and graph generation, for testing Aeron in general with multiple publications/subscriptions and channels and sending/receiving threads, abuse testing, some new and updated sample apps, new doc, and a test plan.\r\n\r\nLet me know if changes need to be made before acceptance.  (Or if you'd like to accept first just to get this all in and make changes later via another pull request.)","created_at":"2015-04-30T22:21:43Z","updated_at":"2015-05-01T10:42:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"580f05f556b455c1ec796c39ea8bd4fef5095275","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/real-logic/Aeron/pulls/108/commits","review_comments_url":"https://api.github.com/repos/real-logic/Aeron/pulls/108/comments","review_comment_url":"https://api.github.com/repos/real-logic/Aeron/pulls/comments{/number}","comments_url":"https://api.github.com/repos/real-logic/Aeron/issues/108/comments","statuses_url":"https://api.github.com/repos/real-logic/Aeron/statuses/7da4480cf7afb219e78d9fcb163d28d126a3da39","head":{"label":"strangelydim:real-logic-pull-request","ref":"real-logic-pull-request","sha":"7da4480cf7afb219e78d9fcb163d28d126a3da39","user":{"login":"strangelydim","id":2837339,"avatar_url":"https://avatars.githubusercontent.com/u/2837339?v=3","gravatar_id":"","url":"https://api.github.com/users/strangelydim","html_url":"https://github.com/strangelydim","followers_url":"https://api.github.com/users/strangelydim/followers","following_url":"https://api.github.com/users/strangelydim/following{/other_user}","gists_url":"https://api.github.com/users/strangelydim/gists{/gist_id}","starred_url":"https://api.github.com/users/strangelydim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strangelydim/subscriptions","organizations_url":"https://api.github.com/users/strangelydim/orgs","repos_url":"https://api.github.com/users/strangelydim/repos","events_url":"https://api.github.com/users/strangelydim/events{/privacy}","received_events_url":"https://api.github.com/users/strangelydim/received_events","type":"User","site_admin":false},"repo":{"id":31387795,"name":"Aeron","full_name":"strangelydim/Aeron","owner":{"login":"strangelydim","id":2837339,"avatar_url":"https://avatars.githubusercontent.com/u/2837339?v=3","gravatar_id":"","url":"https://api.github.com/users/strangelydim","html_url":"https://github.com/strangelydim","followers_url":"https://api.github.com/users/strangelydim/followers","following_url":"https://api.github.com/users/strangelydim/following{/other_user}","gists_url":"https://api.github.com/users/strangelydim/gists{/gist_id}","starred_url":"https://api.github.com/users/strangelydim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strangelydim/subscriptions","organizations_url":"https://api.github.com/users/strangelydim/orgs","repos_url":"https://api.github.com/users/strangelydim/repos","events_url":"https://api.github.com/users/strangelydim/events{/privacy}","received_events_url":"https://api.github.com/users/strangelydim/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/strangelydim/Aeron","description":"Efficient reliable unicast and multicast message transport","fork":true,"url":"https://api.github.com/repos/strangelydim/Aeron","forks_url":"https://api.github.com/repos/strangelydim/Aeron/forks","keys_url":"https://api.github.com/repos/strangelydim/Aeron/keys{/key_id}","collaborators_url":"https://api.github.com/repos/strangelydim/Aeron/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/strangelydim/Aeron/teams","hooks_url":"https://api.github.com/repos/strangelydim/Aeron/hooks","issue_events_url":"https://api.github.com/repos/strangelydim/Aeron/issues/events{/number}","events_url":"https://api.github.com/repos/strangelydim/Aeron/events","assignees_url":"https://api.github.com/repos/strangelydim/Aeron/assignees{/user}","branches_url":"https://api.github.com/repos/strangelydim/Aeron/branches{/branch}","tags_url":"https://api.github.com/repos/strangelydim/Aeron/tags","blobs_url":"https://api.github.com/repos/strangelydim/Aeron/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/strangelydim/Aeron/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/strangelydim/Aeron/git/refs{/sha}","trees_url":"https://api.github.com/repos/strangelydim/Aeron/git/trees{/sha}","statuses_url":"https://api.github.com/repos/strangelydim/Aeron/statuses/{sha}","languages_url":"https://api.github.com/repos/strangelydim/Aeron/languages","stargazers_url":"https://api.github.com/repos/strangelydim/Aeron/stargazers","contributors_url":"https://api.github.com/repos/strangelydim/Aeron/contributors","subscribers_url":"https://api.github.com/repos/strangelydim/Aeron/subscribers","subscription_url":"https://api.github.com/repos/strangelydim/Aeron/subscription","commits_url":"https://api.github.com/repos/strangelydim/Aeron/commits{/sha}","git_commits_url":"https://api.github.com/repos/strangelydim/Aeron/git/commits{/sha}","comments_url":"https://api.github.com/repos/strangelydim/Aeron/comments{/number}","issue_comment_url":"https://api.github.com/repos/strangelydim/Aeron/issues/comments{/number}","contents_url":"https://api.github.com/repos/strangelydim/Aeron/contents/{+path}","compare_url":"https://api.github.com/repos/strangelydim/Aeron/compare/{base}...{head}","merges_url":"https://api.github.com/repos/strangelydim/Aeron/merges","archive_url":"https://api.github.com/repos/strangelydim/Aeron/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/strangelydim/Aeron/downloads","issues_url":"https://api.github.com/repos/strangelydim/Aeron/issues{/number}","pulls_url":"https://api.github.com/repos/strangelydim/Aeron/pulls{/number}","milestones_url":"https://api.github.com/repos/strangelydim/Aeron/milestones{/number}","notifications_url":"https://api.github.com/repos/strangelydim/Aeron/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/strangelydim/Aeron/labels{/name}","releases_url":"https://api.github.com/repos/strangelydim/Aeron/releases{/id}","created_at":"2015-02-26T20:42:10Z","updated_at":"2015-04-30T21:10:22Z","pushed_at":"2015-04-30T22:04:09Z","git_url":"git://github.com/strangelydim/Aeron.git","ssh_url":"git@github.com:strangelydim/Aeron.git","clone_url":"https://github.com/strangelydim/Aeron.git","svn_url":"https://github.com/strangelydim/Aeron","homepage":"","size":12518,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"real-logic:master","ref":"master","sha":"03bb1177b4ce0da3a93c593c268a503ecb4d89e7","user":{"login":"real-logic","id":5371471,"avatar_url":"https://avatars.githubusercontent.com/u/5371471?v=3","gravatar_id":"","url":"https://api.github.com/users/real-logic","html_url":"https://github.com/real-logic","followers_url":"https://api.github.com/users/real-logic/followers","following_url":"https://api.github.com/users/real-logic/following{/other_user}","gists_url":"https://api.github.com/users/real-logic/gists{/gist_id}","starred_url":"https://api.github.com/users/real-logic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/real-logic/subscriptions","organizations_url":"https://api.github.com/users/real-logic/orgs","repos_url":"https://api.github.com/users/real-logic/repos","events_url":"https://api.github.com/users/real-logic/events{/privacy}","received_events_url":"https://api.github.com/users/real-logic/received_events","type":"Organization","site_admin":false},"repo":{"id":16621659,"name":"Aeron","full_name":"real-logic/Aeron","owner":{"login":"real-logic","id":5371471,"avatar_url":"https://avatars.githubusercontent.com/u/5371471?v=3","gravatar_id":"","url":"https://api.github.com/users/real-logic","html_url":"https://github.com/real-logic","followers_url":"https://api.github.com/users/real-logic/followers","following_url":"https://api.github.com/users/real-logic/following{/other_user}","gists_url":"https://api.github.com/users/real-logic/gists{/gist_id}","starred_url":"https://api.github.com/users/real-logic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/real-logic/subscriptions","organizations_url":"https://api.github.com/users/real-logic/orgs","repos_url":"https://api.github.com/users/real-logic/repos","events_url":"https://api.github.com/users/real-logic/events{/privacy}","received_events_url":"https://api.github.com/users/real-logic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/real-logic/Aeron","description":"Efficient reliable unicast and multicast message transport","fork":false,"url":"https://api.github.com/repos/real-logic/Aeron","forks_url":"https://api.github.com/repos/real-logic/Aeron/forks","keys_url":"https://api.github.com/repos/real-logic/Aeron/keys{/key_id}","collaborators_url":"https://api.github.com/repos/real-logic/Aeron/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/real-logic/Aeron/teams","hooks_url":"https://api.github.com/repos/real-logic/Aeron/hooks","issue_events_url":"https://api.github.com/repos/real-logic/Aeron/issues/events{/number}","events_url":"https://api.github.com/repos/real-logic/Aeron/events","assignees_url":"https://api.github.com/repos/real-logic/Aeron/assignees{/user}","branches_url":"https://api.github.com/repos/real-logic/Aeron/branches{/branch}","tags_url":"https://api.github.com/repos/real-logic/Aeron/tags","blobs_url":"https://api.github.com/repos/real-logic/Aeron/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/real-logic/Aeron/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/real-logic/Aeron/git/refs{/sha}","trees_url":"https://api.github.com/repos/real-logic/Aeron/git/trees{/sha}","statuses_url":"https://api.github.com/repos/real-logic/Aeron/statuses/{sha}","languages_url":"https://api.github.com/repos/real-logic/Aeron/languages","stargazers_url":"https://api.github.com/repos/real-logic/Aeron/stargazers","contributors_url":"https://api.github.com/repos/real-logic/Aeron/contributors","subscribers_url":"https://api.github.com/repos/real-logic/Aeron/subscribers","subscription_url":"https://api.github.com/repos/real-logic/Aeron/subscription","commits_url":"https://api.github.com/repos/real-logic/Aeron/commits{/sha}","git_commits_url":"https://api.github.com/repos/real-logic/Aeron/git/commits{/sha}","comments_url":"https://api.github.com/repos/real-logic/Aeron/comments{/number}","issue_comment_url":"https://api.github.com/repos/real-logic/Aeron/issues/comments{/number}","contents_url":"https://api.github.com/repos/real-logic/Aeron/contents/{+path}","compare_url":"https://api.github.com/repos/real-logic/Aeron/compare/{base}...{head}","merges_url":"https://api.github.com/repos/real-logic/Aeron/merges","archive_url":"https://api.github.com/repos/real-logic/Aeron/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/real-logic/Aeron/downloads","issues_url":"https://api.github.com/repos/real-logic/Aeron/issues{/number}","pulls_url":"https://api.github.com/repos/real-logic/Aeron/pulls{/number}","milestones_url":"https://api.github.com/repos/real-logic/Aeron/milestones{/number}","notifications_url":"https://api.github.com/repos/real-logic/Aeron/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/real-logic/Aeron/labels{/name}","releases_url":"https://api.github.com/repos/real-logic/Aeron/releases{/id}","created_at":"2014-02-07T17:16:58Z","updated_at":"2015-05-01T08:20:50Z","pushed_at":"2015-05-01T07:52:56Z","git_url":"git://github.com/real-logic/Aeron.git","ssh_url":"git@github.com:real-logic/Aeron.git","clone_url":"https://github.com/real-logic/Aeron.git","svn_url":"https://github.com/real-logic/Aeron","homepage":"","size":20103,"stargazers_count":1015,"watchers_count":1015,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":121,"mirror_url":null,"open_issues_count":24,"forks":121,"open_issues":24,"watchers":1015,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/108"},"html":{"href":"https://github.com/real-logic/Aeron/pull/108"},"issue":{"href":"https://api.github.com/repos/real-logic/Aeron/issues/108"},"comments":{"href":"https://api.github.com/repos/real-logic/Aeron/issues/108/comments"},"review_comments":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/108/comments"},"review_comment":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/real-logic/Aeron/pulls/108/commits"},"statuses":{"href":"https://api.github.com/repos/real-logic/Aeron/statuses/7da4480cf7afb219e78d9fcb163d28d126a3da39"}}}}