Repository: incubator-hawq
Updated Branches:
  refs/heads/master 90ab2d406 -> ae575f323


HAWQ-345. Can not drop a resource queue that is busy


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

Branch: refs/heads/master
Commit: ae575f323ffc80c9dfc0220067e5482c38251e8c
Parents: 90ab2d4
Author: YI JIN <[email protected]>
Authored: Mon Jan 18 16:13:24 2016 +1100
Committer: YI JIN <[email protected]>
Committed: Mon Jan 18 16:13:24 2016 +1100

----------------------------------------------------------------------
 .../resourcemanager/requesthandler_ddl.c        | 64 ++++++++++----------
 1 file changed, 33 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae575f32/src/backend/resourcemanager/requesthandler_ddl.c
----------------------------------------------------------------------
diff --git a/src/backend/resourcemanager/requesthandler_ddl.c 
b/src/backend/resourcemanager/requesthandler_ddl.c
index 3fa3742..651f32b 100644
--- a/src/backend/resourcemanager/requesthandler_ddl.c
+++ b/src/backend/resourcemanager/requesthandler_ddl.c
@@ -450,16 +450,13 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                                                                                
                   &exist);
                        if (!exist || todroptrack == NULL )
                        {
-                               /* already check before send RPC to RM */
-                               Assert(exist);
                                ddlres = RESQUEMGR_NO_QUENAME;
                                snprintf(errorbuf, sizeof(errorbuf),
-                                               "The queue doesn't exist");
-                               elog(WARNING, ERRORPOS_FORMAT
-                                        "Resource manager can not drop 
resource queue %s because %s",
-                                        ERRREPORTPOS,
-                                        nameattr->Val.Str,
-                                        errorbuf);
+                                                "resource queue %s doesn't 
exist",
+                                                nameattr->Val.Str);
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
                                goto senderr;
                        }
 
@@ -469,11 +466,21 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                                snprintf(errorbuf, sizeof(errorbuf),
                                                 "resource queue %s is a branch 
queue",
                                                 todroptrack->QueueInfo->Name);
-                               elog(WARNING, ERRORPOS_FORMAT
-                                        "Resource manager can not drop 
resource queue %s because %s.",
-                                        ERRREPORTPOS,
-                                        nameattr->Val.Str,
-                                        errorbuf);
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
+                               goto senderr;
+                       }
+
+                       if ( todroptrack->isBusy ||
+                                todroptrack->QueryResRequests.NodeCount > 0 )
+                       {
+                               ddlres = RESQUEMGR_IN_USE;
+                               snprintf(errorbuf, sizeof(errorbuf), "resource 
queue %s is busy",
+                                                todroptrack->QueueInfo->Name);
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
                                goto senderr;
                        }
 
@@ -483,12 +490,10 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                                Assert(todroptrack->QueueInfo->OID != 
DEFAULTRESQUEUE_OID);
                                ddlres = RESQUEMGR_IN_USE;
                                snprintf(errorbuf, sizeof(errorbuf),
-                                               "pg_default as system queue 
cannot be dropped.");
-                               elog(WARNING, ERRORPOS_FORMAT
-                                        "Resource manager can not drop 
resource queue %s because %s",
-                                        ERRREPORTPOS,
-                                        nameattr->Val.Str,
-                                        errorbuf);
+                                               "pg_default as system queue 
cannot be dropped");
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
                                goto senderr;
                        }
 
@@ -499,11 +504,9 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                                ddlres = RESQUEMGR_IN_USE;
                                snprintf(errorbuf, sizeof(errorbuf),
                                                "pg_root as system queue cannot 
be dropped.");
-                               elog(WARNING, ERRORPOS_FORMAT
-                                        "Resource manager can not drop 
resource queue %s because %s",
-                                        ERRREPORTPOS,
-                                        nameattr->Val.Str,
-                                        errorbuf);
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
                                goto senderr;
                        }
 
@@ -514,12 +517,10 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                        {
                                ddlres = res;
                                snprintf(errorbuf, sizeof(errorbuf),
-                                                "Cannot update resource queue 
changes in pg_resqueue");
-                               elog(WARNING, ERRORPOS_FORMAT
-                                        "Resource manager cannot drop resource 
queue %s because %s",
-                                        ERRREPORTPOS,
-                                        nameattr->Val.Str,
-                                        errorbuf);
+                                                "cannot update resource queue 
changes in pg_resqueue");
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
+                                                         errorbuf);
                                goto senderr;
                        }
 
@@ -527,7 +528,8 @@ bool handleRMDDLRequestManipulateResourceQueue(void **arg)
                        if (res != FUNC_RETURN_OK)
                        {
                                ddlres = res;
-                               elog(WARNING, "Resource manager can not 
dropQueueAndTrack because %s",
+                               elog(WARNING, "Resource manager cannot drop 
resource queue %s, %s",
+                                                         nameattr->Val.Str,
                                                      errorbuf);
                                goto senderr;
                        }

Reply via email to