From 32812e3fcdaf3e2c60f4cd1d752e5724f88a9875 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 29 May 2012 16:45:52 -0700 Subject: [PATCH 01/16] CS-14421: Clean /etc/network/interfaces when sysytemvm reboot In order to make sure next time, booting process would use cloud-early-config's setup, rather than networking scripts to bring up interfaces. Reviewed-by: Kelven Yang --- .../systemvm/debian/config/etc/init.d/cloud-early-config | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config index 9c0d189046f..19f87c23e04 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -696,11 +696,8 @@ setup_elbvm() { setup_default() { cat > /etc/network/interfaces << EOF -auto lo eth0 +auto lo iface lo inet loopback - -iface eth0 inet static - EOF } @@ -895,7 +892,9 @@ start) ;; stop) - log_action_begin_msg "Stopping cloud-early-config (noop)" + log_action_begin_msg "Stopping cloud-early-config" + #Override old system's interface setting + setup_default; log_action_end_msg 0 ;; From 2caed96c3a55bef1f1dc2bc629a18cd2ead75b62 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 31 May 2012 14:30:42 -0700 Subject: [PATCH 02/16] CS-15175: Fix public interfaces of redundant router We need to use ifup/ifdown to bring up the interfaces, because ifconfig don't know the ip of the interface after we modify cloud-early-config to avoid first start up of public interface. Reviewed-by: Edison --- .../debian/config/root/redundant_router/enable_pubip.sh.templ | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ b/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ index 8be4265efb9..32604954990 100644 --- a/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ +++ b/patches/systemvm/debian/config/root/redundant_router/enable_pubip.sh.templ @@ -5,8 +5,8 @@ set -e ip link|grep BROADCAST|grep -v eth0|grep -v eth1|cut -d ":" -f 2 > /tmp/iflist while read i do - ifconfig $i down - ifconfig $i up + ifdown $i + ifup $i done < /tmp/iflist ip route add default via [GATEWAY] dev eth2 && \ service dnsmasq restart From 0b730969ef3268329de5d5df8bc31d11f69fe21a Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 31 May 2012 18:54:08 -0700 Subject: [PATCH 03/16] CS-15116: When GetDomRVersion failed, let VR creation fail Because there are more commands after GetDomRVersion command. Though GetDomRVersion command itself is not that critical, the commands after it may including DHCP and firewall related commands. The failure of GetDomRVersion command would result in the following commands fail to be executed. So it should fail, and fail loudly. --- .../router/VirtualNetworkApplianceManagerImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index c85b3c7ca31..d044d4f3525 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1936,19 +1936,21 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian result = false; } if (result == false) { - return false; + return result; } answer = cmds.getAnswer("getDomRVersion"); if (answer != null && answer instanceof GetDomRVersionAnswer) { GetDomRVersionAnswer versionAnswer = (GetDomRVersionAnswer)answer; if (answer == null || !answer.getResult()) { - /* Try to push on because it's not a critical error */ - s_logger.warn("Unable to get the template/scripts version of router " + router.getInstanceName() + " due to: " + versionAnswer.getDetails() + ", but we would continue"); + s_logger.warn("Unable to get the template/scripts version of router " + router.getInstanceName() + " due to: " + versionAnswer.getDetails()); + result = false; } else { router.setTemplateVersion(versionAnswer.getTemplateVersion()); router.setScriptsVersion(versionAnswer.getScriptsVersion()); router = _routerDao.persist(router); } + } else { + result = false; } return result; From 03b559bbb98b9a604403f5e016b4f18647f2cab8 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 4 Jun 2012 15:55:53 -0700 Subject: [PATCH 04/16] CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. --- ui/index.jsp | 1 - ui/lib/jquery.timers.js | 150 ------------- ui/scripts/system.js | 162 ++++++++++---- ui/scripts/ui-custom/physicalResources.js | 7 +- ui/scripts/zoneWizard.js | 257 +++++++++++----------- 5 files changed, 249 insertions(+), 328 deletions(-) delete mode 100644 ui/lib/jquery.timers.js diff --git a/ui/index.jsp b/ui/index.jsp index 3414a8699d6..a2dab4cd65b 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -1583,7 +1583,6 @@ - diff --git a/ui/lib/jquery.timers.js b/ui/lib/jquery.timers.js deleted file mode 100644 index fa2c209b541..00000000000 --- a/ui/lib/jquery.timers.js +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 -/** - * jQuery.timers - Timer abstractions for jQuery - * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com) - * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/). - * Date: 2009/10/16 - * - * @author Blair Mitchelmore - * @version 1.2 - * - **/ - -jQuery.fn.extend({ - everyTime: function(interval, label, fn, times) { - return this.each(function() { - jQuery.timer.add(this, interval, label, fn, times); - }); - }, - oneTime: function(interval, label, fn) { - return this.each(function() { - jQuery.timer.add(this, interval, label, fn, 1); - }); - }, - stopTime: function(label, fn) { - return this.each(function() { - jQuery.timer.remove(this, label, fn); - }); - } -}); - -jQuery.extend({ - timer: { - global: [], - guid: 1, - dataKey: "jQuery.timer", - regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/, - powers: { - // Yeah this is major overkill... - 'ms': 1, - 'cs': 10, - 'ds': 100, - 's': 1000, - 'das': 10000, - 'hs': 100000, - 'ks': 1000000 - }, - timeParse: function(value) { - if (value == undefined || value == null) - return null; - var result = this.regex.exec(jQuery.trim(value.toString())); - if (result[2]) { - var num = parseFloat(result[1]); - var mult = this.powers[result[2]] || 1; - return num * mult; - } else { - return value; - } - }, - add: function(element, interval, label, fn, times) { - var counter = 0; - - if (jQuery.isFunction(label)) { - if (!times) - times = fn; - fn = label; - label = interval; - } - - interval = jQuery.timer.timeParse(interval); - - if (typeof interval != 'number' || isNaN(interval) || interval < 0) - return; - - if (typeof times != 'number' || isNaN(times) || times < 0) - times = 0; - - times = times || 0; - - var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {}); - - if (!timers[label]) - timers[label] = {}; - - fn.timerID = fn.timerID || this.guid++; - - var handler = function() { - if ((++counter > times && times !== 0) || fn.call(element, counter) === false) - jQuery.timer.remove(element, label, fn); - }; - - handler.timerID = fn.timerID; - - if (!timers[label][fn.timerID]) - timers[label][fn.timerID] = window.setInterval(handler,interval); - - this.global.push( element ); - - }, - remove: function(element, label, fn) { - var timers = jQuery.data(element, this.dataKey), ret; - - if ( timers ) { - - if (!label) { - for ( label in timers ) - this.remove(element, label, fn); - } else if ( timers[label] ) { - if ( fn ) { - if ( fn.timerID ) { - window.clearInterval(timers[label][fn.timerID]); - delete timers[label][fn.timerID]; - } - } else { - for ( var fn in timers[label] ) { - window.clearInterval(timers[label][fn]); - delete timers[label][fn]; - } - } - - for ( ret in timers[label] ) break; - if ( !ret ) { - ret = null; - delete timers[label]; - } - } - - for ( ret in timers ) break; - if ( !ret ) - jQuery.removeData(element, this.dataKey); - } - } - } -}); - -jQuery(window).bind("unload", function() { - jQuery.each(jQuery.timer.global, function(index, item) { - jQuery.timer.remove(item); - }); -}); diff --git a/ui/scripts/system.js b/ui/scripts/system.js index beb2fb3dd1c..1c320b4e86b 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1350,6 +1350,14 @@ else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific array1.push("&projectid=" + args.data.projectId); array1.push("&acltype=account"); +<<<<<<< HEAD +======= + + if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size()) + array1.push("&subdomainaccess=true"); + else + array1.push("&subdomainaccess=false"); +>>>>>>> CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. } else { //domain-specific array1.push("&acltype=domain"); @@ -1822,7 +1830,85 @@ notification: { poll: pollAsyncJobResult } +<<<<<<< HEAD } +======= + }, + enable: { + label: 'label.action.enable.physical.network', + messages: { + confirm: function(args) { + return 'message.action.enable.physical.network'; + }, + notification: function(args) { + return 'label.action.enable.physical.network'; + } + }, + action: function(args) { + $.ajax({ + url: createURL('updatePhysicalNetwork'), + data: { + id: args.context.physicalNetworks[0].id, + state: 'Enabled' + }, + success: function(json) { + args.response.success({ + _custom: { + jobId: json.updatephysicalnetworkresponse.jobid, + getUpdatedItem: function(json) { + return { + state: 'Enabled' + }; + }, + getActionFilter: function() { + return cloudStack.actionFilter.physicalNetwork; + } + } + }); + }, + error: function(json) { args.response.error(parseXMLHttpResponse(json)); } + }); + }, + notification: { poll: pollAsyncJobResult } + }, + disable: { + label: 'label.action.disable.physical.network', + messages: { + confirm: function(args) { + return 'message.action.disable.physical.network'; + }, + notification: function(args) { + return 'label.action.disable.physical.network'; + } + }, + action: function(args) { + $.ajax({ + url: createURL('updatePhysicalNetwork'), + data: { + id: args.context.physicalNetworks[0].id, + state: 'Disabled' + }, + success: function(json) { + args.response.success({ + _custom: { + jobId: json.updatephysicalnetworkresponse.jobid, + getUpdatedItem: function(json) { + return { + state: 'Disabled' + }; + }, + getActionFilter: function() { + return cloudStack.actionFilter.physicalNetwork; + } + } + }); + }, + error: function(json) { args.response.error(parseXMLHttpResponse(json)); } + }); + }, + notification: { poll: pollAsyncJobResult } + } +>>>>>>> CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. } }, dataProvider: function(args) { @@ -2484,9 +2570,8 @@ dataType: "json", async: true, success: function(json) { - var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addnetworkserviceproviderresponse.jobid; + var addNetscalerProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -2496,7 +2581,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addNetscalerProviderIntervalID); if (result.jobstatus == 1) { nspMap["netscaler"] = result.jobresult.networkserviceprovider; addExternalLoadBalancer(args, selectedPhysicalNetworkObj, "addNetscalerLoadBalancer", "addnetscalerloadbalancerresponse", "netscalerloadbalancer"); @@ -2511,7 +2596,7 @@ alert("addNetworkServiceProvider&name=Netscaler failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -2713,9 +2798,8 @@ dataType: "json", async: true, success: function(json) { - var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addnetworkserviceproviderresponse.jobid; + var addF5ProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -2725,7 +2809,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addF5ProviderIntervalID); if (result.jobstatus == 1) { nspMap["f5"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; addExternalLoadBalancer(args, selectedPhysicalNetworkObj, "addF5LoadBalancer", "addf5bigiploadbalancerresponse"); @@ -2740,7 +2824,7 @@ alert("addNetworkServiceProvider&name=F5BigIpfailed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -2962,8 +3046,7 @@ async: true, success: function(json) { var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var addJuniperSRXProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -2973,7 +3056,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addJuniperSRXProviderIntervalID); if (result.jobstatus == 1) { nspMap["srx"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; addExternalFirewall(args, selectedPhysicalNetworkObj, "addSrxFirewall", "addsrxfirewallresponse", "srxfirewall"); @@ -2988,7 +3071,7 @@ alert("addNetworkServiceProvider&name=JuniperSRX failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -5120,9 +5203,8 @@ dataType: "json", async: true, success: function(json) { - var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addnetworkserviceproviderresponse.jobid; + var addNetscalerProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -5132,7 +5214,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addNetscalerProviderIntervalID); if (result.jobstatus == 1) { nspMap["netscaler"] = result.jobresult.networkserviceprovider; addExternalLoadBalancer(args, selectedPhysicalNetworkObj, "addNetscalerLoadBalancer", "addnetscalerloadbalancerresponse", "netscalerloadbalancer"); @@ -5147,7 +5229,7 @@ alert("addNetworkServiceProvider&name=Netscaler failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -5314,8 +5396,7 @@ async: true, success: function(json) { var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var addF5ProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -5325,7 +5406,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addF5ProviderIntervalID); if (result.jobstatus == 1) { nspMap["f5"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; addExternalLoadBalancer(args, selectedPhysicalNetworkObj, "addF5LoadBalancer", "addf5bigiploadbalancerresponse", "f5loadbalancer"); @@ -5340,7 +5421,7 @@ alert("addNetworkServiceProvider&name=F5BigIpfailed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -5524,8 +5605,7 @@ async: true, success: function(json) { var jobId = json.addnetworkserviceproviderresponse.jobid; - var timerKey = "addNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var addJuniperSRXProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -5535,7 +5615,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(addJuniperSRXProviderIntervalID); if (result.jobstatus == 1) { nspMap["srx"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; addExternalFirewall(args, selectedPhysicalNetworkObj, "addSrxFirewall", "addsrxfirewallresponse", "srxfirewall"); @@ -5550,7 +5630,7 @@ alert("addNetworkServiceProvider&name=JuniperSRX failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -8600,8 +8680,7 @@ dataType: "json", success: function(json) { var jobId = json.updatephysicalnetworkresponse.jobid; - var timerKey = "updatePhysicalNetworkJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var enablePhysicalNetworkIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -8611,7 +8690,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(enablePhysicalNetworkIntervalID); if (result.jobstatus == 1) { //alert("updatePhysicalNetwork succeeded."); @@ -8656,8 +8735,7 @@ async: false, success: function(json) { var jobId = json.configurevirtualrouterelementresponse.jobid; - var timerKey = "configureVirtualRouterElementJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var enableVirtualRouterElementIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -8667,7 +8745,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(enableVirtualRouterElementIntervalID); if (result.jobstatus == 1) { //alert("configureVirtualRouterElement succeeded."); @@ -8677,8 +8755,7 @@ async: false, success: function(json) { var jobId = json.updatenetworkserviceproviderresponse.jobid; - var timerKey = "updateNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var enableVirtualRouterProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -8688,7 +8765,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(enableVirtualRouterProviderIntervalID); if (result.jobstatus == 1) { //alert("Virtual Router Provider is enabled"); @@ -8718,8 +8795,7 @@ async: false, success: function(json) { var jobId = json.updatenetworkserviceproviderresponse.jobid; - var timerKey = "updateNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var enableSecurityGroupProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -8729,7 +8805,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(enableSecurityGroupProviderIntervalID); if (result.jobstatus == 1) { //alert("Security group provider is enabled"); @@ -8781,7 +8857,7 @@ alert("updateNetworkServiceProvider failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -8862,7 +8938,7 @@ alert("updateNetworkServiceProvider failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -8876,7 +8952,7 @@ alert("configureVirtualRouterElement failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); } @@ -8890,7 +8966,7 @@ alert("updatePhysicalNetwork failed. Error: " + errorMsg); } }); - }); + }, 3000); } }); }; diff --git a/ui/scripts/ui-custom/physicalResources.js b/ui/scripts/ui-custom/physicalResources.js index 8acdec60188..e531c7b783a 100644 --- a/ui/scripts/ui-custom/physicalResources.js +++ b/ui/scripts/ui-custom/physicalResources.js @@ -82,8 +82,7 @@ dataType: 'json', success: function(json) { var jid = json.uploadcustomcertificateresponse.jobid; - var timerKey = "uploadcustomcertificatejob_" + jid; - $("body").everyTime(2000, timerKey, function() { + var uploadCustomCertificateIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + jid), dataType: "json", @@ -93,7 +92,7 @@ return; //Job has not completed } else { - $("body").stopTime(timerKey); + clearInterval(uploadCustomCertificateIntervalID); if (result.jobstatus == 1) { cloudStack.dialog.notice({ message: 'Update SSL Certiciate succeeded' }); } @@ -108,7 +107,7 @@ $loading.remove(); } }); - }); + }, 3000); }, error: function(XMLHttpResponse) { cloudStack.dialog.notice({ message: 'Failed to update SSL Certificate. ' + parseXMLHttpResponse(XMLHttpResponse) }); diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js index feb146cdd97..081639f03df 100644 --- a/ui/scripts/zoneWizard.js +++ b/ui/scripts/zoneWizard.js @@ -1291,9 +1291,8 @@ url: createURL("createPhysicalNetwork&zoneid=" + args.data.returnedZone.id + array1.join("")), dataType: "json", success: function(json) { - var jobId = json.createphysicalnetworkresponse.jobid; - var timerKey = "createPhysicalNetworkJob_" + jobId; - $("body").everyTime(2000, timerKey, function(){ + var jobId = json.createphysicalnetworkresponse.jobid; + var createPhysicalNetworkIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1302,8 +1301,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(createPhysicalNetworkIntervalID); + if (result.jobstatus == 1) { var returnedBasicPhysicalNetwork = result.jobresult.physicalnetwork; var label = returnedBasicPhysicalNetwork.id + trafficLabelParam('guest', data); @@ -1313,9 +1313,8 @@ url: createURL("addTrafficType&trafficType=Guest&physicalnetworkid=" + label), dataType: "json", success: function(json) { - var jobId = json.addtraffictyperesponse.jobid; - var timerKey = "addTrafficTypeJob_" + jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addtraffictyperesponse.jobid; + var addGuestTrafficTypeIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1324,8 +1323,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(addGuestTrafficTypeIntervalID); + if (result.jobstatus == 1) { returnedTrafficTypes.push(result.jobresult.traffictype); @@ -1348,8 +1348,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("Failed to add Guest traffic type to basic zone. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); @@ -1359,9 +1359,8 @@ url: createURL("addTrafficType&trafficType=Management&physicalnetworkid=" + returnedBasicPhysicalNetwork.id + label), dataType: "json", success: function(json) { - var jobId = json.addtraffictyperesponse.jobid; - var timerKey = "addTrafficTypeJob_" + jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addtraffictyperesponse.jobid; + var addManagementTrafficTypeIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1370,8 +1369,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(addManagementTrafficTypeIntervalID); + if (result.jobstatus == 1) { returnedTrafficTypes.push(result.jobresult.traffictype); @@ -1394,8 +1394,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("Failed to add Management traffic type to basic zone. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); @@ -1407,9 +1407,8 @@ url: createURL('addTrafficType&physicalnetworkid=' + returnedBasicPhysicalNetwork.id + '&trafficType=Storage' + label), dataType: "json", success: function(json) { - var jobId = json.addtraffictyperesponse.jobid; - var timerKey = "addTrafficTypeJob_" + jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addtraffictyperesponse.jobid; + var addStorageTrafficTypeIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1418,8 +1417,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(addStorageTrafficTypeIntervalID); + if (result.jobstatus == 1) { returnedTrafficTypes.push(result.jobresult.traffictype); @@ -1442,8 +1442,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("Failed to add Management traffic type to basic zone. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1454,9 +1454,8 @@ url: createURL("addTrafficType&trafficType=Public&physicalnetworkid=" + returnedBasicPhysicalNetwork.id + label), dataType: "json", success: function(json) { - var jobId = json.addtraffictyperesponse.jobid; - var timerKey = "addTrafficTypeJob_" + jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addtraffictyperesponse.jobid; + var addPublicTrafficTypeIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1465,8 +1464,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(addPublicTrafficTypeIntervalID); + if (result.jobstatus == 1) { returnedTrafficTypes.push(result.jobresult.traffictype); @@ -1489,8 +1489,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("Failed to add Public traffic type to basic zone. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1504,8 +1504,9 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("createPhysicalNetwork failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); + } }); } @@ -1520,9 +1521,8 @@ url: createURL("createPhysicalNetwork&zoneid=" + args.data.returnedZone.id + array1.join("")), dataType: "json", success: function(json) { - var jobId = json.createphysicalnetworkresponse.jobid; - var timerKey = "createPhysicalNetworkJob_" + jobId; - $("body").everyTime(2000, timerKey, function(){ + var jobId = json.createphysicalnetworkresponse.jobid; + var createPhysicalNetworkIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1531,8 +1531,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(createPhysicalNetworkIntervalID); + if (result.jobstatus == 1) { var returnedPhysicalNetwork = result.jobresult.physicalnetwork; returnedPhysicalNetwork.originalId = thisPhysicalNetwork.id; @@ -1563,9 +1564,8 @@ url: createURL(apiCmd + label), dataType: "json", success: function(json) { - var jobId = json.addtraffictyperesponse.jobid; - var timerKey = "addTrafficTypeJob_" + jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.addtraffictyperesponse.jobid; + var addTrafficTypeIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -1574,8 +1574,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(addTrafficTypeIntervalID); + if (result.jobstatus == 1) { returnedTrafficTypes.push(result.jobresult.traffictype); @@ -1601,8 +1602,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert(apiCmd + " failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); }); @@ -1616,8 +1617,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("createPhysicalNetwork failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); }); @@ -1632,10 +1633,8 @@ $.ajax({ url: createURL("updatePhysicalNetwork&state=Enabled&id=" + args.data.returnedBasicPhysicalNetwork.id), dataType: "json", - success: function(json) { - //var jobId = json.updatephysicalnetworkresponse.jobid; - var updatePhysicalNetworkTimer = "updatePhysicalNetworkJob_" + json.updatephysicalnetworkresponse.jobid; - $("body").everyTime(2000, updatePhysicalNetworkTimer, function() { + success: function(json) { + var enablePhysicalNetworkIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + json.updatephysicalnetworkresponse.jobid), dataType: "json", @@ -1644,8 +1643,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(updatePhysicalNetworkTimer); + else { + clearInterval(enablePhysicalNetworkIntervalID); + if (result.jobstatus == 1) { //alert("updatePhysicalNetwork succeeded."); @@ -1688,10 +1688,8 @@ url: createURL("configureVirtualRouterElement&enabled=true&id=" + virtualRouterElementId), dataType: "json", async: false, - success: function(json) { - //var jobId = json.configurevirtualrouterelementresponse.jobid; - var configureVirtualRouterElementTimer = "configureVirtualRouterElementJob_" + json.configurevirtualrouterelementresponse.jobid; - $("body").everyTime(2000, configureVirtualRouterElementTimer, function() { + success: function(json) { + var enableVirtualRouterElementIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + json.configurevirtualrouterelementresponse.jobid), dataType: "json", @@ -1700,8 +1698,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(configureVirtualRouterElementTimer); + else { + clearInterval(enableVirtualRouterElementIntervalID); + if (result.jobstatus == 1) { //alert("configureVirtualRouterElement succeeded."); @@ -1709,10 +1708,8 @@ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId), dataType: "json", async: false, - success: function(json) { - //var jobId = json.updatenetworkserviceproviderresponse.jobid; - var updateNetworkServiceProviderTimer = "updateNetworkServiceProviderJob_" + json.updatenetworkserviceproviderresponse.jobid; - $("body").everyTime(2000, updateNetworkServiceProviderTimer, function() { + success: function(json) { + var enableVirtualRouterProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid), dataType: "json", @@ -1721,8 +1718,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(updateNetworkServiceProviderTimer); + else { + clearInterval(enableVirtualRouterProviderIntervalID); + if (result.jobstatus == 1) { //alert("Virtual Router Provider is enabled"); @@ -1754,9 +1752,8 @@ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + securityGroupProviderId), dataType: "json", async: false, - success: function(json) { - var updateNetworkServiceProviderTimer = "asyncJob_" + json.updatenetworkserviceproviderresponse.jobid; - $("body").everyTime(2000, updateNetworkServiceProviderTimer, function() { + success: function(json) { + var enableSecurityGroupProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid), dataType: "json", @@ -1765,8 +1762,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(updateNetworkServiceProviderTimer); + else { + clearInterval(enableSecurityGroupProviderIntervalID); + if (result.jobstatus == 1) { //Security group provider has been enabled successfully stepFns.addNetscalerProvider({ data: args.data @@ -1781,8 +1779,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("failed to enable security group provider. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1801,8 +1799,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("failed to enable Virtual Router Provider. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1815,8 +1813,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("configureVirtualRouterElement failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1829,8 +1827,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("updatePhysicalNetwork failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1841,9 +1839,8 @@ url: createURL("updatePhysicalNetwork&state=Enabled&id=" + thisPhysicalNetwork.id), dataType: "json", success: function(json) { - var jobId = json.updatephysicalnetworkresponse.jobid; - var timerKey = "updatePhysicalNetworkJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.updatephysicalnetworkresponse.jobid; + var enablePhysicalNetworkIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -1852,8 +1849,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(enablePhysicalNetworkIntervalID); + if (result.jobstatus == 1) { //alert("updatePhysicalNetwork succeeded."); @@ -1897,9 +1895,8 @@ dataType: "json", async: false, success: function(json) { - var jobId = json.configurevirtualrouterelementresponse.jobid; - var timerKey = "configureVirtualRouterElementJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.configurevirtualrouterelementresponse.jobid; + var enableVirtualRouterElementIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -1908,17 +1905,17 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(enableVirtualRouterElementIntervalID); + if (result.jobstatus == 1) { //configureVirtualRouterElement succeeded $.ajax({ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId), dataType: "json", async: false, success: function(json) { - var jobId = json.updatenetworkserviceproviderresponse.jobid; - var timerKey = "updateNetworkServiceProviderJob_"+jobId; - $("body").everyTime(2000, timerKey, function() { + var jobId = json.updatenetworkserviceproviderresponse.jobid; + var enableVirtualRouterProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId="+jobId), dataType: "json", @@ -1927,8 +1924,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(timerKey); + else { + clearInterval(enableVirtualRouterProviderIntervalID); + if (result.jobstatus == 1) { //Virtual Router Provider has been enabled successfully advZoneConfiguredPhysicalNetworkCount++; if(advZoneConfiguredPhysicalNetworkCount == args.data.returnedPhysicalNetworks.length) { //not call addPod() until all physical networks get configured @@ -1946,8 +1944,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("updateNetworkServiceProvider failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1960,8 +1958,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("configureVirtualRouterElement failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); } @@ -1974,8 +1972,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); alert("updatePhysicalNetwork failed. Error: " + errorMsg); } - }); - }); + }); + }, 3000); } }); }); @@ -1990,9 +1988,8 @@ url: createURL("addNetworkServiceProvider&name=Netscaler&physicalnetworkid=" + args.data.returnedBasicPhysicalNetwork.id), dataType: "json", async: false, - success: function(json) { - var addNetworkServiceProviderTimer = "asyncJob_" + json.addnetworkserviceproviderresponse.jobid; - $("body").everyTime(2000, addNetworkServiceProviderTimer, function() { + success: function(json) { + var addNetscalerProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobId=" + json.addnetworkserviceproviderresponse.jobid), dataType: "json", @@ -2001,8 +1998,9 @@ if (result.jobstatus == 0) { return; //Job has not completed } - else { - $("body").stopTime(addNetworkServiceProviderTimer); + else { + clearInterval(addNetscalerProviderIntervalID); + if (result.jobstatus == 1) { args.data.returnedNetscalerProvider = result.jobresult.networkserviceprovider; stepFns.addNetscalerDevice({ @@ -2020,8 +2018,8 @@ } }); }); - } - }); + } + }, 3000); //add netscaler provider (end) } else { //selectedNetworkOfferingHavingNetscaler == false @@ -2127,9 +2125,8 @@ $.ajax({ url: createURL("addNetscalerLoadBalancer" + array1.join("")), dataType: "json", - success: function(json) { - var addNetscalerLoadBalancerTimer = "asyncJob_" + json.addnetscalerloadbalancerresponse.jobid; - $("body").everyTime(2000, addNetscalerLoadBalancerTimer, function() { + success: function(json) { + var addNetscalerLoadBalancerIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + json.addnetscalerloadbalancerresponse.jobid), dataType: "json", @@ -2138,18 +2135,17 @@ if(result.jobstatus == 0) { return; } - else { - $("body").stopTime(addNetscalerLoadBalancerTimer); + else { + clearInterval(addNetscalerLoadBalancerIntervalID); + if(result.jobstatus == 1) { args.data.returnedNetscalerProvider.returnedNetscalerloadbalancer = result.jobresult.netscalerloadbalancer; $.ajax({ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + args.data.returnedNetscalerProvider.id), dataType: "json", - success: function(json) { - var updateNetworkServiceProviderTimer = "asyncJob_" + json.updatenetworkserviceproviderresponse.jobid; - - $("body").everyTime(2000, updateNetworkServiceProviderTimer, function() { + success: function(json) { + var enableNetscalerProviderIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + json.updatenetworkserviceproviderresponse.jobid), dataType: "json", @@ -2158,8 +2154,9 @@ if(result.jobstatus == 0) { return; } - else { - $("body").stopTime(updateNetworkServiceProviderTimer); + else { + clearInterval(enableNetscalerProviderIntervalID); + if(result.jobstatus == 1) { stepFns.addGuestNetwork({ data: args.data @@ -2170,8 +2167,8 @@ } } } - }); - }); + }); + }, 3000); }, error: function(XMLHttpResponse) { var errorMsg = parseXMLHttpResponse(XMLHttpResponse); @@ -2184,8 +2181,8 @@ } } } - }); - }); + }); + }, 3000); }, error: function(XMLHttpResponse) { var errorMsg = parseXMLHttpResponse(XMLHttpResponse); @@ -2490,9 +2487,8 @@ url: createURL("updatePhysicalNetwork&id=" + returnedId + "&vlan=" + todb(vlan)), dataType: "json", success: function(json) { - var jobId = json.updatephysicalnetworkresponse.jobid; - var timerKey = "asyncJob_" + jobId; - $("body").everyTime(2000, timerKey, function(){ + var jobId = json.updatephysicalnetworkresponse.jobid; + var updatePhysicalNetworkVlanIntervalID = setInterval(function() { $.ajax({ url: createURL("queryAsyncJobResult&jobid=" + jobId), dataType: "json", @@ -2501,8 +2497,9 @@ if(result.jobstatus == 0) { return; } - else { - $("body").stopTime(timerKey); + else { + clearInterval(updatePhysicalNetworkVlanIntervalID); + if(result.jobstatus == 1) { updatedCount++; if(updatedCount == physicalNetworksHavingGuestIncludingVlan.length) { @@ -2520,8 +2517,8 @@ var errorMsg = parseXMLHttpResponse(XMLHttpResponse); error('configureGuestTraffic', errorMsg, { fn: 'configureGuestTraffic', args: args }); } - }); - }); + }); + }, 3000); } }); }); From 1be5e0827007ca21aad9ac30dde16664ccd0295c Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 4 Jun 2012 18:10:40 -0700 Subject: [PATCH 05/16] CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. (remove conflict mark) --- ui/scripts/system.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 1c320b4e86b..c5f0a9c70f6 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1350,14 +1350,11 @@ else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific array1.push("&projectid=" + args.data.projectId); array1.push("&acltype=account"); -<<<<<<< HEAD -======= if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size()) array1.push("&subdomainaccess=true"); else array1.push("&subdomainaccess=false"); ->>>>>>> CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. } else { //domain-specific array1.push("&acltype=domain"); @@ -1830,9 +1827,6 @@ notification: { poll: pollAsyncJobResult } -<<<<<<< HEAD - } -======= }, enable: { label: 'label.action.enable.physical.network', @@ -1908,7 +1902,6 @@ }, notification: { poll: pollAsyncJobResult } } ->>>>>>> CS-15057: Remove jquery.timer.js from source code. Replace it with native JavaScript functions. } }, dataProvider: function(args) { From c88213b5bcb041ba400ee5119d481b6174d0b6fa Mon Sep 17 00:00:00 2001 From: frank Date: Mon, 4 Jun 2012 11:48:23 -0700 Subject: [PATCH 06/16] CloudStack CS-15195 Multinode Management server - Not able to put the host in maintanace mode when the request is issed from the management server that is not the owner of the host resolved fixed reviewed-by: edison --- .project | 24 ------------------- .../com/cloud/cluster/ClusterManagerImpl.java | 17 +++++++++++++ 2 files changed, 17 insertions(+), 24 deletions(-) delete mode 100644 .project diff --git a/.project b/.project deleted file mode 100644 index 183860bd142..00000000000 --- a/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - mgit - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - - - src - 2 - /Users/john1/mgit/cloudbridge/src - - - diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java b/server/src/com/cloud/cluster/ClusterManagerImpl.java index 56e9bccf9f4..4c7d4f28c1e 100755 --- a/server/src/com/cloud/cluster/ClusterManagerImpl.java +++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java @@ -399,6 +399,23 @@ public class ClusterManagerImpl implements ClusterManager { s_logger.warn("Operation timed out", e); return null; } + Answer[] answers = new Answer[1]; + answers[0] = new Answer(cmd, result, null); + return _gson.toJson(answers); + } else if (cmds.length == 1 && cmds[0] instanceof PropagateResourceEventCommand) { + PropagateResourceEventCommand cmd = (PropagateResourceEventCommand) cmds[0]; + if (s_logger.isDebugEnabled()) { + s_logger.debug("Intercepting resource manager command: " + _gson.toJson(cmd)); + } + + boolean result = false; + try { + result = _resourceMgr.executeUserRequest(cmd.getHostId(), cmd.getEvent()); + } catch (Exception e) { + s_logger.warn("Exception happened while exceuting command from resource manager in other mgmt server", e); + return null; + } + Answer[] answers = new Answer[1]; answers[0] = new Answer(cmd, result, null); return _gson.toJson(answers); From 49ffe7392e833470cc1f4f8bcd8111e8649dd53a Mon Sep 17 00:00:00 2001 From: frank Date: Mon, 4 Jun 2012 18:21:34 -0700 Subject: [PATCH 07/16] CloudStack CS-15222 Rebalancing of hosts fails with "java.lang.ClassCastException:" since SSVM host gets picked up for rabalacing. fixed reviewed-by: edison --- .../cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java b/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java index 67c50b609be..9951188036b 100755 --- a/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java +++ b/server/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java @@ -76,6 +76,7 @@ public class ClusterBasedAgentLoadBalancerPlanner implements AgentLoadBalancerPl } sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getResource(), Op.NNULL); sc.addAnd(sc.getEntity().getManagementServerId(), Op.EQ, msId); sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up); List directHosts = sc.list(); From 5117bba85154d0a754f39a60dfe61d0510c21783 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 4 Jun 2012 19:01:27 -0700 Subject: [PATCH 08/16] CS-14769: Don't pass subdomainaccess param when scope=project --- ui/scripts/system.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index c5f0a9c70f6..b6fc9d80e44 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1349,12 +1349,7 @@ } else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific array1.push("&projectid=" + args.data.projectId); - array1.push("&acltype=account"); - - if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size()) - array1.push("&subdomainaccess=true"); - else - array1.push("&subdomainaccess=false"); + array1.push("&acltype=account"); } else { //domain-specific array1.push("&acltype=domain"); From 85c754d73427803898436cdae21b2018bbbbb18d Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 4 Jun 2012 19:05:20 -0700 Subject: [PATCH 09/16] CS-13091: Remove enable/disable physical network actions. Due to limitations in the API, for now the enable/disable functionality for physical networks will be removed. --- ui/scripts/system.js | 76 +------------------------------------------- 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index b6fc9d80e44..37868deaf6f 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1822,81 +1822,7 @@ notification: { poll: pollAsyncJobResult } - }, - enable: { - label: 'label.action.enable.physical.network', - messages: { - confirm: function(args) { - return 'message.action.enable.physical.network'; - }, - notification: function(args) { - return 'label.action.enable.physical.network'; - } - }, - action: function(args) { - $.ajax({ - url: createURL('updatePhysicalNetwork'), - data: { - id: args.context.physicalNetworks[0].id, - state: 'Enabled' - }, - success: function(json) { - args.response.success({ - _custom: { - jobId: json.updatephysicalnetworkresponse.jobid, - getUpdatedItem: function(json) { - return { - state: 'Enabled' - }; - }, - getActionFilter: function() { - return cloudStack.actionFilter.physicalNetwork; - } - } - }); - }, - error: function(json) { args.response.error(parseXMLHttpResponse(json)); } - }); - }, - notification: { poll: pollAsyncJobResult } - }, - disable: { - label: 'label.action.disable.physical.network', - messages: { - confirm: function(args) { - return 'message.action.disable.physical.network'; - }, - notification: function(args) { - return 'label.action.disable.physical.network'; - } - }, - action: function(args) { - $.ajax({ - url: createURL('updatePhysicalNetwork'), - data: { - id: args.context.physicalNetworks[0].id, - state: 'Disabled' - }, - success: function(json) { - args.response.success({ - _custom: { - jobId: json.updatephysicalnetworkresponse.jobid, - getUpdatedItem: function(json) { - return { - state: 'Disabled' - }; - }, - getActionFilter: function() { - return cloudStack.actionFilter.physicalNetwork; - } - } - }); - }, - error: function(json) { args.response.error(parseXMLHttpResponse(json)); } - }); - }, - notification: { poll: pollAsyncJobResult } - } + } } }, dataProvider: function(args) { From 69274542c27ad22deffd726aa8c04972343265ab Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 4 Jun 2012 09:29:48 -0700 Subject: [PATCH 10/16] CS-15197: correct default value for service_offering.nw_rate Reviewed-by: Will Chan --- setup/db/db/schema-302to303.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup/db/db/schema-302to303.sql b/setup/db/db/schema-302to303.sql index ffb0d96da7b..30f53b2fb1e 100755 --- a/setup/db/db/schema-302to303.sql +++ b/setup/db/db/schema-302to303.sql @@ -168,3 +168,5 @@ CREATE TABLE `cloud`.`port_profile` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; DELETE FROM `cloud`.`storage_pool_host_ref` WHERE pool_id IN (SELECT id FROM storage_pool WHERE removed IS NOT NULL); + +ALTER TABLE `cloud`.`service_offering` MODIFY `nw_rate` smallint(5) unsigned DEFAULT '200' COMMENT 'network rate throttle mbits/s'; From e0723cd9ccc3139b3c2431573a0354af31c0e437 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 4 Jun 2012 18:39:10 -0700 Subject: [PATCH 11/16] CS-15220: fixed db upgrade for networks using external devices Reviewed-by: Sheng Yang Conflicts: server/test/com/cloud/network/MockNetworkManagerImpl.java --- .../cloud/upgrade/dao/Upgrade2214to30.java | 185 +++++++++++++++--- .../cloud/network/MockNetworkManagerImpl.java | 17 +- .../AdvanceZone223To224UpgradeTest.java | 8 +- .../vm/MockVirtualMachineManagerImpl.java | 18 ++ 4 files changed, 191 insertions(+), 37 deletions(-) diff --git a/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java b/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java index 14fab7dd83b..9a478d20088 100755 --- a/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java @@ -22,6 +22,7 @@ import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import org.apache.log4j.Logger; @@ -29,7 +30,6 @@ import org.apache.log4j.Logger; import com.cloud.offering.NetworkOffering; import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.crypt.EncryptionSecretKeyChecker; - import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; @@ -82,8 +82,10 @@ public class Upgrade2214to30 implements DbUpgrade { updateReduntantRouters(conn); // update networks that have to switch from Shared to Isolated network offerings switchAccountSpecificNetworksToIsolated(conn); + // update networks to external network offerings if needed + String externalOfferingName = fixNetworksWithExternalDevices(conn); // create service/provider map for network offerings - createNetworkOfferingServices(conn); + createNetworkOfferingServices(conn, externalOfferingName); // create service/provider map for networks createNetworkServices(conn); //migrate user concentrated deployment planner choice to new global setting @@ -854,67 +856,97 @@ public class Upgrade2214to30 implements DbUpgrade { } } - private void createNetworkOfferingServices(Connection conn) { + private void createNetworkOfferingServices(Connection conn, String externalOfferingName) { PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = conn - .prepareStatement("select id, dns_service, gateway_service, firewall_service, lb_service, userdata_service, vpn_service, dhcp_service, unique_name from `cloud`.`network_offerings` where traffic_type='Guest'"); + .prepareStatement("select id, dns_service, gateway_service, firewall_service, lb_service, userdata_service," + + " vpn_service, dhcp_service, unique_name from `cloud`.`network_offerings` where traffic_type='Guest'"); rs = pstmt.executeQuery(); while (rs.next()) { + boolean sharedSourceNat = false; + boolean dedicatedLb = true; long id = rs.getLong(1); String uniqueName = rs.getString(9); - ArrayList services = new ArrayList(); + Map services = new HashMap(); if (rs.getLong(2) != 0) { - services.add("Dns"); + services.put("Dns", "VirtualRouter"); } if (rs.getLong(3) != 0) { - services.add("Gateway"); + if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName)) { + services.put("Gateway", "JuniperSRX"); + } else { + services.put("Gateway", "VirtualRouter"); + } } if (rs.getLong(4) != 0) { - services.add("Firewall"); + if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName)) { + services.put("Firewall", "JuniperSRX"); + } else { + services.put("Firewall", "VirtualRouter"); + } } if (rs.getLong(5) != 0) { - services.add("Lb"); + if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName)) { + services.put("Lb", "F5BigIp"); + dedicatedLb = false; + } else { + services.put("Lb", "VirtualRouter"); + } } if (rs.getLong(6) != 0) { - services.add("UserData"); + services.put("UserData", "VirtualRouter"); } if (rs.getLong(7) != 0) { - services.add("Vpn"); + if (externalOfferingName == null || !uniqueName.equalsIgnoreCase(externalOfferingName)) { + services.put("Vpn", "VirtualRouter"); + } } if (rs.getLong(8) != 0) { - services.add("Dhcp"); + services.put("Dhcp", "VirtualRouter"); } if (uniqueName.equalsIgnoreCase(NetworkOffering.DefaultSharedNetworkOfferingWithSGService.toString())) { - services.add("SecurityGroup"); + services.put("SecurityGroup", "SecurityGroupProvider"); } - if (uniqueName.equals(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService.toString())) { - services.add("SourceNat"); - services.add("PortForwarding"); - services.add("StaticNat"); + if (uniqueName.equals(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService.toString()) || uniqueName.equalsIgnoreCase(externalOfferingName)) { + if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName)) { + services.put("SourceNat", "JuniperSRX"); + services.put("PortForwarding", "JuniperSRX"); + services.put("StaticNat", "JuniperSRX"); + sharedSourceNat = true; + } else { + services.put("SourceNat", "VirtualRouter"); + services.put("PortForwarding", "VirtualRouter"); + services.put("StaticNat", "VirtualRouter"); + } } - for (String service : services) { - pstmt = conn.prepareStatement("INSERT INTO `cloud`.`ntwk_offering_service_map` (`network_offering_id`, `service`, `provider`, `created`) values (?,?,?, now())"); + for (String service : services.keySet()) { + pstmt = conn.prepareStatement("INSERT INTO `cloud`.`ntwk_offering_service_map` (`network_offering_id`," + + " `service`, `provider`, `created`) values (?,?,?, now())"); pstmt.setLong(1, id); pstmt.setString(2, service); - if (service.equalsIgnoreCase("SecurityGroup")) { - pstmt.setString(3, "SecurityGroupProvider"); - } else { - pstmt.setString(3, "VirtualRouter"); - } + pstmt.setString(3, services.get(service)); pstmt.executeUpdate(); } + + //update shared source nat and dedicated lb + pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set shared_source_nat_service=?, dedicated_lb_service=? where id=?"); + pstmt.setBoolean(1, sharedSourceNat); + pstmt.setBoolean(2, dedicatedLb); + pstmt.setLong(3, id); + pstmt.executeUpdate(); + } } catch (SQLException e) { throw new CloudRuntimeException("Unable to create service/provider map for network offerings", e); @@ -1175,7 +1207,7 @@ public class Upgrade2214to30 implements DbUpgrade { return ; } - // get all networks that need to be updated to the redundant network offerings + // get all networks that need to be updated to the isolated network offering pstmt = conn .prepareStatement("select id, network_offering_id from `cloud`.`networks` where switch_to_isolated=1"); rs = pstmt.executeQuery(); @@ -1310,4 +1342,107 @@ public class Upgrade2214to30 implements DbUpgrade { } } } + + protected String fixNetworksWithExternalDevices(Connection conn) { + PreparedStatement pstmt = null; + ResultSet rs = null; + ResultSet rs1 = null; + + //Get zones to upgrade + List zoneIds = new ArrayList(); + try { + pstmt = conn.prepareStatement("select id from `cloud`.`data_center` where lb_provider='F5BigIp' or firewall_provider='JuniperSRX' or gateway_provider='JuniperSRX'"); + rs = pstmt.executeQuery(); + while (rs.next()) { + zoneIds.add(rs.getLong(1)); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Unable to switch networks to the new network offering", e); + } + + + String uniqueName = null; + HashMap newNetworkOfferingMap = new HashMap(); + + for (Long zoneId : zoneIds) { + try { + // Find the correct network offering + pstmt = conn + .prepareStatement("select id, network_offering_id from `cloud`.`networks` where guest_type='Virtual' and data_center_id=?"); + pstmt.setLong(1, zoneId); + rs = pstmt.executeQuery(); + pstmt = conn.prepareStatement("select count(*) from `cloud`.`network_offerings`"); + rs1 = pstmt.executeQuery(); + long ntwkOffCount = 0; + while (rs1.next()) { + ntwkOffCount = rs1.getLong(1); + } + + pstmt = conn.prepareStatement("CREATE TEMPORARY TABLE `cloud`.`network_offerings2` ENGINE=MEMORY SELECT * FROM `cloud`.`network_offerings` WHERE id=1"); + pstmt.executeUpdate(); + + + while (rs.next()) { + long networkId = rs.getLong(1); + long networkOfferingId = rs.getLong(2); + s_logger.debug("Updating network offering for the network id=" + networkId + " as it has switch_to_isolated=1"); + Long newNetworkOfferingId = null; + if (!newNetworkOfferingMap.containsKey(networkOfferingId)) { + uniqueName = "Isolated with external providers"; + // clone the record to + pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings2` SELECT * FROM `cloud`.`network_offerings` WHERE id=?"); + pstmt.setLong(1, networkOfferingId); + pstmt.executeUpdate(); + + //set the new unique name + pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings2` SET id=?, unique_name=?, name=? WHERE id=?"); + ntwkOffCount = ntwkOffCount + 1; + newNetworkOfferingId = ntwkOffCount; + pstmt.setLong(1, newNetworkOfferingId); + pstmt.setString(2, uniqueName); + pstmt.setString(3, uniqueName); + pstmt.setLong(4, networkOfferingId); + pstmt.executeUpdate(); + + pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings` SELECT * from " + + "`cloud`.`network_offerings2` WHERE id=" + newNetworkOfferingId); + pstmt.executeUpdate(); + + pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` SET network_offering_id=? where id=?"); + pstmt.setLong(1, newNetworkOfferingId); + pstmt.setLong(2, networkId); + pstmt.executeUpdate(); + + newNetworkOfferingMap.put(networkOfferingId, ntwkOffCount); + } else { + pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` SET network_offering_id=? where id=?"); + newNetworkOfferingId = newNetworkOfferingMap.get(networkOfferingId); + pstmt.setLong(1, newNetworkOfferingId); + pstmt.setLong(2, networkId); + pstmt.executeUpdate(); + } + + s_logger.debug("Successfully updated network id=" + networkId + " with new network offering id " + newNetworkOfferingId); + } + + } catch (SQLException e) { + throw new CloudRuntimeException("Unable to switch networks to the new network offering", e); + } finally { + try { + pstmt = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`"); + pstmt.executeUpdate(); + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } + } + + return uniqueName; + } } diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index d2f01b109d6..b2b4ce04ccc 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -768,14 +768,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS } - @Override - public IpAddress allocateIP(long networkId, Account ipOwner, - boolean isSystem) throws ResourceAllocationException, - InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - @Override public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) @@ -880,4 +872,13 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return null; } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#allocateIP(long, com.cloud.user.Account) + */ + @Override + public IpAddress allocateIP(long networkId, Account ipOwner) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java index 5ddb19079c4..ce47449ef0f 100644 --- a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java @@ -40,8 +40,8 @@ public class AdvanceZone223To224UpgradeTest extends TestCase { } public void test217to22Upgrade() throws SQLException { - s_logger.debug("Finding sample data from 2.2.8"); -// DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.8/dave-sample.sql", false, true); + s_logger.debug("Finding sample data from 2.2.14"); +// DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.14/dave-sample.sql", false, true); Connection conn; PreparedStatement pstmt; @@ -50,9 +50,9 @@ public class AdvanceZone223To224UpgradeTest extends TestCase { DatabaseUpgradeChecker checker = ComponentLocator.inject(DatabaseUpgradeChecker.class); String version = dao.getCurrentVersion(); - assert version.equals("2.2.8") : "Version returned is not 2.2.8 but " + version; + assert version.equals("2.2.14") : "Version returned is not 2.2.14 but " + version; - checker.upgrade("2.2.8", "2.2.12"); + checker.upgrade("2.2.14", "3.0.3"); } } diff --git a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java index ea4950ba2b0..5a65a6d13f9 100755 --- a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java +++ b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java @@ -217,4 +217,22 @@ public class MockVirtualMachineManagerImpl implements VirtualMachineManager { return null; } + /* (non-Javadoc) + * @see com.cloud.vm.VirtualMachineManager#checkIfCanUpgrade(com.cloud.vm.VirtualMachine, long) + */ + @Override + public void checkIfCanUpgrade(VirtualMachine vmInstance, long newServiceOfferingId) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.vm.VirtualMachineManager#upgradeVmDb(long, long) + */ + @Override + public boolean upgradeVmDb(long vmId, long serviceOfferingId) { + // TODO Auto-generated method stub + return false; + } + } From 94f70234576dfa0b534e560ad8f90a221ffb8695 Mon Sep 17 00:00:00 2001 From: bfederle Date: Tue, 5 Jun 2012 13:26:57 -0700 Subject: [PATCH 12/16] CS-15120 Don't render action column if only header-level actions are present. --- ui/scripts/ui/widgets/listView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index d89874231e0..734d3a4aeea 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -545,9 +545,9 @@ var renderActionCol = function(actions) { return $.grep( $.map(actions, function(value, key) { - return key; + return { key: key, value: value }; }), - function(elem) { return elem != 'add'; } + function(elem) { return elem.key != 'add' && !elem.value.isHeader; } ).length; }; From 13f2e715303f1af742c7e9a2242ff1832c8645fc Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 5 Jun 2012 14:00:01 -0700 Subject: [PATCH 13/16] CS-14805: Add MB/s indicator to network rate label --- client/WEB-INF/classes/resources/messages.properties | 1 + ui/index.jsp | 1 + ui/scripts/configuration.js | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 7b0f264f46b..eda69df3ed6 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1,4 +1,5 @@ #new labels (begin) ********************************************************************************************** +label.network.rate.megabytes=Network Rate (MB/s) label.action.enable.physical.network=Enable physical network label.action.disable.physical.network=Disable physical network message.action.enable.physical.network=Please confirm that you want to enable this physical network. diff --git a/ui/index.jsp b/ui/index.jsp index a2dab4cd65b..d36b019c922 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -1651,6 +1651,7 @@