aws-parallelcluster-node 3.14.2__tar.gz → 3.15.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {aws_parallelcluster_node-3.14.2/src/aws_parallelcluster_node.egg-info → aws_parallelcluster_node-3.15.1}/PKG-INFO +2 -1
  2. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/setup.py +2 -2
  3. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1/src/aws_parallelcluster_node.egg-info}/PKG-INFO +2 -1
  4. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/requires.txt +1 -0
  5. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/cluster_event_publisher.py +35 -0
  6. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/clustermgtd.py +6 -2
  7. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/resume.py +5 -1
  8. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/LICENSE.txt +0 -0
  9. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/NOTICE.txt +0 -0
  10. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/README.md +0 -0
  11. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/setup.cfg +0 -0
  12. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws/__init__.py +0 -0
  13. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws/common.py +0 -0
  14. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws/ec2.py +0 -0
  15. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/SOURCES.txt +0 -0
  16. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/dependency_links.txt +0 -0
  17. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/entry_points.txt +0 -0
  18. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/not-zip-safe +0 -0
  19. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/aws_parallelcluster_node.egg-info/top_level.txt +0 -0
  20. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/__init__.py +0 -0
  21. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/ec2_utils.py +0 -0
  22. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/schedulers/__init__.py +0 -0
  23. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/schedulers/slurm_commands.py +0 -0
  24. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/schedulers/slurm_reservation_commands.py +0 -0
  25. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/time_utils.py +0 -0
  26. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/common/utils.py +0 -0
  27. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/__init__.py +0 -0
  28. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/capacity_block_manager.py +0 -0
  29. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/common.py +0 -0
  30. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/computemgtd.py +0 -0
  31. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/console_logger.py +0 -0
  32. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/fleet_manager.py +0 -0
  33. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/fleet_status_manager.py +0 -0
  34. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/instance_manager.py +0 -0
  35. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/logging/parallelcluster_clustermgtd_logging.conf +0 -0
  36. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/logging/parallelcluster_computemgtd_logging.conf +0 -0
  37. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/logging/parallelcluster_fleet_status_manager_logging.conf +0 -0
  38. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/logging/parallelcluster_resume_logging.conf +0 -0
  39. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/logging/parallelcluster_suspend_logging.conf +0 -0
  40. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/slurm_resources.py +0 -0
  41. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/suspend.py +0 -0
  42. {aws_parallelcluster_node-3.14.2 → aws_parallelcluster_node-3.15.1}/src/slurm_plugin/task_executor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster-node
3
- Version: 3.14.2
3
+ Version: 3.15.1
4
4
  Summary: aws-parallelcluster-node provides the scripts for an AWS ParallelCluster node.
5
5
  Home-page: https://github.com/aws/aws-parallelcluster-node
6
6
  Author: Amazon Web Services
@@ -15,6 +15,7 @@ License-File: LICENSE.txt
15
15
  License-File: NOTICE.txt
16
16
  Requires-Dist: boto3>=1.7.55
17
17
  Requires-Dist: retrying>=1.3.3
18
+ Requires-Dist: setuptools
18
19
  Dynamic: author
19
20
  Dynamic: classifier
20
21
  Dynamic: description
@@ -32,8 +32,8 @@ console_scripts = [
32
32
  "clustermgtd = slurm_plugin.clustermgtd:main",
33
33
  "computemgtd = slurm_plugin.computemgtd:main",
34
34
  ]
35
- version = "3.14.2"
36
- requires = ["boto3>=1.7.55", "retrying>=1.3.3"]
35
+ version = "3.15.1"
36
+ requires = ["boto3>=1.7.55", "retrying>=1.3.3", "setuptools"]
37
37
 
38
38
  setup(
39
39
  name="aws-parallelcluster-node",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-parallelcluster-node
3
- Version: 3.14.2
3
+ Version: 3.15.1
4
4
  Summary: aws-parallelcluster-node provides the scripts for an AWS ParallelCluster node.
5
5
  Home-page: https://github.com/aws/aws-parallelcluster-node
6
6
  Author: Amazon Web Services
@@ -15,6 +15,7 @@ License-File: LICENSE.txt
15
15
  License-File: NOTICE.txt
16
16
  Requires-Dist: boto3>=1.7.55
17
17
  Requires-Dist: retrying>=1.3.3
18
+ Requires-Dist: setuptools
18
19
  Dynamic: author
19
20
  Dynamic: classifier
20
21
  Dynamic: description
@@ -104,6 +104,10 @@ CLUSTER_INSTANCE_COUNT = {
104
104
  "message": "Count of EC2 instances backing the cluster compute fleet",
105
105
  "event_type": "cluster-instance-count",
106
106
  }
107
+ CLUSTERMGTD_HEARTBEAT = {
108
+ "message": "Clustermgtd heartbeat",
109
+ "event_type": "clustermgtd-heartbeat",
110
+ }
107
111
 
108
112
 
109
113
  class ClusterEventPublisher:
@@ -474,6 +478,37 @@ class ClusterEventPublisher:
474
478
  event_supplier=({"detail": self._describe_node(node)} for node in compute_nodes),
475
479
  )
