<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 08:39:44 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>[GODRIVER-2959] Mongodb watch change stream will panic, when no data be found by query condition</title>
                <link>https://jira.mongodb.org/browse/GODRIVER-2959</link>
                <project id="14289" key="GODRIVER">Go Driver</project>
                    <description>&lt;h4&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;mongodb go driver version from 1.11.1 to 1.12.1, watch changestream will be panic.&lt;/em&gt;&lt;/p&gt;

&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;go.mongodb.org/mongo-driver/mongo.(*ChangeStream).loopNext(0xc000002140, {0x124ca00, 0x18e8040}, 0x0)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;	/go/pkg/mod/go.mongodb.org/mongo-driver@v1.12.1/mongo/change_stream.go:658 +0x6b&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;go.mongodb.org/mongo-driver/mongo.(*ChangeStream).next(0xc000002140, {0x124ca00?, 0x18e8040?}, 0xd0?)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;	/go/pkg/mod/go.mongodb.org/mongo-driver@v1.12.1/mongo/change_stream.go:627 +0x5d&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;go.mongodb.org/mongo-driver/mongo.(*ChangeStream).Next(...)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;	/go/pkg/mod/go.mongodb.org/mongo-driver@v1.12.1/mongo/change_stream.go:598&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;draw-platform/storage/mongodb.(*StorageCollection).WatchRunnerResponse.func1()&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;h4&gt;&lt;a name=&quot;HowtoReproduce&quot;&gt;&lt;/a&gt;How to Reproduce&lt;/h4&gt;

&lt;p&gt;Create a empty collection and set the Watch mongo.Pipeline{matchStage} like this:&lt;/p&gt;

&lt;p&gt;&#160;&lt;br/&gt;
matchStage := bson.D{{&lt;br/&gt;
Key: &quot;$match&quot;, Value: bson.D{&lt;/p&gt;
{Key: &quot;fullDocument.env&quot;, Value: store.env}
&lt;p&gt;,&lt;/p&gt;
{Key: &quot;fullDocument.requestUUID&quot;, Value: requestUUID}
&lt;p&gt;,&lt;br/&gt;
}},&lt;br/&gt;
}&lt;br/&gt;
&#160;&lt;br/&gt;
and the query condition no datas will be found, because of I want to watch data from first data by the query condition.&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;%C2%A0&quot;&gt;&lt;/a&gt;&#160;&lt;/h4&gt;</description>
                <environment></environment>
        <key id="2427710">GODRIVER-2959</key>
            <summary>Mongodb watch change stream will panic, when no data be found by query condition</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</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="13202">Works as Designed</resolution>
                                        <assignee username="preston.vasquez@mongodb.com">Preston Vasquez</assignee>
                                    <reporter username="myselfxukai@163.com">xkey N/A</reporter>
                        <labels>
                            <label>changestreams</label>
                            <label>watch</label>
                    </labels>
                <created>Mon, 28 Aug 2023 08:14:47 +0000</created>
                <updated>Fri, 27 Oct 2023 13:16:18 +0000</updated>
                            <resolved>Thu, 28 Sep 2023 17:53:37 +0000</resolved>
                                    <version>1.12.1</version>
                                                                        <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="5738526" author="JIRAUSER1265158" created="Thu, 28 Sep 2023 17:53:24 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=myselfxukai%40163.com&quot; class=&quot;user-hover&quot; rel=&quot;myselfxukai@163.com&quot;&gt;myselfxukai@163.com&lt;/a&gt;The Go Driver documents the correct usage of closing the change stream:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Next and TryNext must not be called after Close has been called. &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Similar to how we should only close a channel in a sender goroutine. I&apos;ve opened &lt;a href=&quot;https://jira.mongodb.org/browse/GODRIVER-2998&quot; title=&quot;Make ChangeStream.Close thread safe&quot; class=&quot;issue-link&quot; data-issue-key=&quot;GODRIVER-2998&quot;&gt;GODRIVER-2998&lt;/a&gt; to investigate this potential improvement further and will close this ticket as works as designed.&lt;/p&gt;

