-
Notifications
You must be signed in to change notification settings - Fork 8
Release Notes for CAO - Couchbase Operator 2-9-0 #45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
rao-shwe
wants to merge
26
commits into
release/2.9
Choose a base branch
from
DOC-13826-release-notes-cao-2-9-0
base: release/2.9
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+338
−54
Open
Changes from 17 commits
Commits
Show all changes
26 commits
Select commit
Hold shift + click to select a range
4644b6f
draft 1 of release notes for cao 2-9-0
rao-shwe 333593f
Updated preview file
rao-shwe fb77887
Updated preview file-a
rao-shwe 136e13a
testing preview
rao-shwe c7a6896
RN regenerated
rao-shwe 84b6582
testing preview 2
rao-shwe 39e0ce0
Regenerated the updated release notes
rao-shwe 3068774
Updated RN and generated whats new
rao-shwe 7c4209c
minor edit
rao-shwe 7d8d4a3
minor fix in RN main page
rao-shwe 17f611f
Minor edit in whatsnew
rao-shwe 300aa25
Another minor fix in whatsnew
rao-shwe b3f5539
Formatting fixes
rao-shwe 527bfca
Added n edited whats new from PM
rao-shwe df8a6a4
generated the edited n rewritten fixed issues
rao-shwe 99acfa6
Minor formatting fixes
rao-shwe e1203ad
replace the term operator with kubernetes
rao-shwe 1571caa
Added Known Issues
rao-shwe 1dc616f
minor grammar fix
rao-shwe bf618b4
Additional sections
rao-shwe de8cd20
Added link to Server docs
rao-shwe 6ed593e
changed 2-9-0 to 2-9 for consistency
rao-shwe 1a81e29
Listed and rewrote 8 more known issues
rao-shwe b2703d0
Merge branch 'release/2.9' into DOC-13826-release-notes-cao-2-9-0
rao-shwe d7d177e
Added 5 more Known Issues
rao-shwe a8fe96a
Updated preview file
rao-shwe File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,68 +1,200 @@ | ||
| = Release Notes for Couchbase Kubernetes Operator 2.9 | ||
|
|
||
| This page summarizes the fixes and changes in Couchbase Kubernetes Operator 2.9, and links to the associated issues and documentation. | ||
|
|
||
| == New Features | ||
|
|
||
| For information about new features and major improvements made in Couchbase Kubernetes Operator 2.9, see xref:whats-new.adoc[What's New]. | ||
|
|
||
| [#release-290] | ||
| == Release 2.9.0 (November 2025) | ||
| == Release 2.9 (December 2025) | ||
|
|
||
| Couchbase Operator 2.9.0 was released in November 2025. | ||
| This maintenance release contains fixes to issues. | ||
| Couchbase Kubernetes Operator 2.9 was released in December 2025. | ||
| This release contains fixes to issues. | ||
|
|
||
| [#fixed-issues-v290] | ||
| == Fixed Issues | ||
| == Fixed Issues in 2.9 | ||
|
|
||
| The issues fixed in this release are as follows. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-1537/[K8S-1537]*:: | ||
|
|
||
| The cluster UUID is no longer required when creating remote cluster connections. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-2829/[K8S-2829]*:: | ||
|
|
||
| You can now specify the `cao.couchbase.com/additionalArgs` annotation on CouchbaseBackup and CouchbaseRestore resources to pass additional `cbbackupmgr` arguments to the container. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3016/[K8S-3016]*:: | ||
|
|
||
| You can now specify the Couchbase Server password policy using the CouchbaseCluster resource. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3121/[K8S-3121]*:: | ||
|
|
||
| You can now specify to preserve the CouchbaseBackupRestore resource after the restore completes. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3153/[K8S-3153]*:: | ||
|
|
||
| New TCP tunables (`tcpKeepAliveIdle`, `tcpKeepAliveInterval`, `tcpKeepAliveProbes`, `tcpUserTimeout`) are now available through the CouchbaseCluster resource when using Couchbase Server 8.0. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3258/[K8S-3258]*:: | ||
|
|
||
| Added a new `logging.configNameReleasePrefix` boolean to the helm chart. | ||
| This defaults to false, but setting it to true will prefix the fluent-bit config with the release name. | ||
| Setting this to true for existing clusters will trigger recreation of all pods so should only really be used for new clusters. | ||
| Added the `logging.configNameReleasePrefix` boolean to the Helm chart. | ||
| The default value is `false`. | ||
| When set to `true`, the Operator prefixes the Fluent Bit configuration with the release name. | ||
| + | ||
| Couchbase recommends enabling this setting only on new clusters because enabling it on existing clusters triggers recreation of all pods. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4091/[K8S-4091]*:: | ||
| *https://jira.issues.couchbase.com/browse/K8S-3371/[K8S-3371]*:: | ||
|
|
||
| You can now specify environment variables for the CouchbaseBackup and CouchbaseBackupRestore pods to allow `cbbackupmgr` tuning. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3434/[K8S-3434]*:: | ||
|
|
||
| `spec.monitoring` is deprecated and no longer attaches an exporter sidecar to the Couchbase Server pod. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3535/[K8S-3535]*:: | ||
|
|
||
| If `couchbasecluster.spec.buckets.managed` is set to `false`, restoring from backup automatically creates buckets. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3616/[K8S-3616]*:: | ||
|
|
||
| New REST API bucket settings for the Data Service are now available in Couchbase Server 8.0. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3638/[K8S-3638]*:: | ||
|
|
||
| You can now specify a merge schedule on the CouchbaseBackup resource. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3646/[K8S-3646]*:: | ||
|
|
||
| You can now set the Query Service `CompletedStreamSize` using the CouchbaseCluster resource. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3650/[K8S-3650]*:: | ||
|
|
||
| When using Couchbase Server 8.0, you can no longer create Memcached buckets. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3715/[K8S-3715]*:: | ||
|
|
||
| Added RBAC roles for users to match new roles added in Couchbase Server 8.0. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3786/[K8S-3786]*:: | ||
|
|
||
| You can now specify `default` and `disk_io_optimized` for the Data Service reader threads. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3917/[K8S-3917]*:: | ||
|
|
||
| You can now set `overheadMemory` for `autoResourceAllocation` to specify a static overhead amount. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-3951/[K8S-3951]*:: | ||
|
|
||
| Updated the `spec.networking.addressFamily` field to accept `IPv4Only`, `IPv4Priority`, `IPv6Only` and `IPv6Priority`. | ||
| The current `IPv4/IPv6` values will have the `Ipv4/6Only` functionality. | ||
| I.e. | ||
| customers that have set the fields will not see any change. | ||
| `cao.couchbase.com/autoCompaction.magmaFragmentationPercentage` has been replaced by a field in the CouchbaseCluster CRD. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4013/[K8S-4013]*:: | ||
|
|
||
| You can now disable DNS resolution verification when creating pods before activating them in the cluster. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4016/[K8S-4016]*:: | ||
|
|
||
| Fixed a bug that caused a panic when a member pod became unresponsive. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4028/[K8S-4028]*:: | ||
|
|
||
| Added an upgrade stanza to the CouchbaseCluster resource to give users more control over upgrades. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4091/[K8S-4091]*:: | ||
|
|
||
| Updated `spec.networking.addressFamily` to accept `IPv4Only`, `IPv4Priority`, `IPv6Only`, and `IPv6Priority`. | ||
| The existing `IPv4` and `IPv6` values retain the `IPv4Only` and `IPv6Only` behavior, so no change is required for existing configurations. | ||
| + | ||
| These values are deprecated and will be removed in a future release. | ||
| + | ||
| These should be considered deprecated and will be removed in a future release. | ||
| + | ||
| The priority/only choice determines whether `addressFamilyOnly` is true or false. | ||
| The priority or only option determines whether `addressFamilyOnly` is set to `true` or `false`. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4097/[K8S-4097]*:: | ||
|
|
||
| The MirWatchdog is an out-of-band check that allows for additional alerting to be in place in the unlikely scenario that an Operator is unable to reconcile a cluster due to reasons outside of its controls/capabilities and which therefore require manual intervention by a user to resolve. | ||
| Scenarios include but are not limited to, tls expiration, couchbase authentication errors and loss of quorum. | ||
| By default this is disabled, but can be enabled and configured using the `mirWatchdog` field in the couchbase cluster CRD. | ||
| The MirWatchdog is an out-of-band check that provides additional alerting. | ||
| It is used when the Operator cannot reconcile a cluster due to reasons outside its control and requires manual user intervention. | ||
| Scenarios include, but are not limited to, TLS expiration, Couchbase authentication errors, and loss of quorum. | ||
| This feature is disabled by default but can be enabled and configured by using the `mirWatchdog` field in the CouchbaseCluster CRD. | ||
| If the cluster enters this condition, it will: | ||
| + | ||
| * Set the cluster_manual_intervention gauge metric to 1 | ||
| * Add (where possible) the `ManualInterventionRequired` condition to the cluster, with a message detailing the reason for entering the MIR state. | ||
| * Raise a `ManualInterventionRequired` Kubernetes event, with the event message set to the reason for entering manual intervention | ||
| * Optionally, reconciliation will be skipped until the manual intervention required state has been resolved, i.e. | ||
| the issue that put the cluster into that condition has been fixed. | ||
| * Set the `cluster_manual_intervention` gauge metric to `1`. | ||
| * Add the `ManualInterventionRequired` condition to the cluster, where possible, with a message describing the reason for entering the MIR state. | ||
| * Raise a `ManualInterventionRequired` Kubernetes event, with the message describing the reason for entering manual intervention. | ||
| * Optionally, skips reconciliation until the manual intervention required state is resolved, that is, until the issue that caused the condition is fixed. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4101/[K8S-4101]*:: | ||
|
|
||
| Added support for the Encryption at Rest feature of Couchbase Server 8.0. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4108/[K8S-4108]*:: | ||
|
|
||
| The CouchbaseUser resource now includes an `enabled` flag to allow administrators to enable or disable user accounts. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4109/[K8S-4109]*:: | ||
|
|
||
| The CouchbaseUser resource now allows the administrators to enforce password change on a user’s first login using the `couchbaseuser.spec.userPassword.requireInitialChange` field. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4111/[K8S-4111]*:: | ||
|
|
||
| CouchbaseBucket resources now support `durabilityImpossibleFallback` with values `disabled` and `fallbackToActiveAck`. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4112/[K8S-4112]*:: | ||
|
|
||
| Added multiple settings to CouchbaseBucket resources to configure XDCR Conflict Logging. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4114/[K8S-4114]*:: | ||
|
|
||
| Added a CouchbaseCluster resource setting that enables auto‑failover of Ephemeral Buckets with no replicas in Couchbase Server 8.0 and later versions. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4117/[K8S-4117]*:: | ||
|
|
||
| Added `data.diskUsageLimit` to the CouchbaseCluster resource to enable Disk Usage Guardrails. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4118/[K8S-4118]*:: | ||
|
|
||
| Added support for SDK Telemetry settings in Couchbase Server 8.0 and later versions. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4120/[K8S-4120]*:: | ||
|
|
||
| For CouchbaseBuckets, now the default storage engine is `magma` and the vBucketCount is `128`. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4144/[K8S-4144]*:: | ||
|
|
||
| In prior versions of Couchbase Operator, the metrics port annotation (`prometheus.io/port`) was set to 8091, even if TLS was enabled. | ||
| It will now correctly set to 18091. | ||
| In the earlier versions of Couchbase Operator, the metrics port annotation `prometheus.io/port` was set to `8091`, even when TLS was enabled. | ||
| It now correctly sets to `18091`. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4158/[K8S-4158]*:: | ||
|
|
||
| EvictionPolicy changes can now be applied to an online bucket during a swap rebalance. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4161/[K8S-4161]*:: | ||
|
|
||
| Operator 2.9.0 now allows you to set `spec.cluster.analytics.numReplicas`. | ||
| This feature is only supported for couchbase server versions 7.6+. | ||
| Operator 2.9.0 allows you to set `spec.cluster.analytics.numReplicas`. | ||
| This feature is supported only on Couchbase Server 7.6 and later versions. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4203/[K8S-4203]*:: | ||
|
|
||
| Fixed an issue where metrics scrapes became too large when the Operator managed many clusters. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4209/[K8S-4209]*:: | ||
|
|
||
| Full backups can now be resumed. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4273/[K8S-4273]*:: | ||
|
|
||
| Fixed an issue where the Operator failed to remove pods from the cluster. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4270/[K8S-4270]*:: | ||
| *https://jira.issues.couchbase.com/browse/K8S-4279/[K8S-4279]*:: | ||
|
|
||
| Potentially where we use `kubectl apply` for CRDS, we add a note that this error is possible in 2.9+, and to add `--server-side` to the `kubectl apply` command. | ||
| Fixed an issue where log message tags were inconsistent. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4286/[K8S-4286]*:: | ||
| *https://jira.issues.couchbase.com/browse/K8S-4349/[K8S-4349]*:: | ||
|
|
||
| In the latest build, | ||
| the mirWatchdog feature is now set to off by default. | ||
| The sequence has been adjusted to move the skip function after the validationRunner, | ||
| and changes have been included in the CRD. | ||
| Additionally, | ||
| the system now skips the DAC during status changes. | ||
| These updates aim to streamline operations and improve efficiency. | ||
| // Generated by [chatgpt:gpt-4o] | ||
| The CouchbaseCluster CRD now exceeds the size limit for client-side apply. | ||
| Use the `--server-side` option with `kubectl apply` to apply the resource. | ||
|
|
||
| *https://jira.issues.couchbase.com/browse/K8S-4404/[K8S-4404]*:: | ||
|
|
||
| Fixed an issue that caused upgrades to fail when image definitions used SHA256 digests. | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,26 +1,70 @@ | ||
| = What's New? | ||
| include::partial$constants.adoc[] | ||
|
|
||
| Autonomous Operator {operator-version-minor} introduces our new Cluster Migration functionality well as a number of other improvements and minor fixes. | ||
| Couchbase Kubernetes Operator 2.9.0 was released in December 2025. | ||
| New features and improvements are described below. | ||
|
|
||
| == Cluster Migration | ||
| For information about fixed and known issues, see the xref:release-notes.adoc[Release Notes]. | ||
|
|
||
| Cluster Migration allows you to transfer a currently-unmanaged Couchbase Server cluster over to being managed by the Operator, with zero downtime. | ||
| [#whats-new-290] | ||
| == New Features and Enhancements in 2.9.0 | ||
|
|
||
| See xref:concept-migration.adoc[Couchbase Cluster Migration] for more details. | ||
| Couchbase Kubernetes Operator 2.9.0 adds support for Couchbase Server 8.0 features and | ||
| introduces a circuit breaker called Manual Intervention Required (MIR) mode. | ||
| This release also improves the upgrade process by introducing a new upgrade object that enables more resilient automated upgrades. | ||
|
|
||
| == Admission Controller Improvements | ||
| === Support for Couchbase Server 8.0 Features | ||
|
|
||
| The Dynamic Admission Controller (DAC) will now warn if any cluster settings don't match our xref:best-practices.adoc#production-deployments[Best Practices for Production Deployments]. | ||
| Couchbase Server 8.0 introduces several key features, listed in xref:server:introduction:whats-new.adoc[What's New in Version 8.0], which are now configurable through Couchbase Kubernetes Operator 2.9.0. | ||
| These are the highlights: | ||
|
|
||
| The DAC will now prevent changes to the `CouchbaseCluster` spec while a hibernation is taking place. | ||
| If hibernation is enabled while a cluster is migrating, upgrading, scaling, or rebalancing, that process will conclude before the cluster enters hibernation. The DAC will warn when this is the case, and it will be visible in the operator logs. | ||
| * *Encryption at Rest:* Added support for a new `CouchbaseEncryptionKey` custom resource to manage encryption keys | ||
| and to specify which keys are used for each unit, such as buckets, configuration data, and logs. | ||
|
|
||
| To prevent any invalid resources failing to reconcile (i.e. if the DAC is not deployed in the current environment), the DAC Validation is now run at the beginning of the reconciliation loop. | ||
| Any invalid resources will be skipped for reconciliation, marked as `NotValid`, and logged. | ||
| * *Magma as the Default Storage Engine:* In Couchbase Server 8.0, magma with 128 vBuckets is the default storage engine for new buckets. | ||
rao-shwe marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| Therefore, for CouchbaseBuckets, now the default storage engine is `magma` and the vBucketCount is `128`. | ||
| Couchbase recommends setting the vBucket count to `1024` for high-throughput workloads. | ||
|
|
||
| == Miscellaneous Improvements | ||
| * *XDCR Conflict Logging for Active-Active Setups:* Added multiple settings to the CouchbaseBucket resource to set up XDCR Conflict Logging. | ||
|
|
||
| * Other features such as enabling and disabling user accounts, and new bucket settings such as for warmup. | ||
|
|
||
| === Manual Intervention Required (MIR) Mode | ||
|
|
||
| The MirWatchdog is an out-of-band check that provides additional alerting. | ||
| It's used when the Operator cannot reconcile a cluster due to reasons outside its control and requires manual user intervention. | ||
| Scenarios include TLS expiration, Couchbase authentication errors, and rebalance failures. | ||
|
|
||
| This feature is disabled by default but can be enabled and configured by using the `mirWatchdog` field in the CouchbaseCluster CRD. | ||
|
|
||
| For more information, see xref:tutorial-mirwatchdog.adoc[Monitor for Manual Intervention Scenarios]. | ||
|
|
||
| === Upgrade Process Improvements | ||
|
|
||
| Autonomous upgrades now provide improved user input and control through a new `upgrade` object in the CouchbaseCluster specification, | ||
| which contains all configurations for upgrading a cluster. | ||
| The previous ServerClass image-based approach is now hard deprecated. | ||
|
|
||
| This consolidation clarifies how to control and manage future upgrades. | ||
| All existing upgrade fields `upgradeProcess`, `upgradeStrategy`, and `rollingUpgrade` are deprecated, and moved under the `upgrade` object. | ||
|
|
||
| The new `upgrade` object has the following new fields: | ||
|
|
||
| * `UpgradeOrderType`: The unit of upgrade that can be a Node, ServerGroup, ServerClass, or Service. | ||
| * `UpgradeOrder`: The upgrade order of specified upgrade units. | ||
| * `stabilizationPeriod`: The wait time in seconds before upgrading the next unit. | ||
| * `previousVersionPodCount`: The number of pods to keep running on the previous version at the end of upgrade. | ||
|
|
||
| For more information, see xref:concept-upgrade.adoc[Upgrade Couchbase Server] and xref:howto-couchbase-upgrade.adoc[Upgrade a Couchbase Deployment]. | ||
|
|
||
| === Other Improvements | ||
|
|
||
| The following are additional important improvements: | ||
|
|
||
| * Support for changing the bucket eviction policy online without requiring a bucket restart. | ||
| * The ability to disable DNS resolution verification when creating pods before activating them in the cluster. | ||
| * Support for specifying `overheadMemory` for `autoResourceAllocation` to define a static overhead amount. | ||
| * Operator-backup now supports Periodic Merge in addition to Full Only and Full Incremental. | ||
| This strategy is better suited for some larger clusters. | ||
| You can specify a merge schedule on the CouchbaseBackup resource. | ||
| * Support for specifying the `cao.couchbase.com/additionalArgs` annotation on CouchbaseBackup and CouchbaseRestore resources to pass additional `cbbackupmgr` arguments to the container. | ||
|
|
||
| * Pod Disruption Budgets can now be set per-Server Class by enabling xref:resource/couchbasecluster.adoc#couchbaseclusters-spec-perserviceclasspdb[`couchbaseclusters.spec.perServiceClassPDB`]. | ||
| * Sample Buckets can now be loaded via the xref:resource/couchbasebucket.adoc[`CouchbaseBucket`] resource, by using the xref:reference-annotations.adoc#cao-couchbase-comsamplebucket[`cao.couchbase.com/sampleBucket`] annotation. | ||
| * Query-related RBAC roles (`query_use_sequential_scans`, `query_use_sequences`, and `query_manage_sequences`) have now been added to xref:resource/couchbasegroup.adoc#couchbasegroups-spec-roles-name[`couchbasegroups.spec.roles.name`]. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.