Uploaded image for project: 'Publishing'
  1. Publishing
  2. PUBLISHING-44

java.util.ConcurrentModificationException on info.magnolia.publishing.sender.operation.HttpPublicationOperation.getHeaders(Package<?>)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Neutral Neutral
    • 1.0.7, 1.1
    • 1.0.6
    • None

      When multiple publications are executed at the same time sometimes a ConcurrentModificationException is thrown:

      ERROR info.magnolia.publishing.command.PublicationCommand 18.03.2018 12:01:57 – Receiver: bechtlePublic-1, error: null [requesturi:]
      java.util.ConcurrentModificationException: null
      at java.util.HashMap$HashIterator.nextNode(HashMap.java:1442) ~[?:1.8.0_161]
      at java.util.HashMap$KeyIterator.next(HashMap.java:1466) ~[?:1.8.0_161]
      at info.magnolia.publishing.sender.operation.HttpPublicationOperation.getHeaders(HttpPublicationOperation.java:204) ~[magnolia-publishing-sender-1.0.1.jar:?]
      at info.magnolia.publishing.sender.operation.HttpPublicationOperation.execute(HttpPublicationOperation.java:101) ~[magnolia-publishing-sender-1.0.1.jar:?]
      at info.magnolia.publishing.sender.operation.HttpPublicationOperation.execute(HttpPublicationOperation.java:74) ~[magnolia-publishing-sender-1.0.1.jar:?]
      at info.magnolia.publishing.transactional.sender.TransactionalSender$2.doRun(TransactionalSender.java:110) ~[magnolia-publishing-transactional-sender-1.0.jar:?]
      at info.magnolia.publishing.sender.AbstractSender$Task.run(AbstractSender.java:291) ~[magnolia-publishing-core-1.0.1.jar:?]
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_161]
      at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:124) ~[guava-23.1-jre.jar:?]
      at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57) ~[guava-23.1-jre.jar:?]
      at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:77) ~[guava-23.1-jre.jar:?]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_161]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_161]
      at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_161]
      

      The problems seems to be in :

       private Header[] getHeaders(Package<?> pckg) {
              Collection<Header> headers = new ArrayList<>();
              String md5 = pckg.getProperties().get(RESOURCE_MAPPING_MD_ATTRIBUTE);
              String pass = System.currentTimeMillis() + ";" + userName + ";" + md5;
              pckg.addProperty(ACTIVATION_AUTH, SecurityUtil.encrypt(pass));
              for (String key : pckg.getProperties().keySet()) {
                  if (RESOURCE_MAPPING_MD_ATTRIBUTE.equals(key)) {
                      // do not send md5 in plain string
                      continue;
                  }
                  String value = encode(pckg.getProperties().get(key));
      
                  headers.add(new BasicHeader(key, value));
              }
              return headers.toArray(new Header[0]);
          }
      

        Acceptance criteria

              jsimak Jaroslav Simak
              miruela Mercedes Iruela
              Nucleus
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Bug DoR
                  Task DoD

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Remaining Estimate - 0d
                    0d
                    Logged:
                    Time Spent - 1h
                    1h