&lt;p&gt;Thank you for your feedback!&lt;/p&gt;</comment>
                            <comment id="5736383" author="JIRAUSER1274922" created="Thu, 28 Sep 2023 01:48:41 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=preston.vasquez%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;preston.vasquez@mongodb.com&quot;&gt;preston.vasquez@mongodb.com&lt;/a&gt; Thanks, it works. But I also think the Close() is called first, then the Next and TryNext will be panic. The design should be changed.&#160;&lt;/p&gt;

&lt;p&gt;Other frameworks, such as etcd, consul will not&#160; happen it.&lt;/p&gt;</comment>
                            <comment id="5734905" author="JIRAUSER1265158" created="Wed, 27 Sep 2023 16:01:47 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=myselfxukai%40163.com&quot; class=&quot;user-hover&quot; rel=&quot;myselfxukai@163.com&quot;&gt;myselfxukai@163.com&lt;/a&gt; , the code you provide illustrates the same issue given in the example, it closes a change stream in the middle of calling &quot;Next&quot;. From the documentation on the &lt;a href=&quot;https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#ChangeStream.Close&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;ChangeStream.Close&lt;/a&gt;&#160;method:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Close closes this change stream and the underlying cursor. Next and TryNext must not be called after Close has been called. Close is idempotent. After the first call, any subsequent calls will not change the state.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You should close the change stream in the same thread that you are running it in:&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;		go func() {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;			for {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;				select {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;				case &amp;lt;-close: // chan struct{}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;					changeStream.Close(ctx)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;					return&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;				default:&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;					if changeStream.Next(context.Background()) {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						if changeStream.Err() != nil || changeStream.ID() == 0 {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;							log.Println(&quot;change stream closed&quot;)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;							close(closed)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;							return&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						ce := runnerChangeEvent{}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						changeStream.Decode(&amp;amp;ce)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						if ce.OperationType != &quot;insert&quot; &amp;amp;&amp;amp; ce.OperationType != &quot;update&quot; {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;							continue&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						ch &amp;lt;- ce&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;					} else {&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						log.Println(&quot;change stream closed&quot;)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						close(closed)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;						return&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;					}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;				}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;			}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;		}()&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;</comment>
                            <comment id="5733548" author="JIRAUSER1274922" created="Wed, 27 Sep 2023 05:54:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=preston.vasquez%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;preston.vasquez@mongodb.com&quot;&gt;preston.vasquez@mongodb.com&lt;/a&gt;&#160;&lt;br/&gt;
