RFR: 8345139: Fix bugs and inconsistencies in the Provider services map [v7]
Francisco Ferrari Bihurriet
fferrari at openjdk.org
Thu Apr 3 22:05:07 UTC 2025
> 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 (fields)
> * `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 registering services through the Current or the Legacy API)
> * `boolean putService(Service svc)`
> * `boolean removeService(Service svc)`
> * `boolean putClassNameLegacy(ServiceKey key, String className, String propKey)`
> * `boolean putAliasLegacy(ServiceKey key, ServiceKey aliasKey, String propKey)`
> * `boolean putAttributeLegacy(ServiceKey key, String attrName, String attrValue, String propKey)`
> * `boolean removeLegacy(ServiceKey key, String className)`
> * `boolean removeAliasLegacy(ServiceKey key, ServiceKey aliasKey)`
> * `boolean removeAttributeLegacy(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 [GitHub Actions run](https://github.com/franferrax/jdk/actions/runs/12193211398))
> * `jdk/com/sun/crypto`
> * `jdk/java/security`
> * Including the new `jdk/java/security/Provider/Ser...
Francisco Ferrari Bihurriet has updated the pull request incrementally with one additional commit since the last revision:
Minor doc change missing.
Co-authored-by: Martin Balao Alonso <mbalao at redhat.com>
Co-authored-by: Francisco Ferrari Bihurriet <fferrari at redhat.com>
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/22613/files
- new: https://git.openjdk.org/jdk/pull/22613/files/413cd7f5..384f2a7b
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=22613&range=06
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=22613&range=05-06
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/22613.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22613/head:pull/22613
PR: https://git.openjdk.org/jdk/pull/22613
More information about the security-dev
mailing list