From fb2859f195c25386898a99cbdeaf78e51fc2b273 Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Tue, 6 Aug 2024 15:33:40 +0800
Subject: [PATCH 1/7] add log to locate root cause of flaky test

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java  | 1 +
 1 file changed, 1 insertion(+)

diff --git a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
index 2092b9f4b4..009ab7af64 100644
--- a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
+++ b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
@@ -862,6 +862,7 @@ public static Map parseResponseToMap(Response response) throws IOException {
         HttpEntity entity = response.getEntity();
         assertNotNull(response);
         String entityString = TestHelper.httpEntityToString(entity);
+        assertEquals(String.format("response status is not success, raw response is: %s", entityString), 200, response.getStatusLine().getStatusCode());
         return StringUtils.gson.fromJson(entityString, Map.class);
     }
 

From 14c46a381fc86706f5e1c6edd22d2ff524d44956 Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Tue, 6 Aug 2024 15:43:21 +0800
Subject: [PATCH 2/7] format code

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../java/org/opensearch/ml/rest/MLCommonsRestTestCase.java  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
index 009ab7af64..fbe4c998bf 100644
--- a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
+++ b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
@@ -862,7 +862,11 @@ public static Map parseResponseToMap(Response response) throws IOException {
         HttpEntity entity = response.getEntity();
         assertNotNull(response);
         String entityString = TestHelper.httpEntityToString(entity);
-        assertEquals(String.format("response status is not success, raw response is: %s", entityString), 200, response.getStatusLine().getStatusCode());
+        assertEquals(
+            String.format("response status is not success, raw response is: %s", entityString),
+            200,
+            response.getStatusLine().getStatusCode()
+        );
         return StringUtils.gson.fromJson(entityString, Map.class);
     }
 

From eeae9de5f345aae38bfd646045cdf91b82cae231 Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Wed, 7 Aug 2024 08:55:36 +0800
Subject: [PATCH 3/7] Remove assert for response status code

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../org/opensearch/ml/rest/MLCommonsRestTestCase.java     | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
index fbe4c998bf..ec74bb7290 100644
--- a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
+++ b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
@@ -862,11 +862,9 @@ public static Map parseResponseToMap(Response response) throws IOException {
         HttpEntity entity = response.getEntity();
         assertNotNull(response);
         String entityString = TestHelper.httpEntityToString(entity);
-        assertEquals(
-            String.format("response status is not success, raw response is: %s", entityString),
-            200,
-            response.getStatusLine().getStatusCode()
-        );
+        if (response.getStatusLine().getStatusCode() != 200) {
+            log.warn(String.format("response status is not success, raw response is: %s", entityString));
+        }
         return StringUtils.gson.fromJson(entityString, Map.class);
     }
 

From 82dba04c1b2b0102ad2f23892a4284e98ec9967b Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Wed, 7 Aug 2024 10:40:28 +0800
Subject: [PATCH 4/7] Add model status logging for debugging

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../ml/action/models/DeleteModelTransportAction.java         | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java b/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
index 7d18fe18d1..68c0848770 100644
--- a/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
+++ b/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
@@ -16,6 +16,7 @@
 import static org.opensearch.ml.utils.MLNodeUtils.createXContentParserFromRegistry;
 import static org.opensearch.ml.utils.RestActionUtils.getFetchSourceContext;
 
