On Tue, 11 Feb 2025 23:33:49 GMT, Francisco Ferrari Bihurriet 
<fferr...@openjdk.org> wrote:

>> Hi, this pull request implements the fixes for bugs and inconsistencies 
>> described in [JDK-8345139](https://bugs.openjdk.org/browse/JDK-8345139 "Fix 
>> bugs and inconsistencies in the Provider services map").
>> 
>> #### New services map design
>> 
>> Here is the high-level hierarchy of the new services map design:
>> 
>> * `servicesMap` (`ServicesMap`)
>>     * Instances
>>         * `impl` (`ServicesMapImpl`)
>>             * `services` (`Map<ServiceKey, Service>`): unifies the previous 
>> `serviceMap` and `legacyMap`
>>             * `legacySvcKeys` (`Set<ServiceKey>`): set indicating which keys 
>> in `services` correspond to the Legacy API
>>             * `serviceProps` (`Map<ServiceKey, String>`): keeps track of the 
>> _provider Hashtable entries_ that originated services entries <sup>(1)</sup>
>>             * `serviceAttrProps` (`Map<ServiceKey, Map<UString, String>>`): 
>> keeps track of the _provider Hashtable entries_ that originated service 
>> attributes <sup>(1)</sup>
>>         * `serviceSet` (`AtomicReference<Set<Service>>`): part of a 
>> lock-free mechanism to implement a consistent version of the `getServices()` 
>> readers method
>>     * Writers' methods (for providers registration)
>>         * `Current asCurrent()`: returns `impl` seen as a `Current` 
>> interface implementer
>>             * `putService(Service svc)`
>>             * `removeService(Service svc)`
>>         * `Legacy asLegacy()`: returns `impl` seen as a `Legacy` interface 
>> implementer
>>             * `putClassName(ServiceKey key, String className, String 
>> propKey)`
>>             * `putAlias(ServiceKey key, ServiceKey aliasKey, String propKey)`
>>             * `putAttribute(ServiceKey key, String attrName, String 
>> attrValue, String propKey)`
>>             * `remove(ServiceKey key, String className)`
>>             * `removeAlias(ServiceKey key, ServiceKey aliasKey)`
>>             * `removeAttribute(ServiceKey key, String attrName, String 
>> attrValue)`
>>     * Readers' methods (for services users and `GetInstance` APIs)
>>         * `Set<Service> getServices()`
>>         * `Service getService(ServiceKey key)`
>>     * Other methods: default and copy constructors, `void clear()`
>> 
>> (1): to maintain the consistency between the provider's `servicesMap` and 
>> its _Hashtable entries_, even if Legacy API updates occur through 
>> _properties_ with different casing, or aliases instead of main algorithms.
>> 
>> #### Testing
>> 
>> As part of our testing, we observed all the tests pass in the following 
>> categories:
>> 
>> * `jdk:tier1` (see [...
>
> Francisco Ferrari Bihurriet has updated the pull request with a new target 
> base due to a merge or a rebase. The pull request now contains four commits:
> 
>  - Merge openjdk/master into JDK-8345139
>    
>    Fix conflict caused by e20bd018c4046870d0cf632bb8e5440cb9f5c3c2:
>      1. Ignore the change, as this had already been identified and fixed
>         (see JDK-8345139, section 3.1).
>      2. Remove the test, as it is already covered by
>         ServicesConsistency::testInvalidServiceNotReturned.
>      3. Add the corresponding bug ID to ServicesConsistency.
>    
>    Co-authored-by: Francisco Ferrari Bihurriet <fferr...@redhat.com>
>    Co-authored-by: Martin Balao Alonso <mba...@redhat.com>
>  - ServicesMapImpl class and Current, Legacy interfaces removed.
>    
>    Co-authored-by: Martin Balao Alonso <mba...@redhat.com>
>    Co-authored-by: Francisco Ferrari Bihurriet <fferr...@redhat.com>
>  - Copyright update.
>    
>    Co-authored-by: Martin Balao Alonso <mba...@redhat.com>
>    Co-authored-by: Francisco Ferrari Bihurriet <fferr...@redhat.com>
>  - 8345139: Fix bugs and inconsistencies in the Provider services map
>    
>    Co-authored-by: Francisco Ferrari Bihurriet <fferr...@redhat.com>
>    Co-authored-by: Martin Balao <mba...@redhat.com>

NOTE: as explained in the 35e2eaeac7438ebbbc72631091cbdc890f43b139 merge commit 
message, this PR now deletes `InvalidServiceTest.java` because that test is 
already covered by `ServicesConsistency.java`, since 
[JDK-8344361](https://bugs.openjdk.org/browse/JDK-8344361 "Restore null return 
for invalid services from legacy providers") corresponds with [JDK-8345139, 
section 3.1](https://bugs.openjdk.org/browse/JDK-8345139#:~:text=3.1,.,-3.2 
"Fix bugs and inconsistencies in the Provider services map, section 3.1").

https://github.com/openjdk/jdk/blob/35e2eaeac7438ebbbc72631091cbdc890f43b139/test/jdk/java/security/Provider/ServicesConsistency.java#L835-L839

Just in case, we made sure that the deleted `InvalidServiceTest.java` passes in 
this PR branch.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/22613#issuecomment-2654080891

Reply via email to