You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by "Purshotam Shah (JIRA)" <ji...@apache.org> on 2014/09/13 08:53:33 UTC

[jira] [Assigned] (OOZIE-1998) Framework for common implementation of HA commands

     [ https://issues.apache.org/jira/browse/OOZIE-1998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Purshotam Shah reassigned OOZIE-1998:
-------------------------------------

    Assignee: Purshotam Shah

> Framework for common implementation of HA commands
> --------------------------------------------------
>
>                 Key: OOZIE-1998
>                 URL: https://issues.apache.org/jira/browse/OOZIE-1998
>             Project: Oozie
>          Issue Type: Bug
>          Components: HA
>            Reporter: Purshotam Shah
>            Assignee: Purshotam Shah
>
> {code}
> @SuppressWarnings("unchecked")
>     public void updateShareLib(HttpServletRequest request, HttpServletResponse response) throws IOException {
>         JSONArray jsonArray = new JSONArray();
>         JobsConcurrencyService jc = Services.get().get(JobsConcurrencyService.class);
>         if (jc.isAllServerRequest(request.getParameterMap())) {
>             Map<String, String> servers = jc.getOtherServerUrls();
>             for (String otherUrl : servers.values()) {
>                 // It's important that we specify ALL_SERVERS_PARAM=false, so that other oozie server should not call other oozie
>                 //servers to update sharelib (and creating an infinite recursion)
>                 String serverUrl = otherUrl + "/v2/admin/" + RestConstants.ADMIN_UPDATE_SHARELIB + "?"
>                         + RestConstants.ALL_SERVER_REQUEST + "=false";
>                 try {
>                     Reader reader = AuthUrlClient.callServer(serverUrl);
>                     JSONObject json = (JSONObject) JSONValue.parse(reader);
>                     jsonArray.add(json);
>                 }
>                 catch (Exception e) {
>                     JSONObject errorJson = new JSONObject();
>                     errorJson.put(JsonTags.SHARELIB_UPDATE_HOST, otherUrl);
>                     errorJson.put(JsonTags.SHARELIB_UPDATE_STATUS, e.getMessage());
>                     JSONObject newJson = new JSONObject();
>                     newJson.put(JsonTags.SHARELIB_LIB_UPDATE, errorJson);
>                     jsonArray.add(newJson);
>                 }
>             }
>             //For current server
>             JSONObject newJson = new JSONObject();
>             newJson.put(JsonTags.SHARELIB_LIB_UPDATE, updateLocalShareLib(request));
>             jsonArray.add(newJson);
>             sendJsonResponse(response, HttpServletResponse.SC_OK, jsonArray);
>         }
>         else {
>             JSONObject newJson = new JSONObject();
>             newJson.put(JsonTags.SHARELIB_LIB_UPDATE, updateLocalShareLib(request));
>             sendJsonResponse(response, HttpServletResponse.SC_OK, newJson);
>         }
>     }
>     @SuppressWarnings("unchecked")
>     private JSONObject updateLocalShareLib(HttpServletRequest request) {
>         ShareLibService shareLibService = Services.get().get(ShareLibService.class);
>         JSONObject json = new JSONObject();
>         json.put(JsonTags.SHARELIB_UPDATE_HOST, ConfigUtils.getOozieEffectiveUrl());
>         try {
>             json.putAll(shareLibService.updateShareLib());
>             json.put(JsonTags.SHARELIB_UPDATE_STATUS, "Successful");
>         }
>         catch (Exception e) {
>             json.put(JsonTags.SHARELIB_UPDATE_STATUS, e.getClass().getName() + ": " + e.getMessage());
>         }
>         return json;
>     }
> {code}
> Currently for each HA command, Oozie need to propagate http request to all servers.
> Each of this input request calls ZK to get list of HA servers and call all other server to get response.
> Current server combines response from all other server + current server and send back response to user.
> In current implementation, each command have their own implementation (leading to multiple duplicate code).
> To minimize duplicate code and ease of implementation of  HA command, we  can have framework which can does above steps.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)