func Test_MongoWatch(t *testing.T) {&lt;br/&gt;
clientOptions := options.Client().ApplyURI(&quot;mongodb://localhost:27017&quot;)&lt;br/&gt;
clientOptions.ReadPreference = readpref.PrimaryPreferred()&lt;br/&gt;
clientOptions.SetMaxPoolSize(12)&lt;br/&gt;
clientOptions.SetMaxConnIdleTime(10 * time.Second)&lt;br/&gt;
clientOptions.SetConnectTimeout(10 * time.Second)&lt;/p&gt;

&lt;p&gt;ctx, cancel := context.WithTimeout(context.Background(), constant.MongodbOpTimeout)&lt;br/&gt;
defercancel()&lt;br/&gt;
client, err := mongo.Connect(ctx, clientOptions)&lt;br/&gt;
if err !=nil &lt;/p&gt;
{
panic(err)
}&lt;br/&gt;
&lt;br/&gt;
ctx2, cancel2 := context.WithTimeout(context.Background(), constant.MongodbOpTimeout)&lt;br/&gt;
defercancel2()&lt;br/&gt;
err = client.Ping(ctx2, readpref.PrimaryPreferred())&lt;br/&gt;
if err !=nil {
panic(err)
}

&lt;p&gt;collection := client.Database(&quot;test&quot;).Collection(&quot;test_coll&quot;)&lt;/p&gt;

&lt;p&gt;typerunnerChangeEventstruct &lt;/p&gt;
{
OperationType string `bson:&quot;operationType&quot;`
ClusterTime primitive.Timestamp `bson:&quot;clusterTime&quot;`
FullDocument any `bson:&quot;fullDocument&quot;`
}

&lt;p&gt;watchFn := func(ctx context.Context, ch chan runnerChangeEvent) (*mongo.ChangeStream, error) {&lt;br/&gt;
pipeline := mongo.Pipeline{bson.D{{&lt;br/&gt;
Key: &quot;$match&quot;,&lt;br/&gt;
Value: bson.D{&lt;/p&gt;
{Key: &quot;fullDocument.env&quot;, Value: &quot;dev&quot;}
&lt;p&gt;,&lt;br/&gt;
//{Key: &quot;fullDocument.requestUUID&quot;, Value: &quot;y&quot;},&lt;br/&gt;
}},&lt;br/&gt;
}}&lt;/p&gt;

&lt;p&gt;option := options.ChangeStream().SetFullDocument(options.UpdateLookup).SetMaxAwaitTime(5 * time.Second)&lt;/p&gt;

&lt;p&gt;changeStream, err := collection.Watch(ctx, pipeline, option)&lt;br/&gt;
if err !=nil &lt;/p&gt;
{
returnnil, err
}

&lt;p&gt;gofunc() {&lt;br/&gt;
for changeStream.Next(context.Background()) {&lt;br/&gt;
if changeStream.Err() !=nil|| changeStream.ID() ==0 &lt;/p&gt;
{
log.Println(&quot;change stream closed&quot;)
break
}

&lt;p&gt;ce := runnerChangeEvent{}&lt;br/&gt;
changeStream.Decode(&amp;amp;ce)&lt;/p&gt;

&lt;p&gt;// &lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/change-events/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.mongodb.com/docs/manual/reference/change-events/&lt;/a&gt;&lt;br/&gt;
// sdk&#19978;&#25253;&#30340;&#28040;&#24687;&#21482;&#21487;&#33021;&#23384;&#22312;insert&#25110;update&lt;br/&gt;
if ce.OperationType !=&quot;insert&quot;&amp;amp;&amp;amp; ce.OperationType !=&quot;update&quot; &lt;/p&gt;
{
continue
}

&lt;p&gt;ch &amp;lt;- ce&lt;br/&gt;
}&lt;br/&gt;
}()&lt;/p&gt;

&lt;p&gt;return changeStream, nil&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;watchctx := context.Background()&lt;br/&gt;
ch := make(chan runnerChangeEvent, 10)&lt;br/&gt;
stream, err := watchFn(watchctx, ch)&lt;br/&gt;
if err !=nil &lt;/p&gt;
{
panic(err)
}&lt;br/&gt;
&lt;br/&gt;
gofunc() {&lt;br/&gt;
for i :=0; i &amp;lt;10; i++ {&lt;br/&gt;
doc := bson.D{
{Key: &quot;env&quot;, Value: &quot;dev&quot;},
{Key: &quot;num&quot;, Value: i + 1},&lt;br/&gt;
}&lt;br/&gt;
_, err = collection.InsertOne(context.Background(), doc)&lt;br/&gt;
if err !=nil {
panic(err)
}

&lt;p&gt;time.Sleep(2 * time.Second)&lt;br/&gt;
}&lt;br/&gt;
}()&lt;/p&gt;

&lt;p&gt;cnt := 0&lt;br/&gt;
loop:&lt;br/&gt;
for {&lt;br/&gt;
select {&lt;br/&gt;
case resp :=&amp;lt;-ch:&lt;br/&gt;
log.Println(resp.FullDocument)&lt;br/&gt;
cnt++&lt;br/&gt;
if cnt &amp;gt;=6 &lt;/p&gt;
{
break loop
}
&lt;p&gt;}&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;stream.Close(watchctx)&lt;/p&gt;

&lt;p&gt;signals := make(chan os.Signal, 1)&lt;br/&gt;
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)&lt;/p&gt;

&lt;p&gt;log.Println(&amp;lt;-signals)&lt;br/&gt;
}&lt;br/&gt;
&#160;&lt;br/&gt;
This is my test code for break watch loop at any time. But it will be panic.&#160; I mean the `changeStream.Next(context.Background())` can&apos;t be a loop, give user a channel singal for exit the for loop.&#160;&lt;/p&gt;</comment>
                            <comment id="5733501" author="JIRAUSER1274922" created="Wed, 27 Sep 2023 05:25:09 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=preston.vasquez%40mongodb.com&quot; class=&quot;user-hover&quot; rel=&quot;preston.vasquez@mongodb.com&quot;&gt;preston.vasquez@mongodb.com&lt;/a&gt; Thanks. I will test it by&#160; the &#160;&lt;a href=&quot;https://gist.github.com/prestonvasquez/30f15e9f84c76a63e6bf818663a18309&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://gist.github.com/prestonvasquez/30f15e9f84c76a63e6bf818663a18309&lt;/a&gt; codes&lt;/p&gt;</comment>
                            <comment id="5727694" author="dbeng-pm-bot" created="Mon, 25 Sep 2023 13:11:03 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=myselfxukai%40163.com&quot; class=&quot;user-hover&quot; rel=&quot;myselfxukai@163.com&quot;&gt;myselfxukai@163.com&lt;/a&gt;! &lt;a href=&quot;https://jira.mongodb.org/browse/GODRIVER-2959&quot; title=&quot;Mongodb watch change stream will panic, when no data be found by query condition&quot; class=&quot;issue-link&quot; data-issue-key=&quot;GODRIVER-2959&quot;&gt;&lt;del&gt;GODRIVER-2959&lt;/del&gt;&lt;/a&gt; is awaiting your response. &lt;/p&gt;

&lt;p&gt;If this is still an issue for you, please open Jira to review the latest status and provide your feedback. Thanks!&lt;/p&gt;</comment>
                            <comment id="5708824" author="JIRAUSER1265158" created="Fri, 15 Sep 2023 21:52:03 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=myselfxukai%40163.com&quot; class=&quot;user-hover&quot; rel=&quot;myselfxukai@163.com&quot;&gt;myselfxukai@163.com&lt;/a&gt; It appears that the cursor is being closed before the Next loop completes. Is your change stream being used concurrently by multiple Go routines? Note that this is not supported by the Go Driver and is documented here: &lt;a href=&quot;https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#ChangeStream&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#ChangeStream&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Here is a gist illustrating this point: &lt;a href=&quot;https://gist.github.com/prestonvasquez/30f15e9f84c76a63e6bf818663a18309&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://gist.github.com/prestonvasquez/30f15e9f84c76a63e6bf818663a18309&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5664965" author="JIRAUSER1274922" created="Tue, 29 Aug 2023 03:22:48 +0000"  >&lt;p&gt;&#160;&lt;br/&gt;
// &lt;a href=&quot;https://www.mongodb.com/docs/manual/changeStreams/#resume-tokens-from-change-events&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.mongodb.com/docs/manual/changeStreams/#resume-tokens-from-change-events&lt;/a&gt;&lt;br/&gt;
type runnerChangeEvent struct &lt;/p&gt;
{
OperationType string `bson:&quot;operationType&quot;`
ClusterTime primitive.Timestamp `bson:&quot;clusterTime&quot;`
FullDocument RunnerResponse `bson:&quot;fullDocument&quot;`
}

&lt;p&gt;func (store *StorageCollection) WatchRunnerResponse(requestUUID string, ch chan RunnerResponse) (*mongo.ChangeStream, error) {&lt;br/&gt;
matchStage := bson.D{{&lt;br/&gt;
Key: &quot;$match&quot;, Value: bson.D{&lt;/p&gt;
{Key: &quot;fullDocument.env&quot;, Value: store.env}
&lt;p&gt;,&lt;/p&gt;
{Key: &quot;fullDocument.requestUUID&quot;, Value: requestUUID}
&lt;p&gt;,&lt;br/&gt;
}},&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;opts := options.ChangeStream().SetMaxAwaitTime(5 * time.Second)&lt;/p&gt;

&lt;p&gt;changeStream, err := store.runnerCollection.Watch(&lt;br/&gt;
context.Background(),&lt;br/&gt;
mongo.Pipeline{matchStage},&lt;br/&gt;
opts,&lt;br/&gt;
)&lt;/p&gt;

&lt;p&gt;if err !=nil &lt;/p&gt;
{
returnnil, err
}

&lt;p&gt;gofunc() {&lt;br/&gt;
for {&lt;br/&gt;
next := changeStream.TryNext(context.Background())&lt;br/&gt;
if changeStream.Err() !=nil|| changeStream.ID() ==0 &lt;/p&gt;
{
break
}

&lt;p&gt;if!next &lt;/p&gt;
{
continue
}&lt;br/&gt;
&lt;br/&gt;
ce := runnerChangeEvent{}&lt;br/&gt;
changeStream.Decode(&amp;amp;ce)&lt;br/&gt;
&lt;br/&gt;
// &lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/change-events/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.mongodb.com/docs/manual/reference/change-events/&lt;/a&gt;&lt;br/&gt;
if ce.OperationType !=&quot;insert&quot;&amp;amp;&amp;amp; ce.OperationType !=&quot;update&quot; {
continue
}

&lt;p&gt;ch &amp;lt;- ce.FullDocument&lt;br/&gt;
}&lt;br/&gt;
}()&lt;/p&gt;

&lt;p&gt;return changeStream, nil&lt;br/&gt;
}&lt;br/&gt;
&#160;&lt;/p&gt;

&lt;p&gt;The comments editor should support markdown. Now the editor paste code is so bad.&lt;/p&gt;</comment>
                            <comment id="5662469" author="JIRAUSER1274922" created="Mon, 28 Aug 2023 08:41:46 +0000"  >&lt;p&gt;for {&lt;br/&gt;
if cs.cursor ==nil &lt;/p&gt;
{
return
}&lt;br/&gt;
&lt;br/&gt;
if cs.cursor.Next(ctx) {
// non-empty batch returned
cs.batch, cs.err = cs.cursor.Batch().Documents()
return
}&lt;br/&gt;
&lt;br/&gt;
cs.err = replaceErrors(cs.cursor.Err())&#160;&lt;br/&gt;
if cs.err ==nil {&lt;br/&gt;
// Check if cursor is alive&lt;br/&gt;
if cs.ID() ==0 {
return
}

&lt;p&gt;// If a getMore was done but the batch was empty, the batch cursor will return false with no error.&lt;br/&gt;
// Update the tracked resume token to catch the post batch resume token from the server response.&lt;br/&gt;
cs.updatePbrtFromCommand()&lt;br/&gt;
if nonBlocking &lt;/p&gt;
{
// stop after a successful getMore, even though the batch was empty
return
}
&lt;p&gt;continue// loop getMore until a non-empty batch is returned or an error occurs&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;if!cs.isResumableError() &lt;/p&gt;
{
return
}&lt;br/&gt;
&lt;br/&gt;
// ignore error from cursor close because if the cursor is deleted or errors we tried to close it and will remake and try to get next batch&lt;br/&gt;
_ = cs.cursor.Close(ctx)&lt;br/&gt;
if cs.err = cs.executeOperation(ctx, true); cs.err !=nil {
return
}
&lt;p&gt;}&lt;br/&gt;
&#160;&lt;br/&gt;
so I guess `replaceErrors` should check cs.cursor != nil again&lt;/p&gt;</comment>
                            <comment id="5662457" author="JIRAUSER1274922" created="Mon, 28 Aug 2023 08:34:25 +0000"  >&lt;p&gt;I call `changeStream.Close()` function, then watch goroutine panic&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;```go&lt;/p&gt;

&lt;p&gt;// Print out all change stream events in the order they&apos;re received.&lt;br/&gt;
&#160; // See the mongo.ChangeStream documentation for more examples of using&lt;br/&gt;
&#160; &#160; // change streams.&lt;br/&gt;
&#160; &#160; for changeStream.Next(context.TODO()) &lt;/p&gt;
{
&#160; &#160; &#160; &#160; fmt.Println(changeStream.Current)
&#160; &#160; }

&lt;p&gt;```&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;so I guess that the driver maybe provide a method.&#160; Don&apos;t use `changeStream.Next(context.TODO())` as death loop for get next data.&lt;/p&gt;</comment>
                            <comment id="5662433" author="dbeng-pm-bot" created="Mon, 28 Aug 2023 08:14:50 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=myselfxukai%40163.com&quot; class=&quot;user-hover&quot; rel=&quot;myselfxukai@163.com&quot;&gt;myselfxukai@163.com&lt;/a&gt;, thank you for reporting this issue! The team will look into it and get back to you soon. &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="2453897">GODRIVER-2998</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_14266" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Documentation Changes Summary</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>&lt;p&gt;1. What would you like to communicate to the user about this feature?&lt;br/&gt;
2. Would you like the user to see examples of the syntax and/or executable code and its output?&lt;br/&gt;
3. Which versions of the driver/connector does this apply to?&lt;/p&gt;</customfieldvalue>

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

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>