magneticio / vamp

Vamp - canary releasing and autoscaling for microservice systems
http://vamp.io
Apache License 2.0
625 stars 55 forks source link

'BreedReference cannot be cast to DefaultBreed' causing Vamp to restart/reset #1102

Closed harmw closed 6 years ago

harmw commented 6 years ago

We're observing the following issue, leading up to VAMP itself restarting (well, not the container - just the stuff going on inside JVM)

19:46:40.106 | ERROR | akka.dispatch.Dispatcher                 | akka.dispatch.Dispatcher                 | io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
java.lang.ClassCastException: io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6(MarathonDriverActor.scala:151)
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6$adapted(MarathonDriverActor.scala:149)
    at scala.util.Success.foreach(Try.scala:249)
    at scala.concurrent.Future.$anonfun$foreach$1$adapted(Future.scala:224)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
19:46:40.159 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: kibana
19:46:40.185 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: health
19:46:40.211 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: vga
19:46:40.241 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: metrics
Killed
19:46:44.296 | INFO  | akka.event.slf4j.Slf4jLogger             |                                          | Slf4jLogger started
19:46:44.535 | INFO  | io.vamp.bootstrap.Vamp                   |                                          | 
██╗   ██╗ █████╗ ███╗   ███╗██████╗
██║   ██║██╔══██╗████╗ ████║██╔══██╗
██║   ██║███████║██╔████╔██║██████╔╝
╚██╗ ██╔╝██╔══██║██║╚██╔╝██║██╔═══╝
 ╚████╔╝ ██║  ██║██║ ╚═╝ ██║██║
  ╚═══╝  ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝
                                    version 0.9.5.6
                                    by magnetic.io

19:46:44.641 | INFO  | Kamon                                    |                                          | Initializing Kamon...
19:46:44.665 | INFO  | akka.event.slf4j.Slf4jLogger             |                                          | Slf4jLogger started

Looks like we're uploading a faulty breed, though Vamp shouldn't restart itself once that happens - right :)

olafmol commented 6 years ago

can you provide the steps to reproduce this? tnx!

harmw commented 6 years ago

Yes, though it's not that easy/clear.

Some logging:

20:21:16.717 | ERROR | akka.dispatch.Dispatcher                 | akka.dispatch.Dispatcher                 | io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
java.lang.ClassCastException: io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6(MarathonDriverActor.scala:151)
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6$adapted(MarathonDriverActor.scala:149)
    at scala.util.Success.foreach(Try.scala:249)
    at scala.concurrent.Future.$anonfun$foreach$1$adapted(Future.scala:224)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
20:21:16.726 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: metrics
20:21:16.731 | ERROR | akka.dispatch.Dispatcher                 | akka.dispatch.Dispatcher                 | io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
java.lang.ClassCastException: io.vamp.model.artifact.BreedReference cannot be cast to io.vamp.model.artifact.DefaultBreed
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6(MarathonDriverActor.scala:151)
    at io.vamp.container_driver.marathon.MarathonDriverActor.$anonfun$get$6$adapted(MarathonDriverActor.scala:149)
    at scala.util.Success.foreach(Try.scala:249)
    at scala.concurrent.Future.$anonfun$foreach$1$adapted(Future.scala:224)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
