VictorPlusC commented on a change in pull request #16741:
URL: https://github.com/apache/beam/pull/16741#discussion_r807382129



##########
File path: sdks/python/apache_beam/runners/interactive/interactive_beam.py
##########
@@ -329,6 +359,101 @@ def record(self, pipeline):
     return recording_manager.record_pipeline()
 
 
+class Clusters():
+  """An interface for users to modify the pipelines that are being run by the
+  Interactive Environment.
+
+  Methods of the Interactive Beam Clusters class can be accessed via:
+    interactive_beam.clusters
+
+  Example of calling the Interactive Beam clusters describe method::
+    interactive_beam.clusters.describe()
+  """
+  def __init__(self) -> None:
+    """Instantiates default values for Dataproc cluster interactions.
+    """
+    self._default_cluster_name = 'interactive-beam-cluster' 
+    self._master_urls = bidict()
+    self._dataproc_cluster_managers = {}
+    self._master_urls_to_pipelines = {}
+
+  def describe(self, pipeline: Optional[beam.Pipeline]=None) -> dict:
+    """Returns a description of the cluster associated to the given pipeline.
+
+    If no pipeline is given then this returns a dictionary of descriptions for
+    all pipelines.
+    """
+
+    description = ie.current_env().describe_all_clusters()

Review comment:
       Moved, thanks.

##########
File path: 
sdks/python/apache_beam/runners/interactive/interactive_environment.py
##########
@@ -258,31 +274,53 @@ def inspector_with_synthetic(self):
     synthetic variables generated by Interactive Beam. Internally used."""
     return self._inspector_with_synthetic
 
+  def cleanup_pipeline(self, pipeline):
+    from apache_beam.runners.interactive import background_caching_job as bcj
+    bcj.attempt_to_cancel_background_caching_job(pipeline)
+    bcj.attempt_to_stop_test_stream_service(pipeline)
+    cache_manager = self.get_cache_manager(pipeline)
+    # Recording manager performs cache manager cleanup during eviction, so we
+    # don't need to clean it up here.
+    if cache_manager and self.get_recording_manager(pipeline) is None:
+      cache_manager.cleanup()
+    if self.options.cleanup_cluster:
+      cluster_manager = self.get_dataproc_cluster_manager(pipeline)
+      if cluster_manager:
+        master_url = cluster_manager.master_url
+        if len(self.clusters.get_pipelines_using_master_url(master_url)) > 1:
+          _LOGGER.warning(
+              'Cluster is currently being used, skipping deletion.')
+        else:
+          cluster_manager.cleanup()
+
+  def cleanup_environment(self):
+    for _, job in self._background_caching_jobs.items():
+      if job:
+        job.cancel()
+    for _, controller in self._test_stream_service_controllers.items():
+      if controller:
+        controller.stop()
+    for pipeline_id, cache_manager in self._cache_managers.items():
+      # Recording manager performs cache manager cleanup during eviction, so
+      # we don't need to clean it up here.
+      if cache_manager and pipeline_id not in self._recording_managers:
+        cache_manager.cleanup()
+    if self.options.cleanup_cluster:

Review comment:
       Changed, thanks.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to