You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Steve Loughran (JIRA)" <ji...@apache.org> on 2019/07/24 14:54:00 UTC

[jira] [Created] (HADOOP-16456) Refactor the S3A codebase into a more maintainable and testable form

Steve Loughran created HADOOP-16456:
---------------------------------------

             Summary: Refactor the S3A codebase into a more maintainable and testable form
                 Key: HADOOP-16456
                 URL: https://issues.apache.org/jira/browse/HADOOP-16456
             Project: Hadoop Common
          Issue Type: Improvement
          Components: fs/s3
    Affects Versions: 3.3.0
            Reporter: Steve Loughran


The S3A Codebase has got too complex to be maintained. In particular,

* the lack of layering in the S3AFileSystem class means that all subcomponents (delegation, dynamo db, block outputstream etc) all get given a back reference and make arbitrary calls in to it.
* We can't test in isolation, and while integration tests are the most rigorous testing we can have, they are slow, hard to inject failures into and do not work on isolated parts of code
* The code within the S3A FileSystem calls the toplevel API calls internally, so mixing public interface with the implementation details
* We are adding context through S3Guard calls for: consistency, performance and recovery; we can't do that without a clean split between that public API and the internals

Proposed: 

# we carefully break up the S3AFileSystem into a layered design
# with a "StoreContext" to bind components of the connector to it
# and some form of operation context to be passed in with each request to represent the active operation and its state (including that for S3Guard BulkOperations)


See [refactoring S3A|https://github.com/steveloughran/engineering-proposals/blob/master/refactoring-s3a.md]

I've already started using some of this design in the HADOOP-15183 component, for the addition of those S3Guard bulk operations, and to add a medium-life "RenameOperation". The proposal document reviews that experience and discusses improvements.

As noted: this needs to be done with care. We still need to maintain the existing codebase; the more radically we change the code not only do we increase the risk of the changes being wrong, we make backporting that much harder. But we can't sustain the current design





--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-dev-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-dev-help@hadoop.apache.org