[PUBLISHING-44] java.util.ConcurrentModificationException on info.magnolia.publishing.sender.operation.HttpPublicationOperation.getHeaders(Package<?>) Created: 19/Mar/18  Updated: 29/Mar/22  Resolved: 20/Feb/19

Status: Closed
Project: Publishing
Component/s: None
Affects Version/s: 1.0.6
Fix Version/s: 1.0.7, 1.1

Type: Bug Priority: Neutral
Reporter: Mercedes Iruela Assignee: Jaroslav Simak
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 0d
Time Spent: 1h
Original Estimate: Not Specified

Issue Links:
relation
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Date of First Response:
Epic Link: Support
Sprint: Features 4, Features 5
Story Points: 3
Team: Nucleus

 Description   

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]);
    }

Generated at Mon Feb 12 10:34:51 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.