{"action":"created","comment":{"url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/comments/29568063","id":29568063,"diff_hunk":"@@ -0,0 +1,322 @@\n+/*\n+ * Copyright (c) 2008-2015, Hazelcast, Inc. 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+ * 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+\n+package com.hazelcast.config;\n+\n+import com.hazelcast.spi.annotation.Beta;\n+\n+import static com.hazelcast.config.InMemoryFormat.NATIVE;\n+import static com.hazelcast.util.Preconditions.checkAsyncBackupCount;\n+import static com.hazelcast.util.Preconditions.checkBackupCount;\n+import static com.hazelcast.util.Preconditions.checkFalse;\n+import static com.hazelcast.util.Preconditions.checkNotNegative;\n+import static com.hazelcast.util.Preconditions.checkNotNull;\n+import static com.hazelcast.util.Preconditions.checkPositive;\n+\n+/**\n+ * Contains the configuration for the {@link com.hazelcast.ringbuffer.Ringbuffer}.\n+ * <p/>\n+ * The RingBuffer is currently not a distributed data-structure, so its content will be fully stored on a single member\n+ * in the cluster and its backup in another member in the cluster.\n+ */\n+@Beta\n+public class RingbufferConfig {\n+\n+    /**\n+     * Default value of capacity of the RingBuffer.\n+     */\n+    public static final int DEFAULT_CAPACITY = 100 * 1000;\n+    /**\n+     * Default value of synchronous backup count\n+     */\n+    public static final int DEFAULT_SYNC_BACKUP_COUNT = 1;\n+    /**\n+     * Default value of asynchronous backup count\n+     */\n+    public static final int DEFAULT_ASYNC_BACKUP_COUNT = 0;\n+    /**\n+     * Default value for the retention period.\n+     */\n+    public static final int DEFAULT_RETENTION_SECONDS = 30;\n+    /**\n+     * Default value for the InMemoryFormat.\n+     */\n+    public static final InMemoryFormat DEFAULT_IN_MEMORY_FORMAT = InMemoryFormat.BINARY;\n+\n+    private String name;\n+    private int capacity = DEFAULT_CAPACITY;\n+    private int backupCount = DEFAULT_SYNC_BACKUP_COUNT;\n+    private int asyncBackupCount = DEFAULT_ASYNC_BACKUP_COUNT;\n+    private int retentionSeconds = DEFAULT_RETENTION_SECONDS;\n+    private InMemoryFormat inMemoryFormat = DEFAULT_IN_MEMORY_FORMAT;\n+\n+    /**\n+     * Creates a RingbufferConfig with the provided name.\n+     *\n+     * @param name the name\n+     * @throws java.lang.NullPointerException if name is null\n+     */\n+    public RingbufferConfig(String name) {\n+        this.name = checkNotNull(name, \"name can't be null\");\n+    }\n+\n+    /**\n+     * Clones a RingbufferConfig\n+     *\n+     * @param config the ringbuffer config to clone\n+     * @throws java.lang.NullPointerException if config is null\n+     */\n+    public RingbufferConfig(RingbufferConfig config) {\n+        checkNotNull(config, \"config can't be null\");\n+        this.name = config.name;\n+        this.capacity = config.capacity;\n+        this.backupCount = config.backupCount;\n+        this.asyncBackupCount = config.asyncBackupCount;\n+        this.retentionSeconds = config.retentionSeconds;\n+        this.inMemoryFormat = config.inMemoryFormat;\n+    }\n+\n+    /**\n+     * Creates a new RingbufferConfig by cloning an existing config and overriding the name.\n+     *\n+     * @param name   the new name\n+     * @param config the config.\n+     * @throws java.lang.NullPointerException if name or config is null.\n+     */\n+    public RingbufferConfig(String name, RingbufferConfig config) {\n+        this(config);\n+        this.name = checkNotNull(name, \"name can't be null\");\n+    }\n+\n+\n+    /**\n+     * Returns the name of the ringbuffer.\n+     *\n+     * @return the name of the ringbuffer.\n+     */\n+    public String getName() {\n+        return name;\n+    }\n+\n+\n+    /**\n+     * Gets the capacity of the ringbuffer.\n+     * <p/>\n+     * The capacity is the total number of items in the ringbuffer. The items will remain in the ringbuffer, but the oldest items\n+     * will eventually be be overwritten by the newest items.\n+     * <p/>\n+     * In the future we'll add more advanced policies e.g. based on memory usage or lifespan.\n+     *\n+     * @return the capacity.\n+     */\n+    public int getCapacity() {\n+        return capacity;\n+    }\n+\n+    /**\n+     * Sets the capacity of the ringbuffer.\n+     *\n+     * @param capacity the capacity.\n+     * @return the updated Config.\n+     * @throws java.lang.IllegalArgumentException if capacity smaller than 1.\n+     * @see #getCapacity()\n+     */\n+    public RingbufferConfig setCapacity(int capacity) {\n+        checkPositive(capacity, \"capacity can't be smaller than 1\");\n+        this.capacity = capacity;\n+        return this;\n+    }\n+\n+    /**\n+     * Gets the number of synchronous backups.\n+     *\n+     * @return number of synchronous backups.\n+     */\n+    public int getBackupCount() {\n+        return backupCount;\n+    }\n+\n+    /**\n+     * Sets the number of synchronous backups.\n+     *\n+     * @param backupCount the number of synchronous backups to set\n+     * @return the updated SemaphoreConfig\n+     * @throws IllegalArgumentException if backupCount smaller than 0,\n+     *                                  or larger than the maximum number of backup\n+     *                                  or the sum of the backups and async backups is larger than the maximum number of backups\n+     * @see #setAsyncBackupCount(int)\n+     * @see #getBackupCount()\n+     */\n+    public RingbufferConfig setBackupCount(int backupCount) {\n+        this.backupCount = checkBackupCount(backupCount, asyncBackupCount);\n+        return this;\n+    }\n+\n+    /**\n+     * Gets the number of asynchronous backups.\n+     *\n+     * @return the number of asynchronous backups.\n+     */\n+    public int getAsyncBackupCount() {\n+        return asyncBackupCount;\n+    }\n+\n+    /**\n+     * Sets the number of asynchronous backups. 0 means no backups\n+     *\n+     * @param asyncBackupCount the number of asynchronous synchronous backups to set\n+     * @return the updated SemaphoreConfig\n+     * @throws IllegalArgumentException if asyncBackupCount smaller than 0,\n+     *                                  or larger than the maximum number of backup\n+     *                                  or the sum of the backups and async backups is larger than the maximum number of backups\n+     * @see #setBackupCount(int)\n+     * @see #getAsyncBackupCount()\n+     */\n+    public RingbufferConfig setAsyncBackupCount(int asyncBackupCount) {\n+        this.asyncBackupCount = checkAsyncBackupCount(backupCount, asyncBackupCount);\n+        return this;\n+    }\n+\n+    /**\n+     * Returns the total number of backups: backupCount plus asyncBackupCount.\n+     *\n+     * @return the total number of backups: backupCount plus asyncBackupCount\n+     */\n+    public int getTotalBackupCount() {\n+        return backupCount + asyncBackupCount;\n+    }\n+\n+    /**\n+     * Creates a readonly copy of this RingbufferConfig.\n+     *\n+     * @return the readonly copy.\n+     */\n+    public RingbufferConfig getAsReadOnly() {\n+        return new RingbufferConfigReadonly(this);\n+    }\n+\n+    /**\n+     * Gets the retention in seconds.\n+     *\n+     * @return the retention in seconds. Returns 0 if there is no retention.\n+     */\n+    public int getRetentionSeconds() {\n+        return retentionSeconds;\n+    }\n+\n+    /**\n+     * Sets the retention in seconds.\n+     *\n+     * Retention is the time the ringbuffer is going to retain items before deleting them.\n+     *\n+     * Retention can also be disabled by setting retentionSeconds to 0. It means that items won't get removed because they\n+     * retire. They will only overwrite. This means that when retention is disabled, that after tail did a full loop in the ring\n+     * that the size will always be equal to the capacity.\n+     *\n+     * @param retentionSeconds the retention period in seconds\n+     * @return the updated RingbufferConfig\n+     * @throws IllegalArgumentException if retentionSeconds smaller than 0.\n+     */\n+    public RingbufferConfig setRetentionSeconds(int retentionSeconds) {\n+        this.retentionSeconds = checkNotNegative(retentionSeconds, \"retention can't be smaller than 0\");\n+        return this;\n+    }\n+\n+    /**\n+     * Gets the InMemoryFormat.\n+     *\n+     * @return the InMemoryFormat.\n+     */\n+    public InMemoryFormat getInMemoryFormat() {\n+        return inMemoryFormat;\n+    }\n+\n+    /**\n+     * Sets the InMemoryFormat.\n+     *\n+     * Setting the InMemoryFormat controls format of storing an item in the ringbuffer:\n+     * <ol>\n+     *     <li>{@link InMemoryFormat#OBJECT}: the item is stored in deserialized format (so a regular object)</li>\n+     *     <li>{@link InMemoryFormat#BINARY}: the item is stored in serialized format (so a is binary blob) </li>\n+     * </ol>\n+     *\n+     * The default is binary. The object InMemoryFormat is useful when:\n+     * <ol>\n+     *     <li>of the object stored in object format has a smaller footprint than in binary format</li>\n+     *     <li>if there are readers using a filter. Since for every filter invocation, the object needs to be available in\n+     *     object format.</li>\n+     * </ol>\n+     *\n+     * @param inMemoryFormat the new in memory format.\n+     * @return the updated Config.\n+     * @throws NullPointerException if inMemoryFormat is null.\n+     * @throws IllegalArgumentException if {@link InMemoryFormat#NATIVE} in memory format is selected.\n+     */\n+    public RingbufferConfig setInMemoryFormat(InMemoryFormat inMemoryFormat) {\n+        checkNotNull(inMemoryFormat, \"inMemoryFormat can't be null\");\n+        checkFalse(inMemoryFormat == NATIVE, \"InMemoryFormat \" + NATIVE + \" is not support\");","path":"hazelcast/src/main/java/com/hazelcast/config/RingbufferConfig.java","position":270,"original_position":270,"commit_id":"46ef7f2aa9261a2f814a29543a0cf0a6cf827a14","original_commit_id":"46ef7f2aa9261a2f814a29543a0cf0a6cf827a14","user":{"login":"pveentjer","id":105243,"avatar_url":"https://avatars.githubusercontent.com/u/105243?v=3","gravatar_id":"","url":"https://api.github.com/users/pveentjer","html_url":"https://github.com/pveentjer","followers_url":"https://api.github.com/users/pveentjer/followers","following_url":"https://api.github.com/users/pveentjer/following{/other_user}","gists_url":"https://api.github.com/users/pveentjer/gists{/gist_id}","starred_url":"https://api.github.com/users/pveentjer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pveentjer/subscriptions","organizations_url":"https://api.github.com/users/pveentjer/orgs","repos_url":"https://api.github.com/users/pveentjer/repos","events_url":"https://api.github.com/users/pveentjer/events{/privacy}","received_events_url":"https://api.github.com/users/pveentjer/received_events","type":"User","site_admin":false},"body":"done","created_at":"2015-05-04T06:44:01Z","updated_at":"2015-05-04T06:44:01Z","html_url":"https://github.com/hazelcast/hazelcast/pull/4773#discussion_r29568063","pull_request_url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773","_links":{"self":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/comments/29568063"},"html":{"href":"https://github.com/hazelcast/hazelcast/pull/4773#discussion_r29568063"},"pull_request":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773"}}},"pull_request":{"url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773","id":30736634,"html_url":"https://github.com/hazelcast/hazelcast/pull/4773","diff_url":"https://github.com/hazelcast/hazelcast/pull/4773.diff","patch_url":"https://github.com/hazelcast/hazelcast/pull/4773.patch","issue_url":"https://api.github.com/repos/hazelcast/hazelcast/issues/4773","number":4773,"state":"open","locked":false,"title":"Ringbuffer","user":{"login":"pveentjer","id":105243,"avatar_url":"https://avatars.githubusercontent.com/u/105243?v=3","gravatar_id":"","url":"https://api.github.com/users/pveentjer","html_url":"https://github.com/pveentjer","followers_url":"https://api.github.com/users/pveentjer/followers","following_url":"https://api.github.com/users/pveentjer/following{/other_user}","gists_url":"https://api.github.com/users/pveentjer/gists{/gist_id}","starred_url":"https://api.github.com/users/pveentjer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pveentjer/subscriptions","organizations_url":"https://api.github.com/users/pveentjer/orgs","repos_url":"https://api.github.com/users/pveentjer/repos","events_url":"https://api.github.com/users/pveentjer/events{/privacy}","received_events_url":"https://api.github.com/users/pveentjer/received_events","type":"User","site_admin":false},"body":"This is a cleaned up PR. The reliable topic has moved to its own PR.","created_at":"2015-03-09T05:10:58Z","updated_at":"2015-05-04T06:44:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b16b61192ed6bb53fb1bf28bb70c623308ee0f6a","assignee":null,"milestone":{"url":"https://api.github.com/repos/hazelcast/hazelcast/milestones/55","html_url":"https://github.com/hazelcast/hazelcast/milestones/3.5","labels_url":"https://api.github.com/repos/hazelcast/hazelcast/milestones/55/labels","id":819785,"number":55,"title":"3.5","description":null,"creator":{"login":"sancar","id":570462,"avatar_url":"https://avatars.githubusercontent.com/u/570462?v=3","gravatar_id":"","url":"https://api.github.com/users/sancar","html_url":"https://github.com/sancar","followers_url":"https://api.github.com/users/sancar/followers","following_url":"https://api.github.com/users/sancar/following{/other_user}","gists_url":"https://api.github.com/users/sancar/gists{/gist_id}","starred_url":"https://api.github.com/users/sancar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sancar/subscriptions","organizations_url":"https://api.github.com/users/sancar/orgs","repos_url":"https://api.github.com/users/sancar/repos","events_url":"https://api.github.com/users/sancar/events{/privacy}","received_events_url":"https://api.github.com/users/sancar/received_events","type":"User","site_admin":false},"open_issues":125,"closed_issues":487,"state":"open","created_at":"2014-10-09T13:04:53Z","updated_at":"2015-05-04T06:42:56Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773/commits","review_comments_url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773/comments","review_comment_url":"https://api.github.com/repos/hazelcast/hazelcast/pulls/comments{/number}","comments_url":"https://api.github.com/repos/hazelcast/hazelcast/issues/4773/comments","statuses_url":"https://api.github.com/repos/hazelcast/hazelcast/statuses/46ef7f2aa9261a2f814a29543a0cf0a6cf827a14","head":{"label":"pveentjer:feature/3.x/ringbuffer","ref":"feature/3.x/ringbuffer","sha":"46ef7f2aa9261a2f814a29543a0cf0a6cf827a14","user":{"login":"pveentjer","id":105243,"avatar_url":"https://avatars.githubusercontent.com/u/105243?v=3","gravatar_id":"","url":"https://api.github.com/users/pveentjer","html_url":"https://github.com/pveentjer","followers_url":"https://api.github.com/users/pveentjer/followers","following_url":"https://api.github.com/users/pveentjer/following{/other_user}","gists_url":"https://api.github.com/users/pveentjer/gists{/gist_id}","starred_url":"https://api.github.com/users/pveentjer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pveentjer/subscriptions","organizations_url":"https://api.github.com/users/pveentjer/orgs","repos_url":"https://api.github.com/users/pveentjer/repos","events_url":"https://api.github.com/users/pveentjer/events{/privacy}","received_events_url":"https://api.github.com/users/pveentjer/received_events","type":"User","site_admin":false},"repo":{"id":10990111,"name":"hazelcast","full_name":"pveentjer/hazelcast","owner":{"login":"pveentjer","id":105243,"avatar_url":"https://avatars.githubusercontent.com/u/105243?v=3","gravatar_id":"","url":"https://api.github.com/users/pveentjer","html_url":"https://github.com/pveentjer","followers_url":"https://api.github.com/users/pveentjer/followers","following_url":"https://api.github.com/users/pveentjer/following{/other_user}","gists_url":"https://api.github.com/users/pveentjer/gists{/gist_id}","starred_url":"https://api.github.com/users/pveentjer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pveentjer/subscriptions","organizations_url":"https://api.github.com/users/pveentjer/orgs","repos_url":"https://api.github.com/users/pveentjer/repos","events_url":"https://api.github.com/users/pveentjer/events{/privacy}","received_events_url":"https://api.github.com/users/pveentjer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pveentjer/hazelcast","description":"Open Source In-Memory Data Grid","fork":true,"url":"https://api.github.com/repos/pveentjer/hazelcast","forks_url":"https://api.github.com/repos/pveentjer/hazelcast/forks","keys_url":"https://api.github.com/repos/pveentjer/hazelcast/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pveentjer/hazelcast/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pveentjer/hazelcast/teams","hooks_url":"https://api.github.com/repos/pveentjer/hazelcast/hooks","issue_events_url":"https://api.github.com/repos/pveentjer/hazelcast/issues/events{/number}","events_url":"https://api.github.com/repos/pveentjer/hazelcast/events","assignees_url":"https://api.github.com/repos/pveentjer/hazelcast/assignees{/user}","branches_url":"https://api.github.com/repos/pveentjer/hazelcast/branches{/branch}","tags_url":"https://api.github.com/repos/pveentjer/hazelcast/tags","blobs_url":"https://api.github.com/repos/pveentjer/hazelcast/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pveentjer/hazelcast/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pveentjer/hazelcast/git/refs{/sha}","trees_url":"https://api.github.com/repos/pveentjer/hazelcast/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pveentjer/hazelcast/statuses/{sha}","languages_url":"https://api.github.com/repos/pveentjer/hazelcast/languages","stargazers_url":"https://api.github.com/repos/pveentjer/hazelcast/stargazers","contributors_url":"https://api.github.com/repos/pveentjer/hazelcast/contributors","subscribers_url":"https://api.github.com/repos/pveentjer/hazelcast/subscribers","subscription_url":"https://api.github.com/repos/pveentjer/hazelcast/subscription","commits_url":"https://api.github.com/repos/pveentjer/hazelcast/commits{/sha}","git_commits_url":"https://api.github.com/repos/pveentjer/hazelcast/git/commits{/sha}","comments_url":"https://api.github.com/repos/pveentjer/hazelcast/comments{/number}","issue_comment_url":"https://api.github.com/repos/pveentjer/hazelcast/issues/comments{/number}","contents_url":"https://api.github.com/repos/pveentjer/hazelcast/contents/{+path}","compare_url":"https://api.github.com/repos/pveentjer/hazelcast/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pveentjer/hazelcast/merges","archive_url":"https://api.github.com/repos/pveentjer/hazelcast/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pveentjer/hazelcast/downloads","issues_url":"https://api.github.com/repos/pveentjer/hazelcast/issues{/number}","pulls_url":"https://api.github.com/repos/pveentjer/hazelcast/pulls{/number}","milestones_url":"https://api.github.com/repos/pveentjer/hazelcast/milestones{/number}","notifications_url":"https://api.github.com/repos/pveentjer/hazelcast/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pveentjer/hazelcast/labels{/name}","releases_url":"https://api.github.com/repos/pveentjer/hazelcast/releases{/id}","created_at":"2013-06-27T07:15:08Z","updated_at":"2015-04-22T04:00:47Z","pushed_at":"2015-05-04T06:42:17Z","git_url":"git://github.com/pveentjer/hazelcast.git","ssh_url":"git@github.com:pveentjer/hazelcast.git","clone_url":"https://github.com/pveentjer/hazelcast.git","svn_url":"https://github.com/pveentjer/hazelcast","homepage":"www.hazelcast.com","size":71907,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"hazelcast:master","ref":"master","sha":"877e1106ac904cb78ba95cb32d454b71bedfe3ff","user":{"login":"hazelcast","id":1453152,"avatar_url":"https://avatars.githubusercontent.com/u/1453152?v=3","gravatar_id":"","url":"https://api.github.com/users/hazelcast","html_url":"https://github.com/hazelcast","followers_url":"https://api.github.com/users/hazelcast/followers","following_url":"https://api.github.com/users/hazelcast/following{/other_user}","gists_url":"https://api.github.com/users/hazelcast/gists{/gist_id}","starred_url":"https://api.github.com/users/hazelcast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hazelcast/subscriptions","organizations_url":"https://api.github.com/users/hazelcast/orgs","repos_url":"https://api.github.com/users/hazelcast/repos","events_url":"https://api.github.com/users/hazelcast/events{/privacy}","received_events_url":"https://api.github.com/users/hazelcast/received_events","type":"Organization","site_admin":false},"repo":{"id":3786237,"name":"hazelcast","full_name":"hazelcast/hazelcast","owner":{"login":"hazelcast","id":1453152,"avatar_url":"https://avatars.githubusercontent.com/u/1453152?v=3","gravatar_id":"","url":"https://api.github.com/users/hazelcast","html_url":"https://github.com/hazelcast","followers_url":"https://api.github.com/users/hazelcast/followers","following_url":"https://api.github.com/users/hazelcast/following{/other_user}","gists_url":"https://api.github.com/users/hazelcast/gists{/gist_id}","starred_url":"https://api.github.com/users/hazelcast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hazelcast/subscriptions","organizations_url":"https://api.github.com/users/hazelcast/orgs","repos_url":"https://api.github.com/users/hazelcast/repos","events_url":"https://api.github.com/users/hazelcast/events{/privacy}","received_events_url":"https://api.github.com/users/hazelcast/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hazelcast/hazelcast","description":"Open Source In-Memory Data Grid","fork":false,"url":"https://api.github.com/repos/hazelcast/hazelcast","forks_url":"https://api.github.com/repos/hazelcast/hazelcast/forks","keys_url":"https://api.github.com/repos/hazelcast/hazelcast/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hazelcast/hazelcast/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hazelcast/hazelcast/teams","hooks_url":"https://api.github.com/repos/hazelcast/hazelcast/hooks","issue_events_url":"https://api.github.com/repos/hazelcast/hazelcast/issues/events{/number}","events_url":"https://api.github.com/repos/hazelcast/hazelcast/events","assignees_url":"https://api.github.com/repos/hazelcast/hazelcast/assignees{/user}","branches_url":"https://api.github.com/repos/hazelcast/hazelcast/branches{/branch}","tags_url":"https://api.github.com/repos/hazelcast/hazelcast/tags","blobs_url":"https://api.github.com/repos/hazelcast/hazelcast/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hazelcast/hazelcast/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hazelcast/hazelcast/git/refs{/sha}","trees_url":"https://api.github.com/repos/hazelcast/hazelcast/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hazelcast/hazelcast/statuses/{sha}","languages_url":"https://api.github.com/repos/hazelcast/hazelcast/languages","stargazers_url":"https://api.github.com/repos/hazelcast/hazelcast/stargazers","contributors_url":"https://api.github.com/repos/hazelcast/hazelcast/contributors","subscribers_url":"https://api.github.com/repos/hazelcast/hazelcast/subscribers","subscription_url":"https://api.github.com/repos/hazelcast/hazelcast/subscription","commits_url":"https://api.github.com/repos/hazelcast/hazelcast/commits{/sha}","git_commits_url":"https://api.github.com/repos/hazelcast/hazelcast/git/commits{/sha}","comments_url":"https://api.github.com/repos/hazelcast/hazelcast/comments{/number}","issue_comment_url":"https://api.github.com/repos/hazelcast/hazelcast/issues/comments{/number}","contents_url":"https://api.github.com/repos/hazelcast/hazelcast/contents/{+path}","compare_url":"https://api.github.com/repos/hazelcast/hazelcast/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hazelcast/hazelcast/merges","archive_url":"https://api.github.com/repos/hazelcast/hazelcast/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hazelcast/hazelcast/downloads","issues_url":"https://api.github.com/repos/hazelcast/hazelcast/issues{/number}","pulls_url":"https://api.github.com/repos/hazelcast/hazelcast/pulls{/number}","milestones_url":"https://api.github.com/repos/hazelcast/hazelcast/milestones{/number}","notifications_url":"https://api.github.com/repos/hazelcast/hazelcast/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hazelcast/hazelcast/labels{/name}","releases_url":"https://api.github.com/repos/hazelcast/hazelcast/releases{/id}","created_at":"2012-03-21T12:25:18Z","updated_at":"2015-05-04T02:26:27Z","pushed_at":"2015-05-04T06:42:18Z","git_url":"git://github.com/hazelcast/hazelcast.git","ssh_url":"git@github.com:hazelcast/hazelcast.git","clone_url":"https://github.com/hazelcast/hazelcast.git","svn_url":"https://github.com/hazelcast/hazelcast","homepage":"www.hazelcast.com","size":139158,"stargazers_count":1098,"watchers_count":1098,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":527,"mirror_url":null,"open_issues_count":491,"forks":527,"open_issues":491,"watchers":1098,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773"},"html":{"href":"https://github.com/hazelcast/hazelcast/pull/4773"},"issue":{"href":"https://api.github.com/repos/hazelcast/hazelcast/issues/4773"},"comments":{"href":"https://api.github.com/repos/hazelcast/hazelcast/issues/4773/comments"},"review_comments":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773/comments"},"review_comment":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/hazelcast/hazelcast/pulls/4773/commits"},"statuses":{"href":"https://api.github.com/repos/hazelcast/hazelcast/statuses/46ef7f2aa9261a2f814a29543a0cf0a6cf827a14"}}}}