You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/02/17 21:32:56 UTC

[3/4] incubator-nifi git commit: NIFI-250: - Only showing the enable button when the controller service is valid. - Adding polling during deactivation of controller service references to know when it's ok to attempt to disable the controller service.

NIFI-250:
- Only showing the enable button when the controller service is valid.
- Adding polling during deactivation of controller service references to know when it's ok to attempt to disable the controller service.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/e61a01ac
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/e61a01ac
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/e61a01ac

Branch: refs/heads/NIFI-250
Commit: e61a01ac6968ba2f1e4f8fa1d3ca9c2cbca400e6
Parents: f22407f
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Feb 17 14:55:44 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Feb 17 14:55:44 2015 -0500

----------------------------------------------------------------------
 .../js/nf/canvas/nf-controller-service.js       | 110 +++++++++++++++++--
 .../src/main/webapp/js/nf/canvas/nf-settings.js |   9 +-
 2 files changed, 110 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e61a01ac/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
index aa62f79..cd8503e 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
@@ -348,8 +348,89 @@ nf.ControllerService = (function () {
     };
     
     // updates the referencing components with the specified state
-    var updateReferencingComponents = function (controllerService, state) {
+    var updateReferencingComponents = function (controllerService, activated) {
+        var revision = nf.Client.getRevision();
+        
+        // issue the request to update the referencing components
+        var updated = $.ajax({
+            type: 'PUT',
+            url: controllerService.uri + '/references',
+            data: {
+                clientId: revision.clientId,
+                version: revision.version,
+                activated: activated
+            },
+            dataType: 'json'
+        }).done(function (response) {
+            // update the revision
+            nf.Client.setRevision(response.revision);
+            
+            // update the service
+            reloadControllerServiceReferences(controllerService);
+        }).fail(nf.Common.handleAjaxError);
         
+        // if we are activating, we can stop here
+        if (activated === true) {
+            return updated;
+        }
+
+        // since we are deactivating, we want to keep polling until 
+        // everything has stopped and there are 0 active threads
+        return $.Deferred(function(deferred) {
+            var current = 1;
+            var getTimeout = function () {
+                var val = current;
+                
+                // update the current timeout for the next time
+                current = Math.max(current * 2, 8);
+                
+                return val * 1000;
+            };
+            
+            // polls for the current status of the referencing components
+            var pollReferencingComponent = function() {
+                $.ajax({
+                    type: 'GET',
+                    url: controllerService.uri + '/references',
+                    dataType: 'json'
+                }).done(function (response) {
+                    checkDeactivated(response.controllerServiceReferencingComponents);
+                }).fail(function (xhr, status, error) {
+                    deferred.reject();
+                    nf.Common.handleAjaxError(xhr, status, error);
+                });
+            };
+            
+            // checks the referencing components to see if any are still active
+            var checkDeactivated = function (controllerServiceReferencingComponents) {
+                var stillRunning = false;
+                
+                $.each(controllerServiceReferencingComponents, function(referencingComponent) {
+                    if (referencingComponent.referenceType === 'ControllerService') {
+                        if (referencingComponent.enable === true) {
+                            stillRunning = true;
+                            return false;
+                        }
+                    } else {
+                        if (referencingComponent.state === 'RUNNING' || referencingComponent.activeThreadCount > 0) {
+                            stillRunning = true;
+                            return false;
+                        }
+                    }
+                });
+                
+                if (stillRunning) {
+                    setTimeout(pollReferencingComponent(), getTimeout());
+                } else {
+                    deferred.resolve();
+                }
+            };
+            
+            // see if the references have already stopped
+            updated.done(function(response) {
+                checkDeactivated(response.controllerServiceReferencingComponents);
+            });
+        }).promise();
     };
     
     /**
@@ -478,11 +559,17 @@ nf.ControllerService = (function () {
                             var controllerServiceData = controllerServiceGrid.getData();
                             var controllerService = controllerServiceData.getItemById(controllerServiceId);
                             
-                            // disable all referencing components
-                            updateReferencingComponents(controllerService, false);
+                            // deactivate all referencing components
+                            var deactivated = updateReferencingComponents(controllerService, false);
                             
-                            // enable this controller service
-                            setEnabled(controllerService, false);
+                            // once all referencing components have been deactivated...
+                            deactivated.done(function() {
+                                // disable this service
+                                setEnabled(controllerService, false).done(function() {
+                                    // close the dialog
+                                    $('#disable-controller-service-dialog').modal('hide');
+                                });
+                            });
                         }
                     }
                 }, {
@@ -534,13 +621,20 @@ nf.ControllerService = (function () {
                             var controllerServiceData = controllerServiceGrid.getData();
                             var controllerService = controllerServiceData.getItemById(controllerServiceId);
                             
+                            // enable this controller service
+                            var enabled = setEnabled(controllerService, true);
+                            
+                            // determine if we want to also activate referencing components
                             var scope = $('#enable-controller-service-scope').combo('getSelectedOption').value;
                             if (scope === config.serviceAndReferencingComponents) {
-                                updateReferencingComponents(controllerService, true);
+                                // once the service is enabled, activate all referencing components
+                                enabled.done(function() {
+                                    updateReferencingComponents(controllerService, true);
+                                });
                             }
                             
-                            // enable this controller service
-                            setEnabled(controllerService, true);
+                            // hide the dialog immediately as there's nothing to show
+                            $(this).modal('hide');
                         }
                     }
                 }, {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e61a01ac/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
index eef5448..744198f 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
@@ -751,7 +751,14 @@ nf.Settings = (function () {
                 if (dataContext.enabled === true) {
                     markup += '<img src="images/iconDisable.png" title="Disable" class="pointer disable-controller-service" style="margin-top: 2px;" />&nbsp;';
                 } else {
-                    markup += '<img src="images/iconEdit.png" title="Edit" class="pointer edit-controller-service" style="margin-top: 2px;" />&nbsp;<img src="images/iconEnable.png" title="Enable" class="pointer enable-controller-service" style="margin-top: 2px;"/>&nbsp;<img src="images/iconDelete.png" title="Remove" class="pointer delete-controller-service" style="margin-top: 2px;" />&nbsp;';
+                    markup += '<img src="images/iconEdit.png" title="Edit" class="pointer edit-controller-service" style="margin-top: 2px;" />&nbsp;';
+                    
+                    // only enable the enable icon if the service has no validation errors
+                    if (nf.Common.isEmpty(dataContext.validationErrors)) {
+                        markup += '<img src="images/iconEnable.png" title="Enable" class="pointer enable-controller-service" style="margin-top: 2px;"/>&nbsp;';
+                    }
+                    
+                    markup += '<img src="images/iconDelete.png" title="Remove" class="pointer delete-controller-service" style="margin-top: 2px;" />&nbsp;';
                 }
 
                 return markup;