jetstream-api 0.5.2__tar.gz → 0.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/PKG-INFO +1 -1
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/__init__.py +1 -1
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/properties.py +263 -3
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/jetstream_api.egg-info/PKG-INFO +1 -1
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/pyproject.toml +1 -1
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/LICENSE.txt +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/README.md +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/admin.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/admintopic.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/common.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/connectivity.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/exception.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/msg.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/pattern.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/producer.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/py.typed +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/qmgr.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/topic.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/ilink/util.py +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/jetstream_api.egg-info/SOURCES.txt +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/jetstream_api.egg-info/dependency_links.txt +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/jetstream_api.egg-info/requires.txt +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/jetstream_api.egg-info/top_level.txt +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/setup.cfg +0 -0
- {jetstream_api-0.5.2 → jetstream_api-0.5.3}/tests/test_example.py +0 -0
|
@@ -41,6 +41,55 @@ def _validate_log_level(value: int) -> None:
|
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def _spec_range(lo, hi, extra=""):
|
|
45
|
+
"""``lo <= v <= hi`` 규칙. ``extra`` 는 오류 문구에 덧붙일 단서."""
|
|
46
|
+
text = "%s~%s%s" % (lo, hi, extra)
|
|
47
|
+
|
|
48
|
+
def check(v):
|
|
49
|
+
return isinstance(v, int) and not isinstance(v, bool) and lo <= v <= hi
|
|
50
|
+
|
|
51
|
+
return check, text
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _spec_min(lo, extra=""):
|
|
55
|
+
"""``lo`` 이상 규칙."""
|
|
56
|
+
text = "%s or greater%s" % (lo, extra)
|
|
57
|
+
|
|
58
|
+
def check(v):
|
|
59
|
+
return isinstance(v, int) and not isinstance(v, bool) and v >= lo
|
|
60
|
+
|
|
61
|
+
return check, text
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _spec_special_or_min(special, lo, label):
|
|
65
|
+
"""``special`` 하나를 따로 허용하고, 그 밖에는 ``lo`` 이상만 받는다.
|
|
66
|
+
|
|
67
|
+
엔진이 ``-1``(무제한/비활성) 같은 특수값을 따로 두는 항목에 쓴다. ``0`` 처럼
|
|
68
|
+
특수값도 아니고 범위에도 없는 값을 걸러 내는 것이 목적이다.
|
|
69
|
+
"""
|
|
70
|
+
text = "%s for %s, or %s or greater" % (special, label, lo)
|
|
71
|
+
|
|
72
|
+
def check(v):
|
|
73
|
+
if not isinstance(v, int) or isinstance(v, bool):
|
|
74
|
+
return False
|
|
75
|
+
return v == special or v >= lo
|
|
76
|
+
|
|
77
|
+
return check, text
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _spec_maxlen(n):
|
|
81
|
+
"""``n`` 바이트 이하 문자열 규칙."""
|
|
82
|
+
text = "%d bytes or less" % n
|
|
83
|
+
|
|
84
|
+
def check(v):
|
|
85
|
+
try:
|
|
86
|
+
return len(str(v).encode("utf-8")) <= n
|
|
87
|
+
except Exception:
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
return check, text
|
|
91
|
+
|
|
92
|
+
|
|
44
93
|
class _AutoAccessor:
|
|
45
94
|
"""필드에서 ``getX`` / ``setX`` / ``isX`` 접근자를 **자동으로** 만들어 주는 믹스인.
|
|
46
95
|
|
|
@@ -53,8 +102,18 @@ class _AutoAccessor:
|
|
|
53
102
|
- ``obj.isFoo()`` -> ``bool(obj.foo)``
|
|
54
103
|
|
|
55
104
|
즉 **필드 이름을 알면 접근자 이름도 안다.** 각 클래스 docstring 의 Attributes
|
|
56
|
-
절에 필드 목록이 있다.
|
|
57
|
-
|
|
105
|
+
절에 필드 목록이 있다.
|
|
106
|
+
|
|
107
|
+
Note:
|
|
108
|
+
**세터는 값 범위를 검사한다.** 클래스마다 ``_SPEC`` 규칙표가 있고, 엔진
|
|
109
|
+
``Validate()`` 와 같은 규칙이다. 범위를 벗어나면
|
|
110
|
+
:class:`UnsupportedOperationException` 을 올린다 - 서버에 갔다 오기 전에
|
|
111
|
+
걸러진다. 규칙이 없는 필드는 그냥 대입된다.
|
|
112
|
+
|
|
113
|
+
**필드 직접 대입은 검사하지 않는다** (``obj.foo = 3``). 서버가 보낸
|
|
114
|
+
바이트를 푸는 경로가 같은 방식으로 필드에 넣기 때문이다 - 구엔진이 지금
|
|
115
|
+
규격을 벗어난 값을 보내도 파싱이 깨지면 안 된다. 미리 걸러 내고 싶으면
|
|
116
|
+
**세터를 쓴다.**
|
|
58
117
|
"""
|
|
59
118
|
|
|
60
119
|
def __getattr__(self, name: str):
|
|
@@ -77,13 +136,44 @@ class _AutoAccessor:
|
|
|
77
136
|
if name.startswith("set") and len(name) > 3:
|
|
78
137
|
field = name[3].lower() + name[4:]
|
|
79
138
|
if hasattr(self, field):
|
|
80
|
-
return lambda value:
|
|
139
|
+
return lambda value: self._set_checked(field, value)
|
|
81
140
|
if name.startswith("is") and len(name) > 2:
|
|
82
141
|
field = name[2].lower() + name[3:]
|
|
83
142
|
if hasattr(self, field):
|
|
84
143
|
return lambda: bool(getattr(self, field))
|
|
85
144
|
raise AttributeError(f"{self.__class__.__name__} has no attribute {name}")
|
|
86
145
|
|
|
146
|
+
_SPEC: dict = {}
|
|
147
|
+
|
|
148
|
+
def _set_checked(self, field: str, value):
|
|
149
|
+
"""규칙표에 있으면 검사한 뒤 필드에 넣는다.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
field (str): 대상 필드 이름.
|
|
153
|
+
value: 넣을 값.
|
|
154
|
+
|
|
155
|
+
Raises:
|
|
156
|
+
UnsupportedOperationException: 값이 규격을 벗어났을 때.
|
|
157
|
+
|
|
158
|
+
Note:
|
|
159
|
+
**역직렬화 경로는 이 검사를 타지 않는다.** ``__init__`` 이 서버 바이트를
|
|
160
|
+
풀 때는 ``self.<필드> = ...`` 로 직접 넣으므로, 구엔진이 지금 규격을
|
|
161
|
+
벗어난 값을 보내도 파싱이 깨지지 않는다. 검사는 **앱이 값을 지정하는
|
|
162
|
+
경로**에만 걸린다.
|
|
163
|
+
|
|
164
|
+
같은 이유로 ``obj.<필드> = 값`` 직접 대입도 검사하지 않는다. 규격을
|
|
165
|
+
미리 확인하려면 세터를 쓰거나 각 클래스 docstring 의 ``스펙:`` 줄을 본다.
|
|
166
|
+
"""
|
|
167
|
+
rule = type(self)._SPEC.get(field)
|
|
168
|
+
if rule is not None:
|
|
169
|
+
check, text = rule
|
|
170
|
+
if not check(value):
|
|
171
|
+
raise UnsupportedOperationException(
|
|
172
|
+
f"[{value}] is an unacceptable value."
|
|
173
|
+
f" (acceptable value range: {text})"
|
|
174
|
+
)
|
|
175
|
+
object.__setattr__(self, field, value)
|
|
176
|
+
|
|
87
177
|
|
|
88
178
|
class DestItem(_AutoAccessor):
|
|
89
179
|
"""분산(밸런스) 채널의 **전송 대상** 하나. 고정폭 바이트 블롭으로 오간다.
|
|
@@ -560,6 +650,24 @@ class ILQueueProperty(_AutoAccessor):
|
|
|
560
650
|
스펙: 서버 응답 길이로 라이브러리가 판단하는 내부 표시 · 앱이 건드리지 않는다.
|
|
561
651
|
"""
|
|
562
652
|
|
|
653
|
+
# 엔진 QueueProperty::Validate() 와 같은 규칙.
|
|
654
|
+
_SPEC = {
|
|
655
|
+
"name": _spec_maxlen(47),
|
|
656
|
+
"triggerProcess": _spec_maxlen(999),
|
|
657
|
+
"remoteQmgrName": _spec_maxlen(47),
|
|
658
|
+
"remoteQueueName": _spec_maxlen(47),
|
|
659
|
+
"xmitQueueName": _spec_maxlen(47),
|
|
660
|
+
"expiredQueue": _spec_maxlen(47),
|
|
661
|
+
"maxDepth": _spec_range(1, 99999999),
|
|
662
|
+
"maxMsgLength": _spec_special_or_min(-1, 1, "unlimited"),
|
|
663
|
+
"incomingDelayDepth": _spec_special_or_min(-1, 1, "disabled"),
|
|
664
|
+
"incomingDelay": _spec_special_or_min(-1, 1, "disabled"),
|
|
665
|
+
"expiry": _spec_min(-1, " (-1 = by message)"),
|
|
666
|
+
"maxMemorySize": _spec_min(0, " (byte)"),
|
|
667
|
+
"sharedMemorySize": _spec_min(0, " (byte)"),
|
|
668
|
+
"numberOfPartition": _spec_range(2, 99),
|
|
669
|
+
}
|
|
670
|
+
|
|
563
671
|
def __init__(
|
|
564
672
|
self,
|
|
565
673
|
name: str | bytes | bytearray | None = None,
|
|
@@ -1212,6 +1320,18 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1212
1320
|
읽지 않는 옛 필드**라 이 클래스에 없다. 찾지 마라.
|
|
1213
1321
|
"""
|
|
1214
1322
|
|
|
1323
|
+
# 엔진 ChannelProperty::Validate() 와 같은 규칙.
|
|
1324
|
+
_SPEC = {
|
|
1325
|
+
"name": _spec_maxlen(47),
|
|
1326
|
+
"destManagerName": _spec_maxlen(47),
|
|
1327
|
+
"destManagerIp": _spec_maxlen(127),
|
|
1328
|
+
"xmitQueueName": _spec_maxlen(47),
|
|
1329
|
+
"keyFileName": _spec_maxlen(511),
|
|
1330
|
+
"certFileName": _spec_maxlen(511),
|
|
1331
|
+
"destManagerPort": _spec_range(1025, 65535),
|
|
1332
|
+
"timeout": _spec_special_or_min(-1, 1, "infinite"),
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1215
1335
|
def __init__(
|
|
1216
1336
|
self,
|
|
1217
1337
|
name: str | bytes | bytearray | None = None,
|
|
@@ -2368,6 +2488,37 @@ class ILQmgrProperty(_AutoAccessor):
|
|
|
2368
2488
|
서버가 채우는 읽기 전용 값이다.
|
|
2369
2489
|
"""
|
|
2370
2490
|
|
|
2491
|
+
# 엔진 ManagerProperty::Validate() / Fix() 와 같은 규칙.
|
|
2492
|
+
_SPEC = {
|
|
2493
|
+
"name": _spec_maxlen(47),
|
|
2494
|
+
"port": _spec_range(1025, 65535),
|
|
2495
|
+
"deadLetterQueueName": _spec_maxlen(31),
|
|
2496
|
+
"channelRetryTimeInterval": _spec_range(1, 86400, " (sec)"),
|
|
2497
|
+
"sendTimeout": _spec_range(1, 864000, " (sec)"),
|
|
2498
|
+
"recvWaitTimeout": _spec_range(1, 864000, " (sec)"),
|
|
2499
|
+
"volumeMonitorInterval": _spec_range(1, 864000, " (sec)"),
|
|
2500
|
+
"volumeMonitorSizeLimit": _spec_range(1, 1073741824000, " (byte)"),
|
|
2501
|
+
"subExpiryMinutes": _spec_min(0, " (min)"),
|
|
2502
|
+
"memberExpiryMinutes": _spec_range(0, 9999, " (min)"),
|
|
2503
|
+
"deadSessionMaxCount": _spec_min(0),
|
|
2504
|
+
"deadSessionKeepDuration": _spec_min(0, " (sec)"),
|
|
2505
|
+
"logLevelSystem": _spec_range(0, 7),
|
|
2506
|
+
"logLevelClient": _spec_range(0, 7),
|
|
2507
|
+
"logLevelQueue": _spec_range(0, 7),
|
|
2508
|
+
"logLevelChannel": _spec_range(0, 7),
|
|
2509
|
+
"logLevelTopic": _spec_range(0, 7),
|
|
2510
|
+
"logFileSizeSystem": _spec_range(1048576, 104857600, " (byte)"),
|
|
2511
|
+
"logFileSizeClient": _spec_range(1048576, 104857600, " (byte)"),
|
|
2512
|
+
"logFileSizeQueue": _spec_range(1048576, 104857600, " (byte)"),
|
|
2513
|
+
"logFileSizeChannel": _spec_range(1048576, 104857600, " (byte)"),
|
|
2514
|
+
"logFileSizeTopic": _spec_range(1048576, 104857600, " (byte)"),
|
|
2515
|
+
"logFileCountSystem": _spec_range(1, 999),
|
|
2516
|
+
"logFileCountClient": _spec_range(1, 999),
|
|
2517
|
+
"logFileCountQueue": _spec_range(1, 999),
|
|
2518
|
+
"logFileCountChannel": _spec_range(1, 999),
|
|
2519
|
+
"logFileCountTopic": _spec_range(1, 999),
|
|
2520
|
+
}
|
|
2521
|
+
|
|
2371
2522
|
def __init__(
|
|
2372
2523
|
self,
|
|
2373
2524
|
name: str | bytes | bytearray | None = None,
|
|
@@ -2819,6 +2970,33 @@ class ILQmgrProperty(_AutoAccessor):
|
|
|
2819
2970
|
)
|
|
2820
2971
|
setattr(self, "logFileCount" + self._log_suffix(logger_type), value)
|
|
2821
2972
|
|
|
2973
|
+
|
|
2974
|
+
# --- camelCase 별칭 -------------------------------------------------
|
|
2975
|
+
# 2인자 로거 접근자는 _AutoAccessor 가 합성하지 못한다(필드 이름이 아니라
|
|
2976
|
+
# 종류를 인자로 받으므로). 자바에는 있는 형태라 명시적으로 붙여 둔다.
|
|
2977
|
+
def getLogLevel(self, logger_type: int) -> int:
|
|
2978
|
+
""":meth:`get_log_level` 의 camelCase 별칭."""
|
|
2979
|
+
return self.get_log_level(logger_type)
|
|
2980
|
+
|
|
2981
|
+
def setLogLevel(self, logger_type: int, value: int) -> None:
|
|
2982
|
+
""":meth:`set_log_level` 의 camelCase 별칭."""
|
|
2983
|
+
self.set_log_level(logger_type, value)
|
|
2984
|
+
|
|
2985
|
+
def getLogFileSize(self, logger_type: int) -> int:
|
|
2986
|
+
""":meth:`get_log_file_size` 의 camelCase 별칭."""
|
|
2987
|
+
return self.get_log_file_size(logger_type)
|
|
2988
|
+
|
|
2989
|
+
def setLogFileSize(self, logger_type: int, value: int) -> None:
|
|
2990
|
+
""":meth:`set_log_file_size` 의 camelCase 별칭."""
|
|
2991
|
+
self.set_log_file_size(logger_type, value)
|
|
2992
|
+
|
|
2993
|
+
def getLogFileCount(self, logger_type: int) -> int:
|
|
2994
|
+
""":meth:`get_log_file_count` 의 camelCase 별칭."""
|
|
2995
|
+
return self.get_log_file_count(logger_type)
|
|
2996
|
+
|
|
2997
|
+
def setLogFileCount(self, logger_type: int, value: int) -> None:
|
|
2998
|
+
""":meth:`set_log_file_count` 의 camelCase 별칭."""
|
|
2999
|
+
self.set_log_file_count(logger_type, value)
|
|
2822
3000
|
def get_log_level_system_string(self) -> str:
|
|
2823
3001
|
"""시스템 로그 레벨을 문자열로 돌려준다.
|
|
2824
3002
|
|
|
@@ -3420,6 +3598,22 @@ class ILServiceProperty(_AutoAccessor):
|
|
|
3420
3598
|
스펙: 기본 5 · 범위 1~999 · 단위 개 · 변경 가능/재기동 불필요.
|
|
3421
3599
|
"""
|
|
3422
3600
|
|
|
3601
|
+
# 엔진 ServiceProperty::Validate() 와 같은 규칙.
|
|
3602
|
+
_SPEC = {
|
|
3603
|
+
"name": _spec_maxlen(47),
|
|
3604
|
+
"port": _spec_range(1025, 65535),
|
|
3605
|
+
"hubIp": _spec_maxlen(127),
|
|
3606
|
+
"hubPort": _spec_range(1025, 65535),
|
|
3607
|
+
"timeoutSocketSend": _spec_range(1, 864000, " (sec)"),
|
|
3608
|
+
"timeoutSocketRecv": _spec_range(1, 864000, " (sec)"),
|
|
3609
|
+
"logLevelSystem": _spec_range(0, 7),
|
|
3610
|
+
"logLevelClient": _spec_range(0, 7),
|
|
3611
|
+
"logFileSizeSystem": _spec_range(1048576, 104857600, " (byte)"),
|
|
3612
|
+
"logFileSizeClient": _spec_range(1048576, 104857600, " (byte)"),
|
|
3613
|
+
"logFileCountSystem": _spec_range(1, 999),
|
|
3614
|
+
"logFileCountClient": _spec_range(1, 999),
|
|
3615
|
+
}
|
|
3616
|
+
|
|
3423
3617
|
def __init__(self, ba: bytes | bytearray | None = None) -> None:
|
|
3424
3618
|
"""서비스 속성 객체를 만든다.
|
|
3425
3619
|
|
|
@@ -3758,6 +3952,33 @@ class ILServiceProperty(_AutoAccessor):
|
|
|
3758
3952
|
)
|
|
3759
3953
|
setattr(self, "logFileCount" + self._log_suffix(logger_type), value)
|
|
3760
3954
|
|
|
3955
|
+
|
|
3956
|
+
# --- camelCase 별칭 -------------------------------------------------
|
|
3957
|
+
# 2인자 로거 접근자는 _AutoAccessor 가 합성하지 못한다(필드 이름이 아니라
|
|
3958
|
+
# 종류를 인자로 받으므로). 자바에는 있는 형태라 명시적으로 붙여 둔다.
|
|
3959
|
+
def getLogLevel(self, logger_type: int) -> int:
|
|
3960
|
+
""":meth:`get_log_level` 의 camelCase 별칭."""
|
|
3961
|
+
return self.get_log_level(logger_type)
|
|
3962
|
+
|
|
3963
|
+
def setLogLevel(self, logger_type: int, value: int) -> None:
|
|
3964
|
+
""":meth:`set_log_level` 의 camelCase 별칭."""
|
|
3965
|
+
self.set_log_level(logger_type, value)
|
|
3966
|
+
|
|
3967
|
+
def getLogFileSize(self, logger_type: int) -> int:
|
|
3968
|
+
""":meth:`get_log_file_size` 의 camelCase 별칭."""
|
|
3969
|
+
return self.get_log_file_size(logger_type)
|
|
3970
|
+
|
|
3971
|
+
def setLogFileSize(self, logger_type: int, value: int) -> None:
|
|
3972
|
+
""":meth:`set_log_file_size` 의 camelCase 별칭."""
|
|
3973
|
+
self.set_log_file_size(logger_type, value)
|
|
3974
|
+
|
|
3975
|
+
def getLogFileCount(self, logger_type: int) -> int:
|
|
3976
|
+
""":meth:`get_log_file_count` 의 camelCase 별칭."""
|
|
3977
|
+
return self.get_log_file_count(logger_type)
|
|
3978
|
+
|
|
3979
|
+
def setLogFileCount(self, logger_type: int, value: int) -> None:
|
|
3980
|
+
""":meth:`set_log_file_count` 의 camelCase 별칭."""
|
|
3981
|
+
self.set_log_file_count(logger_type, value)
|
|
3761
3982
|
def get_log_level_system_string(self) -> str:
|
|
3762
3983
|
"""시스템 로그 레벨을 문자열로 돌려준다.
|
|
3763
3984
|
|
|
@@ -3868,6 +4089,15 @@ class ILProxyProperty(_AutoAccessor):
|
|
|
3868
4089
|
스펙: 기본 F · 범위 T | F · 변경 불가.
|
|
3869
4090
|
"""
|
|
3870
4091
|
|
|
4092
|
+
# 엔진 ProxyProperty::Validate() 와 같은 규칙.
|
|
4093
|
+
_SPEC = {
|
|
4094
|
+
"name": _spec_maxlen(47),
|
|
4095
|
+
"port": _spec_range(1025, 65535),
|
|
4096
|
+
"destIp": _spec_maxlen(127),
|
|
4097
|
+
"destPort": _spec_range(1025, 65535),
|
|
4098
|
+
"timeout": _spec_min(1, " (sec)"),
|
|
4099
|
+
}
|
|
4100
|
+
|
|
3871
4101
|
def __init__(self, ba: bytes | bytearray | None = None) -> None:
|
|
3872
4102
|
"""프록시 속성 객체를 만든다.
|
|
3873
4103
|
|
|
@@ -4034,6 +4264,16 @@ class ILDiskGuardProperty(_AutoAccessor):
|
|
|
4034
4264
|
스펙: 기본 10 · 범위 1~3600 · 단위 초 · 변경 가능/재기동 불필요.
|
|
4035
4265
|
"""
|
|
4036
4266
|
|
|
4267
|
+
# 엔진 DiskGuardProperty::Validate() 와 같은 규칙(상호 제약은 validate() 가 본다).
|
|
4268
|
+
_SPEC = {
|
|
4269
|
+
"warnPercent": _spec_range(1, 100, " (%)"),
|
|
4270
|
+
"suspendPercent": _spec_range(1, 100, " (%)"),
|
|
4271
|
+
"resumePercent": _spec_range(1, 100, " (%)"),
|
|
4272
|
+
"minFreeMB": _spec_min(0, " (MB)"),
|
|
4273
|
+
"resumeMinFreeMB": _spec_min(0, " (MB)"),
|
|
4274
|
+
"intervalSec": _spec_range(1, 3600, " (sec)"),
|
|
4275
|
+
}
|
|
4276
|
+
|
|
4037
4277
|
def __init__(self, csv: str | None = None) -> None:
|
|
4038
4278
|
"""디스크 가드 설정 객체를 만든다.
|
|
4039
4279
|
|
|
@@ -4265,6 +4505,14 @@ class ILClusterNode(_AutoAccessor):
|
|
|
4265
4505
|
스펙: 기본 "" · 범위 47바이트 이하 문자열 (빈 값 금지, rev 3319+) · 변경 가능/클러스터 정지 필요.
|
|
4266
4506
|
"""
|
|
4267
4507
|
|
|
4508
|
+
# 엔진 ClusterProperty::Validate() 의 노드 검사와 같은 규칙.
|
|
4509
|
+
_SPEC = {
|
|
4510
|
+
"nodeId": _spec_min(1),
|
|
4511
|
+
"host": _spec_maxlen(127),
|
|
4512
|
+
"port": _spec_range(1025, 65535),
|
|
4513
|
+
"qmgrName": _spec_maxlen(47),
|
|
4514
|
+
}
|
|
4515
|
+
|
|
4268
4516
|
def __init__(self, ba: bytes | bytearray | None = None,
|
|
4269
4517
|
qmgr_name: str = "", host: str = "", port: int = 0) -> None:
|
|
4270
4518
|
"""클러스터 노드 객체를 만든다.
|
|
@@ -4479,6 +4727,18 @@ class ILClusterProperty(_AutoAccessor):
|
|
|
4479
4727
|
항목마다 자기 길이만큼 커서를 전진시켜 파싱한다.
|
|
4480
4728
|
"""
|
|
4481
4729
|
|
|
4730
|
+
# 엔진 ClusterProperty::Validate() 와 같은 규칙.
|
|
4731
|
+
_SPEC = {
|
|
4732
|
+
"name": _spec_maxlen(47),
|
|
4733
|
+
"ilccPort": _spec_range(1025, 65535),
|
|
4734
|
+
"priPort": _spec_range(1025, 65535),
|
|
4735
|
+
"secPort": _spec_range(1025, 65535),
|
|
4736
|
+
"witPort": _spec_range(1025, 65535),
|
|
4737
|
+
"heartbeatIntervalMs": _spec_min(100, " (ms)"),
|
|
4738
|
+
"heartbeatMissCount": _spec_range(1, 99),
|
|
4739
|
+
"electionDelayMs": _spec_min(0, " (ms)"),
|
|
4740
|
+
}
|
|
4741
|
+
|
|
4482
4742
|
def __init__(self, ba: bytes | bytearray | None = None,
|
|
4483
4743
|
name: str = "", ilcc_port: int = 0,
|
|
4484
4744
|
is_auto_start: bool = True,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|