{"action":"created","comment":{"url":"https://api.github.com/repos/pravega/pravega/pulls/comments/228868424","pull_request_review_id":169199983,"id":228868424,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyODg2ODQyNA==","diff_hunk":"@@ -11,362 +11,250 @@ You may obtain a copy of the License at\n \n Pravega is an open source storage primitive implementing **Streams** for continuous and unbounded data.\n \n-This page is an overview of the key concepts in Pravega.\n- See [Terminology](terminology.md) for a concise definition for many\n-Pravega concepts.\n+Next, we overview the key concepts in Pravega, for a concise definition of key terms of Pravega concepts, please see [Terminology](terminology.md) .\n \n ## Streams\n \n-Pravega organizes data into Streams.  A Stream is a durable, elastic, append-only, unbounded sequence of bytes that has good performance and strong consistency.  A Pravega Stream is\n-similar to but more flexible than a \"topic\" in popular message-oriented middleware such as [RabbitMQ](https://www.rabbitmq.com/) or [Apache Kafka](https://kafka.apache.org/). \n-\n-Pravega Streams are based on an append-only log data structure. By using\n-append-only logs, Pravega can rapidly ingest data into durable storage,\n-and support a large variety of application use cases such as stream processing using frameworks like [Flink](https://flink.apache.org), publish/subscribe\n-messaging, NoSQL databases such as a Time Series\n-Database (TSDB), workflow engines, event-oriented applications and many other\n-kinds of applications. \n-\n-When a developer creates a Stream in Pravega, s/he gives the Stream a meaningful\n-name such as \"IoTSensorData\" or \"WebApplicationLog20170330\".  The\n-Stream's name helps other developers understand the kind of data that is stored\n-in the Stream.  It is also worth noting that Pravega Stream names are organized\n-within a Scope.  A Scope is a string and should convey some sort of meaning to\n-developers such as \"FactoryMachines\" or \"HRWebsitelogs\".  A Scope acts as a\n-namespace for Stream names – all Stream names are unique within a Scope.\n- Therefore a Stream is uniquely identified by the combination of its Stream name\n-and Scope.  Scope can be used to segregate names by tenant (in a multi tenant\n-environment), by department in an organization, by geographic location or any\n-other categorization the developer chooses.\n-\n-A Stream is unbounded in size – Pravega itself does not impose any limits on how\n-many Events can be in a Stream or how many total bytes are stored in a Stream.\n-Pravega’s design horizontally scales from few machines to a whole datacenter’s capacity.\n-\n-To deal with a potentially large amount of data within a Stream, Pravega Streams\n-are divided into Stream Segments.  A Stream Segment is a shard, or partition of\n-the data within a Stream.  We go into a lot more detail on Stream Segments a bit\n-later in this document.  Stream Segments are an important concept, but we need\n-to introduce a few more things before we can dive into Stream Segments.\n-\n-Applications, such as a Java program reading from an IoT sensor, write data to\n-the tail (front) of the Stream.  Applications, such as a [Flink](https://flink.apache.org) analytics job,\n-can read from any point in the Stream. Lots of applications can read and write\n-the same Stream in parallel.  Elastic, scalable support for a large volume of\n-Streams, data and applications is at the heart of Pravega's design.  We will\n-get into more details about how applications read and write Streams a bit later\n-in this document when we detail Readers and Writers.\n+Pravega organizes data into Streams. A Stream is a durable, elastic, append-only, unbounded sequence of bytes having good performance and strong consistency.  A Pravega Stream is\n+similar to but more flexible than a \"topic\" in popular message oriented middleware such as [RabbitMQ](https://www.rabbitmq.com/) or [Apache Kafka](https://kafka.apache.org/).\n+\n+Pravega Streams are based on an append-only log data structure. By using the\n+append-only logs, Pravega rapidly ingests data into durable storage. It supports a large variety of application use cases:\n+\n+- Stream processing with frameworks like [Flink](https://flink.apache.org).\n+- Publish/subscribe messaging.\n+- NoSQL databases like Time Series Database (TSDB).\n+- Workflow engines.\n+- Event-oriented applications, etc. \n+\n+When a developer creates a Stream in Pravega, s/he gives the Stream a meaningful name such as \"IoTSensorData\" or \"WebApplicationLog20170330\" to inform about the type of data it stores. A Scope acts as a namespace for Stream names; all Stream names are unique within their Scope. Therefore, a Stream is uniquely identified by its combination of its name and Scope. Developers can also define meaningful Scope names, such as \"FactoryMachines\" or \"HRWebsitelogs\", to effectively organize collections of Streams. For example, Scopes can be used to classify Streams by tenant (in a multi tenant environment), by department in an organization or by geographic location.\n+\n+A Stream is unbounded in size – Pravega itself does not impose any limits on how many [**Events**](#events) can be in a Stream or how many total bytes are stored in a Stream. Pravega’s design horizontally scales from few machines to a whole datacenter’s capacity.\n+\n+Pravega Streams are divided into **Stream Segments**, to handle a large volume of data within a Stream. A Stream Segment is a shard, or partition of the data within a Stream. For more information, please see [Stream Segments](#stream-segments) section.\n+\n+Applications, such as a Java program reading from an IoT sensor, write data to the tail (front) of the Stream.  Applications, such as a [Flink](https://flink.apache.org) or Hadoop jobs, can read from any point in the Stream. Many applications can read and write the same Stream in parallel. Elasticity, scalability, support for large volume of Stream data and applications are the highlights of Pravega's design. More information on read and write operations in the Streams will be discussed in the [Readers and Writers](#writers-readers-reader-groups) section.\n \n ## Events\n \n-Pravega's client API allows applications to read and write data in Pravega in terms of an Event.  An Event is a\n-set of bytes within a Stream.  An Event could be as simple as a small\n-number of bytes containing a temperature reading from an IoT sensor composed of\n-a timestamp, a metric identifier and a value.  An Event could be web log data\n-associated with a user click on a website.  Events can be anything you can\n-represent as a set of bytes.  Applications make sense of Events using\n-standard Java serializers and deserializers, allowing them to read and write\n-objects in Pravega using similar techniques to reading and writing objects from\n+Pravega's client API allows applications to write and read data to/from Pravega in the form of **Event**. An Event is represented as a set of bytes within a Stream. For example, an Event could be as simple as a small number of bytes containing a temperature reading from an IoT sensor composed of\n+a timestamp, a metric identifier and a value. An Event could also be a web log data\n+associated with a user click on a website. Applications make sense of Events using\n+standard Java **serializers** and **deserializers**, allowing them to read and write\n+objects in Pravega similarly to reading and writing objects from\n files.\n \n-Every Event has a Routing Key.  A Routing Key allows Pravega\n-and application developers to reason about which Events are related.   A Routing\n-Key is just a string that developers use to group similar Events together. A\n-Routing Key is often derived from data naturally occurring in the Event,\n-something like \"customer-id\" or \"machine-id\", but it could also be some\n-artificial String. A\n-Routing Key could be something like a date (to group Events together by\n-time) or perhaps a Routing Key could be a IoT sensor id (to group Events by\n-machine).  A Routing Key is important to defining the precise read and write\n-semantics that Pravega guarantees, we will get into that detail a bit later,\n-after we have introduced a few more key concepts.\n+Every Event has a **Routing Key**. A Routing Key is a string used by developers to group similar Events. A Routing Key is often derived from data naturally occurring in the Event,\n+like \"customer-id\" or \"machine-id\" or a declared/user-defined string. For example, a Routing Key could be a date (to group Events together by time) or it could be a IoT sensor id (to group Events by\n+machine). A Routing Key is important in defining the read and write semantics that Pravega guarantees.\n \n-## Writers, Readers, ReaderGroups\n+## Writers, Readers, Reader Groups\n \n ![Reader Client](img/producer.consumer.client.new.png)\n \n Pravega provides a client library, written in Java, that implements a convenient\n-API for Writer and Reader applications to use.  The Pravega Java Client Library\n-encapsulates the wire protocol used to communicate between Pravega clients and\n-Pravega.\n+API for Writer and Reader applications.  The Pravega Java Client Library\n+encapsulates the wire protocol used to communicate Pravega clients and\n+servers.\n \n-A Writer is an application that creates Events and writes them into a Stream.\n+- **Writer:** An application that creates Events and writes them into a Stream.\n All data is written by appending to the tail (front) of a Stream.\n \n-A Reader is an application that reads Events from a Stream.  Readers can read\n+- **Reader:** An application that reads Events from a Stream.  Readers can read\n from any point in the Stream.  Many Readers will be reading Events from the tail\n-of the Stream.  These Events will be delivered to Readers as quickly as possible.  Some Readers will read\n-from earlier parts of the Stream (called catch-up reads).  The application\n-developer has control over where in the Stream the Reader starts reading.\n- Pravega has the concept of a Position, that represents where in a Stream a\n-Reader is currently located.  The Position object can be used as a recovery\n-mechanism – applications that persist the last Position a Reader has\n-successfully processed can use that information to initialize a replacement\n-Reader to pickup where a failed Reader left off.  Using this pattern of\n-persisting Position objects, applications can be built that guarantee exactly\n-once Event processing in the face of Reader failure.\n-\n-Readers are organized into ReaderGroups.  A ReaderGroup is a named collection of\n-Readers that together, in parallel, read Events from a given Stream. When a\n+of the Stream. Tail reads corresponding to recently written Events are immediately delivered to readers.\n+Some Readers will read from earlier parts or history of the Stream (called **catch-up reads**). The application developer has control over the Reader's start position in the Stream.\n+\n+- **Position:** Abstraction that represents where in a Stream a Reader is currently located. The position object can be used as a recovery\n+mechanism by replacing the failed Reader by a new Reader by restoring the last saved successful read position. Using this pattern of persisting position objects, applications can be built guaranteeing exactly once Event processing by handling the Reader failure.\n+\n+- **Reader Groups:** Readers are organized into Reader Groups. A Reader Group is a named collection of\n+Readers, which together perform parallel reads from a given Stream. When a\n Reader is created through the Pravega data plane API, the developer includes the\n-name of the ReaderGroup it is part of.  We guarantee that each Event published\n-to a Stream is sent to exactly one Reader within the ReaderGroup.  There could\n-be 1 Reader in the ReaderGroup, there could be many.  There could be many\n-different ReaderGroups simultaneously reading from any given Stream.\n+name of the Reader Group associated with it. Pravega guarantees that each Event published\n+to a Stream is sent to exactly one Reader within the Reader Group. There could\n+be one or more Readers in the Reader Group and there could be many different Reader Groups simultaneously reading from any given Stream.\n \n-You can think of a ReaderGroup as a \"composite Reader\" or a \"distributed\n+A Reader Group can be considered as a \"composite Reader\" or \"distributed\n Reader\", that allows a distributed application to read and process Stream data\n-in parallel, such that a massive amount of Stream data can be consumed by a\n-coordinated fleet of Readers in a ReaderGroup.  A collection of Flink tasks\n-processing Stream data in parallel is a good example use of a ReaderGroup.\n+in parallel. A large amount of Stream data can be consumed by a coordinated group of Readers in a Reader Group.  For example, a collection of Flink tasks processing Stream data in parallel using Reader Group.\n \n-For more details on the basics of working with Pravega Readers and Writers,\n-see [Working with Pravega: Basic Reader and\n+For more details on the basics of working with Pravega Readers and Writers, please see [Working with Pravega: Basic Reader and\n Writer](basic-reader-and-writer.md#working-with-pravega-basic-reader-and-writer).\n \n-We need to talk in more detail about the relationship between Readers,\n-ReaderGroups and Streams and the ordering guarantees provided by Pravega.  But\n-first, we need to describe what a Stream Segment is.\n-\n ## Stream Segments\n \n-A Stream is decomposed into a set of Stream Segments; a Stream Segment is a\n-shard or partition of a Stream.\n+A Stream is decomposed into a set of Segments generally referred as **Stream Segments**; a Stream Segment is a shard or partition of a Stream.\n \n ![Stream Segment](img/stream.segment.png) \n \n-### An Event is Stored within a Stream Segment\n+### Events in a Stream Segment\n \n-\n-The Stream Segment is the container for Events within the Stream.   When an\n+The Stream Segments acts as a container for Events within the Stream. When an\n Event is written into a Stream, it is stored in one of the Stream Segments based\n-on the Event's Routing Key.  Pravega uses consistent hashing to assign Events to\n-Stream Segments. Event Routing Keys are hashed to form a \"key space\" .  The key\n+on the Event's Routing Key. Pravega uses consistent hashing to assign Events to\n+Stream Segments. Event Routing Keys are hashed to form a \"key space\". The key\n space is then divided into a number of partitions, corresponding to the number\n-of Stream Segments. Consistent hashing determines which Segment an Event is\n-assigned to.\n+of Stream Segments. Consistent hashing determines the allotment of the specific Segment to an Event.\n+\n \n-### AutoScaling: Varying the number of Stream Segments over time\n+### Elastic Streams: Auto Scaling\n \n-The number of Stream Segments in a Stream can grow *and shrink* over time as I/O\n-load on the Stream increases and decreases.   We refer to this feature as\n-AutoScaling.\n+A unique feature of Pravega is that the number of parallel Stream Segments in a Stream can automatically **grow** and **shrink** over time based on the I/O load it receives. This feature is known as **Auto Scaling**.\n \n Consider the following figure that shows the relationship between Routing Keys\n and time.\n \n ![Stream Segment](img/segment.split.merge.overtime.new.png) \n \n-A Stream starts out at time t0 with a configurable number of Segments.  If the\n-rate of data written to the Stream is constant, the number of Segments won’t\n-change.  However at time t1, the system noted an increase in the ingestion rate\n-and chose to split Segment 1 into two parts.  We call this a Scale-up event.\n- Before t1, Events with a Routing Key that hashes to the upper part of the key\n-space (values 200-399) would be placed in Segment 1 and those that hash into the\n-lower part of the key space (values 0-199) would be placed in Segment 0. After\n-t1, Segment 1 is split into Segment 2 and Segment 3.  Segment 1 is sealed and it\n-no longer accepts writes.  At this point in time, Events with Routing Key\n-300 and above are written to Segment 3 and those between 200 and 299 would be\n-written into Segment 2.  Segment 0 still keeps accepting the same range of\n-Events as before t1.  \n-\n-We also see another Scale-up event at time t2, as Segment 0’s range of Routing\n-Key is split into Segment 5 & Segment 4.  Also at this time, Segment 0 is sealed\n-off so that it accepts no further writes.\n-\n-Segments covering a contiguous range of the key space can also be merged.  At\n-time t3, Segment 2’s range and Segment 5’s range are merged into Segment 6 to\n-accommodate a decrease in load on the Stream.\n-\n-When a Stream is created, it is configured with an Scaling Policy that\n-determines how a Stream reacts to changes in its load.  Currently there are\n-three kinds of Scaling Policy:\n-\n-1.  Fixed.  The number of Stream Segments does not vary with load\n-\n-2.  Size-based.  As the number of bytes of data per second written to the Stream\n-    increases past a certain target rate, the number of Stream Segments is\n-    increased.  If it falls below a certain level, decrease the number of Stream\n-    Segments.\n-\n-3.  Event-based.  Similar to Size-based Scaling Policy, except it uses the\n-    number of Events instead of the number of bytes.\n+- A Stream starts at time **t0** with a configurable number of Segments.  If the\n+rate of data written to the Stream is constant, there will be no change in the number of Segments. \n+\n+- At time **t1**, the system noted an increase in the ingestion rate and splits **Segment 1** into two parts. This process is referred as **Scale-Up** Event.\n+\n+- Before **t1**, Events with a Routing Key that hashes to the upper part of the key\n+space (i.e., values ranging from **200-399**) would be placed in **Segment 1** and those that hash into the\n+lower part of the key space (i.e., values ranging from **0-199**) would be placed in **Segment 0**.\n+\n+- After **t1**, **Segment 1** is split into **Segment 2** and **Segment 3**. The **Segment 1** is sealed and stops accepting writes.  At this point in time, Events with Routing Key **300** and _above_ are written to **Segment 3** and those between **200** and **299** would be written into **Segment 2**.\n+\n+- **Segment 0** continues accepting the same range of Events as before **t1**.  \n+\n+- Another scale-up Event occurs at time **t2**, as **Segment 0**’s range of Routing\n+Key is split into **Segment 5** and **Segment 4**. Also at this time, **Segment 0** is sealed\n+and allows no further writes.\n+\n+- Segments covering a contiguous range of the key space can also be merged. At\n+time **t3**, **Segment 2**’s range and **Segment 5**’s range are merged to **Segment 6** to\n+accommodate a decrease in the load on the Stream.\n+\n+When a Stream is created, it is configured with a **Scaling Policy** that\n+determines, how a Stream handles the varying changes in its load. Pravega has three kinds of Scaling Policy:","path":"documentation/src/docs/pravega-concepts.md","position":263,"original_position":263,"commit_id":"9baa08c31115e91717adcce1426a98ac26a811f6","original_commit_id":"9baa08c31115e91717adcce1426a98ac26a811f6","user":{"login":"RaulGracia","id":717112,"node_id":"MDQ6VXNlcjcxNzExMg==","avatar_url":"https://avatars1.githubusercontent.com/u/717112?v=4","gravatar_id":"","url":"https://api.github.com/users/RaulGracia","html_url":"https://github.com/RaulGracia","followers_url":"https://api.github.com/users/RaulGracia/followers","following_url":"https://api.github.com/users/RaulGracia/following{/other_user}","gists_url":"https://api.github.com/users/RaulGracia/gists{/gist_id}","starred_url":"https://api.github.com/users/RaulGracia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaulGracia/subscriptions","organizations_url":"https://api.github.com/users/RaulGracia/orgs","repos_url":"https://api.github.com/users/RaulGracia/repos","events_url":"https://api.github.com/users/RaulGracia/events{/privacy}","received_events_url":"https://api.github.com/users/RaulGracia/received_events","type":"User","site_admin":false},"body":"Please, delete the `,` between `determines, how`.","created_at":"2018-10-29T10:23:19Z","updated_at":"2018-10-29T10:56:08Z","html_url":"https://github.com/pravega/pravega/pull/3005#discussion_r228868424","pull_request_url":"https://api.github.com/repos/pravega/pravega/pulls/3005","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/pravega/pravega/pulls/comments/228868424"},"html":{"href":"https://github.com/pravega/pravega/pull/3005#discussion_r228868424"},"pull_request":{"href":"https://api.github.com/repos/pravega/pravega/pulls/3005"}}},"pull_request":{"url":"https://api.github.com/repos/pravega/pravega/pulls/3005","id":225279543,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI1Mjc5NTQz","html_url":"https://github.com/pravega/pravega/pull/3005","diff_url":"https://github.com/pravega/pravega/pull/3005.diff","patch_url":"https://github.com/pravega/pravega/pull/3005.patch","issue_url":"https://api.github.com/repos/pravega/pravega/issues/3005","number":3005,"state":"open","locked":false,"title":"Issue 2966: Document fix pravegaconcepts doc","user":{"login":"Aparnarr","id":40591559,"node_id":"MDQ6VXNlcjQwNTkxNTU5","avatar_url":"https://avatars3.githubusercontent.com/u/40591559?v=4","gravatar_id":"","url":"https://api.github.com/users/Aparnarr","html_url":"https://github.com/Aparnarr","followers_url":"https://api.github.com/users/Aparnarr/followers","following_url":"https://api.github.com/users/Aparnarr/following{/other_user}","gists_url":"https://api.github.com/users/Aparnarr/gists{/gist_id}","starred_url":"https://api.github.com/users/Aparnarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aparnarr/subscriptions","organizations_url":"https://api.github.com/users/Aparnarr/orgs","repos_url":"https://api.github.com/users/Aparnarr/repos","events_url":"https://api.github.com/users/Aparnarr/events{/privacy}","received_events_url":"https://api.github.com/users/Aparnarr/received_events","type":"User","site_admin":false},"body":"**Change log description**  \r\n1. Major content revised\r\n2. Few hyperlinks added\r\n3. All hyperlinks checked.\r\n4. Typos and formats corrected\r\n\r\n**Purpose of the change**  \r\n Fixes #2966\r\n\r\n\r\n","created_at":"2018-10-24T06:28:04Z","updated_at":"2018-10-29T10:56:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fe063932582a2451acf4b2bcbbc52c61ef961cd1","assignee":{"login":"RaulGracia","id":717112,"node_id":"MDQ6VXNlcjcxNzExMg==","avatar_url":"https://avatars1.githubusercontent.com/u/717112?v=4","gravatar_id":"","url":"https://api.github.com/users/RaulGracia","html_url":"https://github.com/RaulGracia","followers_url":"https://api.github.com/users/RaulGracia/followers","following_url":"https://api.github.com/users/RaulGracia/following{/other_user}","gists_url":"https://api.github.com/users/RaulGracia/gists{/gist_id}","starred_url":"https://api.github.com/users/RaulGracia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaulGracia/subscriptions","organizations_url":"https://api.github.com/users/RaulGracia/orgs","repos_url":"https://api.github.com/users/RaulGracia/repos","events_url":"https://api.github.com/users/RaulGracia/events{/privacy}","received_events_url":"https://api.github.com/users/RaulGracia/received_events","type":"User","site_admin":false},"assignees":[{"login":"RaulGracia","id":717112,"node_id":"MDQ6VXNlcjcxNzExMg==","avatar_url":"https://avatars1.githubusercontent.com/u/717112?v=4","gravatar_id":"","url":"https://api.github.com/users/RaulGracia","html_url":"https://github.com/RaulGracia","followers_url":"https://api.github.com/users/RaulGracia/followers","following_url":"https://api.github.com/users/RaulGracia/following{/other_user}","gists_url":"https://api.github.com/users/RaulGracia/gists{/gist_id}","starred_url":"https://api.github.com/users/RaulGracia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaulGracia/subscriptions","organizations_url":"https://api.github.com/users/RaulGracia/orgs","repos_url":"https://api.github.com/users/RaulGracia/repos","events_url":"https://api.github.com/users/RaulGracia/events{/privacy}","received_events_url":"https://api.github.com/users/RaulGracia/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/pravega/pravega/pulls/3005/commits","review_comments_url":"https://api.github.com/repos/pravega/pravega/pulls/3005/comments","review_comment_url":"https://api.github.com/repos/pravega/pravega/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pravega/pravega/issues/3005/comments","statuses_url":"https://api.github.com/repos/pravega/pravega/statuses/9baa08c31115e91717adcce1426a98ac26a811f6","head":{"label":"Aparnarr:issue-2966-pravegaconcepts-doc","ref":"issue-2966-pravegaconcepts-doc","sha":"9baa08c31115e91717adcce1426a98ac26a811f6","user":{"login":"Aparnarr","id":40591559,"node_id":"MDQ6VXNlcjQwNTkxNTU5","avatar_url":"https://avatars3.githubusercontent.com/u/40591559?v=4","gravatar_id":"","url":"https://api.github.com/users/Aparnarr","html_url":"https://github.com/Aparnarr","followers_url":"https://api.github.com/users/Aparnarr/followers","following_url":"https://api.github.com/users/Aparnarr/following{/other_user}","gists_url":"https://api.github.com/users/Aparnarr/gists{/gist_id}","starred_url":"https://api.github.com/users/Aparnarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aparnarr/subscriptions","organizations_url":"https://api.github.com/users/Aparnarr/orgs","repos_url":"https://api.github.com/users/Aparnarr/repos","events_url":"https://api.github.com/users/Aparnarr/events{/privacy}","received_events_url":"https://api.github.com/users/Aparnarr/received_events","type":"User","site_admin":false},"repo":{"id":142117017,"node_id":"MDEwOlJlcG9zaXRvcnkxNDIxMTcwMTc=","name":"pravega","full_name":"Aparnarr/pravega","private":false,"owner":{"login":"Aparnarr","id":40591559,"node_id":"MDQ6VXNlcjQwNTkxNTU5","avatar_url":"https://avatars3.githubusercontent.com/u/40591559?v=4","gravatar_id":"","url":"https://api.github.com/users/Aparnarr","html_url":"https://github.com/Aparnarr","followers_url":"https://api.github.com/users/Aparnarr/followers","following_url":"https://api.github.com/users/Aparnarr/following{/other_user}","gists_url":"https://api.github.com/users/Aparnarr/gists{/gist_id}","starred_url":"https://api.github.com/users/Aparnarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aparnarr/subscriptions","organizations_url":"https://api.github.com/users/Aparnarr/orgs","repos_url":"https://api.github.com/users/Aparnarr/repos","events_url":"https://api.github.com/users/Aparnarr/events{/privacy}","received_events_url":"https://api.github.com/users/Aparnarr/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Aparnarr/pravega","description":"Pravega - Streaming as a new software defined storage primitive","fork":true,"url":"https://api.github.com/repos/Aparnarr/pravega","forks_url":"https://api.github.com/repos/Aparnarr/pravega/forks","keys_url":"https://api.github.com/repos/Aparnarr/pravega/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Aparnarr/pravega/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Aparnarr/pravega/teams","hooks_url":"https://api.github.com/repos/Aparnarr/pravega/hooks","issue_events_url":"https://api.github.com/repos/Aparnarr/pravega/issues/events{/number}","events_url":"https://api.github.com/repos/Aparnarr/pravega/events","assignees_url":"https://api.github.com/repos/Aparnarr/pravega/assignees{/user}","branches_url":"https://api.github.com/repos/Aparnarr/pravega/branches{/branch}","tags_url":"https://api.github.com/repos/Aparnarr/pravega/tags","blobs_url":"https://api.github.com/repos/Aparnarr/pravega/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Aparnarr/pravega/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Aparnarr/pravega/git/refs{/sha}","trees_url":"https://api.github.com/repos/Aparnarr/pravega/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Aparnarr/pravega/statuses/{sha}","languages_url":"https://api.github.com/repos/Aparnarr/pravega/languages","stargazers_url":"https://api.github.com/repos/Aparnarr/pravega/stargazers","contributors_url":"https://api.github.com/repos/Aparnarr/pravega/contributors","subscribers_url":"https://api.github.com/repos/Aparnarr/pravega/subscribers","subscription_url":"https://api.github.com/repos/Aparnarr/pravega/subscription","commits_url":"https://api.github.com/repos/Aparnarr/pravega/commits{/sha}","git_commits_url":"https://api.github.com/repos/Aparnarr/pravega/git/commits{/sha}","comments_url":"https://api.github.com/repos/Aparnarr/pravega/comments{/number}","issue_comment_url":"https://api.github.com/repos/Aparnarr/pravega/issues/comments{/number}","contents_url":"https://api.github.com/repos/Aparnarr/pravega/contents/{+path}","compare_url":"https://api.github.com/repos/Aparnarr/pravega/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Aparnarr/pravega/merges","archive_url":"https://api.github.com/repos/Aparnarr/pravega/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Aparnarr/pravega/downloads","issues_url":"https://api.github.com/repos/Aparnarr/pravega/issues{/number}","pulls_url":"https://api.github.com/repos/Aparnarr/pravega/pulls{/number}","milestones_url":"https://api.github.com/repos/Aparnarr/pravega/milestones{/number}","notifications_url":"https://api.github.com/repos/Aparnarr/pravega/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Aparnarr/pravega/labels{/name}","releases_url":"https://api.github.com/repos/Aparnarr/pravega/releases{/id}","deployments_url":"https://api.github.com/repos/Aparnarr/pravega/deployments","created_at":"2018-07-24T06:50:37Z","updated_at":"2018-10-27T05:09:10Z","pushed_at":"2018-10-29T09:39:49Z","git_url":"git://github.com/Aparnarr/pravega.git","ssh_url":"git@github.com:Aparnarr/pravega.git","clone_url":"https://github.com/Aparnarr/pravega.git","svn_url":"https://github.com/Aparnarr/pravega","homepage":"http://pravega.io","size":27123,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"base":{"label":"pravega:master","ref":"master","sha":"811c9c29d77d091911ca7cd5bb0c428d8799c063","user":{"login":"pravega","id":25698199,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1Njk4MTk5","avatar_url":"https://avatars1.githubusercontent.com/u/25698199?v=4","gravatar_id":"","url":"https://api.github.com/users/pravega","html_url":"https://github.com/pravega","followers_url":"https://api.github.com/users/pravega/followers","following_url":"https://api.github.com/users/pravega/following{/other_user}","gists_url":"https://api.github.com/users/pravega/gists{/gist_id}","starred_url":"https://api.github.com/users/pravega/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravega/subscriptions","organizations_url":"https://api.github.com/users/pravega/orgs","repos_url":"https://api.github.com/users/pravega/repos","events_url":"https://api.github.com/users/pravega/events{/privacy}","received_events_url":"https://api.github.com/users/pravega/received_events","type":"Organization","site_admin":false},"repo":{"id":63096822,"node_id":"MDEwOlJlcG9zaXRvcnk2MzA5NjgyMg==","name":"pravega","full_name":"pravega/pravega","private":false,"owner":{"login":"pravega","id":25698199,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1Njk4MTk5","avatar_url":"https://avatars1.githubusercontent.com/u/25698199?v=4","gravatar_id":"","url":"https://api.github.com/users/pravega","html_url":"https://github.com/pravega","followers_url":"https://api.github.com/users/pravega/followers","following_url":"https://api.github.com/users/pravega/following{/other_user}","gists_url":"https://api.github.com/users/pravega/gists{/gist_id}","starred_url":"https://api.github.com/users/pravega/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravega/subscriptions","organizations_url":"https://api.github.com/users/pravega/orgs","repos_url":"https://api.github.com/users/pravega/repos","events_url":"https://api.github.com/users/pravega/events{/privacy}","received_events_url":"https://api.github.com/users/pravega/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/pravega/pravega","description":"Pravega - Streaming as a new software defined storage primitive","fork":false,"url":"https://api.github.com/repos/pravega/pravega","forks_url":"https://api.github.com/repos/pravega/pravega/forks","keys_url":"https://api.github.com/repos/pravega/pravega/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pravega/pravega/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pravega/pravega/teams","hooks_url":"https://api.github.com/repos/pravega/pravega/hooks","issue_events_url":"https://api.github.com/repos/pravega/pravega/issues/events{/number}","events_url":"https://api.github.com/repos/pravega/pravega/events","assignees_url":"https://api.github.com/repos/pravega/pravega/assignees{/user}","branches_url":"https://api.github.com/repos/pravega/pravega/branches{/branch}","tags_url":"https://api.github.com/repos/pravega/pravega/tags","blobs_url":"https://api.github.com/repos/pravega/pravega/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pravega/pravega/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pravega/pravega/git/refs{/sha}","trees_url":"https://api.github.com/repos/pravega/pravega/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pravega/pravega/statuses/{sha}","languages_url":"https://api.github.com/repos/pravega/pravega/languages","stargazers_url":"https://api.github.com/repos/pravega/pravega/stargazers","contributors_url":"https://api.github.com/repos/pravega/pravega/contributors","subscribers_url":"https://api.github.com/repos/pravega/pravega/subscribers","subscription_url":"https://api.github.com/repos/pravega/pravega/subscription","commits_url":"https://api.github.com/repos/pravega/pravega/commits{/sha}","git_commits_url":"https://api.github.com/repos/pravega/pravega/git/commits{/sha}","comments_url":"https://api.github.com/repos/pravega/pravega/comments{/number}","issue_comment_url":"https://api.github.com/repos/pravega/pravega/issues/comments{/number}","contents_url":"https://api.github.com/repos/pravega/pravega/contents/{+path}","compare_url":"https://api.github.com/repos/pravega/pravega/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pravega/pravega/merges","archive_url":"https://api.github.com/repos/pravega/pravega/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pravega/pravega/downloads","issues_url":"https://api.github.com/repos/pravega/pravega/issues{/number}","pulls_url":"https://api.github.com/repos/pravega/pravega/pulls{/number}","milestones_url":"https://api.github.com/repos/pravega/pravega/milestones{/number}","notifications_url":"https://api.github.com/repos/pravega/pravega/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pravega/pravega/labels{/name}","releases_url":"https://api.github.com/repos/pravega/pravega/releases{/id}","deployments_url":"https://api.github.com/repos/pravega/pravega/deployments","created_at":"2016-07-11T19:41:03Z","updated_at":"2018-10-28T12:18:58Z","pushed_at":"2018-10-29T09:39:51Z","git_url":"git://github.com/pravega/pravega.git","ssh_url":"git@github.com:pravega/pravega.git","clone_url":"https://github.com/pravega/pravega.git","svn_url":"https://github.com/pravega/pravega","homepage":"http://pravega.io","size":26762,"stargazers_count":278,"watchers_count":278,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":91,"mirror_url":null,"archived":false,"open_issues_count":382,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":91,"open_issues":382,"watchers":278,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pravega/pravega/pulls/3005"},"html":{"href":"https://github.com/pravega/pravega/pull/3005"},"issue":{"href":"https://api.github.com/repos/pravega/pravega/issues/3005"},"comments":{"href":"https://api.github.com/repos/pravega/pravega/issues/3005/comments"},"review_comments":{"href":"https://api.github.com/repos/pravega/pravega/pulls/3005/comments"},"review_comment":{"href":"https://api.github.com/repos/pravega/pravega/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pravega/pravega/pulls/3005/commits"},"statuses":{"href":"https://api.github.com/repos/pravega/pravega/statuses/9baa08c31115e91717adcce1426a98ac26a811f6"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"RaulGracia"}}