Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 22e7b22

Browse files
committed
Update synmark for the changes.
This dramatically simplifies the configuration necessary for running the synmark logging suite by avoiding creating a homeserver object we can avoid creating a database and more quickly run the testing suite.
1 parent 24a9882 commit 22e7b22

File tree

4 files changed

+38
-65
lines changed

4 files changed

+38
-65
lines changed

scripts-dev/lint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ else
8080
# then lint everything!
8181
if [[ -z ${files+x} ]]; then
8282
# Lint all source code files and directories
83-
files=("synapse" "tests" "scripts-dev" "scripts" "contrib" "synctl" "setup.py")
83+
files=("synapse" "tests" "scripts-dev" "scripts" "contrib" "synctl" "setup.py" "synmark")
8484
fi
8585
fi
8686

synmark/__init__.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,45 +21,6 @@
2121
from twisted.internet.pollreactor import PollReactor as Reactor
2222
from twisted.internet.main import installReactor
2323

24-
from synapse.config.homeserver import HomeServerConfig
25-
from synapse.util import Clock
26-
27-
from tests.utils import default_config, setup_test_homeserver
28-
29-
30-
async def make_homeserver(reactor, config=None):
31-
"""
32-
Make a Homeserver suitable for running benchmarks against.
33-
34-
Args:
35-
reactor: A Twisted reactor to run under.
36-
config: A HomeServerConfig to use, or None.
37-
"""
38-
cleanup_tasks = []
39-
clock = Clock(reactor)
40-
41-
if not config:
42-
config = default_config("test")
43-
44-
config_obj = HomeServerConfig()
45-
config_obj.parse_config_dict(config, "", "")
46-
47-
hs = setup_test_homeserver(
48-
cleanup_tasks.append, config=config_obj, reactor=reactor, clock=clock
49-
)
50-
stor = hs.get_datastore()
51-
52-
# Run the database background updates.
53-
if hasattr(stor.db_pool.updates, "do_next_background_update"):
54-
while not await stor.db_pool.updates.has_completed_background_updates():
55-
await stor.db_pool.updates.do_next_background_update(1)
56-
57-
def cleanup():
58-
for i in cleanup_tasks:
59-
i()
60-
61-
return hs, clock.sleep, cleanup
62-
6324

6425
def make_reactor():
6526
"""

synmark/__main__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@
1212
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
15-
1615
import sys
1716
from argparse import REMAINDER
1817
from contextlib import redirect_stderr
1918
from io import StringIO
2019

2120
import pyperf
22-
from synmark import make_reactor
23-
from synmark.suites import SUITES
2421

2522
from twisted.internet.defer import Deferred, ensureDeferred
2623
from twisted.logger import globalLogBeginner, textFileLogObserver
2724
from twisted.python.failure import Failure
2825

26+
from synmark import make_reactor
27+
from synmark.suites import SUITES
28+
2929
from tests.utils import setupdb
3030

3131

synmark/suites/logging.py

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,22 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16+
import logging
1617
import warnings
1718
from io import StringIO
1819

1920
from mock import Mock
2021

2122
from pyperf import perf_counter
22-
from synmark import make_homeserver
2323

2424
from twisted.internet.defer import Deferred
2525
from twisted.internet.protocol import ServerFactory
26-
from twisted.logger import LogBeginner, Logger, LogPublisher
26+
from twisted.logger import LogBeginner, LogPublisher
2727
from twisted.protocols.basic import LineOnlyReceiver
2828

29-
from synapse.logging._structured import setup_structured_logging
29+
from synapse.config.logger import _setup_stdlib_logging
30+
from synapse.logging import RemoteHandler
31+
from synapse.util import Clock
3032

3133

3234
class LineCounter(LineOnlyReceiver):
@@ -62,7 +64,15 @@ def protocol():
6264
logger_factory.on_done = Deferred()
6365
port = reactor.listenTCP(0, logger_factory, interface="127.0.0.1")
6466

65-
hs, wait, cleanup = await make_homeserver(reactor)
67+
# A fake homeserver config.
68+
class Config:
69+
server_name = "synmark-" + str(loops)
70+
no_redirect_stdio = True
71+
72+
hs_config = Config()
73+
74+
# To be able to sleep.
75+
clock = Clock(reactor)
6676

6777
errors = StringIO()
6878
publisher = LogPublisher()
@@ -72,47 +82,49 @@ def protocol():
7282
)
7383

7484
log_config = {
75-
"loggers": {"synapse": {"level": "DEBUG"}},
76-
"drains": {
85+
"version": 1,
86+
"loggers": {"synapse": {"level": "DEBUG", "handlers": ["tersejson"]}},
87+
"formatters": {"tersejson": {"class": "synapse.logging.TerseJsonFormatter"}},
88+
"handlers": {
7789
"tersejson": {
78-
"type": "network_json_terse",
90+
"class": "synapse.logging.RemoteHandler",
7991
"host": "127.0.0.1",
8092
"port": port.getHost().port,
8193
"maximum_buffer": 100,
94+
"_reactor": reactor,
8295
}
8396
},
8497
}
8598

86-
logger = Logger(namespace="synapse.logging.test_terse_json", observer=publisher)
87-
logging_system = setup_structured_logging(
88-
hs, hs.config, log_config, logBeginner=beginner, redirect_stdlib_logging=False
99+
logger = logging.getLogger("synapse.logging.test_terse_json")
100+
_setup_stdlib_logging(
101+
hs_config, log_config, logBeginner=beginner,
89102
)
90103

91104
# Wait for it to connect...
92-
await logging_system._observers[0]._service.whenConnected()
105+
for handler in logging.getLogger("synapse").handlers:
106+
if isinstance(handler, RemoteHandler):
107+
break
108+
else:
109+
raise RuntimeError("Improperly configured: no RemoteHandler found.")
110+
111+
await handler._service.whenConnected()
93112

94113
start = perf_counter()
95114

96115
# Send a bunch of useful messages
97116
for i in range(0, loops):
98117
logger.info("test message %s" % (i,))
99118

100-
if (
101-
len(logging_system._observers[0]._buffer)
102-
== logging_system._observers[0].maximum_buffer
103-
):
104-
while (
105-
len(logging_system._observers[0]._buffer)
106-
> logging_system._observers[0].maximum_buffer / 2
107-
):
108-
await wait(0.01)
119+
if len(handler._buffer) == handler.maximum_buffer:
120+
while len(handler._buffer) > handler.maximum_buffer / 2:
121+
await clock.sleep(0.01)
109122

110123
await logger_factory.on_done
111124

112125
end = perf_counter() - start
113126

114-
logging_system.stop()
127+
# TODO Clean-up the handler?
115128
port.stopListening()
116-
cleanup()
117129

118130
return end

0 commit comments

Comments
 (0)