jetstream-api 0.22.0__tar.gz → 0.22.1__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.
Files changed (32) hide show
  1. {jetstream_api-0.22.0/jetstream_api.egg-info → jetstream_api-0.22.1}/PKG-INFO +8 -1
  2. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/README.md +7 -0
  3. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/__init__.py +1 -1
  4. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/admin.py +6 -2
  5. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/properties.py +34 -4
  6. {jetstream_api-0.22.0 → jetstream_api-0.22.1/jetstream_api.egg-info}/PKG-INFO +8 -1
  7. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/pyproject.toml +1 -1
  8. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/LICENSE.txt +0 -0
  9. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_codec.py +0 -0
  10. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_consumer.py +0 -0
  11. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_groupwire.py +0 -0
  12. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_propv2.py +0 -0
  13. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_qleader.py +0 -0
  14. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/_throttle.py +0 -0
  15. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/admintopic.py +0 -0
  16. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/common.py +0 -0
  17. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/connectivity.py +0 -0
  18. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/exception.py +0 -0
  19. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/msg.py +0 -0
  20. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/partitioner.py +0 -0
  21. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/pattern.py +0 -0
  22. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/producer.py +0 -0
  23. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/py.typed +0 -0
  24. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/qmgr.py +0 -0
  25. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/topic.py +0 -0
  26. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/ilink/util.py +0 -0
  27. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/jetstream_api.egg-info/SOURCES.txt +0 -0
  28. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/jetstream_api.egg-info/dependency_links.txt +0 -0
  29. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/jetstream_api.egg-info/requires.txt +0 -0
  30. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/jetstream_api.egg-info/top_level.txt +0 -0
  31. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/setup.cfg +0 -0
  32. {jetstream_api-0.22.0 → jetstream_api-0.22.1}/tests/test_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jetstream-api
3
- Version: 0.22.0
3
+ Version: 0.22.1
4
4
  Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
5
5
  Author: snowjeans
6
6
  License: Boost Software License - Version 1.0 - August 17th, 2003
@@ -60,6 +60,13 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
60
60
  ## 설치 방법
61
61
  pip install jetstream-api
62
62
 
63
+ ## 0.22.1 변경 - 노드 추가 결과에 컨트롤러 기동 여부 (자바 v2.18.1 와 같음, started · wait 는 짝 엔진 7.0.1.3602 이상)
64
+
65
+ - ``addNode`` 결과(``ILClusterNodeAddResult``)에 ``started`` · ``wait``(``is_started()``): 자리를 맡은 서비스가 컨트롤러를 **띄웠는가**와
66
+ 안 띄운 까닭(``MANUAL`` - 정의 STARTMODE 가 MANUAL 이라 :meth:`startCluster` 로 띄운다 · ``STOPPED`` - 사용자가 멈춰 둠 · ``FAILED`` -
67
+ 띄우다 실패, ilsvc 로그). 그 전 엔진은 이 칸을 주지 않아 맡았으면 띄운 것으로 본다(종전 동작).
68
+ - 문서: 클러스터 팔로워 노드에 보낸 생성 · 변경 · 삭제는 ``MIMQE_OPERATION_DENIED (STANDBY, leader=..)``, 조회 · 목록은 팔로워도 답한다.
69
+
63
70
  ## 0.22.0 변경 - 7 신규 오브젝트(쿼터 · 디스크 가드 · 토픽 · 클러스터) 관리를 Property v2(JSON)로 (자바 v2.18.0 와 같음, 짝 엔진 7.0.1.3601 이상)
64
71
 
65
72
  - **와이어**: 쿼터 · 디스크 가드 · 토픽 · 클러스터의 생성 · 조회 · 목록 · 변경 · 삭제가 새 요청 코드 3600~3604(본문 = UTF-8 JSON)로 간다.
@@ -10,6 +10,13 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
10
10
  ## 설치 방법
11
11
  pip install jetstream-api
12
12
 
