Skip to content

Commit 5655ea2

Browse files
authored
V2.0.0 (#162)
1 parent 9789592 commit 5655ea2

File tree

285 files changed

+39993
-3517
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

285 files changed

+39993
-3517
lines changed

.gitignore

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,33 @@ dist
66
.vscode
77
.git
88
__pycache__
9-
.idea/workspace.xml
9+
.idea
10+
.obd
11+
plugins/oceanbase-ce
12+
config_parser/oceanbase-ce
13+
tags
14+
.DS_store
15+
16+
17+
18+
# dependencies
19+
/web/node_modules
20+
/web/npm-debug.log*
21+
/web/yarn-error.log
22+
/web/yarn.lock
23+
/web/package-lock.json
24+
/web/.mfsu-dev
25+
/web/.mfsu-prod
26+
27+
# production
28+
/web/dist
29+
30+
# misc
31+
/web/**/.DS_Store
32+
/web/.DS_Store
33+
34+
# umi
35+
/web/src/.umi
36+
/web/src/.umi-production
37+
/web/src/.umi-test
38+
/web/.env.local

_cmd.py

Lines changed: 177 additions & 62 deletions
Large diffs are not rendered by default.

_deploy.py

Lines changed: 91 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,16 @@
2323
import os
2424
import re
2525
import sys
26-
import pickle
2726
import getpass
2827
import hashlib
2928
from copy import deepcopy
3029
from enum import Enum
3130

3231
from ruamel.yaml.comments import CommentedMap
3332

33+
import _errno as err
3434
from tool import ConfigUtil, FileUtil, YamlLoader, OrderedDict, COMMAND_ENV
3535
from _manager import Manager
36-
from _repository import Repository
3736
from _stdio import SafeStdio
3837
from _environ import ENV_BASE_DIR
3938

@@ -360,6 +359,7 @@ def __init__(self, servers, name, version, tag, release, package_hash, parser=No
360359
self.origin_package_hash = package_hash
361360
self._package_hash = package_hash
362361
self._temp_conf = {}
362+
self._all_default_conf = {}
363363
self._default_conf = {}
364364
self._global_conf = None
365365
self._server_conf = {}
@@ -371,6 +371,8 @@ def __init__(self, servers, name, version, tag, release, package_hash, parser=No
371371
self._include_file = None
372372
self._origin_include_file = None
373373
self._origin_include_config = None
374+
self._unprocessed_global_conf = None
375+
self._unprocessed_server_conf = {}
374376
self._environments = None
375377
self._origin_environments = {}
376378
self._inner_config = {}
@@ -414,7 +416,14 @@ def __eq__(self, other):
414416
if not isinstance(other, self.__class__):
415417
return False
416418
# todo 检查 rsync include等
417-
return self._global_conf == other._global_conf and self._server_conf == other._server_conf
419+
if self.servers != other.servers:
420+
return False
421+
if self.get_global_conf() != other.get_global_conf():
422+
return False
423+
for server in self.servers:
424+
if self.get_server_conf(server) != other.get_server_conf(server):
425+
return False
426+
return True
418427

419428
def __deepcopy__(self, memo):
420429
cluster_config = self.__class__(deepcopy(self.servers), self.name, self.version, self.tag, self.package_hash, self.parser)
@@ -451,6 +460,8 @@ def depends(self):
451460
def _clear_cache_server(self):
452461
for server in self._cache_server:
453462
self._cache_server[server] = None
463+
if server in self._unprocessed_server_conf:
464+
del self._unprocessed_server_conf[server]
454465

455466
def get_inner_config(self):
456467
return self._inner_config
@@ -485,11 +496,14 @@ def get_depend_servers(self, name):
485496
cluster_config = self._depends[name]
486497
return deepcopy(cluster_config.original_servers)
487498

488-
def get_depend_config(self, name, server=None):
499+
def get_depend_config(self, name, server=None, with_default=True):
489500
if name not in self._depends:
490501
return None
491502
cluster_config = self._depends[name]
492-
config = cluster_config.get_server_conf_with_default(server) if server else cluster_config.get_global_conf()
503+
if with_default:
504+
config = cluster_config.get_server_conf_with_default(server) if server else cluster_config.get_global_conf_with_default()
505+
else:
506+
config = cluster_config.get_server_conf(server) if server else cluster_config.get_global_conf()
493507
return deepcopy(config)
494508

495509
def update_server_conf(self, server, key, value, save=True):
@@ -514,15 +528,13 @@ def update_global_conf(self, key, value, save=True):
514528
if not self._deploy_config.update_component_global_conf(self.name, key, value, save):
515529
return False
516530
self._update_global_conf(key, value)
517-
for server in self._cache_server:
518-
if self._cache_server[server] is not None:
519-
self._cache_server[server][key] = value
520531
return True
521532

522533
def _update_global_conf(self, key, value):
523534
self._original_global_conf[key] = value
524-
if self._global_conf:
525-
self._global_conf[key] = value
535+
self._global_conf = None
536+
self._unprocessed_global_conf = None
537+
self._clear_cache_server()
526538

527539
def update_rsync_list(self, rsync_list, save=True):
528540
if self._deploy_config is None:
@@ -541,11 +553,13 @@ def update_environments(self, environments, save=True):
541553
self._environments = None
542554
return True
543555

544-
def get_unconfigured_require_item(self, server):
556+
def get_unconfigured_require_item(self, server, skip_keys=[]):
545557
items = []
546-
config = self.get_server_conf(server)
558+
config = self._get_unprocessed_server_conf(server)
547559
if config is not None:
548560
for key in self._temp_conf:
561+
if key in skip_keys:
562+
continue
549563
if not self._temp_conf[key].require:
550564
continue
551565
if key in config:
@@ -556,11 +570,10 @@ def get_unconfigured_require_item(self, server):
556570
def get_server_conf_with_default(self, server):
557571
if server not in self._server_conf:
558572
return None
559-
config = {}
560-
for key in self._temp_conf:
561-
if self._temp_conf[key].default is not None:
562-
config[key] = self._temp_conf[key].default
563-
config.update(self.get_server_conf(server))
573+
config = deepcopy(self._all_default_conf)
574+
server_config = self.get_server_conf(server)
575+
if server_config:
576+
config.update(server_config)
564577
return config
565578

566579
def get_need_redeploy_items(self, server):
@@ -585,11 +598,15 @@ def get_need_restart_items(self, server):
585598

586599
def update_temp_conf(self, temp_conf):
587600
self._default_conf = {}
601+
self._all_default_conf = {}
588602
self._temp_conf = temp_conf
589603
for key in self._temp_conf:
590604
if self._temp_conf[key].require and self._temp_conf[key].default is not None:
591605
self._default_conf[key] = self._temp_conf[key].default
606+
if self._temp_conf[key].default is not None:
607+
self._all_default_conf[key] = self._temp_conf[key].default
592608
self._global_conf = None
609+
self._unprocessed_global_conf = None
593610
self._clear_cache_server()
594611

595612
def _apply_temp_conf(self, conf):
@@ -606,23 +623,44 @@ def get_temp_conf_item(self, key):
606623
return None
607624

608625
def check_param(self):
609-
error = []
626+
errors = []
627+
if self._temp_conf:
628+
_, g_errs = self.global_check_param()
629+
errors += g_errs
630+
for server in self._server_conf:
631+
s_errs, _ = self._check_param(self._server_conf[server])
632+
errors += s_errs
633+
return not errors, set(errors)
634+
635+
def global_check_param(self):
636+
errors = []
637+
if self._temp_conf:
638+
errors, _ = self._check_param(self._get_unprocessed_global_conf())
639+
return not errors, errors
640+
641+
def servers_check_param(self):
642+
check_res = {}
610643
if self._temp_conf:
611-
error += self._check_param(self.get_global_conf())
644+
global_config = self._get_unprocessed_global_conf()
612645
for server in self._server_conf:
613-
error += self._check_param(self._server_conf[server])
614-
return not error, set(error)
646+
config = deepcopy(self._server_conf[server])
647+
config.update(global_config)
648+
errors, items = self._check_param(config)
649+
check_res[server] = {'errors': errors, 'items': items}
650+
return check_res
615651

616652
def _check_param(self, config):
617-
error = []
653+
errors = []
654+
items = []
618655
for key in config:
619656
item = self._temp_conf.get(key)
620657
if item:
621658
try:
622659
item.check_value(config[key])
623660
except Exception as e:
624-
error.append(str(e))
625-
return error
661+
errors.append(str(e))
662+
items.append(item)
663+
return errors, items
626664

627665
def set_global_conf(self, conf):
628666
if not isinstance(conf, dict):
@@ -652,15 +690,24 @@ def add_server_conf(self, server, conf):
652690
self._server_conf[server] = conf
653691
self._cache_server[server] = None
654692

693+
def _get_unprocessed_global_conf(self):
694+
if self._unprocessed_global_conf is None:
695+
self._unprocessed_global_conf = deepcopy(self._default_conf)
696+
self._unprocessed_global_conf.update(self._get_include_config('config', {}))
697+
if self._original_global_conf:
698+
self._unprocessed_global_conf.update(self._original_global_conf)
699+
return self._unprocessed_global_conf
700+
655701
def get_global_conf(self):
656702
if self._global_conf is None:
657-
self._global_conf = deepcopy(self._default_conf)
658-
self._global_conf.update(self._get_include_config('config', {}))
659-
if self._original_global_conf:
660-
self._global_conf.update(self._original_global_conf)
661-
self._global_conf = self._apply_temp_conf(self._global_conf)
703+
self._global_conf = self._apply_temp_conf(self._get_unprocessed_global_conf())
662704
return self._global_conf
663705

706+
def get_global_conf_with_default(self):
707+
config = deepcopy(self._all_default_conf)
708+
config.update(self.get_global_conf())
709+
return config
710+
664711
def _add_base_dir(self, path):
665712
if not os.path.isabs(path):
666713
if self._base_dir:
@@ -758,22 +805,32 @@ def get_environments(self):
758805
self._environments.update(self._origin_environments)
759806
return self._environments
760807

808+
def _get_unprocessed_server_conf(self, server):
809+
if server not in self._unprocessed_server_conf:
810+
conf = deepcopy(self._inner_config.get(server.name, {}))
811+
conf.update(self._get_unprocessed_global_conf())
812+
conf.update(self._server_conf[server])
813+
self._unprocessed_server_conf[server] = conf
814+
return self._unprocessed_server_conf[server]
815+
761816
def get_server_conf(self, server):
762817
if server not in self._server_conf:
763818
return None
764819
if self._cache_server[server] is None:
765-
conf = self._apply_temp_conf(deepcopy(self._inner_config.get(server.name, {})))
766-
conf.update(self.get_global_conf())
767-
conf.update(self._apply_temp_conf(self._server_conf[server]))
768-
self._cache_server[server] = conf
820+
self._cache_server[server] = self._apply_temp_conf(self._get_unprocessed_server_conf(server))
769821
return self._cache_server[server]
770822

771823
def get_original_global_conf(self):
772-
return self._original_global_conf
824+
return deepcopy(self._original_global_conf)
773825

774826
def get_original_server_conf(self, server):
775827
return self._server_conf.get(server)
776828

829+
def get_original_server_conf_with_global(self, server):
830+
config = self.get_original_global_conf()
831+
config.update(self._server_conf.get(server, {}))
832+
return config
833+
777834

778835
class DeployStatus(Enum):
779836

_environ.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
# obd dev mode. {0/1}
2424
ENV_DEV_MODE = "OBD_DEV_MODE"
2525

26+
# obd lock mode. 0 - No lock mode, 1 - The deploy lock wiil be downgraded to shared lock, 2 - Default lock mode.
27+
ENV_LOCK_MODE = "OBD_LOCK_MODE"
28+
2629
# base path which will be used by runtime dependencies sync and include config. {absolute path style}
2730
ENV_BASE_DIR = "OBD_DEPLOY_BASE_DIR"
2831

@@ -31,3 +34,5 @@
3134

3235
# disable rsync mode even if the rsync exists. {0/1}
3336
ENV_DISABLE_RSYNC = "OBD_DISABLE_RSYNC"
37+
38+
ENV_DISABLE_PARALLER_EXTRACT = "OBD_DISALBE_PARALLER_EXTRACT"

0 commit comments

Comments
 (0)