From 4418e8f2455867dca6a7967887d2741942e2d7b7 Mon Sep 17 00:00:00 2001 From: alena Date: Wed, 12 Jan 2011 12:18:15 -0800 Subject: [PATCH 1/8] Don't zip Api xml doc directory in java code, rpm script will do it --- server/src/com/cloud/api/doc/ApiXmlDocWriter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index 95ed8945228..c96dae3c6dc 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -201,10 +201,10 @@ public class ApiXmlDocWriter { regularUserSorted.close(); //gzip directory with xml doc - zipDir(dirName + "xmldoc.zip", xmlDocDir); + //zipDir(dirName + "xmldoc.zip", xmlDocDir); //Delete directory - deleteDir(new File(xmlDocDir)); + //deleteDir(new File(xmlDocDir)); } catch (Exception ex) { ex.printStackTrace(); From e31e0c40a5c849ea82ab1074ff4bed282551fc0b Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 12 Jan 2011 10:58:00 -0800 Subject: [PATCH 2/8] Add a holding Eclipse project to help build Eclipse workplace upon deps directory. Be it either deps or thirdparty to hold reference .jars, we better use the same --- deps/.project | 11 +++++++++++ utils/.classpath | 29 ++++++++++++++++------------- 2 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 deps/.project diff --git a/deps/.project b/deps/.project new file mode 100644 index 00000000000..2d10b0c4b06 --- /dev/null +++ b/deps/.project @@ -0,0 +1,11 @@ + + + deps + + + + + + + + diff --git a/utils/.classpath b/utils/.classpath index a2f59b44764..e1b97740fe8 100644 --- a/utils/.classpath +++ b/utils/.classpath @@ -1,13 +1,16 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + From 256e26ff614390a6d85992c9c75ea44b78bec2cc Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 12 Jan 2011 12:31:06 -0800 Subject: [PATCH 3/8] Waiting virtual router to be ready in a outer place instead of inside VirtualNetworkApplianceImpl. This is to fix the the blocker issue of unable to deploy VM/start DomR --- .../network/element/VirtualRouterElement.java | 40 ++++++++++++++---- .../VirtualNetworkApplianceManagerImpl.java | 41 +++++-------------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 0e59a7363cc..d641635b3b4 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -32,25 +32,26 @@ import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.Host; import com.cloud.network.LoadBalancerVO; import com.cloud.network.Network; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.GuestIpType; -import com.cloud.network.Network.Provider; -import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.VpnUser; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestIpType; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.vpn.RemoteAccessVpnElement; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -63,8 +64,8 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.UserVmManager; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; @@ -96,6 +97,7 @@ public class VirtualRouterElement extends AdapterBase implements NetworkElement, if (!canHandle(guestConfig.getGuestType(), dest.getDataCenter())) { return false; } + _routerMgr.deployVirtualRouter(guestConfig, dest, context.getAccount()); return true; @@ -111,6 +113,30 @@ public class VirtualRouterElement extends AdapterBase implements NetworkElement, @SuppressWarnings("unchecked") VirtualMachineProfile uservm = (VirtualMachineProfile)vm; + DomainRouterVO router = _routerDao.findById(uservm.getVirtualMachine().getDomainRouterId()); + if(router != null) { + State state = router.getState(); + if ( state == State.Starting ) { + // wait 300 seconds + for ( int i = 0; i < 300; ) { + try { + Thread.sleep(2000); + } catch (Exception e) { + } + i += 2; + + state = router.getState(); + if ( state != State.Starting ) { + break; + } + } + } + + // TODO: need to find a better exception to throw! + if(state != State.Running) + throw new ResourceUnavailableException("Virtual router is not available", Host.class, router.getHostId()); + } + return _routerMgr.addVirtualMachineIntoNetwork(config, nic, uservm, dest, context, false) != null; } else { return false; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 091d3ac1234..9aca8d1c256 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -72,10 +72,9 @@ import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceLimitDao; import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; +import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; @@ -105,18 +104,18 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; import com.cloud.network.LoadBalancerVO; import com.cloud.network.Network; -import com.cloud.network.Network.GuestIpType; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; -import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Networks.IsolationType; -import com.cloud.network.Networks.TrafficType; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.SshKeysDistriMonitor; import com.cloud.network.VirtualNetworkApplianceService; import com.cloud.network.VpnUser; import com.cloud.network.VpnUserVO; +import com.cloud.network.Network.GuestIpType; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.IsolationType; +import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -127,8 +126,8 @@ import com.cloud.network.dao.NetworkRuleConfigDao; import com.cloud.network.dao.RemoteAccessVpnDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.ovs.GreTunnelException; import com.cloud.network.ovs.OvsNetworkManager; import com.cloud.network.router.VirtualRouter.Role; @@ -177,11 +176,11 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; @@ -1034,24 +1033,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } else { EventUtils.saveEvent(User.UID_SYSTEM, owner.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_ROUTER_CREATE, "router creation failed", startEventId); } - - } - State state = router.getState(); - - if ( state == State.Starting ) { - // wait 300 seconds - for ( int i = 0; i < 300; ) { - try { - Thread.sleep(2); - } catch (Exception e) { - } - i += 2; - state = router.getState(); - if ( state != State.Starting ) { - break; - } - } } + + State state = router.getState(); if (state != State.Starting && state != State.Running) { long startEventId = EventUtils.saveStartedEvent(User.UID_SYSTEM, owner.getId(), EventTypes.EVENT_ROUTER_START, "Starting router : " +router.getName()); router = this.start(router, _accountService.getSystemUser(), _accountService.getSystemAccount()); @@ -1061,11 +1045,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian EventUtils.saveEvent(User.UID_SYSTEM, owner.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_ROUTER_START, "failed to start router", startEventId); } } - state = router.getState(); - if ( state == State.Running ) { - return router; - } - throw new CloudRuntimeException(router.getName() + " is not running , it is in " + state); + + return router; } @Override From 5f1d54b9787eb4e87b21994135c058f46fa261e5 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 12 Jan 2011 14:05:23 -0800 Subject: [PATCH 4/8] bug 7956: when copy action info from middle menu item to right panel, hide spinning wheel in right panel if spinning wheel in middle menu item id hidden. --- ui/scripts/cloud.core.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ui/scripts/cloud.core.js b/ui/scripts/cloud.core.js index 216ba58839b..55d5316f782 100644 --- a/ui/scripts/cloud.core.js +++ b/ui/scripts/cloud.core.js @@ -506,14 +506,17 @@ function copyActionInfoFromMidMenuToRightPanel($midmenuItem1) { } var $midMenuSpinningWheel = $midmenuItem1.find("#spinning_wheel"); - if($midMenuSpinningWheel.css("display") != "none") { - var $detailsTabSpinningWheel = $("#right_panel_content #tab_content_details").find("#spinning_wheel"); + var $detailsTabSpinningWheel = $("#right_panel_content #tab_content_details").find("#spinning_wheel"); + if($midMenuSpinningWheel.css("display") != "none") { if($detailsTabSpinningWheel.css("display") == "none") { var inProcessText = $midMenuSpinningWheel.data("inProcessText"); $detailsTabSpinningWheel.find("#description").text(inProcessText); $detailsTabSpinningWheel.show(); } } + else { + $detailsTabSpinningWheel.hide(); + } } //***** actions for middle menu (end) ************************************************************************** From c0354e75089858ec5b6c981101a7db26770f8ccf Mon Sep 17 00:00:00 2001 From: Edison Su Date: Wed, 12 Jan 2011 13:54:39 -0800 Subject: [PATCH 5/8] bug 7938: The path of qemu is hardcoded as /usr/libexec/qemu-kvm in libvirtd under RHEL6. While, we use the different path, /usr/libexec/cloud-qemu-kvm(which build by ourself to support snapshot), then some of the feature just doesn't work, such as attaching disk.... Rebuild the package for RHEL6 status 7938: resolved fixed --- cloud.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cloud.spec b/cloud.spec index 931b2b1d1fb..03e6228744d 100644 --- a/cloud.spec +++ b/cloud.spec @@ -218,14 +218,19 @@ Requires: jpackage-utils Requires: %{name}-daemonize Requires: /sbin/service Requires: /sbin/chkconfig + +%if 0%{?rhel} >= 6 +Requires: cloud-kvm +%else Requires: kvm +%endif + %if 0%{?fedora} >= 12 Requires: qemu-cloud-system-x86 Requires: qemu-cloud-img %endif %if 0%{?rhel} >= 6 -Requires: cloud-qemu-kvm Requires: cloud-qemu-img %endif From 8b18b58c51198b365211e64b966a6bc30ad78914 Mon Sep 17 00:00:00 2001 From: alena Date: Wed, 12 Jan 2011 14:10:53 -0800 Subject: [PATCH 6/8] bug 7947: use correct search builder in UserVmDao status 7947: resolved fixed --- server/src/com/cloud/vm/dao/UserVmDaoImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java index 73e439ded71..4b21249a436 100755 --- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -61,6 +61,7 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use protected final SearchBuilder DestroySearch; protected SearchBuilder AccountDataCenterVirtualSearch; + protected SearchBuilder UserVmSearch; protected final Attribute _updateTimeAttr; protected UserVmDaoImpl() { @@ -320,18 +321,18 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use @Override public List listByNetworkId(long networkId) { - if (AccountDataCenterVirtualSearch == null) { + if (UserVmSearch == null) { NicDao _nicDao = ComponentLocator.getLocator("management-server").getDao(NicDao.class); SearchBuilder nicSearch = _nicDao.createSearchBuilder(); nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); nicSearch.and("ip4Address", nicSearch.entity().getIp4Address(), SearchCriteria.Op.NNULL); - AccountDataCenterVirtualSearch = createSearchBuilder(); - AccountDataCenterVirtualSearch.join("nicSearch", nicSearch, AccountDataCenterVirtualSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER); - AccountDataCenterVirtualSearch.done(); + UserVmSearch = createSearchBuilder(); + UserVmSearch.join("nicSearch", nicSearch, UserVmSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER); + UserVmSearch.done(); } - SearchCriteria sc = AccountDataCenterVirtualSearch.create(); + SearchCriteria sc = UserVmSearch.create(); sc.setJoinParameters("nicSearch", "networkId", networkId); return listBy(sc); From b4e1fbbb0133f9ace5dd10e852bf99fc99ceac9d Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 12 Jan 2011 14:47:19 -0800 Subject: [PATCH 7/8] bug 7956: when middle menu action succeeds, update right panel if this action belongs to the currently selected middle menu item. --- ui/scripts/cloud.core.instance.js | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/ui/scripts/cloud.core.instance.js b/ui/scripts/cloud.core.instance.js index a1a1530301d..6769f01ed59 100644 --- a/ui/scripts/cloud.core.instance.js +++ b/ui/scripts/cloud.core.instance.js @@ -174,12 +174,9 @@ function bindStartVMButton() { inProcessText: "Starting Instance....", asyncJobResponse: "startvirtualmachineresponse", afterActionSeccessFn: function(json, $midmenuItem1, id) { - var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine; - - vmToMidmenu(jsonObj, $midmenuItem1); - if( ($("#right_panel_content #tab_content_details").length > 0) - && ($("#right_panel_content #tab_content_details").data("jsonObj") != null ) - && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id)) + var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine; + vmToMidmenu(jsonObj, $midmenuItem1); + if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text()) vmToRightPanel($midmenuItem1); } } @@ -225,10 +222,8 @@ function bindStopVMButton() { afterActionSeccessFn: function(json, $midmenuItem1, id) { var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine; vmToMidmenu(jsonObj, $midmenuItem1); - if( ($("#right_panel_content #tab_content_details").length > 0) - && ($("#right_panel_content #tab_content_details").data("jsonObj") != null ) - && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id)) - vmToRightPanel($midmenuItem1); + if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text()) + vmToRightPanel($midmenuItem1); } } @@ -273,10 +268,8 @@ function bindRebootVMButton() { afterActionSeccessFn: function(json, $midmenuItem1, id) { var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine; vmToMidmenu(jsonObj, $midmenuItem1); - if( ($("#right_panel_content #tab_content_details").length > 0) - && ($("#right_panel_content #tab_content_details").data("jsonObj") != null ) - && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id)) - vmToRightPanel($midmenuItem1); + if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text()) + vmToRightPanel($midmenuItem1); } } @@ -321,10 +314,8 @@ function bindDestroyVMButton() { afterActionSeccessFn: function(json, $midmenuItem1, id) { var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine; vmToMidmenu(jsonObj, $midmenuItem1); - if( ($("#right_panel_content #tab_content_details").length > 0) - && ($("#right_panel_content #tab_content_details").data("jsonObj") != null ) - && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id)) - vmToRightPanel($midmenuItem1); + if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text()) + vmToRightPanel($midmenuItem1); } } From 3a0b98eb8392488160230777dfafb8fa22447e95 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 12 Jan 2011 15:20:05 -0800 Subject: [PATCH 8/8] bug 7956: when middle menu action fails, show error message on right panel if this action belongs to the currently selected middle menu item. --- ui/scripts/cloud.core.js | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/ui/scripts/cloud.core.js b/ui/scripts/cloud.core.js index 55d5316f782..18f6a38acda 100644 --- a/ui/scripts/cloud.core.js +++ b/ui/scripts/cloud.core.js @@ -399,14 +399,14 @@ function doActionToMidMenu(id, apiInfo, apiCommand) { $("body").stopTime(timerKey); $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); - hideDetailsTabActionSpinningWheel(id, inProcessText); + hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1); if (result.jobstatus == 1) { // Succeeded $midmenuItem1.find("#info_icon").removeClass("error").show(); $midmenuItem1.data("afterActionInfo", (label + " action succeeded.")); afterActionSeccessFn(json, $midmenuItem1, id); - } else if (result.jobstatus == 2) { // Failed - $midmenuItem1.find("#info_icon").addClass("error").show(); - $midmenuItem1.data("afterActionInfo", (label + " action failed. Reason: " + fromdb(result.jobresult.errortext))); + } else if (result.jobstatus == 2) { // Failed + var errorMsg = label + " action failed. Reason: " + fromdb(result.jobresult.errortext); + handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText); } } }, @@ -438,7 +438,7 @@ function doActionToMidMenu(id, apiInfo, apiCommand) { $midmenuItem1.find("#spinning_wheel").hide(); $midmenuItem1.find("#info_icon").removeClass("error").show(); $midmenuItem1.data("afterActionInfo", (label + " action succeeded.")); - hideDetailsTabActionSpinningWheel(id, inProcessText); + hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1); afterActionSeccessFn(json, $midmenuItem1, id); }, error: function(XMLHttpResponse) { @@ -449,29 +449,34 @@ function doActionToMidMenu(id, apiInfo, apiCommand) { //Sync job (end) ***** } -function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText) { - $midmenuItem1.find("#content").removeClass("inaction"); - $midmenuItem1.find("#spinning_wheel").hide(); - $midmenuItem1.find("#info_icon").addClass("error").show(); - $midmenuItem1.find("#first_row").text("Action failed"); - hideDetailsTabActionSpinningWheel(id, inProcessText); - +function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText) { var errorMsg = ""; if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) { errorMsg = parseXMLHttpResponse(XMLHttpResponse); } + handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText); +} + +function handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText) { + $midmenuItem1.find("#content").removeClass("inaction"); + $midmenuItem1.find("#spinning_wheel").hide(); + $midmenuItem1.find("#info_icon").addClass("error").show(); + //$midmenuItem1.find("#first_row").text("Action failed"); + $midmenuItem1.data("afterActionInfo", errorMsg); + hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1); + if(errorMsg.length > 0) $midmenuItem1.find("#second_row").text(fromdb(errorMsg)); else $midmenuItem1.find("#second_row").html(" "); } -function hideDetailsTabActionSpinningWheel(id, inProcessText) { +function hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1) { var $detailsTab = $("#right_panel_content #tab_content_details"); var jsonObj = $detailsTab.data("jsonObj"); var $spinningWheel = $detailsTab.find("#spinning_wheel"); - if(jsonObj != null && ("id" in jsonObj) && jsonObj.id == id && ($spinningWheel.find("#description").text() == inProcessText)) { - $spinningWheel.hide(); + if((id == $detailsTab.find("#id").text()) && (inProcessText == $spinningWheel.find("#description").text())) { + copyActionInfoFromMidMenuToRightPanel($midmenuItem1); } }