[
https://issues.apache.org/jira/browse/HDDS-15808?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Siyao Meng updated HDDS-15808:
------------------------------
Description:
h3. Problem
The {{hadoop-ozone/httpfsgateway}} module is the only remaining consumer of
{{com.googlecode.json-simple:json-simple}} (1.1.1), a library unmaintained
since 2012. Jackson ({{jackson-databind}}) is already a compile dependency of
the module, so json-simple is redundant.
h3. Approach
Migrate all JSON serialization in httpfsgateway from json-simple to Jackson,
then drop the dependency:
* {{JSONMapProvider}} serializes the response {{Map}} with a shared
{{ObjectMapper}}. {{AUTO_CLOSE_TARGET}} is disabled so the underlying response
stream stays open for the trailing newline and container managed close.
* {{JSONProvider}} (which only served to serialize json-simple
{{JSONStreamAware}} entities) is removed. Providers are registered by Jersey
package scanning via {{jersey.config.server.provider.packages}}, so deleting
the class unregisters it.
* In {{InstrumentationService}}, the {{Timer}}, {{VariableHolder}}, and
{{Sampler}} snapshot types no longer implement
{{JSONAware}}/{{JSONStreamAware}}. Their {{getJSON()}} methods return a
{{LinkedHashMap}} annotated with {{@JsonValue}}, so Jackson serializes each
object as that map and produces the same JSON.
* {{FSOperations}} and {{HttpFSServer}} use {{Map}}/{{List}}
({{LinkedHashMap}}/{{ArrayList}}) in place of {{JSONObject}}/{{JSONArray}}, and
reuse the module local {{JsonUtil.toJsonString}} helper.
* The dependency is removed from the module pom, and the version property plus
dependencyManagement entry are removed from the root pom. The json-simple
entries in the distribution {{bin/LICENSE.txt}} and the generated
{{jar-report.txt}} inventory are removed accordingly.
h3. Compatibility
The wire format is preserved. Both libraries emit standard JSON, {{AtomicLong}}
serializes as a bare number in both, and switching from {{HashMap}} to
{{LinkedHashMap}} only makes key order deterministic, which WebHDFS clients
parsing by key are unaffected by. The {{replaceAll}} call in
{{FSCreateSnapshot}}, originally undoing json-simple forward slash escaping,
becomes a harmless no-op since Jackson does not escape slashes.
h3. Testing
Added two focused unit tests in the module:
* {{TestInstrumentationSerialization}} verifies the {{@JsonValue}}
serialization of {{Timer}}, {{VariableHolder}}, and {{Sampler}}.
* {{TestJSONMapProvider}} verifies the provider emits compact JSON followed by
a trailing newline and does not close the underlying stream.
Module build, checkstyle, and rat pass; all module unit tests pass.
was:Migrate httpfsgateway JSON serialization from json-simple to Jackson.
> Replace json-simple with Jackson in httpfsgateway
> -------------------------------------------------
>
> Key: HDDS-15808
> URL: https://issues.apache.org/jira/browse/HDDS-15808
> Project: Apache Ozone
> Issue Type: Improvement
> Reporter: Siyao Meng
> Priority: Major
>
> h3. Problem
> The {{hadoop-ozone/httpfsgateway}} module is the only remaining consumer of
> {{com.googlecode.json-simple:json-simple}} (1.1.1), a library unmaintained
> since 2012. Jackson ({{jackson-databind}}) is already a compile dependency of
> the module, so json-simple is redundant.
> h3. Approach
> Migrate all JSON serialization in httpfsgateway from json-simple to Jackson,
> then drop the dependency:
> * {{JSONMapProvider}} serializes the response {{Map}} with a shared
> {{ObjectMapper}}. {{AUTO_CLOSE_TARGET}} is disabled so the underlying
> response stream stays open for the trailing newline and container managed
> close.
> * {{JSONProvider}} (which only served to serialize json-simple
> {{JSONStreamAware}} entities) is removed. Providers are registered by Jersey
> package scanning via {{jersey.config.server.provider.packages}}, so deleting
> the class unregisters it.
> * In {{InstrumentationService}}, the {{Timer}}, {{VariableHolder}}, and
> {{Sampler}} snapshot types no longer implement
> {{JSONAware}}/{{JSONStreamAware}}. Their {{getJSON()}} methods return a
> {{LinkedHashMap}} annotated with {{@JsonValue}}, so Jackson serializes each
> object as that map and produces the same JSON.
> * {{FSOperations}} and {{HttpFSServer}} use {{Map}}/{{List}}
> ({{LinkedHashMap}}/{{ArrayList}}) in place of {{JSONObject}}/{{JSONArray}},
> and reuse the module local {{JsonUtil.toJsonString}} helper.
> * The dependency is removed from the module pom, and the version property
> plus dependencyManagement entry are removed from the root pom. The
> json-simple entries in the distribution {{bin/LICENSE.txt}} and the generated
> {{jar-report.txt}} inventory are removed accordingly.
> h3. Compatibility
> The wire format is preserved. Both libraries emit standard JSON,
> {{AtomicLong}} serializes as a bare number in both, and switching from
> {{HashMap}} to {{LinkedHashMap}} only makes key order deterministic, which
> WebHDFS clients parsing by key are unaffected by. The {{replaceAll}} call in
> {{FSCreateSnapshot}}, originally undoing json-simple forward slash escaping,
> becomes a harmless no-op since Jackson does not escape slashes.
> h3. Testing
> Added two focused unit tests in the module:
> * {{TestInstrumentationSerialization}} verifies the {{@JsonValue}}
> serialization of {{Timer}}, {{VariableHolder}}, and {{Sampler}}.
> * {{TestJSONMapProvider}} verifies the provider emits compact JSON followed
> by a trailing newline and does not close the underlying stream.
> Module build, checkstyle, and rat pass; all module unit tests pass.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]