13
+ ## 0.22.1 변경 - 노드 추가 결과에 컨트롤러 기동 여부 (자바 v2.18.1 와 같음, started · wait 는 짝 엔진 7.0.1.3602 이상)
14
+
15
+ - ``addNode`` 결과(``ILClusterNodeAddResult``)에 ``started`` · ``wait``(``is_started()``): 자리를 맡은 서비스가 컨트롤러를 **띄웠는가**와
16
+ 안 띄운 까닭(``MANUAL`` - 정의 STARTMODE 가 MANUAL 이라 :meth:`startCluster` 로 띄운다 · ``STOPPED`` - 사용자가 멈춰 둠 · ``FAILED`` -
17
+ 띄우다 실패, ilsvc 로그). 그 전 엔진은 이 칸을 주지 않아 맡았으면 띄운 것으로 본다(종전 동작).
18
+ - 문서: 클러스터 팔로워 노드에 보낸 생성 · 변경 · 삭제는 ``MIMQE_OPERATION_DENIED (STANDBY, leader=..)``, 조회 · 목록은 팔로워도 답한다.
19
+
13
20
  ## 0.22.0 변경 - 7 신규 오브젝트(쿼터 · 디스크 가드 · 토픽 · 클러스터) 관리를 Property v2(JSON)로 (자바 v2.18.0 와 같음, 짝 엔진 7.0.1.3601 이상)
14
21
 
15
22
  - **와이어**: 쿼터 · 디스크 가드 · 토픽 · 클러스터의 생성 · 조회 · 목록 · 변경 · 삭제가 새 요청 코드 3600~3604(본문 = UTF-8 JSON)로 간다.
@@ -1,6 +1,6 @@
1
1
  """iLink - Python client API for iLink M.O.M. (Message Oriented Middleware)."""
2
2
 
3
- __version__ = "0.22.0"
3
+ __version__ = "0.22.1"
4
4
 
5
5
  # --- Admin / Service ---
6
6
  from .admin import ILAdminService, ILAdminQmgr, ILLogBrowser, ILQueueBrowser
@@ -1516,7 +1516,8 @@ class ILAdminService:
1516
1516
  Returns:
1517
1517
  ILClusterNodeAddResult: 이 서비스가 그 자리를 **곧바로 맡았는가**. 맡았으면
1518
1518
  :meth:`joinCluster` 가 필요 없다. 새 자리가 이 서비스 호스트의 컨트롤러 전용 자리일 때만 맡는다 -
1519
- **브로커를 더하면 어디서 불러도 맡지 않은 것으로 나온다.**
1519
+ **브로커를 더하면 어디서 불러도 맡지 않은 것으로 나온다.** ★ 맡았다고 곧 뜨는 것은 아니다 - 그 서비스의 정의
1520
+ ``STARTMODE`` 가 ``AUTO`` 면 컨트롤러가 저절로 뜨고, ``MANUAL`` 이면 :meth:`startCluster` 를 불러야 뜬다(엔진 r3492 부터).
1520
1521
 
1521
1522
  Raises:
1522
1523
  ILOperationException: 엔진이 거절할 때(사유 문자열로 가른다) - 투표권(``coordinator=True``)을
@@ -1561,7 +1562,10 @@ class ILAdminService:
1561
1562
  r = self._alter_cluster(p).get("_RESULT") or {}
1562
1563
  if not r.get("CLAIMED"):
1563
1564
  return ILClusterNodeAddResult()
1564
- return ILClusterNodeAddResult("CLAIMED", str(r.get("NODE", "")), str(r.get("CTRLPORT", "")))
1565
+ # 0.22.1: 엔진 r3602 부터 STARTED / WAIT(맡은 서비스가 컨트롤러를 띄웠는가) - 없으면(그 전 엔진) 띄운 것으로 본다
1566
+ st = r.get("STARTED")
1567
+ return ILClusterNodeAddResult("CLAIMED", str(r.get("NODE", "")), str(r.get("CTRLPORT", "")),
1568
+ None if st is None else bool(st), str(r.get("WAIT", "") or ""))
1565
1569
 
1566
1570
  def removeNode(self, clusterName: str, nodeId: int) -> None:
