Details

    • Type: New Feature
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.9.0
    • Fix Version/s: 0.9.0
    • Component/s: TajoMaster
    • Labels:
      None

      Description

      TajoMaster is a Single Point of Failure in a Tajo Cluster because TajoMaster is the central controlling entity for all components of the Tajo system. TajoMaster failure prevents clients from submitting new queries to the cluster, and results in the disruption of the ability to run insert overwrite queries because the TajoWorker can’t apply its statistical information to CatalogStore. Therefore, the high-availability (HA) of TajoMaster is essential for the high-availability of Tajo generally.

      1. TajoMasterHAdraft.pdf
        816 kB
        Jaehwa Jung
      2. TAJO-704.Henrick.01.patch.txt
        12 kB
        Alvin Henrick

        Issue Links

          Activity

          Hide
          blrunner Jaehwa Jung added a comment -

          I uploaded the draft proposal.

          Show
          blrunner Jaehwa Jung added a comment - I uploaded the draft proposal.
          Hide
          alvinhenrick Alvin Henrick added a comment -

          Was going through the list of issues found this interesting one so thought of sharing my views .

          How about using Akka library actor based model for HA .It solves lot of problem like concurrency , load balancing and fault tolerance.

          I have attached a patch to demonstrate the feature.You can try to kill the TajoMaster and Supervisor actor will detect master is down via TajoMasterDownException and will try to restart the server.

          It is just a sample we can do lot more and better with all your suggestions.

          Thanks!
          Warm Regards,
          Alvin.

          Show
          alvinhenrick Alvin Henrick added a comment - Was going through the list of issues found this interesting one so thought of sharing my views . How about using Akka library actor based model for HA .It solves lot of problem like concurrency , load balancing and fault tolerance. I have attached a patch to demonstrate the feature.You can try to kill the TajoMaster and Supervisor actor will detect master is down via TajoMasterDownException and will try to restart the server. It is just a sample we can do lot more and better with all your suggestions. Thanks! Warm Regards, Alvin.
          Hide
          blrunner Jaehwa Jung added a comment -

          Hello Alvin

          I really appreciate your comment. It seems to be very useful to implement this issue.
          And If possible, would you mind taking this issue?

          Actually, I haven't started this issue yet. But, you seem to start this issue. I'm Ok even if you proceed this issue. Would you mind taking this issue?

          Best Regards
          Jaehwa

          Show
          blrunner Jaehwa Jung added a comment - Hello Alvin I really appreciate your comment. It seems to be very useful to implement this issue. And If possible, would you mind taking this issue? Actually, I haven't started this issue yet. But, you seem to start this issue. I'm Ok even if you proceed this issue. Would you mind taking this issue? Best Regards Jaehwa
          Hide
          alvinhenrick Alvin Henrick added a comment -

          Hi Jaehwa , Not a problem. My pleasure .I will assign it to myself. If I encounter any issue might need help down the road from you guys.

          Thanks!
          Warm Regards,
          Alvin.

          Show
          alvinhenrick Alvin Henrick added a comment - Hi Jaehwa , Not a problem. My pleasure .I will assign it to myself. If I encounter any issue might need help down the road from you guys. Thanks! Warm Regards, Alvin.
          Hide
          alvinhenrick Alvin Henrick added a comment -

          Hi Jaehwa , Not a problem. My pleasure .I will assign it to myself. If I encounter any issue might need help down the road from you guys.

          Thanks!
          Warm Regards,
          Alvin.

          Show
          alvinhenrick Alvin Henrick added a comment - Hi Jaehwa , Not a problem. My pleasure .I will assign it to myself. If I encounter any issue might need help down the road from you guys. Thanks! Warm Regards, Alvin.
          Hide
          blrunner Jaehwa Jung added a comment -

          Hi Alvin!

          Thank you for your volunteering!
          Well, just ask if you need help.

          Regards
          Jaehwa

          Show
          blrunner Jaehwa Jung added a comment - Hi Alvin! Thank you for your volunteering! Well, just ask if you need help. Regards Jaehwa
          Hide
          githubbot ASF GitHub Bot added a comment -

          GitHub user blrunner opened a pull request:

          https://github.com/apache/tajo/pull/77

          TAJO-704: TajoMaster HA

          I implemented TajoMaster HA Manager utilizing HDFS Cluster. I defined a interface named HAManager, and I implemented HAManagerWithHDFS with the interface.

          To use TajoMaster HA, you have to set tajo.master.ha.enable=true at tajo-site.xml. And then, you just run standby master. All master informations will record to hdfs cluster, and all tajo service will refer master service address using hdfs cluster.

          For reference, this patch includes a few issues as follows:

          • It just implemented one unit test case because of TAJO-942.
          • If you kill current master and you already ran tsql, you have to restart tsql. because new master doesn't know existing session ids. We need to handle this issue at another ticket.

          You can merge this pull request into a Git repository by running:

          $ git pull https://github.com/blrunner/tajo TAJO-704

          Alternatively you can review and apply these changes as the patch at:

          https://github.com/apache/tajo/pull/77.patch

          To close this pull request, make a commit to your master/trunk branch
          with (at least) the following in the commit message:

          This closes #77


          commit 47d6c6a32010621b94b31a9871d3a5cd44968667
          Author: blrunner <jhjung@gruter.com>
          Date: 2014-07-15T14:32:32Z

          initial commit: TajoMaster HA Manager utilizing HDFS Cluster.

          commit 0b6276738ad4be278d9ab7d222fef78419d42b62
          Author: blrunner <jhjung@gruter.com>
          Date: 2014-07-15T16:25:34Z

          Adding HA elector to client side.


          Show
          githubbot ASF GitHub Bot added a comment - GitHub user blrunner opened a pull request: https://github.com/apache/tajo/pull/77 TAJO-704 : TajoMaster HA I implemented TajoMaster HA Manager utilizing HDFS Cluster. I defined a interface named HAManager, and I implemented HAManagerWithHDFS with the interface. To use TajoMaster HA, you have to set tajo.master.ha.enable=true at tajo-site.xml. And then, you just run standby master. All master informations will record to hdfs cluster, and all tajo service will refer master service address using hdfs cluster. For reference, this patch includes a few issues as follows: It just implemented one unit test case because of TAJO-942 . If you kill current master and you already ran tsql, you have to restart tsql. because new master doesn't know existing session ids. We need to handle this issue at another ticket. You can merge this pull request into a Git repository by running: $ git pull https://github.com/blrunner/tajo TAJO-704 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/tajo/pull/77.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #77 commit 47d6c6a32010621b94b31a9871d3a5cd44968667 Author: blrunner <jhjung@gruter.com> Date: 2014-07-15T14:32:32Z initial commit: TajoMaster HA Manager utilizing HDFS Cluster. commit 0b6276738ad4be278d9ab7d222fef78419d42b62 Author: blrunner <jhjung@gruter.com> Date: 2014-07-15T16:25:34Z Adding HA elector to client side.
          Hide
          tajoqa Tajo QA added a comment -

          -1 overall. Here are the results of testing the latest attachment
          http://issues.apache.org/jira/secure/attachment/12638124/TAJO-704.Henrick.01.patch.txt
          against master revision 1867c53.

          -1 patch. The patch command could not apply the patch.

          -1 patch. The patch command could not apply the patch.

          Console output: https://builds.apache.org/job/PreCommit-TAJO-Build/467//console

          This message is automatically generated.

          Show
          tajoqa Tajo QA added a comment - -1 overall. Here are the results of testing the latest attachment http://issues.apache.org/jira/secure/attachment/12638124/TAJO-704.Henrick.01.patch.txt against master revision 1867c53. -1 patch. The patch command could not apply the patch. -1 patch. The patch command could not apply the patch. Console output: https://builds.apache.org/job/PreCommit-TAJO-Build/467//console This message is automatically generated.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-49288171

          I've rebased the patch against master branch.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-49288171 I've rebased the patch against master branch.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-49386901

          I added auto failover for running queries.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-49386901 I added auto failover for running queries.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-49950851

          Thanks @blrunner,
          I'll review today.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-49950851 Thanks @blrunner, I'll review today.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-50111555

          @blrunner, thanks for the great contribution!
          I tested the latest patch on a real cluster, and it seems that there are a couple of problems.
          Here are descriptions.

          • When HA mode is disabled, the web UI doesn't work well.
          • There are some problems when derby is used as catalog store.
          • I couldn't execute the backup master due to the duplicated pid problem.
          • The duplicated catalog uri also incurred a problem.
          • When I used a different catalog uri as a workaround for the above problem, there were differences between the catalog of active master and that of backup master, obviously.
          • I manually added tables to the backup master catalog to test the failover during the query execution. When the active master is killed, the backup master becomes to active and every worker is registered to the changed active master successfully, but the information of executed query is disappeared.
          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-50111555 @blrunner, thanks for the great contribution! I tested the latest patch on a real cluster, and it seems that there are a couple of problems. Here are descriptions. When HA mode is disabled, the web UI doesn't work well. There are some problems when derby is used as catalog store. I couldn't execute the backup master due to the duplicated pid problem. The duplicated catalog uri also incurred a problem. When I used a different catalog uri as a workaround for the above problem, there were differences between the catalog of active master and that of backup master, obviously. I manually added tables to the backup master catalog to test the failover during the query execution. When the active master is killed, the backup master becomes to active and every worker is registered to the changed active master successfully, but the information of executed query is disappeared.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-50131715

          Hi, @jihoonson

          Thanks for your detailed review. I replied for your descriptions as follows:

          • I've just fixed NPE in the web UI via Hyunsik. Because my desktop has broken down.
          • DerbyStore is not appropriate for TajoMaster HA. As you know, just one tajo master invoke the store. If another master try to invoke it, it never run itself. Also, if we set another catalog uri for backup master, it is a incorrect configuration. Because they are unequal in every way.
          • If you run two masters on same host and you set same directory for pid, you must meet pid error. But I think that it is trivial problem. Because we can avoid easily by documents.
          • If backup master become active, existing running query will finish successfully, and you will see success message in tsql. But you will never find executed query history in the web UI. Because TajoMaster contains its query history in memory, thus backup master can't know previous active master information. I already know this problem. And I'll save query simple history in share storage (like HDFS).

          For reference, I'll write documents for TajoMaster HA. And I'll update start-tajo.sh to start backup masters.

          Cheers

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-50131715 Hi, @jihoonson Thanks for your detailed review. I replied for your descriptions as follows: I've just fixed NPE in the web UI via Hyunsik. Because my desktop has broken down. DerbyStore is not appropriate for TajoMaster HA. As you know, just one tajo master invoke the store. If another master try to invoke it, it never run itself. Also, if we set another catalog uri for backup master, it is a incorrect configuration. Because they are unequal in every way. If you run two masters on same host and you set same directory for pid, you must meet pid error. But I think that it is trivial problem. Because we can avoid easily by documents. If backup master become active, existing running query will finish successfully, and you will see success message in tsql. But you will never find executed query history in the web UI. Because TajoMaster contains its query history in memory, thus backup master can't know previous active master information. I already know this problem. And I'll save query simple history in share storage (like HDFS). For reference, I'll write documents for TajoMaster HA. And I'll update start-tajo.sh to start backup masters. Cheers
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-50256948

          @blrunner, thanks for your kind reply and documentation!
          I'll further review your patch.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-50256948 @blrunner, thanks for your kind reply and documentation! I'll further review your patch.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51043233

          Hi @jihoonson

          I added a document for TajoMaster HA.
          And I'll implement shell script to launch masters after committing https://issues.apache.org/jira/browse/TAJO-990.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51043233 Hi @jihoonson I added a document for TajoMaster HA. And I'll implement shell script to launch masters after committing https://issues.apache.org/jira/browse/TAJO-990 .
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51086877

          I implemented the HA admin tool, you can use it as follows:

          • $TAJO_HOME/bin/tajo haadmin -formatHA
          • $TAJO_HOME/bin/tajo haadmin -transitionToActive <target tajo.master.umbilical-rpc.address>
          • $TAJO_HOME/bin/tajo haadmin -transitionToBackup <target tajo.master.umbilical-rpc.address>
          • $TAJO_HOME/bin/tajo haadmin -getState <target tajo.master.umbilical-rpc.address>
          • Note
            If you want to format HA state, you have to shutdown your tajo cluster before formatting.
          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51086877 I implemented the HA admin tool, you can use it as follows: $TAJO_HOME/bin/tajo haadmin -formatHA $TAJO_HOME/bin/tajo haadmin -transitionToActive <target tajo.master.umbilical-rpc.address> $TAJO_HOME/bin/tajo haadmin -transitionToBackup <target tajo.master.umbilical-rpc.address> $TAJO_HOME/bin/tajo haadmin -getState <target tajo.master.umbilical-rpc.address> Note If you want to format HA state, you have to shutdown your tajo cluster before formatting.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51118478

          Thanks @blrunner and sorry but I am hard to review now because I'm in short holidays from today. I'll come back after two days.
          May I review after holydays?

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51118478 Thanks @blrunner and sorry but I am hard to review now because I'm in short holidays from today. I'll come back after two days. May I review after holydays?
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51136842

          Hi @jihoonson,

          No problem and have a good holidays.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51136842 Hi @jihoonson, No problem and have a good holidays.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51139716

          Thanks for your understanding.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51139716 Thanks for your understanding.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51930714

          Hi @jihoonson

          I would appreciate it if you could review the latest patch.

          Cheers

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51930714 Hi @jihoonson I would appreciate it if you could review the latest patch. Cheers
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-51987735

          Sorry for late review.
          I'll review it today.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-51987735 Sorry for late review. I'll review it today.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218127

          — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java —
          @@ -628,6 +633,31 @@ public void close() {
          }
          }

          + // In TajoMaster HA mode, if TajoCli can't connect existing active master,
          + // this should try to connect new active master.
          + private void checkMasterStatus() {
          + try {
          + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
          + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS
          — End diff –

          It would be better to use conf.getVar() instead of conf.get().

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218127 — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java — @@ -628,6 +633,31 @@ public void close() { } } + // In TajoMaster HA mode, if TajoCli can't connect existing active master, + // this should try to connect new active master. + private void checkMasterStatus() { + try { + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS — End diff – It would be better to use conf.getVar() instead of conf.get().
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218142

          — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java —
          @@ -628,6 +633,31 @@ public void close() {
          }
          }

          + // In TajoMaster HA mode, if TajoCli can't connect existing active master,
          + // this should try to connect new active master.
          + private void checkMasterStatus() {
          + try {
          + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
          + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS
          + .varname), conf)) {
          + String baseDatabase = client.getBaseDatabase();
          + conf.set(ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS.varname,
          — End diff –

          It would be better to use conf.setVar() instead of conf.set().

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218142 — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java — @@ -628,6 +633,31 @@ public void close() { } } + // In TajoMaster HA mode, if TajoCli can't connect existing active master, + // this should try to connect new active master. + private void checkMasterStatus() { + try { + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS + .varname), conf)) { + String baseDatabase = client.getBaseDatabase(); + conf.set(ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS.varname, — End diff – It would be better to use conf.setVar() instead of conf.set().
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218363

          — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java —
          @@ -628,6 +633,31 @@ public void close() {
          }
          }

          + // In TajoMaster HA mode, if TajoCli can't connect existing active master,
          + // this should try to connect new active master.
          + private void checkMasterStatus() {
          + try {
          + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
          + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS
          + .varname), conf))

          { + String baseDatabase = client.getBaseDatabase(); + conf.set(ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS.varname, + HAServiceUtil.getMasterClientName(conf)); + + client.close(); + commands.clear(); + + client = new TajoClient(conf, baseDatabase); + context.setCurrentDatabase(client.getCurrentDatabase()); + + initHistory(); + initCommands(); + }

          + }
          + } catch (Exception e) {
          — End diff –

          I think that exceptions should be handled properly. It seems that the IOException can occur when a new tajo client is created. If an IOException occurs, the 'client' value will be not updated, and TajoCli might try to connect to the old master.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218363 — Diff: tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java — @@ -628,6 +633,31 @@ public void close() { } } + // In TajoMaster HA mode, if TajoCli can't connect existing active master, + // this should try to connect new active master. + private void checkMasterStatus() { + try { + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + if (!HAServiceUtil.isMasterAlive(conf.get(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS + .varname), conf)) { + String baseDatabase = client.getBaseDatabase(); + conf.set(ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS.varname, + HAServiceUtil.getMasterClientName(conf)); + + client.close(); + commands.clear(); + + client = new TajoClient(conf, baseDatabase); + context.setCurrentDatabase(client.getCurrentDatabase()); + + initHistory(); + initCommands(); + } + } + } catch (Exception e) { — End diff – I think that exceptions should be handled properly. It seems that the IOException can occur when a new tajo client is created. If an IOException occurs, the 'client' value will be not updated, and TajoCli might try to connect to the old master.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218468

          — Diff: tajo-client/src/main/java/org/apache/tajo/client/TajoAdmin.java —
          @@ -416,12 +420,41 @@ public void processKill(Writer writer, String queryIdStr)

          private void processMasters(Writer writer) throws ParseException, IOException,
          ServiceException, SQLException {

          • String confMasterServiceAddr = tajoClient.getConf().getVar(TajoConf.ConfVars.TAJO_MASTER_UMBILICAL_RPC_ADDRESS);
          • InetSocketAddress masterAddress = NetUtils.createSocketAddr(confMasterServiceAddr);
          • writer.write(masterAddress.getHostName());
          • writer.write("\n");
            + checkMasterStatus();
            + if (tajoConf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
            +
            + List<String> list = HAServiceUtil.getMasters(tajoConf);
            + int i = 0;
            + for (String master : list)
            Unknown macro: { + if (i > 0) { + writer.write(" "); + } + writer.write(master); + i++; + }

            + writer.write("\n");
            + } else

            { + String confMasterServiceAddr = tajoClient.getConf().getVar(TajoConf.ConfVars.TAJO_MASTER_UMBILICAL_RPC_ADDRESS); + InetSocketAddress masterAddress = NetUtils.createSocketAddr(confMasterServiceAddr); + writer.write(masterAddress.getHostName()); + writer.write("\n"); + }

            }

          + // In TajoMaster HA mode, if TajoAdmin can't connect existing active master,
          + // this should try to connect new active master.
          + private void checkMasterStatus() {
          — End diff –

          TajoAdmin.checkMasterStatus() function has the same name and shares some codes with TajoCli.checkMasterStatus(). We can move these functions to one location such as HAServiceUtil, because it will help the code maintainance.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218468 — Diff: tajo-client/src/main/java/org/apache/tajo/client/TajoAdmin.java — @@ -416,12 +420,41 @@ public void processKill(Writer writer, String queryIdStr) private void processMasters(Writer writer) throws ParseException, IOException, ServiceException, SQLException { String confMasterServiceAddr = tajoClient.getConf().getVar(TajoConf.ConfVars.TAJO_MASTER_UMBILICAL_RPC_ADDRESS); InetSocketAddress masterAddress = NetUtils.createSocketAddr(confMasterServiceAddr); writer.write(masterAddress.getHostName()); writer.write("\n"); + checkMasterStatus(); + if (tajoConf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + + List<String> list = HAServiceUtil.getMasters(tajoConf); + int i = 0; + for (String master : list) Unknown macro: { + if (i > 0) { + writer.write(" "); + } + writer.write(master); + i++; + } + writer.write("\n"); + } else { + String confMasterServiceAddr = tajoClient.getConf().getVar(TajoConf.ConfVars.TAJO_MASTER_UMBILICAL_RPC_ADDRESS); + InetSocketAddress masterAddress = NetUtils.createSocketAddr(confMasterServiceAddr); + writer.write(masterAddress.getHostName()); + writer.write("\n"); + } } + // In TajoMaster HA mode, if TajoAdmin can't connect existing active master, + // this should try to connect new active master. + private void checkMasterStatus() { — End diff – TajoAdmin.checkMasterStatus() function has the same name and shares some codes with TajoCli.checkMasterStatus(). We can move these functions to one location such as HAServiceUtil, because it will help the code maintainance.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218650

          — Diff: tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java —
          @@ -0,0 +1,297 @@
          +/**
          + * Licensed to the Apache Software Foundation (ASF) under one
          + * or more contributor license agreements. See the NOTICE file
          + * distributed with this work for additional information
          + * regarding copyright ownership. The ASF licenses this file
          + * to you under the Apache License, Version 2.0 (the
          + * "License"); you may not use this file except in compliance
          + * with the License. You may obtain a copy of the License at
          + *
          + * http://www.apache.org/licenses/LICENSE-2.0
          + *
          + * Unless required by applicable law or agreed to in writing, software
          + * distributed under the License is distributed on an "AS IS" BASIS,
          + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
          + * See the License for the specific language governing permissions and
          + * limitations under the License.
          + */
          +
          +package org.apache.tajo.util;
          +
          +import org.apache.hadoop.fs.*;
          +import org.apache.tajo.TajoConstants;
          +import org.apache.tajo.conf.TajoConf;
          +
          +import javax.net.SocketFactory;
          +import java.io.IOException;
          +import java.net.InetSocketAddress;
          +import java.net.Socket;
          +import java.util.ArrayList;
          +import java.util.List;
          +
          +public class HAServiceUtil {
          +
          + private final static int MASTER_UMBILICAL_RPC_ADDRESS = 1;
          + private final static int MASTER_CLIENT_RPC_ADDRESS = 2;
          + private final static int RESOURCE_TRACKER_RPC_ADDRESS = 3;
          + private final static int CATALOG_ADDRESS = 4;
          + private final static int MASTER_INFO_ADDRESS = 5;
          +
          + public static InetSocketAddress getMasterUmbilicalAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_UMBILICAL_RPC_ADDRESS); + }

          +
          + public static String getMasterUmbilicalName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterUmbilicalAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterClientAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_CLIENT_RPC_ADDRESS); + }

          +
          + public static String getMasterClientName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterClientAddress(conf)); + }

          +
          + public static InetSocketAddress getResourceTrackerAddress(TajoConf conf)

          { + return getMasterAddress(conf, RESOURCE_TRACKER_RPC_ADDRESS); + }

          +
          + public static String getResourceTrackerName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getResourceTrackerAddress(conf)); + }

          +
          + public static InetSocketAddress getCatalogAddress(TajoConf conf)

          { + return getMasterAddress(conf, CATALOG_ADDRESS); + }

          +
          + public static String getCatalogName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getCatalogAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterInfoAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_INFO_ADDRESS); + }

          +
          + public static String getMasterInfoName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterInfoAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterAddress(TajoConf conf, int type) {
          + InetSocketAddress masterAddress = null;
          +
          + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
          + try {
          + FileSystem fs = getFileSystem(conf);
          + Path[] paths = getSystemPath(conf);
          +
          + if (fs.exists(paths[1])) {
          + FileStatus[] files = fs.listStatus(paths[1]);
          +
          + if (files.length == 1) {
          + Path file = files[0].getPath();
          + String hostAddress = file.getName().replaceAll("_", ":");
          + FSDataInputStream stream = fs.open(file);
          + String data = stream.readUTF();
          + stream.close();
          +
          + String[] addresses = data.split("_");
          +
          + switch (type) {
          + case 1:
          — End diff –

          It would be great if you use the defined name instead of defined values.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218650 — Diff: tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java — @@ -0,0 +1,297 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.tajo.util; + +import org.apache.hadoop.fs.*; +import org.apache.tajo.TajoConstants; +import org.apache.tajo.conf.TajoConf; + +import javax.net.SocketFactory; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.ArrayList; +import java.util.List; + +public class HAServiceUtil { + + private final static int MASTER_UMBILICAL_RPC_ADDRESS = 1; + private final static int MASTER_CLIENT_RPC_ADDRESS = 2; + private final static int RESOURCE_TRACKER_RPC_ADDRESS = 3; + private final static int CATALOG_ADDRESS = 4; + private final static int MASTER_INFO_ADDRESS = 5; + + public static InetSocketAddress getMasterUmbilicalAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_UMBILICAL_RPC_ADDRESS); + } + + public static String getMasterUmbilicalName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterUmbilicalAddress(conf)); + } + + public static InetSocketAddress getMasterClientAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_CLIENT_RPC_ADDRESS); + } + + public static String getMasterClientName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterClientAddress(conf)); + } + + public static InetSocketAddress getResourceTrackerAddress(TajoConf conf) { + return getMasterAddress(conf, RESOURCE_TRACKER_RPC_ADDRESS); + } + + public static String getResourceTrackerName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getResourceTrackerAddress(conf)); + } + + public static InetSocketAddress getCatalogAddress(TajoConf conf) { + return getMasterAddress(conf, CATALOG_ADDRESS); + } + + public static String getCatalogName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getCatalogAddress(conf)); + } + + public static InetSocketAddress getMasterInfoAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_INFO_ADDRESS); + } + + public static String getMasterInfoName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterInfoAddress(conf)); + } + + public static InetSocketAddress getMasterAddress(TajoConf conf, int type) { + InetSocketAddress masterAddress = null; + + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + try { + FileSystem fs = getFileSystem(conf); + Path[] paths = getSystemPath(conf); + + if (fs.exists(paths [1] )) { + FileStatus[] files = fs.listStatus(paths [1] ); + + if (files.length == 1) { + Path file = files [0] .getPath(); + String hostAddress = file.getName().replaceAll("_", ":"); + FSDataInputStream stream = fs.open(file); + String data = stream.readUTF(); + stream.close(); + + String[] addresses = data.split("_"); + + switch (type) { + case 1: — End diff – It would be great if you use the defined name instead of defined values.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16218653

          — Diff: tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java —
          @@ -0,0 +1,297 @@
          +/**
          + * Licensed to the Apache Software Foundation (ASF) under one
          + * or more contributor license agreements. See the NOTICE file
          + * distributed with this work for additional information
          + * regarding copyright ownership. The ASF licenses this file
          + * to you under the Apache License, Version 2.0 (the
          + * "License"); you may not use this file except in compliance
          + * with the License. You may obtain a copy of the License at
          + *
          + * http://www.apache.org/licenses/LICENSE-2.0
          + *
          + * Unless required by applicable law or agreed to in writing, software
          + * distributed under the License is distributed on an "AS IS" BASIS,
          + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
          + * See the License for the specific language governing permissions and
          + * limitations under the License.
          + */
          +
          +package org.apache.tajo.util;
          +
          +import org.apache.hadoop.fs.*;
          +import org.apache.tajo.TajoConstants;
          +import org.apache.tajo.conf.TajoConf;
          +
          +import javax.net.SocketFactory;
          +import java.io.IOException;
          +import java.net.InetSocketAddress;
          +import java.net.Socket;
          +import java.util.ArrayList;
          +import java.util.List;
          +
          +public class HAServiceUtil {
          +
          + private final static int MASTER_UMBILICAL_RPC_ADDRESS = 1;
          + private final static int MASTER_CLIENT_RPC_ADDRESS = 2;
          + private final static int RESOURCE_TRACKER_RPC_ADDRESS = 3;
          + private final static int CATALOG_ADDRESS = 4;
          + private final static int MASTER_INFO_ADDRESS = 5;
          +
          + public static InetSocketAddress getMasterUmbilicalAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_UMBILICAL_RPC_ADDRESS); + }

          +
          + public static String getMasterUmbilicalName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterUmbilicalAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterClientAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_CLIENT_RPC_ADDRESS); + }

          +
          + public static String getMasterClientName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterClientAddress(conf)); + }

          +
          + public static InetSocketAddress getResourceTrackerAddress(TajoConf conf)

          { + return getMasterAddress(conf, RESOURCE_TRACKER_RPC_ADDRESS); + }

          +
          + public static String getResourceTrackerName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getResourceTrackerAddress(conf)); + }

          +
          + public static InetSocketAddress getCatalogAddress(TajoConf conf)

          { + return getMasterAddress(conf, CATALOG_ADDRESS); + }

          +
          + public static String getCatalogName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getCatalogAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterInfoAddress(TajoConf conf)

          { + return getMasterAddress(conf, MASTER_INFO_ADDRESS); + }

          +
          + public static String getMasterInfoName(TajoConf conf)

          { + return NetUtils.normalizeInetSocketAddress(getMasterInfoAddress(conf)); + }

          +
          + public static InetSocketAddress getMasterAddress(TajoConf conf, int type) {
          + InetSocketAddress masterAddress = null;
          +
          + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
          + try {
          + FileSystem fs = getFileSystem(conf);
          + Path[] paths = getSystemPath(conf);
          +
          + if (fs.exists(paths[1])) {
          + FileStatus[] files = fs.listStatus(paths[1]);
          +
          + if (files.length == 1) {
          + Path file = files[0].getPath();
          + String hostAddress = file.getName().replaceAll("_", ":");
          + FSDataInputStream stream = fs.open(file);
          + String data = stream.readUTF();
          + stream.close();
          +
          + String[] addresses = data.split("_");
          +
          + switch (type)

          { + case 1: + masterAddress = NetUtils.createSocketAddr(hostAddress); + break; + case 2: + masterAddress = NetUtils.createSocketAddr(addresses[0]); + break; + case 3: + masterAddress = NetUtils.createSocketAddr(addresses[1]); + break; + case 4: + masterAddress = NetUtils.createSocketAddr(addresses[2]); + break; + case 5: + masterAddress = NetUtils.createSocketAddr(addresses[3]); + break; + default: + break; + }

          + }
          + }
          +
          + } catch (Exception e)

          { + e.printStackTrace(); + }

          + }
          +
          + if (masterAddress == null) {
          + switch (type) {
          + case 1:
          — End diff –

          It would be great if you use the defined name instead of defined values.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16218653 — Diff: tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java — @@ -0,0 +1,297 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.tajo.util; + +import org.apache.hadoop.fs.*; +import org.apache.tajo.TajoConstants; +import org.apache.tajo.conf.TajoConf; + +import javax.net.SocketFactory; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.ArrayList; +import java.util.List; + +public class HAServiceUtil { + + private final static int MASTER_UMBILICAL_RPC_ADDRESS = 1; + private final static int MASTER_CLIENT_RPC_ADDRESS = 2; + private final static int RESOURCE_TRACKER_RPC_ADDRESS = 3; + private final static int CATALOG_ADDRESS = 4; + private final static int MASTER_INFO_ADDRESS = 5; + + public static InetSocketAddress getMasterUmbilicalAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_UMBILICAL_RPC_ADDRESS); + } + + public static String getMasterUmbilicalName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterUmbilicalAddress(conf)); + } + + public static InetSocketAddress getMasterClientAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_CLIENT_RPC_ADDRESS); + } + + public static String getMasterClientName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterClientAddress(conf)); + } + + public static InetSocketAddress getResourceTrackerAddress(TajoConf conf) { + return getMasterAddress(conf, RESOURCE_TRACKER_RPC_ADDRESS); + } + + public static String getResourceTrackerName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getResourceTrackerAddress(conf)); + } + + public static InetSocketAddress getCatalogAddress(TajoConf conf) { + return getMasterAddress(conf, CATALOG_ADDRESS); + } + + public static String getCatalogName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getCatalogAddress(conf)); + } + + public static InetSocketAddress getMasterInfoAddress(TajoConf conf) { + return getMasterAddress(conf, MASTER_INFO_ADDRESS); + } + + public static String getMasterInfoName(TajoConf conf) { + return NetUtils.normalizeInetSocketAddress(getMasterInfoAddress(conf)); + } + + public static InetSocketAddress getMasterAddress(TajoConf conf, int type) { + InetSocketAddress masterAddress = null; + + if (conf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) { + try { + FileSystem fs = getFileSystem(conf); + Path[] paths = getSystemPath(conf); + + if (fs.exists(paths [1] )) { + FileStatus[] files = fs.listStatus(paths [1] ); + + if (files.length == 1) { + Path file = files [0] .getPath(); + String hostAddress = file.getName().replaceAll("_", ":"); + FSDataInputStream stream = fs.open(file); + String data = stream.readUTF(); + stream.close(); + + String[] addresses = data.split("_"); + + switch (type) { + case 1: + masterAddress = NetUtils.createSocketAddr(hostAddress); + break; + case 2: + masterAddress = NetUtils.createSocketAddr(addresses[0]); + break; + case 3: + masterAddress = NetUtils.createSocketAddr(addresses[1]); + break; + case 4: + masterAddress = NetUtils.createSocketAddr(addresses[2]); + break; + case 5: + masterAddress = NetUtils.createSocketAddr(addresses[3]); + break; + default: + break; + } + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + if (masterAddress == null) { + switch (type) { + case 1: — End diff – It would be great if you use the defined name instead of defined values.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/77#discussion_r16219222

          — Diff: tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java —
          @@ -271,6 +272,17 @@ public void setStop() {
          public void run() {
          startTime = System.currentTimeMillis();
          try {
          + // In TajoMaster HA mode, if this servlet can't connect existing active master,
          + // this should try to connect new active master.
          + TajoConf conf = tajoClient.getConf();
          — End diff –

          This is also same with TajoAdmin.checkMasterStatus(). If you move checkMasterStatus() to any other util classes, please update this code, too.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on a diff in the pull request: https://github.com/apache/tajo/pull/77#discussion_r16219222 — Diff: tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java — @@ -271,6 +272,17 @@ public void setStop() { public void run() { startTime = System.currentTimeMillis(); try { + // In TajoMaster HA mode, if this servlet can't connect existing active master, + // this should try to connect new active master. + TajoConf conf = tajoClient.getConf(); — End diff – This is also same with TajoAdmin.checkMasterStatus(). If you move checkMasterStatus() to any other util classes, please update this code, too.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-52144626

          @blrunner, thanks for your great work!
          The patch looks good to me in overall. I left some minor comments.
          I'll conduct some tests on a real cluster.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-52144626 @blrunner, thanks for your great work! The patch looks good to me in overall. I left some minor comments. I'll conduct some tests on a real cluster.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-52456134

          Hi @jihoonson.

          I updated the patch with your ideas. For reference, I implemented another utility class for client. Because I couldn't implement in tajo common module by dependency issue.

          I found some client side bugs when I had tested the patch on testing cluster (consists of 10 nodes). So, I fixed it and committed it to my private branch.

          If you can review it again, I will be really glad for you.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-52456134 Hi @jihoonson. I updated the patch with your ideas. For reference, I implemented another utility class for client. Because I couldn't implement in tajo common module by dependency issue. I found some client side bugs when I had tested the patch on testing cluster (consists of 10 nodes). So, I fixed it and committed it to my private branch. If you can review it again, I will be really glad for you.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-52621086

          +1
          Thanks for your work!!

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-52621086 +1 Thanks for your work!!
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner commented on the pull request:

          https://github.com/apache/tajo/pull/77#issuecomment-52645251

          Hi @jihoonson

          Thank you for your review.
          I've just committed it to the master branch.

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner commented on the pull request: https://github.com/apache/tajo/pull/77#issuecomment-52645251 Hi @jihoonson Thank you for your review. I've just committed it to the master branch.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user blrunner closed the pull request at:

          https://github.com/apache/tajo/pull/77

          Show
          githubbot ASF GitHub Bot added a comment - Github user blrunner closed the pull request at: https://github.com/apache/tajo/pull/77
          Hide
          hudson Hudson added a comment -

          SUCCESS: Integrated in Tajo-master-build #341 (See https://builds.apache.org/job/Tajo-master-build/341/)
          TAJO-704: TajoMaster HA (jaehwa) (blrunner: rev b16d13addacc8c03f7b46b912a02231cea4c0861)

          • tajo-client/src/main/java/org/apache/tajo/client/TajoHAClientUtil.java
          • tajo-docs/src/main/sphinx/configuration/ha_configuration.rst
          • tajo-core/src/main/java/org/apache/tajo/worker/TajoWorker.java
          • tajo-core/src/main/resources/webapps/admin/index.jsp
          • tajo-client/src/main/java/org/apache/tajo/cli/TajoHAAdminCommand.java
          • tajo-client/src/main/java/org/apache/tajo/client/TajoGetConf.java
          • tajo-core/src/main/java/org/apache/tajo/master/TajoContainerProxy.java
          • tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java
          • tajo-client/src/main/java/org/apache/tajo/client/TajoHAAdmin.java
          • tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java
          • tajo-core/src/main/resources/webapps/admin/query.jsp
          • tajo-core/src/main/java/org/apache/tajo/worker/TajoResourceAllocator.java
          • tajo-core/src/test/java/org/apache/tajo/master/ha/TestHAServiceHDFSImpl.java
          • tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
          • tajo-core/src/main/java/org/apache/tajo/master/ha/HAService.java
          • tajo-dist/src/main/bin/stop-tajo.sh
          • tajo-core/src/main/resources/webapps/admin/query_executor.jsp
          • tajo-core/src/main/java/org/apache/tajo/master/querymaster/QueryMaster.java
          • tajo-docs/src/main/sphinx/configuration.rst
          • tajo-core/src/main/java/org/apache/tajo/master/ha/TajoMasterInfo.java
          • CHANGES
          • tajo-core/src/main/java/org/apache/tajo/master/ha/HAServiceHDFSImpl.java
          • tajo-core/src/main/resources/webapps/admin/cluster.jsp
          • tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
          • tajo-client/src/main/java/org/apache/tajo/client/TajoAdmin.java
          • tajo-client/src/main/java/org/apache/tajo/client/TajoClient.java
          • tajo-common/src/main/java/org/apache/tajo/TajoConstants.java
          • tajo-dist/src/main/bin/start-tajo.sh
          • tajo-core/src/main/java/org/apache/tajo/worker/WorkerHeartbeatService.java
          • tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
          • tajo-dist/src/main/bin/tajo
          • tajo-dist/src/main/bin/tajo-daemons.sh
          • tajo-core/src/main/resources/webapps/admin/catalogview.jsp
          • tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
          • tajo-core/src/main/java/org/apache/tajo/master/TajoMaster.java
          • tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
          • tajo-core/src/main/java/org/apache/tajo/master/querymaster/QueryMasterTask.java
          Show
          hudson Hudson added a comment - SUCCESS: Integrated in Tajo-master-build #341 (See https://builds.apache.org/job/Tajo-master-build/341/ ) TAJO-704 : TajoMaster HA (jaehwa) (blrunner: rev b16d13addacc8c03f7b46b912a02231cea4c0861) tajo-client/src/main/java/org/apache/tajo/client/TajoHAClientUtil.java tajo-docs/src/main/sphinx/configuration/ha_configuration.rst tajo-core/src/main/java/org/apache/tajo/worker/TajoWorker.java tajo-core/src/main/resources/webapps/admin/index.jsp tajo-client/src/main/java/org/apache/tajo/cli/TajoHAAdminCommand.java tajo-client/src/main/java/org/apache/tajo/client/TajoGetConf.java tajo-core/src/main/java/org/apache/tajo/master/TajoContainerProxy.java tajo-common/src/main/java/org/apache/tajo/util/HAServiceUtil.java tajo-client/src/main/java/org/apache/tajo/client/TajoHAAdmin.java tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java tajo-core/src/main/resources/webapps/admin/query.jsp tajo-core/src/main/java/org/apache/tajo/worker/TajoResourceAllocator.java tajo-core/src/test/java/org/apache/tajo/master/ha/TestHAServiceHDFSImpl.java tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java tajo-core/src/main/java/org/apache/tajo/master/ha/HAService.java tajo-dist/src/main/bin/stop-tajo.sh tajo-core/src/main/resources/webapps/admin/query_executor.jsp tajo-core/src/main/java/org/apache/tajo/master/querymaster/QueryMaster.java tajo-docs/src/main/sphinx/configuration.rst tajo-core/src/main/java/org/apache/tajo/master/ha/TajoMasterInfo.java CHANGES tajo-core/src/main/java/org/apache/tajo/master/ha/HAServiceHDFSImpl.java tajo-core/src/main/resources/webapps/admin/cluster.jsp tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java tajo-client/src/main/java/org/apache/tajo/client/TajoAdmin.java tajo-client/src/main/java/org/apache/tajo/client/TajoClient.java tajo-common/src/main/java/org/apache/tajo/TajoConstants.java tajo-dist/src/main/bin/start-tajo.sh tajo-core/src/main/java/org/apache/tajo/worker/WorkerHeartbeatService.java tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java tajo-dist/src/main/bin/tajo tajo-dist/src/main/bin/tajo-daemons.sh tajo-core/src/main/resources/webapps/admin/catalogview.jsp tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java tajo-core/src/main/java/org/apache/tajo/master/TajoMaster.java tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java tajo-core/src/main/java/org/apache/tajo/master/querymaster/QueryMasterTask.java

            People

            • Assignee:
              blrunner Jaehwa Jung
              Reporter:
              blrunner Jaehwa Jung
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development