Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-19873

attachment directory structure has exceeded maximum file handles

    • We collect Jira feedback from various sources, and we evaluate what we've collected when planning our product roadmap. To understand how this piece of feedback will be reviewed, see our Implementation of New Features Policy.

      NOTE: This suggestion is for JIRA Server. Using JIRA Cloud? See the corresponding suggestion.

      One of our projects now has over 32000 issues that each have attachments.
      When a user went to give the 32,001 issue an attachment, the file system refused it because it has a maximum of 32000 file handles per directory.
      The problem is that each issue gets its own sub-directory underneath the project key in the attachment path.
      There needs to be some sort of arbitrary middle directory between the project key and the issue directory, similar to how photos are stored on SIM cards. Maybe group issues in groups by the fourth power of ten?

      For example, instead of

      /usr/local/jira/attachments/JRA/JRA-123456

      have

      /usr/local/jira/attachments/JRA/120000/JRA-123456

      For now we've moved the 1,000 oldest attachments to another directory, effectively deleting them from the Jira web site.
      So we have a couple weeks to come up with some patch for this or we keep effectively archiving or deleting old attachments.

      I understand from our OS folks that it would be possible to recompile the kernel to have a higher maximum file handle setting. However, my management wants to pursue an application solution rather than risk the OS recompilation solution.

      Here is the error reported in the logs:

      2009-11-23 10:15:37,371 TP-Processor94 ERROR [jira.issue.fields.AttachmentSystemField] Error occurred while creating attachment.
      com.atlassian.jira.web.util.AttachmentException: Cannot write to attachment directory. Check that the application server and JIRA have permissions to write to: /usr/local/jira/attachments/NOV/NOV-83753
              at com.atlassian.jira.util.AttachmentUtils.checkValidAttachmentDirectory(AttachmentUtils.java:109)
              at com.atlassian.jira.issue.managers.DefaultAttachmentManager.createAttachment(DefaultAttachmentManager.java:277)
              at com.atlassian.jira.issue.managers.DefaultAttachmentManager.createAttachment(DefaultAttachmentManager.java:294)
              at com.atlassian.jira.issue.fields.AttachmentSystemField.addAttachment(AttachmentSystemField.java:162)
              at com.atlassian.jira.issue.fields.AttachmentSystemField.createValue(AttachmentSystemField.java:141)
              at com.atlassian.jira.workflow.function.issue.IssueCreateFunction.execute(IssueCreateFunction.java:85)
              at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:869)
              at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1265)
              at com.opensymphony.workflow.AbstractWorkflow.initialize(AbstractWorkflow.java:618)
              at com.atlassian.jira.workflow.SimpleWorkflowManager.createIssue(SimpleWorkflowManager.java:217)
              at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:378)
              at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:326)
              at sun.reflect.GeneratedMethodAccessor999.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at com.atlassian.util.profiling.object.ObjectProfiler.profiledInvoke(ObjectProfiler.java:71)
              at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:28)
              at $Proxy3.createIssue(Unknown Source)
              at com.atlassian.jira.web.action.issue.CreateIssueDetails.createIssue(CreateIssueDetails.java:141)
              at com.atlassian.jira.web.action.issue.CreateIssueDetails.doExecute(CreateIssueDetails.java:110)
              at webwork.action.ActionSupport.execute(ActionSupport.java:153)
              at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:54)
              at webwork.dispatcher.GenericDispatcher.executeAction(GenericDispatcher.java:132)
              at com.atlassian.jira.web.dispatcher.JiraServletDispatcher.service(JiraServletDispatcher.java:178)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.atlassian.jira.web.filters.AccessLogFilter.doFilter(AccessLogFilter.java:73)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
              at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
              at com.atlassian.jira.web.filters.SitemeshExcludePathFilter.doFilter(SitemeshExcludePathFilter.java:38)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:192)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.atlassian.seraph.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:120)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:125)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
              at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:132)
      

            [JRASERVER-19873] attachment directory structure has exceeded maximum file handles

            Katherine Yabut made changes -
            Workflow Original: JAC Suggestion Workflow [ 3053184 ] New: JAC Suggestion Workflow 3 [ 3692309 ]
            Status Original: RESOLVED [ 5 ] New: Closed [ 6 ]
            Tomasz Bartyzel made changes -
            Remote Link Original: This issue links to "Page (Atlassian Documentation)" [ 391045 ]
            Owen made changes -
            Workflow Original: Confluence Workflow - Public Facing v4 [ 2603824 ] New: JAC Suggestion Workflow [ 3053184 ]
            Tomasz Bartyzel made changes -
            Remote Link New: This issue links to "Page (Atlassian Documentation)" [ 391045 ]
            kitkat (Inactive) made changes -
            Remote Link Original: This issue links to "Page (Confluence)" [ 365616 ]
            kitkat (Inactive) made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 365588 ]
            kitkat (Inactive) made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 365616 ]
            Rachel Lin (Inactive) made changes -
            Workflow Original: JIRA PM Feature Request Workflow v2 - TEMP [ 2580729 ] New: Confluence Workflow - Public Facing v4 [ 2603824 ]
            Status Original: Closed [ 6 ] New: Resolved [ 5 ]
            Ignat (Inactive) made changes -
            Workflow Original: JIRA Bug Workflow w Kanban v6 - TEMP [ 2358954 ] New: JIRA PM Feature Request Workflow v2 - TEMP [ 2580729 ]
            Status Original: Resolved [ 5 ] New: Closed [ 6 ]
            Tomasz Bartyzel made changes -
            Remote Link Original: This issue links to "Page (Atlassian Documentation)" [ 264671 ] New: This issue links to "Page (Atlassian Documentation)" [ 264671 ]

              ldurkan Skywalker
              adc6ee404f6d Jeff Kirby
              Votes:
              35 Vote for this issue
              Watchers:
              40 Start watching this issue

                Created:
                Updated:
                Resolved: