4
4
from time import sleep
5
5
6
6
from testgres import PostgresNode
7
- from testgres import get_new_node , default_username
8
7
9
8
10
9
DBNAME = "postgres"
11
10
12
11
13
12
class Shardlord (PostgresNode ):
14
- def __init__ (self , name ):
15
- super (Shardlord , self ).__init__ (name = name , port = 5432 , use_logging = True )
13
+ def __init__ (self , name , port = None ):
14
+ super (Shardlord , self ).__init__ (name = name ,
15
+ port = port ,
16
+ use_logging = True )
16
17
17
18
self .nodes = []
18
19
19
20
@staticmethod
20
21
def _common_conn_string (port ):
21
- return (
22
- "dbname={} port={} "
23
- ).format (DBNAME , port )
22
+ return "dbname={} port={}" .format (DBNAME , port )
24
23
25
24
@staticmethod
26
25
def _common_conf_lines ():
@@ -62,8 +61,7 @@ def init(self):
62
61
return self
63
62
64
63
def install (self ):
65
- self .safe_psql (dbname = DBNAME ,
66
- query = "create extension pg_shardman cascade" )
64
+ self .safe_psql (DBNAME , "create extension pg_shardman cascade" )
67
65
68
66
return self
69
67
@@ -75,7 +73,7 @@ def cleanup(self):
75
73
76
74
return self
77
75
78
- def add_node (self , name ):
76
+ def add_node (self , name , port = None ):
79
77
config_lines = (
80
78
"max_logical_replication_workers = 50\n "
81
79
"max_worker_processes = 60\n "
@@ -86,15 +84,14 @@ def add_node(self, name):
86
84
config_lines += self ._common_conf_lines ()
87
85
88
86
# create a new node
89
- node = get_new_node (name , use_logging = True )
87
+ node = PostgresNode (name = name , port = port , use_logging = True )
90
88
self .nodes .append (node )
91
89
92
90
# start this node
93
91
node .init () \
94
92
.append_conf ("postgresql.conf" , config_lines ) \
95
93
.start () \
96
- .safe_psql (dbname = DBNAME ,
97
- query = "create extension pg_shardman cascade" )
94
+ .safe_psql (DBNAME , "create extension pg_shardman cascade" )
98
95
99
96
# finally, register this node
100
97
conn_string = self ._common_conn_string (node .port )
@@ -105,20 +102,35 @@ def add_node(self, name):
105
102
106
103
107
104
if __name__ == "__main__" :
105
+ # prepare ports for nodes
106
+ ports = [5432 + i for i in range (4 )]
107
+ ports .reverse ()
108
+
109
+ # collect all logs into a single file
108
110
logfile = "/tmp/shmn.log"
109
- open (logfile , 'w' ).close () # truncate
111
+ open (logfile , 'w' ).close () # truncate log file
110
112
logging .basicConfig (filename = logfile , level = logging .DEBUG )
111
- with Shardlord ("DarthVader" ) as lord :
113
+
114
+ with Shardlord (name = "DarthVader" , port = ports .pop ()) as lord :
112
115
lord .init ().start ().install ()
113
116
114
- luke = lord .add_node ("Luke" )
115
- lord .add_node ("ObiVan" )
116
- lord .add_node ("C3PO" )
117
+ luke = lord .add_node (name = "Luke" , port = ports .pop ())
118
+ lord .add_node (name = "ObiVan" , port = ports .pop ())
119
+ lord .add_node (name = "C3PO" , port = ports .pop ())
120
+
121
+ luke .safe_psql (DBNAME , "drop table if exists pt cascade" )
122
+
123
+ luke .safe_psql (DBNAME , """
124
+ create table pt(id int4 not null, payload float4);
125
+ """ )
126
+
127
+ luke .safe_psql (DBNAME , """
128
+ insert into pt select generate_series(1, 10), random();
129
+ """ )
117
130
118
- luke .safe_psql (DBNAME , "drop table if exists pt cascade;" )
119
- luke .safe_psql (DBNAME , "CREATE TABLE pt(id INT NOT NULL, payload REAL);" )
120
- luke .safe_psql (DBNAME , "INSERT INTO pt SELECT generate_series(1, 10), random();" )
121
- lord .safe_psql (DBNAME , "select shardman.create_hash_partitions(2, 'pt', 'id', 4, true);" );
131
+ lord .safe_psql (DBNAME , """
132
+ select shardman.create_hash_partitions(2, 'pt', 'id', 4, true);
133
+ """ )
122
134
123
135
print ("%s:" % lord .name )
124
136
print ("\t -> port %i" % lord .port )
0 commit comments