diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index e4f143d3b928fae1728d75bf2361db23074b5f8f..3c8638745a9f0acf606cfc1af9cd56b8dbc4c69c 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -1457,6 +1457,12 @@ class LUQueryNodes(NoHooksLU):
     all_info = self.cfg.GetAllNodesInfo()
     if self.do_locking:
       nodenames = self.acquired_locks[locking.LEVEL_NODE]
+    elif self.wanted != locking.ALL_SET:
+      nodenames = self.wanted
+      missing = set(nodenames).difference(all_info.keys())
+      if missing:
+        raise self.OpExecError(
+          "Some nodes were removed before retrieving their data: %s" % missing)
     else:
       nodenames = all_info.keys()
     nodelist = [all_info[name] for name in nodenames]
@@ -2606,6 +2612,13 @@ class LUQueryInstances(NoHooksLU):
     all_info = self.cfg.GetAllInstancesInfo()
     if self.do_locking:
       instance_names = self.acquired_locks[locking.LEVEL_INSTANCE]
+    elif self.wanted != locking.ALL_SET:
+      instance_names = self.wanted
+      missing = set(instance_names).difference(all_info.keys())
+      if missing:
+        raise self.OpExecError(
+          "Some instances were removed before retrieving their data: %s"
+          % missing)
     else:
       instance_names = all_info.keys()
     instance_list = [all_info[iname] for iname in instance_names]