Jira Software 10.4.x release notes
We're pleased to present Jira Software 10.4.
Highlights
Read the upgrade notes for important info about this release and see the full list of issues resolved.
Compatible applications
If you're looking for compatible Jira applications, look no further: Jira Service Management 10.4 release notes.
Automation queue supportability improvements
For: ADMINS
Sometimes, when the automation queue grows, rule execution can be delayed or remains unexecuted. To enhance the monitoring capabilities of the automation queues, we’re introducing new alerts, metrics, and diagnostic REST endpoints:
- Alerts will now appear on the Diagnostics page when the unprocessed and unclaimed messages in the automation queue surpass the configurable threshold configurable threshold (defaults to one hour).
- You can see a new instrumentation and JMX metric (
automation.queue.earliest.unprocessed.message.age.secs.max_stale_10mins
) that reflects the age of the oldest unprocessed and unclaimed message in the queue. - You can use new API endpoints to analyze events and rules that are contributing to the queue growth:
- GET
/rest/cb-automation/latest/insight/automation-queue/by-event-type
that retrieves and groups the contents of the automation queue by event type. - GET
/rest/cb-automation/latest/insight/automation-queue/by-rule
that retrieves and groups the contents of the automation queue by rule. - GET
/rest/cb-automation/latest/insight/audit/by-event-source
that analyzes audit logs and groups them by event source for a specified timeframe.
Explore how to monitor automation queues
Rotate your encryption keys like clockwork
For: ADMINS
Jira already automatically encrypts plaintext secrets through default secrets encryption. Now, you can further protect your system through encryption key rotation. Use API calls to re-encrypt your existing secrets with a new key, and to manage your inactive keys. This extra security is available for both single-node and clustered environments. Details on encryption key rotation
Customize the order of issue link types
For: ADMINS
Admins can now customize the order of issue link types. We’ve introduced two sorting methods:
- Drag and drop: Rearrange the order directly in the issue link type table.
- Sort alphabetically: Use the dropdown menu to sort in ascending or descending order.
Note that if you have a large number of issue link types, the page may become slow or even unresponsive. In this case, you can disable the feature by adding com.atlassian.jira.issuelinkingtypes.customiseorder
to the list in the DarkSiteFeatures page.
New Jira Stats logging location
For: ADMINS
Starting from Jira 10.4.0, Jira Stats will be logged to atlassian-jira-stats.log
instead of atlassian-jira.log
. This is configured by the log4j2.xml
properties. Learn more about logging in
Tools like Splunk, Grafana, Logstash, Kibana, or any other that rely on Jira Stats must be adapted to the new file location. If the log4j2.xml
configuration file is overridden, adapt it manually:
<JiraHomeAppender name="jirastatslog"
fileName="atlassian-jira-stats.log"
filePattern="atlassian-jira-stats.log.%i">
<PatternLayout alwaysWriteExceptions="false">
<Pattern>${StackTraceFilteringPattern}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="20480 KB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="min" max="10"/>
</JiraHomeAppender>
(...)
<!-- #####################################################-->
<!-- # Jira Stats logging-->
<!-- #####################################################-->
<!-- # on INFO logs queue stats per node, on DEBUG logs queue stats per queue-->
<Logger name="com.atlassian.jira.cluster.distribution.localq.LocalQCacheManager" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.cluster.dbr.DBRSenderStats$TotalAndSnapshotDBRSenderStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.cluster.dbr.DBRReceiverStats$TotalAndSnapshotDBRReceiverStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.WriterWithStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.versioning.EntityVersioningManagerWithStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.issue.index.IndexingStatsManager" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.MonitoringIndexWriter" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.ha.ReIndexStatsLogger" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.ha.ReplicationStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.plugin.PluginTransactionListener" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.propertyset.TotalAndSnapshotPropertyEntryStoreStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.ha.TotalAndSnapshotIndexRepairStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.QueueingIndexStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<!-- # Cluster Authentication stats-->
<Logger name="com.atlassian.jira.cluster.distribution.localq.rmi.auth.ClusterAuthStatsManager" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.index.stats.TotalAndSnapshotIndexSearcherStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
<Logger name="com.atlassian.jira.util.stats.JiraStats" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
If you add a new custom JiraStat and it doesn't use the JiraStats.create(…), then you must also add the custom logger from this class as:
<Logger name="logger_name_usually_a_package_and_classname" level="INFO" additivity="false">
<AppenderRef ref="jirastatslog"/>
</Logger>
New Search API now available
For: ADMINS
We're laying the foundations for more agnostic option for search tooling, starting with adding an abstraction layer. This change is key to enable future OpenSearch support. The new abstraction layer introduces a new Search API. Search and indexing performance will remain consistent with the existing Lucene implementation. This change also marks the start of our plans to remove Lucene from public APIs. Read the Search API upgrade guide
Resolved issues
See the full list of the issues we’ve resolved throughout the lifecycle of Jira Software 10.4.