[ https://issues.apache.org/jira/browse/SQOOP-2579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14934229#comment-14934229 ]
Sqoop QA bot commented on SQOOP-2579: ------------------------------------- Testing file [SQOOP-2579.patch|https://issues.apache.org/jira/secure/attachment/12764101/SQOOP-2579.patch] against branch sqoop2 took 0:56:46.233761. {color:green}Overall:{color} +1 all checks pass {color:green}SUCCESS:{color} Clean was successful {color:green}SUCCESS:{color} Patch applied correctly {color:green}SUCCESS:{color} Patch add/modify test case {color:green}SUCCESS:{color} License check passed {color:green}SUCCESS:{color} Patch compiled {color:green}SUCCESS:{color} All unit tests passed (executed 1428 tests) {color:green}SUCCESS:{color} Test coverage did not decreased ([report|https://builds.apache.org/job/PreCommit-SQOOP-Build/1735/artifact/patch-process/cobertura_report.txt]) {color:green}SUCCESS:{color} No new findbugs warnings ([report|https://builds.apache.org/job/PreCommit-SQOOP-Build/1735/artifact/patch-process/findbugs_report.txt]) {color:green}SUCCESS:{color} All integration tests passed (executed 89 tests) Console output is available [here|https://builds.apache.org/job/PreCommit-SQOOP-Build/1735/console]. This message is automatically generated. > Sqoop2: Refactore RepositoryManager to not load structure from repository > when loading jobs and links > ----------------------------------------------------------------------------------------------------- > > Key: SQOOP-2579 > URL: https://issues.apache.org/jira/browse/SQOOP-2579 > Project: Sqoop > Issue Type: Bug > Affects Versions: 1.99.6 > Reporter: Jarek Jarcec Cecho > Assignee: Abraham Fine > Attachments: SQOOP-2579.patch > > > This one will take a bit longer to explain, so please _beer_ with me :) > The current flow of configuration class is this one: > * Connector developer defines class and marks inputs that are required from > users with > [{{@Input}}|https://github.com/apache/sqoop/blob/sqoop2/common/src/main/java/org/apache/sqoop/model/Input.java] > annotation. This annotation can have several parameters ({{sensitive}}, > {{size}}, ...). > * As we can't use those classes everywhere (mainly we can't send them to > clients over the wire nor serialize them to repository), we have > [{{ConfigUtil}}|https://github.com/apache/sqoop/blob/sqoop2/common/src/main/java/org/apache/sqoop/model/ConfigUtils.java] > class that serializes them to [model > objects|https://github.com/apache/sqoop/tree/sqoop2/common/src/main/java/org/apache/sqoop/model]. > * Now {{ConnectorManager}} takes the model objects and persist them in memory > for the lifetime of Sqoop 2 server process (after restart we simply run the > {{ConfigUtils}} again, so nothing is lost). > * The {{RepositoryManager}} takes the model objects and persist them in > database. This is desirable because this way we can detect if the structures > actually changed (e.g. connector code has been updated) and we can call > upgrade routines. > On REST layer, we have following behavior: > * For {{/connector/}} we always call > [{{ConnectorManager}}|https://github.com/apache/sqoop/blob/sqoop2/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java] > to get the in memory structures. > * For {{/job}} and {{/links}} - e.g. to get actual values for those model > objects - we are using > [{{RepositoryManager}}|https://github.com/apache/sqoop/blob/sqoop2/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java] > instead. As the {{RepositoryManager}} is currently not using > {{ConnectorManager}} it uses the model objects that are serialized in the > database instead. > This behavior is a bit limiting because now if we want to improve the model > classes and add new information > ([Validations|https://issues.apache.org/jira/browse/SQOOP-1442], [Sensitive > keys for maps|https://issues.apache.org/jira/browse/SQOOP-2549]) we > absolutely have to serialize that information in database. And that means > that we have to do database upgrade, that means that if this information is > changed we have to do data upgrade, ... Even though that this is not required > as those kind of things can be kept in memory as we don't need to do any > action when they change. > Hence I would like to propose changing current behavior and making > {{RepositoryManager}} use {{ConnectroManager}} to read jobs and links > objects. This way we can have more in memory state and what state is > persisted in database. > Please note that I'm not suggesting to drop the model classes from repository > - we still need them to detect if metadata (the {{@Input}} annotation) has > changed and run upgrade if required. I'm only suggesting to not used this > serialized metadata if we are reading job and links objects. -- This message was sent by Atlassian JIRA (v6.3.4#6332)