1567
1571
  """클러스터에서 **투표권 없는 노드 하나**(컨트롤러 전용 노드 또는 브로커)를 뺀다.
@@ -4789,6 +4789,9 @@ class ILPropertyResult(_AutoAccessor):
4789
4789
  엔진이 무엇을 적용했고 무엇을 무시했는지 돌려준다 - 모르는 키를 무시하는 규칙(U4)이 **조용한 무시**가 되지 않게
4790
4790
  하는 장치다. 무시된 키가 있으면 라이브러리는 WARNING 로그도 남긴다(결과를 돌려주지 않는 옛 메서드도 같다).
4791
4791
 
4792
+ 클러스터의 팔로워 노드에 보낸 변경(CREATE / ALTER / DELETE)은 ``MIMQE_OPERATION_DENIED (STANDBY, leader=<리더>)`` 로
4793
+ 거절된다(연결 유형과 무관, 엔진 r3601). 조회(GET / LIST)는 팔로워도 답한다.
4794
+
4792
4795
  Attributes:
4793
4796
  applied (list[tuple[str, str]]): 적용된 키와 반영 시점 ``(키, "NOW" | "RESTART")``.
4794
4797
  ignored (list[tuple[str, str]]): 무시된 키와 까닭 ``(키 경로, "unknown" | "retired" | "readonly" | "unsupported-by-peer")``.
@@ -5863,15 +5866,21 @@ class ILClusterNodeAddResult(_AutoAccessor):
5863
5866
  claimed (bool): 이 서비스가 그 자리를 맡았는가.
5864
5867
  nodeId (int): 맡은 노드 번호. 맡지 않았으면 0.
5865
5868
  ctrlPort (int): 맡은 자리의 ctrl 포트. 맡지 않았으면 0.
5869
+ started (bool): 자리를 맡은 이 서비스가 컨트롤러(ilcc)를 **띄웠는가**(0.22.1, 엔진 r3602). 맡지 않았으면 False.
5870
+ 그 전 엔진은 이 칸을 주지 않으므로 맡았으면 True 로 본다(종전 동작).
5871
+ wait (str): 맡았는데 띄우지 않은 까닭. ``"MANUAL"``(정의 STARTMODE 가 MANUAL - :meth:`ILAdminService.startCluster` 로
5872
+ 띄운다) · ``"STOPPED"``(사용자가 멈춰 두었다) · ``"FAILED"``(띄우다 실패 - ilsvc 로그). 띄웠거나 맡지 않았으면 ``""``.
5866
5873
  """
5867
5874
 
5868
- def __init__(self, arg1: str = "", arg2: str = "", arg3: str = "") -> None:
5869
- """응답 arg 세 개를 파싱한다. **응용이 직접 만들 일은 없다.**
5875
+ def __init__(self, arg1: str = "", arg2: str = "", arg3: str = "", started: bool | None = None, not_started_reason: str = "") -> None:
5876
+ """응답 칸을 파싱한다. **응용이 직접 만들 일은 없다.**
5870
5877
 
5871
5878
  Args:
5872
5879
  arg1 (str): ``"CLAIMED"`` 면 맡았다. 비면 맡지 않았다.
5873
5880
  arg2 (str): 노드 번호.
5874
5881
  arg3 (str): ctrl 포트.
5882
+ started (bool | None): 엔진의 ``STARTED``. None(그 전 엔진)이면 맡았을 때 True.
5883
+ not_started_reason (str): 엔진의 ``WAIT`` - ``"MANUAL"`` · ``"STOPPED"`` · ``"FAILED"`` 중 하나 또는 ``""``.
5875
5884
  """
5876
5885
  def _int(v):
5877
5886
  try:
@@ -5881,6 +5890,8 @@ class ILClusterNodeAddResult(_AutoAccessor):
5881
5890
  self.claimed = str(arg1 or "").strip() == "CLAIMED"
5882
5891
  self.nodeId = _int(arg2) if self.claimed else 0
5883
5892
  self.ctrlPort = _int(arg3) if self.claimed else 0
5893
+ self.started = self.claimed and (True if started is None else bool(started))
5894
+ self.wait = "" if (not self.claimed or self.started) else str(not_started_reason or "")
5884
5895
 
5885
5896
  def is_claimed(self) -> bool:
5886
5897
  """이 서비스가 그 자리를 맡았는가.
@@ -5892,14 +5903,33 @@ class ILClusterNodeAddResult(_AutoAccessor):
5892
5903
 
