<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 08:38:23 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-2353] Restructure Go driver packages to prevent import cycles and make some packages internal</title>
                <link>https://jira.mongodb.org/browse/GODRIVER-2353</link>
                <project id="14289" key="GODRIVER">Go Driver</project>
                    <description>&lt;div class=&quot;panel&quot; style=&quot;background-color: #fafbfc;border-color: #21313c;border-style: solid;border-width: 1px;&quot;&gt;&lt;div class=&quot;panelContent&quot; style=&quot;background-color: #fafbfc;&quot;&gt;
&lt;h3&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/h3&gt;

&lt;p&gt;Currently there are numerous cases where attempting to import a package causes an import cycle. Notable cases that cause import cycles are importing the &lt;tt&gt;x/mongo/driver/topology&lt;/tt&gt; package in the &lt;tt&gt;x/mongo/driver&lt;/tt&gt; package and trying to import the &lt;tt&gt;bson&lt;/tt&gt; package from the &lt;tt&gt;bson/primitive&lt;/tt&gt; package. As a result, there is a decent amount of unnecessary coupling via interfaces and odd functionality, like that stringifying a &lt;tt&gt;bson.D&lt;/tt&gt; does not print ExtJSON.&lt;/p&gt;

&lt;p&gt;Additionally, a lot of packages are importable by external projects despite the intended use case being strictly internal, such as the &lt;tt&gt;x/mongo/driver/uuid&lt;/tt&gt; package or the &lt;tt&gt;mongo/integration/mtest&lt;/tt&gt; package. These packages can be moved to an &lt;tt&gt;internal&lt;/tt&gt; directory to prevent import by external projects.&lt;/p&gt;

&lt;p&gt;Restructure the Go driver packages to minimize the probability of import cycles and internalize packages that aren&apos;t intended for use by external projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; Restructuring of all packages must be accomplished in a v2.0 driver; any restructuring before the v2.0 driver must be limited to packages in the &lt;tt&gt;x&lt;/tt&gt; directory.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Motivation&quot;&gt;&lt;/a&gt;&lt;b&gt;Motivation&lt;/b&gt;&lt;/h3&gt;
&lt;h4&gt;&lt;a name=&quot;Whoistheaffectedenduser%3F&quot;&gt;&lt;/a&gt;Who is the affected end user?&lt;/h4&gt;
&lt;p&gt;Go driver devs and any external dev who imports packages they think are intentionally exported but are not maintained for external use by the Go driver team.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Howdoesthisaffecttheenduser%3F&quot;&gt;&lt;/a&gt;How does this affect the end user?&lt;/h4&gt;
&lt;p&gt;For Go driver devs, they have to do extra work, maintain unnecessary coupling between packages, and miss or re-implement code across packages when an import is not possible. For external devs, they may use code that is not intended for use outside of the Go driver and may encounter bugs or unexpected behavior.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Howlikelyisitthatthisproblemorusecasewilloccur%3F&quot;&gt;&lt;/a&gt;How likely is it that this problem or use case will occur?&lt;/h4&gt;
&lt;p&gt;Import cycle problems are fairly common in the Go driver. Devs working on the &lt;tt&gt;x/mongo/driver&lt;/tt&gt; and &lt;tt&gt;x/mongo/driver/topology&lt;/tt&gt; packages run into them frequently.&lt;/p&gt;

&lt;p&gt;It&apos;s not clear how many external projects import packages from the Go driver that should be internal.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Iftheproblemdoesoccur%2Cwhataretheconsequencesandhowseverearethey%3F&quot;&gt;&lt;/a&gt;If the problem does occur, what are the consequences and how severe are they?&lt;/h4&gt;
&lt;p&gt;Can make some code changes in the Go driver significantly more difficult and/or time-consuming.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisissueurgent%3F&quot;&gt;&lt;/a&gt;Is this issue urgent?&lt;/h4&gt;
&lt;p&gt;No.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisticketrequiredbyadownstreamteam%3F&quot;&gt;&lt;/a&gt;Is this ticket required by a downstream team?&lt;/h4&gt;
&lt;p&gt;No.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Isthisticketonlyfortests%3F&quot;&gt;&lt;/a&gt;Is this ticket only for tests?&lt;/h4&gt;
&lt;p&gt;No.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;CastofCharacters&quot;&gt;&lt;/a&gt;&lt;b&gt;Cast of Characters&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Engineering Lead:&lt;br/&gt;
Document Author: &lt;br/&gt;
POCers: &lt;br/&gt;
Product Owner: &lt;br/&gt;
Program Manager: &lt;br/&gt;
Stakeholders:&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Channels%26Docs&quot;&gt;&lt;/a&gt;&lt;b&gt;Channels &amp;amp; Docs&lt;/b&gt;&lt;/h3&gt;
&lt;h4&gt;&lt;a name=&quot;SlackChannel&quot;&gt;&lt;/a&gt;Slack Channel&lt;/h4&gt;
&lt;h4&gt;&lt;a name=&quot;ScopeDocumentsome.url&quot;&gt;&lt;/a&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Scope Document|some.url&amp;#93;&lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;a name=&quot;TechnicalDesignDocumentsome.url&quot;&gt;&lt;/a&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Technical Design Document|some.url&amp;#93;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="2005693">GODRIVER-2353</key>
            <summary>Restructure Go driver packages to prevent import cycles and make some packages internal</summary>
                <type id="11" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14707&amp;avatarType=issuetype">Epic</type>
                                            <priority id="10300" iconUrl="https://jira.mongodb.org/images/icons/priorities/medium.svg">Unknown</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="12300">Won&apos;t Do</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="matt.dale@mongodb.com">Matt Dale</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Mar 2022 17:00:04 +0000</created>
                <updated>Thu, 22 Dec 2022 14:13:05 +0000</updated>
                            <resolved>Thu, 22 Dec 2022 14:12:56 +0000</resolved>
                                                                                        <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="4424446" author="dbeng-pm-bot" created="Mon, 21 Mar 2022 17:00:06 +0000"  >&lt;p&gt;If you are not logged in, you can view the tickets in this epic by following &lt;a href=&quot;https://jira.mongodb.org/issues/?jql=%22Epic%20Link%22%20%3D%20GODRIVER-2353&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_20965" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost Threshold %</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>100.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_20963" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Cost to Date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</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_10860" key="com.pyxis.greenhopper.jira:gh-epic-color">
                        <customfieldname>Epic Colour</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>ghx-label-11</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10858" key="com.pyxis.greenhopper.jira:gh-epic-label">
                        <customfieldname>Epic Name</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Prevent import cycles and internalize packages</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10859" key="com.pyxis.greenhopper.jira:gh-epic-status">
                        <customfieldname>Epic Status</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10642"><![CDATA[Done]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_20964" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Final Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_21553" key="com.atlassian.jira.plugin.system.customfieldtypes:labels">
                        <customfieldname>Quarter</customfieldname>
                        <customfieldvalues>
                                        <label>FY23Q4</label>
    
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i06z7w:</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>
                                                                                                                                                                                                                                        <customfield id="customfield_10856" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Scope Cost Estimate</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>