<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 03:33:20 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[SERVER-13932] Change Notification Stream API </title>
                <link>https://jira.mongodb.org/browse/SERVER-13932</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;Currently the oplog can be used as a means to track changes on the system.  You may want to do this for things such as detecting changes to determine cache invalidations.&lt;/p&gt;

&lt;p&gt;Naturally, tailing the oplog is not an ideal medium for this as it&apos;s format can change at any time and MongoDB provides no guarantees when basing things off the oplog. &lt;/p&gt;

&lt;p&gt;Furthermore, the oplog stores all events that occur on the system including internal events like removes and inserts from migrations  that I may not want or may want to filter out. &lt;/p&gt;

&lt;p&gt;Finally, the oplog is a mongod-wide component which under heavy traffic means I may be tailing much more data than I actually need if my application is focused on just one collection or DB. &lt;/p&gt;

&lt;p&gt;Ideally, creating an activity stream that is optionally published out would expose this through an API layer independent of the oplog. This would allow for applications like this to no longer directly rely on the oplog. &lt;/p&gt;

&lt;p&gt;If we could also filter on the activity stream similar to how audit filters are applied it would allow for only reading the changes you care about as oppose to filtering on the application side and transmitting a ton of data needlessly. &lt;/p&gt;

&lt;p&gt;You could also do things like only allowing people with certain permissions to receive certain changes. I.E.  if I don&apos;t have permission to a DB, I can&apos;t view the changes that have occurred on it. Currently if you want to tail some subset of the oplog, you have to be able to tail the whole oplog which causes a bit of a security permissions problem.&lt;/p&gt;</description>
                <environment></environment>
        <key id="136339">SERVER-13932</key>
            <summary>Change Notification Stream API </summary>
                <type id="2" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14711&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="9">Done</resolution>
                                        <assignee username="alyson.cabral@mongodb.com">Alyson Cabral</assignee>
                                    <reporter username="osmar.olivo">Osmar Olivo</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 May 2014 22:12:34 +0000</created>
                <updated>Mon, 29 Jan 2018 17:30:07 +0000</updated>
                            <resolved>Thu, 7 Dec 2017 19:17:36 +0000</resolved>
                                                    <fixVersion>3.6.0</fixVersion>
                                    <component>Storage</component>
                                        <votes>30</votes>
                                    <watches>42</watches>
                                                                                                                <comments>
                            <comment id="1744861" author="alyson.cabral" created="Wed, 6 Dec 2017 22:40:23 +0000"  >&lt;p&gt;I&apos;m happy to announce that MongoDB 3.6 launched with Change Streams. &lt;/p&gt;

&lt;p&gt;As a new feature in &lt;a href=&quot;https://www.mongodb.com/mongodb-3.6&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MongoDB 3.6&lt;/a&gt;, change streams enable applications to stream real-time data changes by leveraging MongoDB&#8217;s underlying replication capabilities. The characteristics of change streams include:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;1.    Resumable&lt;/b&gt;&lt;br/&gt;
Resumability was top of mind when building out change streams to enable applications to confidently see every change in a collection.  Each change stream response includes a resume token. In cases where a connection between the application and server is lost, the application can send up the last resume token it received and change streams will pick up right where the application left off as if there was no interruption at all. In cases of transient network errors or elections, the drivers will automatically make an attempt to reestablish a connection. The drivers automatically cache the last resume token seen. However, to prepare for cases of application failure, applications need to persist the resume token periodically, as drivers do not maintain state after application restarts.  &lt;br/&gt;
&lt;b&gt;2.     Targeted changes&lt;/b&gt;&lt;br/&gt;
Changes can be filtered to provide relevant and targeted changes to listening applications. As an example, filters can be on operation type or fields within the document itself.&lt;br/&gt;
&lt;b&gt;3.     Total ordering of changes across entire cluster&lt;/b&gt;&lt;br/&gt;
MongoDB 3.6 has a global logical clock that enables the server to order all changes across the entire cluster. Applications will always receive changes in the order they were applied on the server.&lt;br/&gt;
&lt;b&gt;4.     Durable changes&lt;/b&gt;&lt;br/&gt;
Change streams only notify on majority committed changes. This means that every change seen by listening applications is durable in failure scenarios like a new primary being elected in the event of your existing primary going down.&lt;br/&gt;
&lt;b&gt;5.     All changes are idempotent&lt;/b&gt;&lt;br/&gt;
All changes are transformed into a format that&#8217;s safe to apply multiple times. Listening applications don&#8217;t have to resume exactly at the last change they saw because reapplying operations is safe. &lt;/p&gt;

&lt;p&gt;For more detailed information check out the following resources:&lt;br/&gt;
&lt;a href=&quot;https://www.mongodb.com/presentations/using-change-streams-to-keep-up-with-your-data&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Video: Using Change Streams to Keep Up with Your Data&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.mongodb.com/master/changeStreams/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Documentation: Change Streams&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://university.mongodb.com/courses/M036/about&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Course: M036&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aly Cabral&lt;br/&gt;
MongoDB Product Manager&lt;/p&gt;</comment>
                            <comment id="674601" author="itdeveloper" created="Tue, 29 Jul 2014 07:21:45 +0000"  >&lt;p&gt;I am interested in this feature, as it will allow any service to receive notifications when a portion of the database is edited by a 3rd party (even a human being typing on the console). This sort of behavior is very useful in a Service Oriented Architecture. &lt;/p&gt;

&lt;p&gt;SQL Server has already solved this problem by providing SQL Service Broker. We use this feature heavily, so a service can get notified when anything at all edits a central database. The service has to react to edits can be generated by anything, e.g. a human being typing manually on the MongoDB console or someone manually editing the database using RoboMongo.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Depends</name>
                                                                <inwardlinks description="is depended on by">
                                        <issuelink>
            <issuekey id="13804">SERVER-2150</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="31260">SERVER-5042</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="406712">SERVER-30252</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="133556">SERVER-13755</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="372497">SERVER-28708</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="31260">SERVER-5042</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                                        </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Backwards Compatibility</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10038"><![CDATA[Fully Compatible]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_13552" key="com.go2group.jira.plugin.crm:crm_generic_field">
                        <customfieldname>Case</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[[500A000000UaVy3IAF]]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 14 Jul 2014 12:11:53 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        6 years, 10 weeks ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[]]></customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14262" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>End date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 7 Dec 2017 23:59:59 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10857" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>PM-89</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10057" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comment by Customer</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10056" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last commenter</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>ramon.fernandez@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            6 years, 10 weeks ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Old_Backport</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10000"><![CDATA[No]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>alyson.cabral@mongodb.com</customfieldvalue>
            <customfieldvalue>osmar.olivo</customfieldvalue>
            <customfieldvalue>ItDeveloper</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hrlv1z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hryt67:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>117321</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_14261" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Tue, 13 May 2014 00:00:00 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_22870" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Triagers</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14350" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>serverRank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hrs4sf:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>