+import java.util.Locale;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -133,7 +134,7 @@ protected void doExecute(Task task, ActionRequest request, ActionListener<Delete
                                     wrappedListener
                                         .onFailure(
                                             new OpenSearchStatusException(
-                                                "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete",
+                                                String.format(Locale.ROOT, "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s", mlModelState.name()),
                                                 RestStatus.BAD_REQUEST
                                             )
                                         );
@@ -156,7 +157,7 @@ protected void doExecute(Task task, ActionRequest request, ActionListener<Delete
                                         wrappedListener
                                             .onFailure(
                                                 new OpenSearchStatusException(
-                                                    "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete",
+                                                    String.format(Locale.ROOT, "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s", mlModelState.name())
                                                     RestStatus.BAD_REQUEST
                                                 )
                                             );

From cecdf0d0f78e3a1725d7a4afd273fb7824999854 Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Wed, 7 Aug 2024 11:20:29 +0800
Subject: [PATCH 5/7] format code

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../action/models/DeleteModelTransportAction.java  | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java b/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
index 68c0848770..de5db926ff 100644
--- a/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
+++ b/plugin/src/main/java/org/opensearch/ml/action/models/DeleteModelTransportAction.java
@@ -134,7 +134,12 @@ protected void doExecute(Task task, ActionRequest request, ActionListener<Delete
                                     wrappedListener
                                         .onFailure(
                                             new OpenSearchStatusException(
-                                                String.format(Locale.ROOT, "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s", mlModelState.name()),
+                                                String
+                                                    .format(
+                                                        Locale.ROOT,
+                                                        "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s",
+                                                        mlModelState.name()
+                                                    ),
                                                 RestStatus.BAD_REQUEST
                                             )
                                         );
@@ -157,7 +162,12 @@ protected void doExecute(Task task, ActionRequest request, ActionListener<Delete
                                         wrappedListener
                                             .onFailure(
                                                 new OpenSearchStatusException(
-                                                    String.format(Locale.ROOT, "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s", mlModelState.name())
+                                                    String
+                                                        .format(
+                                                            Locale.ROOT,
+                                                            "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: %s",
+                                                            mlModelState.name()
+                                                        ),
                                                     RestStatus.BAD_REQUEST
                                                 )
                                             );

From 6f9cc41a3cf8fd8c56e3de899a503df77ab0e4ed Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Wed, 7 Aug 2024 18:56:44 +0800
Subject: [PATCH 6/7] Fix failure UTs

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../ml/action/models/DeleteModelTransportActionTests.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugin/src/test/java/org/opensearch/ml/action/models/DeleteModelTransportActionTests.java b/plugin/src/test/java/org/opensearch/ml/action/models/DeleteModelTransportActionTests.java
index cdd3c80184..8c1b1baec7 100644
--- a/plugin/src/test/java/org/opensearch/ml/action/models/DeleteModelTransportActionTests.java
+++ b/plugin/src/test/java/org/opensearch/ml/action/models/DeleteModelTransportActionTests.java
@@ -383,7 +383,7 @@ public void testDeleteModel_CheckModelState() throws IOException {
         ArgumentCaptor<Exception> argumentCaptor = ArgumentCaptor.forClass(Exception.class);
         verify(actionListener).onFailure(argumentCaptor.capture());
         assertEquals(
-            "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete",
+            "Model cannot be deleted in deploying or deployed state. Try undeploy model first then delete, current model state is: DEPLOYING",
             argumentCaptor.getValue().getMessage()
         );
     }

From 8247a290388652a8256530737ffc3b0af839aaed Mon Sep 17 00:00:00 2001
From: zane-neo <zaniu@amazon.com>
Date: Wed, 7 Aug 2024 19:40:51 +0800
Subject: [PATCH 7/7] change logs format to log all remote calls

Signed-off-by: zane-neo <zaniu@amazon.com>
---
 .../opensearch/ml/rest/MLCommonsRestTestCase.java   | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
index ec74bb7290..2ee41b7a13 100644
--- a/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
+++ b/plugin/src/test/java/org/opensearch/ml/rest/MLCommonsRestTestCase.java
@@ -862,9 +862,16 @@ public static Map parseResponseToMap(Response response) throws IOException {
         HttpEntity entity = response.getEntity();
         assertNotNull(response);
         String entityString = TestHelper.httpEntityToString(entity);
-        if (response.getStatusLine().getStatusCode() != 200) {
-            log.warn(String.format("response status is not success, raw response is: %s", entityString));
-        }
+        log
+            .info(
+                String
+                    .format(
+                        "request uri is: %s, response status is: %s, raw response is: %s",
+                        response.getRequestLine().getUri(),
+                        response.getStatusLine().getStatusCode(),
+                        entityString
+                    )
+            );
         return StringUtils.gson.fromJson(entityString, Map.class);
     }