混沌工具包不重命名文件
Chaos toolkit not renaming a file
我正在学习混沌工程,并且正在学习教程,但我的代码不应该 运行。
我正在测试的服务。
service.py
import io
import time
import threading
from wsgiref.validate import validator
from wsgiref.simple_server import make_server
EXAMPLE_FILE = './example.dat'
def update_file():
"""Write the current time to the file every second."""
print('Updating file...')
while True:
with open(EXAMPLE_FILE, 'w') as f:
f.write(datetime.now().isoformat())
time.sleep(1)
def simple_app(environ, start_response):
"""A simple WSGI application.
This application just writes the current time to the response.
"""
status = '200 OK'
headers = [('Content-type', 'text/plain; charset=utf-8')]
start_response(status, headers)
with open(EXAMPLE_FILE, 'r') as f:
return [f.read().encode('utf-8')]
if __name__ == '__main__':
# Start the file update thread.
t = threading.Thread(target=update_file)
t.start()
httpd = make_server('', 8000, simple_app)
print("Serving on port 8000...")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nKeyboard interrupt received, exiting.")
httpd.shutdown()
t.join(timeout=1)
print("Exiting.")
我的混沌实验文件
experiment.json
"title": "Does our service tolerate the loss of its example file?",
"description": "Our service reads data from a file, can it work without it?",
"tags": ["tutorial", "filesystem"],
"steady-state-hypothesis": {
"title": "The exchange file must exist",
"probes": [
{
"type": "probe",
"name": "service-is-unavailable",
"tolerance": [200, 503],
"provider": {
"type": "http",
"url": "http://localhost:8000"
}
}
]
},
"method": [
{
"name": "move-example-file",
"type": "action",
"provider": {
"type": "python",
"module": "os",
"func": "rename",
"arguments": {
"src": "./example.dat",
"dst": "./example.dat.old"
}
}
}
]
}
但是 chaos 没有重命名我的旧文件,而是使用提供的名称创建了一个新文件,实验以成功结束,这是我没有预料到的。
enter image description here
请帮忙
终于!
问题:update_file
每秒更新 example.dat
文件,如果它不存在,它会创建它!因此,当 chaos
将 example.dat
重命名为 example.dat.old
时,update_file
只是创建了另一个 example.dat
并且似乎始终满足混沌稳态假设。
一个解决方案:在明显更长的时间后将 update_file
设置为 运行。就我而言,time.sleep(60) 有效!
来自 chaos run experiment.json
的日志
[2021-12-07 01:11:19 INFO] Validating the experiment's syntax
[2021-12-07 01:11:19 INFO] Experiment looks valid
[2021-12-07 01:11:19 INFO] Running experiment: Does our service tolerate the loss of its example file?
[2021-12-07 01:11:19 INFO] Steady-state strategy: default
[2021-12-07 01:11:19 INFO] Rollbacks strategy: default
[2021-12-07 01:11:19 INFO] Steady state hypothesis: The exchange file must exist
[2021-12-07 01:11:19 INFO] Probe: service-is-unavailable
[2021-12-07 01:11:21 INFO] Steady state hypothesis is met!
[2021-12-07 01:11:21 INFO] Playing your experiment's method now...
[2021-12-07 01:11:21 INFO] Action: move-example-file
[2021-12-07 01:11:21 INFO] Steady state hypothesis: The exchange file must exist
[2021-12-07 01:11:21 INFO] Probe: service-is-unavailable
[2021-12-07 01:11:23 CRITICAL] Steady state probe 'service-is-unavailable' is not in the given tolerance so failing this experiment
[2021-12-07 01:11:23 INFO] Experiment ended with status: deviated
[2021-12-07 01:11:23 INFO] The steady-state has deviated, a weakness may have been discovered
我正在学习混沌工程,并且正在学习教程,但我的代码不应该 运行。
我正在测试的服务。
service.py
import io
import time
import threading
from wsgiref.validate import validator
from wsgiref.simple_server import make_server
EXAMPLE_FILE = './example.dat'
def update_file():
"""Write the current time to the file every second."""
print('Updating file...')
while True:
with open(EXAMPLE_FILE, 'w') as f:
f.write(datetime.now().isoformat())
time.sleep(1)
def simple_app(environ, start_response):
"""A simple WSGI application.
This application just writes the current time to the response.
"""
status = '200 OK'
headers = [('Content-type', 'text/plain; charset=utf-8')]
start_response(status, headers)
with open(EXAMPLE_FILE, 'r') as f:
return [f.read().encode('utf-8')]
if __name__ == '__main__':
# Start the file update thread.
t = threading.Thread(target=update_file)
t.start()
httpd = make_server('', 8000, simple_app)
print("Serving on port 8000...")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nKeyboard interrupt received, exiting.")
httpd.shutdown()
t.join(timeout=1)
print("Exiting.")
我的混沌实验文件
experiment.json
"title": "Does our service tolerate the loss of its example file?",
"description": "Our service reads data from a file, can it work without it?",
"tags": ["tutorial", "filesystem"],
"steady-state-hypothesis": {
"title": "The exchange file must exist",
"probes": [
{
"type": "probe",
"name": "service-is-unavailable",
"tolerance": [200, 503],
"provider": {
"type": "http",
"url": "http://localhost:8000"
}
}
]
},
"method": [
{
"name": "move-example-file",
"type": "action",
"provider": {
"type": "python",
"module": "os",
"func": "rename",
"arguments": {
"src": "./example.dat",
"dst": "./example.dat.old"
}
}
}
]
}
但是 chaos 没有重命名我的旧文件,而是使用提供的名称创建了一个新文件,实验以成功结束,这是我没有预料到的。
enter image description here
请帮忙
终于!
问题:update_file
每秒更新 example.dat
文件,如果它不存在,它会创建它!因此,当 chaos
将 example.dat
重命名为 example.dat.old
时,update_file
只是创建了另一个 example.dat
并且似乎始终满足混沌稳态假设。
一个解决方案:在明显更长的时间后将 update_file
设置为 运行。就我而言,time.sleep(60) 有效!
来自 chaos run experiment.json
[2021-12-07 01:11:19 INFO] Validating the experiment's syntax
[2021-12-07 01:11:19 INFO] Experiment looks valid
[2021-12-07 01:11:19 INFO] Running experiment: Does our service tolerate the loss of its example file?
[2021-12-07 01:11:19 INFO] Steady-state strategy: default
[2021-12-07 01:11:19 INFO] Rollbacks strategy: default
[2021-12-07 01:11:19 INFO] Steady state hypothesis: The exchange file must exist
[2021-12-07 01:11:19 INFO] Probe: service-is-unavailable
[2021-12-07 01:11:21 INFO] Steady state hypothesis is met!
[2021-12-07 01:11:21 INFO] Playing your experiment's method now...
[2021-12-07 01:11:21 INFO] Action: move-example-file
[2021-12-07 01:11:21 INFO] Steady state hypothesis: The exchange file must exist
[2021-12-07 01:11:21 INFO] Probe: service-is-unavailable
[2021-12-07 01:11:23 CRITICAL] Steady state probe 'service-is-unavailable' is not in the given tolerance so failing this experiment
[2021-12-07 01:11:23 INFO] Experiment ended with status: deviated
[2021-12-07 01:11:23 INFO] The steady-state has deviated, a weakness may have been discovered