Commit 04572d70 authored by Phillip Kuznetsov's avatar Phillip Kuznetsov
Browse files

Remove connect_all_conns() and replace with list_healthy_viziers()

Summary: As suggested by Zain because our multi-cluster needs more stability improvements before we can default encourage our users to go for it.

Test Plan: Updated tests and seems to connect fine.

Reviewers: zasgar, vihang, nserrino, #engineering

Reviewed By: zasgar, #engineering

Differential Revision: https://phab.corp.pixielabs.ai/D7178

GitOrigin-RevId: 787c6465dafb35e778bee2a896a1f29378864463
parent 5ad20db9
main snyk-fix-7eb526f73c75336b865418bda117e40b snyk-fix-a916784efb9d8870d42eeba63409bf85 release/vizier/vv0.9.8-pre-test.27 release/vizier/v0.11.7 release/vizier/v0.11.6 release/vizier/v0.11.5 release/vizier/v0.11.4 release/vizier/v0.11.3 release/vizier/v0.11.2 release/vizier/v0.11.1 release/vizier/v0.11.0 release/vizier/v0.10.22 release/vizier/v0.10.21 release/vizier/v0.10.20 release/vizier/v0.10.19 release/vizier/v0.10.18 release/vizier/v0.10.17 release/vizier/v0.10.16 release/vizier/v0.10.15 release/vizier/v0.10.14 release/vizier/v0.10.13 release/vizier/v0.10.12 release/vizier/v0.10.11 release/vizier/v0.10.10 release/vizier/v0.10.9 release/vizier/v0.10.8 release/vizier/v0.10.7 release/vizier/v0.10.6 release/vizier/v0.10.5 release/vizier/v0.10.4 release/vizier/v0.10.3 release/vizier/v0.10.2 release/vizier/v0.10.1 release/vizier/v0.10.0 release/vizier/v0.9.16 release/vizier/v0.9.14 release/vizier/v0.9.14-pre-main.5 release/vizier/v0.9.13 release/vizier/v0.9.13-pre-r0.17 release/vizier/v0.9.12 release/vizier/v0.9.12-pre-r0.1 release/vizier/v0.9.11 release/vizier/v0.9.11-pre-r0.32 release/vizier/v0.9.11-pre-r0.29 release/vizier/v0.9.11-pre-main.9 release/vizier/v0.9.8 release/vizier/v0.9.8-pre-test.27 release/vizier/v0.9.8-pre-test2.28 release/vizier/v0.9.7 release/vizier/v0.9.7-pre-r0.7 release/vizier/v0.9.7-pre-main.27 release/vizier/v0.9.6 release/vizier/v0.9.5 release/vizier/v0.9.5-pre-r0.13 release/vizier/v0.9.5-pre-main.18 release/vizier/v0.9.5-pre-main.17 release/vizier/v0.9.5-pre-main.14 release/vizier/v0.9.5-pre-etcdConfig.15 release/vizier/v0.9.4 release/vizier/v0.9.3 release/vizier/v0.9.2 release/vizier/v0.9.1 release/vizier/v0.9.0 release/vizier/v0.8.10 release/vizier/v0.8.9 release/vizier/v0.8.8 release/vizier/v0.8.7 release/vizier/v0.8.6 release/vizier/v0.8.5 release/vizier/v0.8.3 release/vizier/v0.8.2 release/vizier/v0.8.1 release/vizier/v0.8.0 release/vizier/v0.7.19 release/vizier/v0.7.18 release/vizier/v0.7.17 release/vizier/v0.7.16 release/vizier/v0.7.15 release/vizier/v0.7.14 release/vizier/v0.7.13 release/vizier/v0.7.12 release/vizier/v0.7.11 release/vizier/v0.7.10 release/vizier/v0.7.9 release/vizier/v0.7.8 release/vizier/v0.7.7 release/vizier/v0.7.6 release/vizier/v0.7.5 release/vizier/v0.7.4 release/vizier/v0.7.3 release/vizier/v0.7.2 release/vizier/v0.7.1 release/vizier/v0.6.5 release/vizier/v0.6.4 release/vizier/v0.6.3 release/vizier/v0.6.2 release/vizier/v0.6.1 release/vizier/v0.6.0 release/vizier/v0.5.34 release/vizier/v0.5.32 release/vizier/v0.5.31 release/vizier/v0.5.30 release/vizier/v0.5.29 release/vizier/v0.5.28 release/vizier/v0.5.27 release/vizier/v0.5.26 release/vizier/v0.5.25 release/vizier/v0.5.24 release/vizier/v0.5.23 release/vizier/v0.5.22 release/operator/v0.0.30 release/operator/v0.0.29 release/operator/v0.0.28 release/operator/v0.0.27 release/operator/v0.0.26 release/operator/v0.0.25 release/operator/v0.0.24 release/operator/v0.0.23 release/operator/v0.0.22 release/operator/v0.0.21 release/operator/v0.0.20 release/operator/v0.0.19 release/operator/v0.0.18 release/operator/v0.0.17 release/operator/v0.0.16 release/operator/v0.0.15 release/operator/v0.0.15-pre-r0.6 release/operator/v0.0.14 release/operator/v0.0.14-pre-zOperator3.8 release/operator/v0.0.14-pre-r0.8 release/operator/v0.0.13 release/operator/v0.0.13-pre-test.5 release/operator/v0.0.13-pre-main.5 release/operator/v0.0.12 release/operator/v0.0.12-pre-main.6 release/operator/v0.0.11 release/operator/v0.0.10 release/operator/v0.0.9 release/operator/v0.0.7 release/operator/v0.0.5 release/operator/v0.0.2 release/cloud/staging/1637355758 release/cloud/staging/1637266321 release/cloud/staging/1637083942 release/cloud/staging/1636658412 release/cloud/staging/1636655115 release/cloud/staging/1636566009 release/cloud/staging/1636486580 release/cloud/staging/1635273164 release/cloud/staging/1634664761 release/cloud/staging/1634662582 release/cloud/staging/1634426539 release/cloud/staging/1634255213 release/cloud/staging/1633889214 release/cloud/staging/1633467640 release/cloud/staging/1633377421 release/cloud/staging/1632931048 release/cloud/staging/1632880554 release/cloud/staging/1631813710 release/cloud/staging/1631205641 release/cloud/prod/1658198111 release/cloud/prod/1658185818 release/cloud/prod/1658183222 release/cloud/prod/1657740688 release/cloud/prod/1657049209 release/cloud/prod/1656629056 release/cloud/prod/1656527373 release/cloud/prod/1656452950 release/cloud/prod/1655997138 release/cloud/prod/1655226092 release/cloud/prod/1654806360 release/cloud/prod/1654144074 release/cloud/prod/1654133791 release/cloud/prod/1652313416 release/cloud/prod/1652304483 release/cloud/prod/1652214656 release/cloud/prod/1651864223 release/cloud/prod/1651799821 release/cloud/prod/1651704659 release/cloud/prod/1651616922 release/cloud/prod/1650645384 release/cloud/prod/1650480744 release/cloud/prod/1650306041 release/cloud/prod/1650056868 release/cloud/prod/1650039340 release/cloud/prod/1649978499 release/cloud/prod/1649797942 release/cloud/prod/1649787581 release/cloud/prod/1649269698 release/cloud/prod/1649107437 release/cloud/prod/1648586238 release/cloud/prod/1647992139 release/cloud/prod/1647379907 release/cloud/prod/1646182041 release/cloud/prod/1644961014 release/cloud/prod/1644348245 release/cloud/prod/1643849214 release/cloud/prod/1643826488 release/cloud/prod/1643153852 release/cloud/prod/1643056106 release/cloud/prod/1643052598 release/cloud/prod/1642705917 release/cloud/prod/1642632551 release/cloud/prod/1642205277 release/cloud/prod/1642145141 release/cloud/prod/1642141551 release/cloud/prod/1642139120 release/cloud/prod/1642134238 release/cloud/prod/1642130337 release/cloud/prod/1642126826 release/cloud/prod/1642124521 release/cloud/prod/1642109235 release/cloud/prod/1641941995 release/cloud/prod/1641420513 release/cloud/prod/1641254216 release/cloud/prod/1638917470 release/cloud/prod/1637096190 release/cloud/prod/1636492829 release/cloud/prod/1635286066 release/cloud/prod/1634668183 release/cloud/prod/1634663695 release/cloud/prod/1634282223 release/cloud/prod/1633893408 release/cloud/prod/1633710125 release/cloud/prod/1633560085 release/cloud/prod/1633495949 release/cloud/prod/1633474704 release/cloud/prod/1633379527 release/cloud/prod/1632935904 release/cloud/prod/1631826310 release/cloud/prod/1630737620 release/cloud/prod/1630714187 release/cloud/prod/1630622583 release/cloud/prod/1630433362 release/cloud/prod/1630110767 release/cloud/prod/1629952882 release/cloud/prod/1629920564 release/cloud/prod/1629851112 release/cloud/prod/1629494063 release/cloud/prod/1629339917 release/cloud/prod/1629337848 release/cloud/prod/1629335332 release/cloud/prod/1629311730 release/cloud/prod/1629166688 release/cloud/prod/1629166023 release/cloud/prod/1629165964 release/cloud/prod/1629151138 release/cloud/prod/1628025334 release/cloud/prod/1627971857 release/cloud/prod/1627943140 release/cloud/prod/1627935195 release/cloud/prod/1627644793 release/cloud/prod/1627601637 release/cloud/prod/1627445520 release/cloud/prod/1627421364 release/cloud/prod/1626909202 release/cloud/prod/1626824610 release/cloud/prod/1626391194 release/cloud/prod/1626321970 release/cloud/prod/1626073778 release/cloud/prod/1625699466 release/cloud/prod/1625253333 release/cloud/prod/1625249910 release/cloud/prod/1625013333 release/cloud/prod/1625003953 release/cloud/prod/1625001388 release/cloud/prod/1624993505 release/cloud/prod/1624989299 release/cloud/prod/1623456844 release/cloud/prod/1622779032 release/cloud/prod/1621989349 release/cloud/prod/1621986389 release/cloud/prod/1621964672 release/cloud/prod/1621920686 release/cloud/prod/1621917276 release/cloud/prod/1621882022 release/cloud/prod/1620958944 release/cloud/prod/1620945558 release/cloud/prod/1620327546 release/cloud/prod/1620273211 release/cloud/prod/1620271073 release/cloud/prod/1620090826 release/cloud/prod/1619828773 release/cloud/prod/1619741770 release/cloud/prod/1619126029 release/cloud/prod/1618639797 release/cloud/prod/1618522037 release/cloud/prod/1617918178 release/cloud/prod/1617647275 release/cloud/prod/1617133715 release/cloud/prod/1616658618 release/cloud/prod/1616654932 release/cloud/prod/1616448710 release/cloud/prod/1615945400 release/cloud/prod/1615831644 release/cloud/prod/1615576886 release/cloud/prod/1615411712 release/cloud/prod/1615077380 release/cloud/prod/1614910099 release/cloud/prod/1614641663 release/cloud/prod/1614386136 release/cloud/prod/1614285784 release/cloud/prod/1613673078 release/cloud/prod/1613098936 release/cloud/prod/1611730359 release/cloud/prod/1611722282 release/cli/v0.7.16 release/cli/v0.7.15 release/cli/v0.7.14 release/cli/v0.7.13 release/cli/v0.7.12 release/cli/v0.7.11 release/cli/v0.7.10 release/cli/v0.7.9 release/cli/v0.7.8 release/cli/v0.7.7 release/cli/v0.7.6 release/cli/v0.7.5 release/cli/v0.7.4 release/cli/v0.7.3 release/cli/v0.7.2 release/cli/v0.7.1 release/cli/v0.7.1-pre-r0.5 release/cli/v0.7.0 release/cli/v0.7.0-pre-main.11 release/cli/v0.6.8-pre-main.9 release/cli/v0.6.7 release/cli/v0.6.6 release/cli/v0.6.5 release/cli/v0.6.4 release/cli/v0.6.3 release/cli/v0.6.2 release/cli/v0.6.1 release/cli/v0.5.14 release/cli/v0.5.13 release/cli/v0.5.12 release/cli/v0.5.11 release/cli/v0.5.9 release/cli/v0.5.8 release/cli/v0.5.7 release/cli/v0.5.6 release/cli/v0.5.5 release/cli/v0.5.4 release/cli/v0.5.3 release/cli/v0.5.2 release/cli/v0.5.1 release/cli/v0.4.0 release/cli/v0.3.29 release/cli/v0.3.28 release/cli/v0.3.27 release/cli/v0.3.26 release/cli/v0.3.25 release/cli/v0.3.24 release/cli/v0.3.23 release/cli/v0.3.22 release/cli/v0.3.21 release/cli/v0.3.20 release/cli/v0.3.19
No related merge requests found
Showing with 47 additions and 15 deletions
+47 -15
...@@ -784,10 +784,9 @@ class TestClient(unittest.TestCase): ...@@ -784,10 +784,9 @@ class TestClient(unittest.TestCase):
loop.run_until_complete( loop.run_until_complete(
run_query_and_tasks(query, [utils.iterate_and_pass(http_tb)])) run_query_and_tasks(query, [utils.iterate_and_pass(http_tb)]))
def test_get_healthy_viziers(self) -> None: def test_list_healthy_clusters(self) -> None:
# Test the callback API. Callback API is a simpler alternative to the TableSub # Tests that users can list healthy clusters and then
# API that allows you to designate a function that runs on individual rows. Users # query those clusters.
# can process data without worrying about async processing by using this API.
px_client = pixie.Client( px_client = pixie.Client(
token=ACCESS_TOKEN, token=ACCESS_TOKEN,
server_url=self.url(), server_url=self.url(),
...@@ -795,9 +794,9 @@ class TestClient(unittest.TestCase): ...@@ -795,9 +794,9 @@ class TestClient(unittest.TestCase):
conn_channel_fn=lambda url: grpc.aio.insecure_channel(url), conn_channel_fn=lambda url: grpc.aio.insecure_channel(url),
) )
conns = px_client.connect_all_clusters() clusters = px_client.list_healthy_clusters()
self.assertSetEqual( self.assertSetEqual(
set([c.name() for c in conns]), set([c.name() for c in clusters]),
{"cluster1", "cluster2"} {"cluster1", "cluster2"}
) )
...@@ -821,7 +820,10 @@ class TestClient(unittest.TestCase): ...@@ -821,7 +820,10 @@ class TestClient(unittest.TestCase):
http_table1.end(), http_table1.end(),
]) ])
query = px_client.query(conns, query_str) query = px_client.query([
px_client.connect_to_cluster(clusters[0]),
px_client.connect_to_cluster(clusters[1]),
], query_str)
# Define callback function for "http" table. # Define callback function for "http" table.
def http_fn(row: pixie.Row) -> None: def http_fn(row: pixie.Row) -> None:
......
...@@ -410,6 +410,24 @@ class Query: ...@@ -410,6 +410,24 @@ class Query:
await self._close_all_tables_for_cluster(conn.cluster_id) await self._close_all_tables_for_cluster(conn.cluster_id)
class Cluster:
""" Cluster contains information users need about a specific cluster.
Mainly a convenience wrapper around the protobuf message so you
can access the name in a simple format.
"""
def __init__(self, cluster_id: str, cluster_info: cpb.ClusterInfo):
self.id = cluster_id
self.info = cluster_info
def name(self) -> str:
""" Returns the name if that info exists, otherwise returns the id. """
if self.info is None:
return self.id
return self.info.pretty_cluster_name
class Client: class Client:
""" """
Client is the main entry point to the Pixie API. Client is the main entry point to the Pixie API.
...@@ -451,16 +469,20 @@ class Client: ...@@ -451,16 +469,20 @@ class Client:
]) ])
return response.clusters return response.clusters
def connect_all_clusters(self) -> List[Conn]: def list_healthy_clusters(self) -> List[Cluster]:
healthy_clusters = [] """ Lists all of the healthy clusters within the Pixie org. """
healthy_clusters: List[Cluster] = []
for c in self._all_clusters(): for c in self._all_clusters():
if c.status != cpb.CS_HEALTHY: if c.status != cpb.CS_HEALTHY:
continue continue
if c.config.passthrough_enabled: if not c.config.passthrough_enabled:
healthy_clusters.append( continue
self._create_passthrough_conn( healthy_clusters.append(
c.id.data.decode('utf-8'), cluster_info=c) Cluster(
cluster_id=c.id.data.decode('utf-8'),
cluster_info=c,
) )
)
return healthy_clusters return healthy_clusters
...@@ -494,13 +516,21 @@ class Client: ...@@ -494,13 +516,21 @@ class Client:
raise NotImplementedError("Direct connection not yet supported") raise NotImplementedError("Direct connection not yet supported")
def connect_to_cluster(self, def connect_to_cluster(self,
cluster_id: ClusterID cluster: Union[ClusterID, Cluster]
) -> Conn: ) -> Conn:
""" Connect to a cluster with the specified ID. """ Connect to a cluster.
Returns a connection object that must be passed as an argument to `query()` Returns a connection object that must be passed as an argument to `query()`
with the query you wish to send over. with the query you wish to send over.
""" """
cluster_info: cpb.ClusterInfo = None
if isinstance(cluster, ClusterID):
cluster_id = cast(ClusterID, cluster)
elif isinstance(cluster, Cluster):
cluster_id = cluster.id
else:
raise ValueError("Unexpected type for `cluster`: ", type(cluster))
# TODO(philkuz) add support for direct connections by making a Cloud API call here. # TODO(philkuz) add support for direct connections by making a Cloud API call here.
cluster_info = self._get_cluster_info(cluster_id) cluster_info = self._get_cluster_info(cluster_id)
return self._create_passthrough_conn(cluster_id, cluster_info) return self._create_passthrough_conn(cluster_id, cluster_info)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment