Github user sohami commented on a diff in the pull request: https://github.com/apache/drill/pull/1241#discussion_r185072034 --- Diff: exec/java-exec/src/main/resources/rest/index.ftl --- @@ -252,33 +255,129 @@ timeout = setTimeout(reloadStatus, refreshTime); } - function fillStatus(data,size) { - var status_map = (data.responseJSON); - for (i = 1; i <= size; i++) { - var address = $("#row-"+i).find("#address").contents().get(0).nodeValue; - address = address.trim(); - var port = $("#row-"+i).find("#port").html(); - var key = address+"-"+port; + function fillStatus(dataResponse,size) { + var status_map = (dataResponse.responseJSON); + //In case localhost has gone down (i.e. we don't know status from ZK) + if (typeof status_map == 'undefined') { + //Query other nodes for state details + for (j = 1; j <= size; j++) { + if ($("#row-"+j).find("#current").html() == "Current") { + continue; //Skip LocalHost + } + var address = $("#row-"+j).find("#address").contents().get(0).nodeValue.trim(); + var restPort = $("#row-"+j).find("#httpPort").contents().get(0).nodeValue.trim(); + var altStateUrl = location.protocol + "//" + address+":"+restPort + "/state"; + var goatResponse = $.getJSON(altStateUrl) + .done(function(stateDataJson) { + //Update Status & Buttons for alternate stateData + if (typeof status_map == 'undefined') { + status_map = (stateDataJson); //Update + updateStatusAndShutdown(stateDataJson); + } + }); + //Don't loop any more + if (typeof status_map != 'undefined') { + break; + } + } + } else { + updateStatusAndShutdown(status_map); + } + } + + function updateStatusAndShutdown(status_map) { + let bitMap = {}; + if (typeof status_map != 'undefined') { + for (var k in status_map) { + bitMap[k] = status_map[k]; + } + } + for (i = 1; i <= size; i++) { + let key = ""; + if ($("#row-"+i).find("#stateKey").length > 0) { //Check if newBit that has no stateKey + key = $("#row-"+i).find("#stateKey").textContent; + } else { + let address = $("#row-"+i).find("#address").contents().get(0).nodeValue.trim(); + let port = $("#row-"+i).find("#httpPort").html(); + key = address+"-"+port; + } --- End diff -- the if-else condition can be removed. I don't think stateKey is needed at all. ``` let address = $("#row-"+i).find("#address").contents().get(0).nodeValue.trim(); let port = $("#row-"+i).find("#httpPort").html(); key = address+"-"+port; ```
---