476
480
 
481
+ # Example event generated by this function:
482
+ # {
483
+ # "datetime": "2023-04-03T18:10:13.089+00:00",
484
+ # "version": 0,
485
+ # "scheduler": "slurm",
486
+ # "cluster-name": "integ-tests-9hbu2op3liukbqqz-develop",
487
+ # "node-role": "HeadNode",
488
+ # "component": "clustermgtd",
489
+ # "level": "INFO",
490
+ # "instance-id": "i-04886f8b56e5967ee",
491
+ # "event-type": "clustermgtd-heartbeat",
492
+ # "message": "Clustermgtd heartbeat",
493
+ # "detail": {
494
+ # "heartbeat-timestamp": "2023-04-03T18:10:13.089+00:00"
495
+ # }
496
+ # }
497
+ @log_exception(logger, "publish_heartbeat_event", catch_exception=Exception, raise_on_error=False)
498
+ def publish_heartbeat_event(self, heartbeat_timestamp: datetime):
499
+ """Publish heartbeat event."""
500
+ timestamp = ClusterEventPublisher.timestamp()
501
+ self.publish_event(
502
+ logging.INFO,
503
+ **CLUSTERMGTD_HEARTBEAT,
504
+ timestamp=timestamp,
505
+ detail={
506
+ "heartbeat-timestamp": (
507
+ heartbeat_timestamp.isoformat(timespec="milliseconds") if heartbeat_timestamp else None
508
+ ),
509
+ },
510
+ )
511
+
477
512
  # Slurm Resume Events
478
513
  # Note: This uses the same schema as `publish_unhealthy_static_node_events` from clustermgtd
479
514
  # Example event generated by this function:
@@ -577,10 +577,13 @@ class ClusterManager:
577
577
  def _write_timestamp_to_file(self):
578
578
  """Write timestamp into shared file so compute nodes can determine if head node is online."""
579
579
  # Make clustermgtd heartbeat readable to all users
580
+ heartbeat_time = datetime.now(tz=timezone.utc)
580
581
  with open(os.open(self._config.heartbeat_file_path, os.O_WRONLY | os.O_CREAT, 0o644), "w") as timestamp_file:
581
582
  # Note: heartbeat must be written with datetime.strftime to convert localized datetime into str
582
583
  # datetime.strptime will not work with str(datetime)
583
- timestamp_file.write(datetime.now(tz=timezone.utc).strftime(TIMESTAMP_FORMAT))
584
+ timestamp_file.write(heartbeat_time.strftime(TIMESTAMP_FORMAT))
585
+ # Publish heartbeat event to events log
586
+ self._event_publisher.publish_heartbeat_event(heartbeat_time)
584
587
 
585
588
  @staticmethod
586
589
  @retry(stop_max_attempt_number=2, wait_fixed=1000)
@@ -1262,7 +1265,8 @@ class ClusterManager:
1262
1265
  return
1263
1266
  log.info(
1264
1267
  "The following compute resources are in down state due to insufficient capacity: %s, "
1265
- "compute resources will be reset after insufficient capacity timeout (%s seconds) expired",
1268
+ "compute resources will be reset after insufficient capacity timeout (%s seconds) expired. "
1269
+ "Check the slurm_resume log for EC2 error codes.",
1266
1270
  self._insufficient_capacity_compute_resources,
1267
1271
  self._config.insufficient_capacity_timeout,
1268
1272
  )
@@ -227,7 +227,11 @@ def _resume(arg_nodes, resume_config, slurm_resume):
227
227
  print_with_count(failed_nodes),
228
228
  )
229
229
  for error_code, node_list in instance_manager.failed_nodes.items():
230
- _handle_failed_nodes(node_list, reason=f"(Code:{error_code})Failure when resuming nodes")
230
+ _handle_failed_nodes(
231
+ node_list,
232
+ reason=f"(Code:{error_code})Failure when resuming nodes - "
233
+ f"Check the slurm_resume log for EC2 error codes",
234
+ )
231
235
 
232
236
  event_publisher = ClusterEventPublisher.create_with_default_publisher(
233
237
  event_logger,