20:21:16.808 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: allocation
20:21:16.820 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: kibana
20:21:16.839 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: vga
20:21:25.949 | INFO  | io.vamp.operation.workflow.WorkflowActor | kka://vamp/user/govamp/workflow-actor-15 | Triggering workflow: 'kibana'.
20:21:25.950 | INFO  | io.vamp.operation.workflow.WorkflowActor | kka://vamp/user/govamp/workflow-actor-15 | Triggering workflow: 'allocation'.
20:21:25.950 | INFO  | io.vamp.operation.workflow.WorkflowActor | kka://vamp/user/govamp/workflow-actor-15 | Triggering workflow: 'metrics'.
20:21:25.950 | INFO  | io.vamp.operation.workflow.WorkflowActor | kka://vamp/user/govamp/workflow-actor-15 | Triggering workflow: 'health'.
20:21:25.951 | INFO  | io.vamp.operation.workflow.WorkflowActor | kka://vamp/user/govamp/workflow-actor-15 | Triggering workflow: 'vga'.
20:21:26.063 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: allocation
20:21:26.088 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: metrics
20:21:26.102 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: health
20:21:26.140 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: kibana
20:21:26.172 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: vga
ow: allocation
20:21:26.088 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: metrics
20:21:26.102 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: health
20:21:26.140 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: kibana
20:21:26.172 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon create workflow: vga
20:25:19.310 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon update service: blaze-sparrow-service / wehkamp/blaze-sparrow-service:27-414d5b3
20:25:19.324 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | Deploying JObject(List((container,JObject(List((docker,JObject(List((parameters,JArray(List(JObject(List((key,JString(user)), (value,JString(498:498)))), JObject(List((key,JString(log-opt)), (value,JString(tag=docker.blaze-sparrow-service)))), JObject(List((key,JString(log-driver)), (value,JString(fluentd)))), JObject(List((key,JString(label)), (value,JString(role=sparrow)))), JObject(List((key,JString(label)), (value,JString(team=Checkout)))), JObject(List((key,JString(log-opt)), (value,JString(labels=team))))))), (image,JString(wehkamp/blaze-sparrow-service:27-414d5b3)), (portMappings,JArray(List(JObject(List((containerPort,JInt(5000)), (hostPort,JInt(0)), (protocol,JString(tcp))))))), (privileged,JBool(true)), (network,JString(BRIDGE))))), (type,JString(DOCKER))))), (healthChecks,JArray(List(JObject(List((timeoutSeconds,JInt(10)), (path,JString(/status)), (portIndex,JInt(0)), (gracePeriodSeconds,JInt(30)), (maxConsecutiveFailures,JInt(3)), (intervalSeconds,JInt(60)), (protocol,JString(HTTP))))))), (labels,JObject(List((io.vamp.deployment,JString(blaze-sparrow-service)), (io.vamp.cluster,JString(blaze-sparrow-service)), (io.vamp.service,JString(blaze-sparrow-service:27-414d5b3))))), (uris,JArray(List(JString(file:///etc/.dockercfg)))), (id,JString(/govamp/deployment-blaze-sparrow-service-service-36f623682f06ebaca1dddd55b8b0066e4bd9d926)), (instances,JInt(1)), (cpus,JDouble(0.1)), (mem,JInt(500)), (env,JObject(List())), (constraints,JArray(List()))))
20:25:22.621 | INFO  | i.v.o.g.GatewaySynchronizationActor      | r/govamp/gateway-synchronization-actor-9 | Gateway event: blaze-sparrow-service/gateway - deployed
20:25:29.288 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon update service: blaze-sparrow-service / wehkamp/blaze-sparrow-service:27-414d5b3
20:25:29.294 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | Deploying JObject(List((container,JObject(List((docker,JObject(List((parameters,JArray(List(JObject(List((key,JString(user)), (value,JString(498:498)))), JObject(List((key,JString(log-opt)), (value,JString(tag=docker.blaze-sparrow-service)))), JObject(List((key,JString(log-driver)), (value,JString(fluentd)))), JObject(List((key,JString(label)), (value,JString(role=sparrow)))), JObject(List((key,JString(label)), (value,JString(team=Checkout)))), JObject(List((key,JString(log-opt)), (value,JString(labels=team))))))), (image,JString(wehkamp/blaze-sparrow-service:27-414d5b3)), (portMappings,JArray(List(JObject(List((containerPort,JInt(5000)), (hostPort,JInt(0)), (protocol,JString(tcp))))))), (privileged,JBool(true)), (network,JString(BRIDGE))))), (type,JString(DOCKER))))), (healthChecks,JArray(List(JObject(List((timeoutSeconds,JInt(10)), (path,JString(/status)), (portIndex,JInt(0)), (gracePeriodSeconds,JInt(30)), (maxConsecutiveFailures,JInt(3)), (intervalSeconds,JInt(60)), (protocol,JString(HTTP))))))), (labels,JObject(List((io.vamp.deployment,JString(blaze-sparrow-service)), (io.vamp.cluster,JString(blaze-sparrow-service)), (io.vamp.service,JString(blaze-sparrow-service:27-414d5b3))))), (uris,JArray(List(JString(file:///etc/.dockercfg)))), (id,JString(/govamp/deployment-blaze-sparrow-service-service-36f623682f06ebaca1dddd55b8b0066e4bd9d926)), (instances,JInt(1)), (cpus,JDouble(0.1)), (mem,JInt(500)), (env,JObject(List())), (constraints,JArray(List()))))
20:25:39.297 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon update service: blaze-sparrow-service / wehkamp/blaze-sparrow-service:27-414d5b3
20:25:39.300 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | Deploying JObject(List((container,JObject(List((docker,JObject(List((parameters,JArray(List(JObject(List((key,JString(user)), (value,JString(498:498)))), JObject(List((key,JString(log-opt)), (value,JString(tag=docker.blaze-sparrow-service)))), JObject(List((key,JString(log-driver)), (value,JString(fluentd)))), JObject(List((key,JString(label)), (value,JString(role=sparrow)))), JObject(List((key,JString(label)), (value,JString(team=Checkout)))), JObject(List((key,JString(log-opt)), (value,JString(labels=team))))))), (image,JString(wehkamp/blaze-sparrow-service:27-414d5b3)), (portMappings,JArray(List(JObject(List((containerPort,JInt(5000)), (hostPort,JInt(0)), (protocol,JString(tcp))))))), (privileged,JBool(true)), (network,JString(BRIDGE))))), (type,JString(DOCKER))))), (healthChecks,JArray(List(JObject(List((timeoutSeconds,JInt(10)), (path,JString(/status)), (portIndex,JInt(0)), (gracePeriodSeconds,JInt(30)), (maxConsecutiveFailures,JInt(3)), (intervalSeconds,JInt(60)), (protocol,JString(HTTP))))))), (labels,JObject(List((io.vamp.deployment,JString(blaze-sparrow-service)), (io.vamp.cluster,JString(blaze-sparrow-service)), (io.vamp.service,JString(blaze-sparrow-service:27-414d5b3))))), (uris,JArray(List(JString(file:///etc/.dockercfg)))), (id,JString(/govamp/deployment-blaze-sparrow-service-service-36f623682f06ebaca1dddd55b8b0066e4bd9d926)), (instances,JInt(1)), (cpus,JDouble(0.1)), (mem,JInt(500)), (env,JObject(List())), (constraints,JArray(List()))))
20:25:49.290 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon update service: blaze-sparrow-service / wehkamp/blaze-sparrow-service:27-414d5b3
20:25:49.295 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | Deploying JObject(List((container,JObject(List((docker,JObject(List((parameters,JArray(List(JObject(List((key,JString(user)), (value,JString(498:498)))), JObject(List((key,JString(log-opt)), (value,JString(tag=docker.blaze-sparrow-service)))), JObject(List((key,JString(log-driver)), (value,JString(fluentd)))), JObject(List((key,JString(label)), (value,JString(role=sparrow)))), JObject(List((key,JString(label)), (value,JString(team=Checkout)))), JObject(List((key,JString(log-opt)), (value,JString(labels=team))))))), (image,JString(wehkamp/blaze-sparrow-service:27-414d5b3)), (portMappings,JArray(List(JObject(List((containerPort,JInt(5000)), (hostPort,JInt(0)), (protocol,JString(tcp))))))), (privileged,JBool(true)), (network,JString(BRIDGE))))), (type,JString(DOCKER))))), (healthChecks,JArray(List(JObject(List((timeoutSeconds,JInt(10)), (path,JString(/status)), (portIndex,JInt(0)), (gracePeriodSeconds,JInt(30)), (maxConsecutiveFailures,JInt(3)), (intervalSeconds,JInt(60)), (protocol,JString(HTTP))))))), (labels,JObject(List((io.vamp.deployment,JString(blaze-sparrow-service)), (io.vamp.cluster,JString(blaze-sparrow-service)), (io.vamp.service,JString(blaze-sparrow-service:27-414d5b3))))), (uris,JArray(List(JString(file:///etc/.dockercfg)))), (id,JString(/govamp/deployment-blaze-sparrow-service-service-36f623682f06ebaca1dddd55b8b0066e4bd9d926)), (instances,JInt(1)), (cpus,JDouble(0.1)), (mem,JInt(500)), (env,JObject(List())), (constraints,JArray(List()))))
20:25:59.289 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | marathon update service: blaze-sparrow-service / wehkamp/blaze-sparrow-service:27-414d5b3
20:25:59.291 | INFO  | i.v.c.marathon.MarathonDriverActor       | amp/user/govamp/marathon-driver-actor-23 | Deploying JObject(List((container,JObject(List((docker,JObject(List((parameters,JArray(List(JObject(List((key,JString(user)), (value,JString(498:498)))), JObject(List((key,JString(log-opt)), (value,JString(tag=docker.blaze-sparrow-service)))), JObject(List((key,JString(log-driver)), (value,JString(fluentd)))), JObject(List((key,JString(label)), (value,JString(role=sparrow)))), JObject(List((key,JString(label)), (value,JString(team=Checkout)))), JObject(List((key,JString(log-opt)), (value,JString(labels=team))))))), (image,JString(wehkamp/blaze-sparrow-service:27-414d5b3)), (portMappings,JArray(List(JObject(List((containerPort,JInt(5000)), (hostPort,JInt(0)), (protocol,JString(tcp))))))), (privileged,JBool(true)), (network,JString(BRIDGE))))), (type,JString(DOCKER))))), (healthChecks,JArray(List(JObject(List((timeoutSeconds,JInt(10)), (path,JString(/status)), (portIndex,JInt(0)), (gracePeriodSeconds,JInt(30)), (maxConsecutiveFailures,JInt(3)), (intervalSeconds,JInt(60)), (protocol,JString(HTTP))))))), (labels,JObject(List((io.vamp.deployment,JString(blaze-sparrow-service)), (io.vamp.cluster,JString(blaze-sparrow-service)), (io.vamp.service,JString(blaze-sparrow-service:27-414d5b3))))), (uris,JArray(List(JString(file:///etc/.dockercfg)))), (id,JString(/govamp/deployment-blaze-sparrow-service-service-36f623682f06ebaca1dddd55b8b0066e4bd9d926)), (instances,JInt(1)), (cpus,JDouble(0.1)), (mem,JInt(500)), (env,JObject(List())), (constraints,JArray(List()))))
Killed

The payload we're uploading to Vamp:

{
  "clusters": {
    "blaze-sparrow-service": {
      "services": {
        "breed": {
          "deployable": "wehkamp/blaze-sparrow-service:27-414d5b3",
          "environment_variables": {
            "LOG_JSON_TCP_HOST": "logging.blaze:5170",
            "SERVICE_NAME": "blaze-sparrow-service",
            "SERVICE_TAGS": "vamp-managed"
          },
          "name": "blaze-sparrow-service:27-414d5b3",
          "ports": {
            "port": "5000/http"
          }
        },
        "dialects": {
          "marathon": {
            "container": {
              "docker": {
                "parameters": [
                  {
                    "key": "user",
                    "value": "498:498"
                  },
                  {
                    "key": "log-opt",
                    "value": "tag=docker.blaze-sparrow-service"
                  },
                  {
                    "key": "log-driver",
                    "value": "fluentd"
                  },
                  {
                    "key": "label",
                    "value": "role=sparrow"
                  },
                  {
                    "key": "label",
                    "value": "team=Checkout"
                  },
                  {
                    "key": "log-opt",
                    "value": "labels=team"
                  }
                ]
              }
            },
            "healthChecks": [
              {
                "gracePeriodSeconds": 30,
                "intervalSeconds": 60,
                "maxConsecutiveFailures": 3,
                "path": "/status",
                "portIndex": 0,
                "protocol": "HTTP",
                "timeoutSeconds": 10
              }
            ],
            "labels": [
              "team=Checkout"
            ],
            "uris": [
              "file:///etc/.dockercfg"
            ]
          }
        },
        "scale": {
          "cpu": 0.1,
          "instances": 1,
          "memory": "500MB"
        }
      }
    }
  },
  "gateways": {
    "gateway": {
      "routes": {
        "blaze-sparrow-service/port": {
          "weight": "100%"
        }
      },
      "virtual_hosts": [
        "sparrow.blaze"
      ]
    }
  },
  "kind": "deployment",
  "name": "blaze-sparrow-service"
}

We're using in-memory persistence for now, and storing key-values in Consul. Container platform is Mesos/Marathon.

harmw commented 6 years ago

I'm almost starting to wonder if moving from 500M to 2000M was the fix to this, as after doing that things seems stable :/ What is weird though, is that there were no signs of some limit being hit.

(the error is still there though, just not killing Vamp anymore)

olafmol commented 6 years ago

If you see Vamp restarts, for safety, assign at least 2GB, or better 4GB of memory to Vamp.

olafmol commented 6 years ago

closing this issue as the increase of memory seems to solve this. Please re-open if issues re-appear or still exist.