annotate Lib/bsddb/test/test_replication.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents fe355bd05c47
children a1c94f0761d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
1 """TestCases for distributed transactions.
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
2 """
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
3
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
4 import os
47243
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
5 import time
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
6 import unittest
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
7
48910
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
8 from test_all import db, test_support, have_threads, verbose, \
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
9 get_new_environment_path, get_new_database_path
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
10
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
11
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
12 #----------------------------------------------------------------------
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
13
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
14 class DBReplicationManager(unittest.TestCase):
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
15 import sys
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
16 if sys.version_info[:3] < (2, 4, 0):
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
17 def assertTrue(self, expr, msg=None):
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
18 self.failUnless(expr,msg=msg)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
19
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
20 def setUp(self) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
21 self.homeDirMaster = get_new_environment_path()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
22 self.homeDirClient = get_new_environment_path()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
23
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
24 self.dbenvMaster = db.DBEnv()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
25 self.dbenvClient = db.DBEnv()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
26
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
27 # Must use "DB_THREAD" because the Replication Manager will
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
28 # be executed in other threads but will use the same environment.
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
29 # http://forums.oracle.com/forums/thread.jspa?threadID=645788&tstart=0
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
30 self.dbenvMaster.open(self.homeDirMaster, db.DB_CREATE | db.DB_INIT_TXN
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
31 | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK |
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
32 db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
33 self.dbenvClient.open(self.homeDirClient, db.DB_CREATE | db.DB_INIT_TXN
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
34 | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK |
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
35 db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
36
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
37 self.confirmed_master=self.client_startupdone=False
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
38 def confirmed_master(a,b,c) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
39 if b==db.DB_EVENT_REP_MASTER :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
40 self.confirmed_master=True
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
41
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
42 def client_startupdone(a,b,c) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
43 if b==db.DB_EVENT_REP_STARTUPDONE :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
44 self.client_startupdone=True
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
45
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
46 self.dbenvMaster.set_event_notify(confirmed_master)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
47 self.dbenvClient.set_event_notify(client_startupdone)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
48
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
49 #self.dbenvMaster.set_verbose(db.DB_VERB_REPLICATION, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
50 #self.dbenvMaster.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
51 #self.dbenvClient.set_verbose(db.DB_VERB_REPLICATION, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
52 #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
53
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
54 self.dbMaster = self.dbClient = None
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
55
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
56
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
57 def tearDown(self):
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
58 if self.dbClient :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
59 self.dbClient.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
60 if self.dbMaster :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
61 self.dbMaster.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
62 self.dbenvClient.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
63 self.dbenvMaster.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
64 test_support.rmtree(self.homeDirClient)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
65 test_support.rmtree(self.homeDirMaster)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
66
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
67 def test01_basic_replication(self) :
47243
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
68 master_port = test_support.find_unused_port()
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
69 self.dbenvMaster.repmgr_set_local_site("127.0.0.1", master_port)
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
70 client_port = test_support.find_unused_port()
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
71 self.dbenvClient.repmgr_set_local_site("127.0.0.1", client_port)
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
72 self.dbenvMaster.repmgr_add_remote_site("127.0.0.1", client_port)
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
73 self.dbenvClient.repmgr_add_remote_site("127.0.0.1", master_port)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
74 self.dbenvMaster.rep_set_nsites(2)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
75 self.dbenvClient.rep_set_nsites(2)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
76 self.dbenvMaster.rep_set_priority(10)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
77 self.dbenvClient.rep_set_priority(0)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
78
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
79 self.dbenvMaster.rep_set_timeout(db.DB_REP_CONNECTION_RETRY,100123)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
80 self.dbenvClient.rep_set_timeout(db.DB_REP_CONNECTION_RETRY,100321)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
81 self.assertEquals(self.dbenvMaster.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
82 db.DB_REP_CONNECTION_RETRY), 100123)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
83 self.assertEquals(self.dbenvClient.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
84 db.DB_REP_CONNECTION_RETRY), 100321)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
85
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
86 self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 100234)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
87 self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 100432)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
88 self.assertEquals(self.dbenvMaster.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
89 db.DB_REP_ELECTION_TIMEOUT), 100234)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
90 self.assertEquals(self.dbenvClient.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
91 db.DB_REP_ELECTION_TIMEOUT), 100432)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
92
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
93 self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_RETRY, 100345)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
94 self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_RETRY, 100543)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
95 self.assertEquals(self.dbenvMaster.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
96 db.DB_REP_ELECTION_RETRY), 100345)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
97 self.assertEquals(self.dbenvClient.rep_get_timeout(
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
98 db.DB_REP_ELECTION_RETRY), 100543)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
99
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
100 self.dbenvMaster.repmgr_set_ack_policy(db.DB_REPMGR_ACKS_ALL)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
101 self.dbenvClient.repmgr_set_ack_policy(db.DB_REPMGR_ACKS_ALL)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
102
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
103 self.dbenvMaster.repmgr_start(1, db.DB_REP_MASTER);
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
104 self.dbenvClient.repmgr_start(1, db.DB_REP_CLIENT);
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
105
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
106 self.assertEquals(self.dbenvMaster.rep_get_nsites(),2)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
107 self.assertEquals(self.dbenvClient.rep_get_nsites(),2)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
108 self.assertEquals(self.dbenvMaster.rep_get_priority(),10)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
109 self.assertEquals(self.dbenvClient.rep_get_priority(),0)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
110 self.assertEquals(self.dbenvMaster.repmgr_get_ack_policy(),
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
111 db.DB_REPMGR_ACKS_ALL)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
112 self.assertEquals(self.dbenvClient.repmgr_get_ack_policy(),
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
113 db.DB_REPMGR_ACKS_ALL)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
114
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
115 # The timeout is necessary in BDB 4.5, since DB_EVENT_REP_STARTUPDONE
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
116 # is not generated if the master has no new transactions.
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
117 # This is solved in BDB 4.6 (#15542).
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
118 import time
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
119 timeout = time.time()+10
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
120 while (time.time()<timeout) and not (self.confirmed_master and self.client_startupdone) :
47243
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
121 time.sleep(0.02)
49219
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
122 # this fails on Windows as self.client_startupdone never gets set
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
123 # to True - see bug 3892. BUT - even though this assertion
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
124 # fails on Windows the rest of the test passes - so to prove
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
125 # that we let the rest of the test run. Sadly we can't
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
126 # make use of raising TestSkipped() here (unittest still
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
127 # reports it as an error), so we yell to stderr.
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
128 import sys
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
129 if sys.platform=="win32":
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
130 print >> sys.stderr, \
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
131 "XXX - windows bsddb replication fails on windows and is skipped"
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
132 print >> sys.stderr, "XXX - Please see issue #3892"
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
133 else:
fe355bd05c47 On Windows, temporarily disable the bsddb test referenced in bug 3892.
Mark Hammond <mhammond@skippinet.com.au>
parents: 48910
diff changeset
134 self.assertTrue(time.time()<timeout)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
135
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
136 d = self.dbenvMaster.repmgr_site_list()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
137 self.assertEquals(len(d), 1)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
138 self.assertEquals(d[0][0], "127.0.0.1")
47243
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
139 self.assertEquals(d[0][1], client_port)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
140 self.assertTrue((d[0][2]==db.DB_REPMGR_CONNECTED) or \
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
141 (d[0][2]==db.DB_REPMGR_DISCONNECTED))
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
142
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
143 d = self.dbenvClient.repmgr_site_list()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
144 self.assertEquals(len(d), 1)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
145 self.assertEquals(d[0][0], "127.0.0.1")
47243
339e1718315c Use test_support to get network ports to bind to.
Gregory P. Smith <greg@mad-scientist.com>
parents: 46984
diff changeset
146 self.assertEquals(d[0][1], master_port)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
147 self.assertTrue((d[0][2]==db.DB_REPMGR_CONNECTED) or \
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
148 (d[0][2]==db.DB_REPMGR_DISCONNECTED))
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
149
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
150 if db.version() >= (4,6) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
151 d = self.dbenvMaster.repmgr_stat(flags=db.DB_STAT_CLEAR);
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
152 self.assertTrue("msgs_queued" in d)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
153
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
154 self.dbMaster=db.DB(self.dbenvMaster)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
155 txn=self.dbenvMaster.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
156 self.dbMaster.open("test", db.DB_HASH, db.DB_CREATE, 0666, txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
157 txn.commit()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
158
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
159 import time,os.path
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
160 timeout=time.time()+10
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
161 while (time.time()<timeout) and \
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
162 not (os.path.exists(os.path.join(self.homeDirClient,"test"))) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
163 time.sleep(0.01)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
164
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
165 self.dbClient=db.DB(self.dbenvClient)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
166 while True :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
167 txn=self.dbenvClient.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
168 try :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
169 self.dbClient.open("test", db.DB_HASH, flags=db.DB_RDONLY,
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
170 mode=0666, txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
171 except db.DBRepHandleDeadError :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
172 txn.abort()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
173 self.dbClient.close()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
174 self.dbClient=db.DB(self.dbenvClient)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
175 continue
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
176
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
177 txn.commit()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
178 break
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
179
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
180 txn=self.dbenvMaster.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
181 self.dbMaster.put("ABC", "123", txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
182 txn.commit()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
183 import time
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
184 timeout=time.time()+10
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
185 v=None
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
186 while (time.time()<timeout) and (v==None) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
187 txn=self.dbenvClient.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
188 v=self.dbClient.get("ABC", txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
189 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
190 if v==None :
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
191 time.sleep(0.02)
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
192 self.assertTrue(time.time()<timeout)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
193 self.assertEquals("123", v)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
194
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
195 txn=self.dbenvMaster.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
196 self.dbMaster.delete("ABC", txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
197 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
198 timeout=time.time()+10
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
199 while (time.time()<timeout) and (v!=None) :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
200 txn=self.dbenvClient.txn_begin()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
201 v=self.dbClient.get("ABC", txn=txn)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
202 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
203 if v==None :
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
204 time.sleep(0.02)
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
205 self.assertTrue(time.time()<timeout)
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
206 self.assertEquals(None, v)
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
207
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
208 class DBBaseReplication(DBReplicationManager):
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
209 def setUp(self) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
210 DBReplicationManager.setUp(self)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
211 def confirmed_master(a,b,c) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
212 if (b == db.DB_EVENT_REP_MASTER) or (b == db.DB_EVENT_REP_ELECTED) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
213 self.confirmed_master = True
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
214
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
215 def client_startupdone(a,b,c) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
216 if b == db.DB_EVENT_REP_STARTUPDONE :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
217 self.client_startupdone = True
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
218
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
219 self.dbenvMaster.set_event_notify(confirmed_master)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
220 self.dbenvClient.set_event_notify(client_startupdone)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
221
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
222 import Queue
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
223 self.m2c = Queue.Queue()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
224 self.c2m = Queue.Queue()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
225
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
226 # There are only two nodes, so we don't need to
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
227 # do any routing decision
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
228 def m2c(dbenv, control, rec, lsnp, envid, flags) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
229 self.m2c.put((control, rec))
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
230
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
231 def c2m(dbenv, control, rec, lsnp, envid, flags) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
232 self.c2m.put((control, rec))
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
233
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
234 self.dbenvMaster.rep_set_transport(13,m2c)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
235 self.dbenvMaster.rep_set_priority(10)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
236 self.dbenvClient.rep_set_transport(3,c2m)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
237 self.dbenvClient.rep_set_priority(0)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
238
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
239 self.assertEquals(self.dbenvMaster.rep_get_priority(),10)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
240 self.assertEquals(self.dbenvClient.rep_get_priority(),0)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
241
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
242 #self.dbenvMaster.set_verbose(db.DB_VERB_REPLICATION, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
243 #self.dbenvMaster.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
244 #self.dbenvClient.set_verbose(db.DB_VERB_REPLICATION, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
245 #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
246
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
247 def thread_master() :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
248 return self.thread_do(self.dbenvMaster, self.c2m, 3,
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
249 self.master_doing_election, True)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
250
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
251 def thread_client() :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
252 return self.thread_do(self.dbenvClient, self.m2c, 13,
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
253 self.client_doing_election, False)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
254
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
255 from threading import Thread
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
256 t_m=Thread(target=thread_master)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
257 t_c=Thread(target=thread_client)
48910
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
258 import sys
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
259 if sys.version_info[0] < 3 :
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
260 t_m.setDaemon(True)
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
261 t_c.setDaemon(True)
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
262 else :
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
263 t_m.daemon = True
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
264 t_c.daemon = True
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
265
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
266 self.t_m = t_m
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
267 self.t_c = t_c
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
268
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
269 self.dbMaster = self.dbClient = None
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
270
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
271 self.master_doing_election=[False]
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
272 self.client_doing_election=[False]
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
273
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
274
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
275 def tearDown(self):
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
276 if self.dbClient :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
277 self.dbClient.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
278 if self.dbMaster :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
279 self.dbMaster.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
280 self.m2c.put(None)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
281 self.c2m.put(None)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
282 self.t_m.join()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
283 self.t_c.join()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
284 self.dbenvClient.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
285 self.dbenvMaster.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
286 test_support.rmtree(self.homeDirClient)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
287 test_support.rmtree(self.homeDirMaster)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
288
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
289 def basic_rep_threading(self) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
290 self.dbenvMaster.rep_start(flags=db.DB_REP_MASTER)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
291 self.dbenvClient.rep_start(flags=db.DB_REP_CLIENT)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
292
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
293 def thread_do(env, q, envid, election_status, must_be_master) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
294 while True :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
295 v=q.get()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
296 if v == None : return
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
297 env.rep_process_message(v[0], v[1], envid)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
298
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
299 self.thread_do = thread_do
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
300
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
301 self.t_m.start()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
302 self.t_c.start()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
303
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
304 def test01_basic_replication(self) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
305 self.basic_rep_threading()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
306
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
307 # The timeout is necessary in BDB 4.5, since DB_EVENT_REP_STARTUPDONE
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
308 # is not generated if the master has no new transactions.
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
309 # This is solved in BDB 4.6 (#15542).
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
310 import time
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
311 timeout = time.time()+10
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
312 while (time.time()<timeout) and not (self.confirmed_master and
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
313 self.client_startupdone) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
314 time.sleep(0.02)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
315 self.assertTrue(time.time()<timeout)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
316
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
317 self.dbMaster=db.DB(self.dbenvMaster)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
318 txn=self.dbenvMaster.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
319 self.dbMaster.open("test", db.DB_HASH, db.DB_CREATE, 0666, txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
320 txn.commit()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
321
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
322 import time,os.path
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
323 timeout=time.time()+10
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
324 while (time.time()<timeout) and \
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
325 not (os.path.exists(os.path.join(self.homeDirClient,"test"))) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
326 time.sleep(0.01)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
327
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
328 self.dbClient=db.DB(self.dbenvClient)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
329 while True :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
330 txn=self.dbenvClient.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
331 try :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
332 self.dbClient.open("test", db.DB_HASH, flags=db.DB_RDONLY,
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
333 mode=0666, txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
334 except db.DBRepHandleDeadError :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
335 txn.abort()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
336 self.dbClient.close()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
337 self.dbClient=db.DB(self.dbenvClient)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
338 continue
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
339
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
340 txn.commit()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
341 break
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
342
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
343 txn=self.dbenvMaster.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
344 self.dbMaster.put("ABC", "123", txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
345 txn.commit()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
346 import time
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
347 timeout=time.time()+10
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
348 v=None
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
349 while (time.time()<timeout) and (v==None) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
350 txn=self.dbenvClient.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
351 v=self.dbClient.get("ABC", txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
352 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
353 if v==None :
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
354 time.sleep(0.02)
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
355 self.assertTrue(time.time()<timeout)
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
356 self.assertEquals("123", v)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
357
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
358 txn=self.dbenvMaster.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
359 self.dbMaster.delete("ABC", txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
360 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
361 timeout=time.time()+10
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
362 while (time.time()<timeout) and (v!=None) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
363 txn=self.dbenvClient.txn_begin()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
364 v=self.dbClient.get("ABC", txn=txn)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
365 txn.commit()
48095
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
366 if v==None :
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
367 time.sleep(0.02)
50228d2b32c1 Be less strict with replication timeouts (the machine
Jesus Cea <jcea@jcea.es>
parents: 48094
diff changeset
368 self.assertTrue(time.time()<timeout)
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
369 self.assertEquals(None, v)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
370
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
371 if db.version() >= (4,7) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
372 def test02_test_request(self) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
373 self.basic_rep_threading()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
374 (minimum, maximum) = self.dbenvClient.rep_get_request()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
375 self.dbenvClient.rep_set_request(minimum-1, maximum+1)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
376 self.assertEqual(self.dbenvClient.rep_get_request(),
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
377 (minimum-1, maximum+1))
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
378
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
379 if db.version() >= (4,6) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
380 def test03_master_election(self) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
381 # Get ready to hold an election
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
382 #self.dbenvMaster.rep_start(flags=db.DB_REP_MASTER)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
383 self.dbenvMaster.rep_start(flags=db.DB_REP_CLIENT)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
384 self.dbenvClient.rep_start(flags=db.DB_REP_CLIENT)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
385
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
386 def thread_do(env, q, envid, election_status, must_be_master) :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
387 while True :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
388 v=q.get()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
389 if v == None : return
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
390 r = env.rep_process_message(v[0],v[1],envid)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
391 if must_be_master and self.confirmed_master :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
392 self.dbenvMaster.rep_start(flags = db.DB_REP_MASTER)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
393 must_be_master = False
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
394
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
395 if r[0] == db.DB_REP_HOLDELECTION :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
396 def elect() :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
397 while True :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
398 try :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
399 env.rep_elect(2, 1)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
400 election_status[0] = False
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
401 break
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
402 except db.DBRepUnavailError :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
403 pass
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
404 if not election_status[0] and not self.confirmed_master :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
405 from threading import Thread
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
406 election_status[0] = True
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
407 t=Thread(target=elect)
48910
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
408 import sys
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
409 if sys.version_info[0] < 3 :
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
410 t.setDaemon(True)
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
411 else :
81a1a1545172 Update bsddb code to version 4.7.3pre2. This code should
Jesus Cea <jcea@jcea.es>
parents: 48095
diff changeset
412 t.daemon = True
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
413 t.start()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
414
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
415 self.thread_do = thread_do
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
416
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
417 self.t_m.start()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
418 self.t_c.start()
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
419
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
420 self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 50000)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
421 self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 50000)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
422 self.client_doing_election[0] = True
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
423 while True :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
424 try :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
425 self.dbenvClient.rep_elect(2, 1)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
426 self.client_doing_election[0] = False
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
427 break
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
428 except db.DBRepUnavailError :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
429 pass
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
430
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
431 self.assertTrue(self.confirmed_master)
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
432
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
433 #----------------------------------------------------------------------
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
434
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
435 def test_suite():
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
436 suite = unittest.TestSuite()
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
437 if db.version() >= (4, 6) :
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
438 dbenv = db.DBEnv()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
439 try :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
440 dbenv.repmgr_get_ack_policy()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
441 ReplicationManager_available=True
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
442 except :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
443 ReplicationManager_available=False
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
444 dbenv.close()
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
445 del dbenv
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
446 if ReplicationManager_available :
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
447 suite.addTest(unittest.makeSuite(DBReplicationManager))
48054
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
448
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
449 if have_threads :
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
450 suite.addTest(unittest.makeSuite(DBBaseReplication))
10f41adc0d24 bsddb module updated to version 4.7.2devel9.
Jesus Cea <jcea@jcea.es>
parents: 47838
diff changeset
451
46984
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
452 return suite
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
453
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
454
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
455 if __name__ == '__main__':
e4e3b3eba226 Testsuite for bsddb module, version 4.6.4
Jesus Cea <jcea@jcea.es>
parents:
diff changeset
456 unittest.main(defaultTest='test_suite')