[ 
https://issues.apache.org/jira/browse/ARTEMIS-4197?focusedWorklogId=996497&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-996497
 ]

ASF GitHub Bot logged work on ARTEMIS-4197:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 16/Dec/25 15:17
            Start Date: 16/Dec/25 15:17
    Worklog Time Spent: 10m 
      Work Description: jbertram commented on PR #6080:
URL: https://github.com/apache/artemis/pull/6080#issuecomment-3661076487

   @brusdev, done!




Issue Time Tracking
-------------------

    Worklog Id:     (was: 996497)
    Time Spent: 1h  (was: 50m)

> AbstractJournalStorageManager address-settings not thread-safe
> --------------------------------------------------------------
>
>                 Key: ARTEMIS-4197
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4197
>             Project: Artemis
>          Issue Type: Bug
>            Reporter: Jelmer Marinus
>            Assignee: Justin Bertram
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> The AbstractJournalStorageManager contains the following code.
> {code:java}
> @Override
> public void storeAddressSetting(PersistedAddressSetting addressSetting) 
> throws Exception {
>    deleteAddressSetting(addressSetting.getAddressMatch());
>    try (ArtemisCloseable lock = closeableReadLock()) {
>       long id = idGenerator.generateID();
>       addressSetting.setStoreId(id);
>       bindingsJournal.appendAddRecord(id, 
> JournalRecordIds.ADDRESS_SETTING_RECORD, addressSetting, true);
>       mapPersistedAddressSettings.put(addressSetting.getAddressMatch(), 
> addressSetting);
>    }
> }{code}
> This code is used to update the AddressSettings through, i.e., the Artemis 
> management API.
> The AbstractJournalStorageManager also contains the following codeĀ 
> {code:java}
> @Override
> public List<PersistedAddressSetting> recoverAddressSettings() throws 
> Exception {
>    try (ArtemisCloseable lock = closeableReadLock()) {
>       return new ArrayList<>(mapPersistedAddressSettings.values());
>    }
> } {code}
> This code is called during, i.e., a config. reload when i.e. the broker.xml 
> gets changed.
> When a first thread executes the first code fragement and a second thread 
> executes the second fragment there is a possibility of the following:
>  # The first thread executes the deleteAddressSettings for address MY_ADDRESS;
>  # The second thread runs the whole recoverAddressSettings methodĀ 
>  # The first thread runs the remainder of the storeAddressSetting-method for 
> MY_ADDRESS.
> According to the second thread there where no addressSettings for the address 
> MY_ADDRESS. Because it ran in between of the delete and the put of the 
> storeAddressSetting-method.
> I think this can be fixed using read-/write-locks from the storageManagerLock.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to