5893
5904
  isClaimed = is_claimed
5894
5905
 
5906
+ def is_started(self) -> bool:
5907
+ """자리를 맡은 이 서비스가 컨트롤러를 띄웠는가(0.22.1).
5908
+
5909
+ Returns:
5910
+ bool: 띄웠으면 True. 맡지 않았으면 False.
5911
+ """
5912
+ return self.started
5913
+
5914
+ isStarted = is_started
5915
+
5916
+ _WAIT_TEXT = {
5917
+ "MANUAL": "STARTMODE is MANUAL - run startCluster",
5918
+ "STOPPED": "the cluster was stopped here - run startCluster",
5919
+ "FAILED": "starting it failed - see the ilsvc log",
5920
+ }
5921
+
5895
5922
  def __str__(self) -> str:
5896
5923
  """사람이 읽는 한 줄 요약을 돌려준다.
5897
5924
 
5898
5925
  Returns:
5899
- str: 맡았는지와 자리. 형식은 고정이 아니므로 파싱하지 말 것.
5926
+ str: 맡았는지 · 띄웠는지와 자리. 형식은 고정이 아니므로 파싱하지 말 것.
5900
5927
  """
5928
+ if self.claimed and self.started:
5929
+ return "node added: claimed node[%d] ctrl port %d here and started its controller" % (self.nodeId, self.ctrlPort)
5901
5930
  if self.claimed:
5902
- return "node added: claimed node[%d] ctrl port %d here" % (self.nodeId, self.ctrlPort)
5931
+ return "node added: claimed node[%d] ctrl port %d here but did not start it: %s" % (
5932
+ self.nodeId, self.ctrlPort, self._WAIT_TEXT.get(self.wait, self.wait or "unknown"))
5903
5933
  return "node added: not claimed here (joinCluster on the service that should host it)"
5904
5934
 
5905
5935
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jetstream-api
3
- Version: 0.22.0
3
+ Version: 0.22.1
4
4
  Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
5
5
  Author: snowjeans
6
6
  License: Boost Software License - Version 1.0 - August 17th, 2003
@@ -60,6 +60,13 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
60
60
  ## 설치 방법
61
61
  pip install jetstream-api
62
62
 
63
+ ## 0.22.1 변경 - 노드 추가 결과에 컨트롤러 기동 여부 (자바 v2.18.1 와 같음, started · wait 는 짝 엔진 7.0.1.3602 이상)
64
+
65
+ - ``addNode`` 결과(``ILClusterNodeAddResult``)에 ``started`` · ``wait``(``is_started()``): 자리를 맡은 서비스가 컨트롤러를 **띄웠는가**와
66
+ 안 띄운 까닭(``MANUAL`` - 정의 STARTMODE 가 MANUAL 이라 :meth:`startCluster` 로 띄운다 · ``STOPPED`` - 사용자가 멈춰 둠 · ``FAILED`` -
67
+ 띄우다 실패, ilsvc 로그). 그 전 엔진은 이 칸을 주지 않아 맡았으면 띄운 것으로 본다(종전 동작).
68
+ - 문서: 클러스터 팔로워 노드에 보낸 생성 · 변경 · 삭제는 ``MIMQE_OPERATION_DENIED (STANDBY, leader=..)``, 조회 · 목록은 팔로워도 답한다.
69
+
63
70
  ## 0.22.0 변경 - 7 신규 오브젝트(쿼터 · 디스크 가드 · 토픽 · 클러스터) 관리를 Property v2(JSON)로 (자바 v2.18.0 와 같음, 짝 엔진 7.0.1.3601 이상)
64
71
 
65
72
  - **와이어**: 쿼터 · 디스크 가드 · 토픽 · 클러스터의 생성 · 조회 · 목록 · 변경 · 삭제가 새 요청 코드 3600~3604(본문 = UTF-8 JSON)로 간다.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jetstream-api"
7
- version = "0.22.0"
7
+ version = "0.22.1"
8
8
  description = "Python client API for iLink M.O.M. (Message Oriented Middleware)"
9
9
  authors = [{name = "snowjeans"}]
10
10
  readme = "README.md"
File without changes