diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/resource/ResourceAwareScheduler.java b/storm-server/src/main/java/org/apache/storm/scheduler/resource/ResourceAwareScheduler.java
index 40902ae..75ae8c7 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/resource/ResourceAwareScheduler.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/resource/ResourceAwareScheduler.java
@@ -158,7 +158,6 @@
         TopologySchedulingResources topologySchedulingResources = new TopologySchedulingResources(workingState, td);
         final IStrategy finalRasStrategy = rasStrategy;
         for (int i = 0; i < maxSchedulingAttempts; i++) {
-            finalRasStrategy.clearSchedulingFailText();
             SingleTopologyCluster toSchedule = new SingleTopologyCluster(workingState, td.getId());
             try {
                 SchedulingResult result = null;
@@ -218,8 +217,8 @@
 
                         if (!evictedSomething) {
                             StringBuilder message = new StringBuilder();
-                            message.append("Not enough resources to schedule - ");
-                            message.append(topologySchedulingResources.getRemainingRequiredResourcesMessage(finalRasStrategy));
+                            message.append("Not enough resources to schedule ");
+                            message.append(topologySchedulingResources.getRemainingRequiredResourcesMessage());
                             message.append(result.getErrorMessage());
                             markFailedTopology(topologySubmitter, cluster, td, message.toString());
                             return;
@@ -372,10 +371,9 @@
             return scheduledTopologyMemory;
         }
 
-        String getRemainingRequiredResourcesMessage(IStrategy rasStrategy) {
+        String getRemainingRequiredResourcesMessage() {
             StringBuilder message = new StringBuilder();
             message.append("After evicting lower priority topologies: ");
-            message.append(rasStrategy.getSchedulingFailText()).append("\n");
 
             NormalizedResourceOffer clusterRemainingAvailableResources = new NormalizedResourceOffer();
             clusterRemainingAvailableResources.add(clusterAvailableResources);
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/BaseResourceAwareStrategy.java b/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/BaseResourceAwareStrategy.java
index a9c187d..2b5afe0 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/BaseResourceAwareStrategy.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/BaseResourceAwareStrategy.java
@@ -60,15 +60,6 @@
     private final Map<String, List<RasNode>> hostnameToNodes = new HashMap<>();
     private final Map<String, List<RasNode>> rackIdToNodes = new HashMap<>();
     protected RasNodes nodes;
-    private String schedulingFailText;
-
-    public String getSchedulingFailText() {
-        return schedulingFailText;
-    }
-
-    public void clearSchedulingFailText() {
-        schedulingFailText = "";
-    }
 
     @VisibleForTesting
     void prepare(Cluster cluster) {
@@ -135,9 +126,7 @@
         } else {
             String comp = td.getExecutorToComponent().get(exec);
             NormalizedResourceRequest requestedResources = td.getTotalResources(exec);
-            schedulingFailText = "Not Enough Resources to schedule Task "
-                    + exec + " - " + comp + " " + requestedResources;
-            LOG.error(schedulingFailText);
+            LOG.warn("Not Enough Resources to schedule Task {} - {} {}", exec, comp, requestedResources);
             return false;
         }
     }
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java b/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java
index 1ed11fd..d246b30 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java
@@ -41,10 +41,4 @@
      *     successful.
      */
     SchedulingResult schedule(Cluster schedulingState, TopologyDetails td);
-
-    // Get topology scheduling failure text.
-    String getSchedulingFailText();
-
-    // Clear topology scheduling failure text.
-    void clearSchedulingFailText();
 }
