From 566e4a692fe11207b3e45e93eae2a0e5fc889b9e Mon Sep 17 00:00:00 2001 From: yungwine Date: Wed, 15 May 2024 13:17:42 +0700 Subject: [PATCH 1/6] add liteserver mode --- modules/__init__.py | 2 ++ modules/liteserver.py | 26 ++++++++++++++++++++++++++ mytoncore/mytoncore.py | 17 +++++++++++++++++ mytonctrl/mytonctrl.py | 2 +- 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 modules/liteserver.py diff --git a/modules/__init__.py b/modules/__init__.py index d7e3cc7d..5a44fa3e 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -7,6 +7,7 @@ from modules.single_pool import SingleNominatorModule from modules.validator import ValidatorModule from modules.controller import ControllerModule +from modules.liteserver import LiteserverModule MODES = { @@ -14,6 +15,7 @@ 'nominator-pool': NominatorPoolModule, 'single-nominator': SingleNominatorModule, 'liquid-staking': ControllerModule, + 'liteserver': LiteserverModule } diff --git a/modules/liteserver.py b/modules/liteserver.py new file mode 100644 index 00000000..212fc167 --- /dev/null +++ b/modules/liteserver.py @@ -0,0 +1,26 @@ +import psutil + +from modules.module import MtcModule +from mytoninstaller.mytoninstaller import set_node_argument +from mytoninstaller.node_args import get_node_args + + +class LiteserverModule(MtcModule): + + description = 'For liteserver usage only - can\'t be used with validator.' + default_value = False + + def enable(self): + set_node_argument(self.local, ["--celldb-no-preload-all"]) + data = psutil.virtual_memory() + ram = round(data.total / 2**30, 2) + if ram < 100: + set_node_argument(self.local, ["--celldb-cache-size", "1073741824"]) + + def disable(self): + set_node_argument(self.local, ["--celldb-no-preload-all", "-d"]) + if get_node_args()['--celldb-cache-size']: + set_node_argument(self.local, ["--celldb-cache-size", "-d"]) + + def add_console_commands(self, console): + ... diff --git a/mytoncore/mytoncore.py b/mytoncore/mytoncore.py index 3a30ab41..16a2566b 100644 --- a/mytoncore/mytoncore.py +++ b/mytoncore/mytoncore.py @@ -3261,9 +3261,21 @@ def get_modes(self): current_modes[name] = mode.default_value # assign default mode value return current_modes + def check_enable_mode(self, name): + if name == 'liteserver': + if self.using_validator(): + raise Exception(f'Cannot enable liteserver mode while validator mode is enabled. ' + f'Use `disable_mode validator` first.') + MODES['liteserver'].enable() + if name == 'validator': + if self.using_liteserver(): + raise Exception(f'Cannot enable validator mode while liteserver mode is enabled. ' + f'Use `disable_mode liteserver` first.') + def enable_mode(self, name): if name not in MODES: raise Exception(f'Unknown module name: {name}. Available modes: {", ".join(MODES)}') + self.check_enable_mode(name) current_modes = self.get_modes() current_modes[name] = True self.local.save() @@ -3272,6 +3284,8 @@ def disable_mode(self, name): current_modes = self.get_modes() if name not in current_modes: raise Exception(f'Unknown module name: {name}. Available modes: {", ".join(MODES)}') + if name == 'liteserver': + MODES['liteserver'].disable() current_modes[name] = False self.local.save() @@ -3296,6 +3310,9 @@ def using_pool(self) -> bool: def using_validator(self): return self.get_mode_value('validator') + def using_liteserver(self): + return self.get_mode_value('liteserver') + def Tlb2Json(self, text): # Заменить скобки start = 0 diff --git a/mytonctrl/mytonctrl.py b/mytonctrl/mytonctrl.py index e8b52bac..43ace71c 100755 --- a/mytonctrl/mytonctrl.py +++ b/mytonctrl/mytonctrl.py @@ -141,7 +141,7 @@ def inject_globals(func): module = NominatorPoolModule(ton, local) module.add_console_commands(console) - if ton.get_mode_value('single-nominator'): + if ton.using_single_nominator(): from modules.single_pool import SingleNominatorModule module = SingleNominatorModule(ton, local) module.add_console_commands(console) From 540e5f8971350f7ff2b0be9950762f15044f609e Mon Sep 17 00:00:00 2001 From: yungwine Date: Wed, 15 May 2024 13:32:10 +0700 Subject: [PATCH 2/6] bugfix bugfix --- modules/liteserver.py | 2 +- mytoncore/mytoncore.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/liteserver.py b/modules/liteserver.py index 212fc167..63833ea8 100644 --- a/modules/liteserver.py +++ b/modules/liteserver.py @@ -13,7 +13,7 @@ class LiteserverModule(MtcModule): def enable(self): set_node_argument(self.local, ["--celldb-no-preload-all"]) data = psutil.virtual_memory() - ram = round(data.total / 2**30, 2) + ram = data.total / 2**30 if ram < 100: set_node_argument(self.local, ["--celldb-cache-size", "1073741824"]) diff --git a/mytoncore/mytoncore.py b/mytoncore/mytoncore.py index 16a2566b..f230c381 100644 --- a/mytoncore/mytoncore.py +++ b/mytoncore/mytoncore.py @@ -3266,7 +3266,7 @@ def check_enable_mode(self, name): if self.using_validator(): raise Exception(f'Cannot enable liteserver mode while validator mode is enabled. ' f'Use `disable_mode validator` first.') - MODES['liteserver'].enable() + MODES['liteserver'](self, self.local).enable() if name == 'validator': if self.using_liteserver(): raise Exception(f'Cannot enable validator mode while liteserver mode is enabled. ' @@ -3285,7 +3285,7 @@ def disable_mode(self, name): if name not in current_modes: raise Exception(f'Unknown module name: {name}. Available modes: {", ".join(MODES)}') if name == 'liteserver': - MODES['liteserver'].disable() + MODES['liteserver'](self, self.local).disable() current_modes[name] = False self.local.save() From c9f6a48e1ae8e4f54d1f1e8df203c4403fef2bf7 Mon Sep 17 00:00:00 2001 From: yungwine Date: Wed, 15 May 2024 16:51:20 +0700 Subject: [PATCH 3/6] add installation with liteserver bugfix --- mytoncore/functions.py | 9 +++++++++ mytoninstaller/mytoninstaller.py | 8 +++++++- mytoninstaller/settings.py | 6 ++++++ scripts/install.sh | 20 ++++++++++++-------- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/mytoncore/functions.py b/mytoncore/functions.py index 9e9f4d05..12e36ba3 100755 --- a/mytoncore/functions.py +++ b/mytoncore/functions.py @@ -54,6 +54,8 @@ def Event(local, event_name): ValidatorDownEvent(local) elif event_name == "enable_ton_storage_provider": enable_ton_storage_provider_event(local) + elif event_name == "enable_liteserver_mode": + enable_liteserver_mode(local) local.exit() # end define @@ -90,6 +92,13 @@ def enable_ton_storage_provider_event(local): #end define +def enable_liteserver_mode(local): + ton = MyTonCore(local) + ton.disable_mode('validator') + ton.enable_mode('liteserver') +#end define + + def Elections(local, ton): use_pool = ton.using_pool() use_liquid_staking = ton.using_liquid_staking() diff --git a/mytoninstaller/mytoninstaller.py b/mytoninstaller/mytoninstaller.py index 56daf47e..d8c51cca 100644 --- a/mytoninstaller/mytoninstaller.py +++ b/mytoninstaller/mytoninstaller.py @@ -29,7 +29,8 @@ CreateSymlinks, enable_ls_proxy, enable_ton_storage, - enable_ton_storage_provider + enable_ton_storage_provider, + EnableMode ) from mytoninstaller.config import ( CreateLocalConfig, @@ -255,6 +256,10 @@ def General(local): mx = sys.argv.index("--dump") dump = sys.argv[mx+1] local.buffer.dump = str2bool(dump) + if "-m" in sys.argv: + mx = sys.argv.index("-m") + mode = sys.argv[mx+1] + local.buffer.mode = mode #end if FirstMytoncoreSettings(local) @@ -264,6 +269,7 @@ def General(local): BackupVconfig(local) BackupMconfig(local) CreateSymlinks(local) + EnableMode(local) #end define diff --git a/mytoninstaller/settings.py b/mytoninstaller/settings.py index 941e16cc..6a4fbbb1 100644 --- a/mytoninstaller/settings.py +++ b/mytoninstaller/settings.py @@ -888,3 +888,9 @@ def CreateSymlinks(local): file.write(fiftpath + '\n') file.close() #end define + + +def EnableMode(local): + if local.buffer.mode == 'liteserver': + args = ["python3", "-m", "mytoncore", "-e", "enable_liteserver_mode"] + subprocess.run(args) diff --git a/scripts/install.sh b/scripts/install.sh index b57b9453..cfe84c76 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -15,16 +15,18 @@ fi author="ton-blockchain" repo="mytonctrl" branch="master" +mode="validator" show_help_and_exit() { - echo 'Supported argumets:' - echo ' -c PATH Provide custom config for toninstaller.sh' - echo ' -t Disable telemetry' - echo ' -i Ignore minimum reqiurements' - echo ' -d Use pre-packaged dump. Reduces duration of initial synchronization.' - echo ' -a Set MyTonCtrl git repo author' + echo 'Supported argumets:' + echo ' -c PATH Provide custom config for toninstaller.sh' + echo ' -t Disable telemetry' + echo ' -i Ignore minimum reqiurements' + echo ' -d Use pre-packaged dump. Reduces duration of initial synchronization.' + echo ' -a Set MyTonCtrl git repo author' echo ' -r Set MyTonCtrl git repo' echo ' -b Set MyTonCtrl git repo branch' + echo ' -m MODE Install MyTonCtrl with specified mode (validator or liteserver)' echo ' -h Show this help' exit } @@ -40,7 +42,8 @@ ignore=false dump=false -while getopts c:tida:r:b: flag + +while getopts c:tida:r:b:m: flag do case "${flag}" in c) config=${OPTARG};; @@ -50,6 +53,7 @@ do a) author=${OPTARG};; r) repo=${OPTARG};; b) branch=${OPTARG};; + m) mode=${OPTARG};; h) show_help_and_exit;; *) echo "Flag -${flag} is not recognized. Aborting" @@ -115,7 +119,7 @@ if [ "$parent_name" = "sudo" ] || [ "$parent_name" = "su" ]; then user=$(logname) fi echo "User: $user" -python3 -m mytoninstaller -u ${user} -t ${telemetry} --dump ${dump} +python3 -m mytoninstaller -u ${user} -t ${telemetry} --dump ${dump} -m ${mode} # set migrate version migrate_version=1 From 979a925f0e88ed07c8f0577be5d8afa0f28aea21 Mon Sep 17 00:00:00 2001 From: yungwine Date: Wed, 15 May 2024 19:07:04 +0700 Subject: [PATCH 4/6] bugfix --- modules/liteserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/liteserver.py b/modules/liteserver.py index 63833ea8..02b3521a 100644 --- a/modules/liteserver.py +++ b/modules/liteserver.py @@ -2,7 +2,6 @@ from modules.module import MtcModule from mytoninstaller.mytoninstaller import set_node_argument -from mytoninstaller.node_args import get_node_args class LiteserverModule(MtcModule): @@ -18,6 +17,7 @@ def enable(self): set_node_argument(self.local, ["--celldb-cache-size", "1073741824"]) def disable(self): + from mytoninstaller.node_args import get_node_args set_node_argument(self.local, ["--celldb-no-preload-all", "-d"]) if get_node_args()['--celldb-cache-size']: set_node_argument(self.local, ["--celldb-cache-size", "-d"]) From 00c6c9fbb8352dc9477f8bac9ba2136a2b35f3f6 Mon Sep 17 00:00:00 2001 From: yungwine Date: Wed, 15 May 2024 20:09:31 +0700 Subject: [PATCH 5/6] bugfix --- modules/liteserver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/liteserver.py b/modules/liteserver.py index 02b3521a..6e3849ec 100644 --- a/modules/liteserver.py +++ b/modules/liteserver.py @@ -1,7 +1,6 @@ import psutil from modules.module import MtcModule -from mytoninstaller.mytoninstaller import set_node_argument class LiteserverModule(MtcModule): @@ -10,6 +9,7 @@ class LiteserverModule(MtcModule): default_value = False def enable(self): + from mytoninstaller.mytoninstaller import set_node_argument set_node_argument(self.local, ["--celldb-no-preload-all"]) data = psutil.virtual_memory() ram = data.total / 2**30 @@ -17,6 +17,7 @@ def enable(self): set_node_argument(self.local, ["--celldb-cache-size", "1073741824"]) def disable(self): + from mytoninstaller.mytoninstaller import set_node_argument from mytoninstaller.node_args import get_node_args set_node_argument(self.local, ["--celldb-no-preload-all", "-d"]) if get_node_args()['--celldb-cache-size']: From 0b2839fb356df7a0def9e15e879eb22690a3b124 Mon Sep 17 00:00:00 2001 From: Igroman787 <27614297+igroman787@users.noreply.github.com> Date: Fri, 17 May 2024 11:48:32 +0300 Subject: [PATCH 6/6] install requirements before migration --- mytonctrl.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mytonctrl.py b/mytonctrl.py index 6c6eb9d5..4056f883 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -5,6 +5,13 @@ # import os import sys +import subprocess + +requirements_path = "/usr/src/mytonctrl/requirements.txt" +if os.path.isfile(requirements_path): + args = ["pip3", "install", "-r", requirements_path] + subprocess.run(args) +#end if sys.path.insert(0, '/usr/bin/mytonctrl') # Add path to mytonctrl module