Uploaded image for project: 'Maven Install Plugin'
  1. Maven Install Plugin
  2. MINSTALL-103

Concurrency problem with installAtEnd in parallel builds

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.5.1
    • 2.5.2
    • install:install
    • None
    • Patch

    Description

      In the method execute() of the class InstallMojo, the counter readyProjectsCounter is used to find the last project to be installed. Unfortunately the counter is incremented before the installation request is added to the queued installRequests. This may lead to a race condition where requests are added to installRequests after the (single) execution of the queued requests. When this happens to a module to be installed, it is not installed.

      Example scenario:
      Think of a parallel build of a reactor with only two modules A and B where the execution of the install plugin for module A is stopped by a context change directly after the line that sets projectsReady. The counter readyProjectsCounter is now one step before the "finish line".

      If the install plugin for module B is executed now, it will set projectsReady, enqueue its own installation request and then execute all enqueued installation requests. The installation request for A is not enqueued at this point, so it can't be executed - and the install plugin for module A won't execute it because it thinks "it will be executed later".

      Granted, the window of vulnerability is rather small, but such bugs tend to bite you unexpectedly...

      Attachments

        1. install-plugin.patch
          2 kB
          Hermann Josef Hill

        Issue Links

          Activity

            People

              rfscholte Robert Scholte
              hjhill Hermann Josef Hill
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: