jetstream-api 0.6.0__tar.gz → 0.6.2__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 (25) hide show
  1. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/PKG-INFO +1 -1
  2. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/__init__.py +1 -1
  3. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/admin.py +19 -7
  4. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/common.py +7 -7
  5. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/properties.py +33 -2
  6. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/jetstream_api.egg-info/PKG-INFO +1 -1
  7. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/pyproject.toml +1 -1
  8. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/LICENSE.txt +0 -0
  9. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/README.md +0 -0
  10. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/admintopic.py +0 -0
  11. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/connectivity.py +0 -0
  12. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/exception.py +0 -0
  13. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/msg.py +0 -0
  14. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/pattern.py +0 -0
  15. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/producer.py +0 -0
  16. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/py.typed +0 -0
  17. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/qmgr.py +0 -0
  18. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/topic.py +0 -0
  19. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/ilink/util.py +0 -0
  20. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/jetstream_api.egg-info/SOURCES.txt +0 -0
  21. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/jetstream_api.egg-info/dependency_links.txt +0 -0
  22. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/jetstream_api.egg-info/requires.txt +0 -0
  23. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/jetstream_api.egg-info/top_level.txt +0 -0
  24. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/setup.cfg +0 -0
  25. {jetstream_api-0.6.0 → jetstream_api-0.6.2}/tests/test_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jetstream-api
3
- Version: 0.6.0
3
+ Version: 0.6.2
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
@@ -1,6 +1,6 @@
1
1
  """iLink - Python client API for iLink M.O.M. (Message Oriented Middleware)."""
2
2
 
3
- __version__ = "0.6.0"
3
+ __version__ = "0.6.2"
4
4
 
5
5
  # --- Admin / Service ---
6
6
  from .admin import ILAdminService, ILAdminQmgr, ILLogBrowser, ILQueueBrowser
@@ -3430,9 +3430,13 @@ class ILAdminQmgr:
3430
3430
  ILOperationException: 엔진이 6.3.3(rev 3067) 미만일 때.
3431
3431
 
3432
3432
  Note:
3433
- 유량 통계는 6.3.4 에서 들어왔다. 구엔진은 요청 코드 자체를 모르므로
3434
- 응답이 없거나 엉뚱한 리포트가 온다. 무엇이 잘못됐는지 알 수 없는
3435
- 타임아웃 대신 **왜 안 되는지 적힌 예외**로 끊는다.
3433
+ 배열 요청(3344)은 엔진 6.3.3.3067 에서 들어왔다. 그 미만 엔진은 이
3434
+ 코드를 모르고 ``MIMQE_INVALID_REQ_CODE`` 를 돌려준다 - 즉시 응답이라
3435
+ 행이 나지는 않지만(6.3.1 에서 7ms, 실측), 호출자에게는 **왜 안 되는지
3436
+ 적힌 예외**가 더 쓸모가 있다.
3437
+
3438
+ **단건 조회에는 이 게이트를 걸지 않는다.** 요청 코드 3201 은 훨씬
3439
+ 오래된 코드라 6.3.1.2813 에서도 정상 응답한다(실측).
3436
3440
  """
3437
3441
  if 0 < self.revision < ILC.QUEUE_FLOW_ARRAY_MIN_REVISION:
3438
3442
  raise ILOperationException(
@@ -3793,14 +3797,19 @@ class ILAdminQmgr:
3793
3797
  ``getIncomingDataSize()`` / ``getOutgoingDataSize()`` / ``getDepth()``).
3794
3798
 
3795
3799
  Raises:
3796
- ILOperationException: 그런 큐가 없을 때. 또는 엔진이 6.3.4(rev 3299)
3797
- 미만이라 유량 통계 자체를 지원하지 않을 때.
3800
+ ILOperationException: 그런 큐가 없을 때.
3798
3801
  ILException: 통신 실패.
3799
3802
 
3800
3803
  Note:
3801
3804
  **한 시점의 스냅샷**이다. 시간에 따른 추이를 보려면
3802
3805
  :meth:`getQueueFlowInfoArray` 를 쓴다.
3803
3806
 
3807
+ **구엔진에서도 동작한다.** 요청 코드 3201 은 오래된 코드라
3808
+ 6.3.1.2813 / 6.3.2.2856 / 6.3.3.3155 / 7.0.1.3366 네 엔진 모두에서
3809
+ 유입/유출 건수와 깊이를 정상으로 받았다(실측: put 5건 후
3810
+ in=5 out=0 depth=5). 여러 구간을 한 번에 보는
3811
+ :meth:`getQueueFlowInfoArray` 만 6.3.3(rev 3067) 이상이 필요하다.
3812
+
3804
3813
  .. note:: 값은 **1초 주기**로 채워진다
3805
3814
 
3806
3815
  유량 스냅샷은 서버가 1초마다 적재한다. 그래서 갓 만든 큐도 **조회
@@ -3861,8 +3870,11 @@ class ILAdminQmgr:
3861
3870
  실제 기록이 그보다 적으면 0 으로 채운 항목이 들어간다.
3862
3871
 
3863
3872
  Raises:
3864
- ILOperationException: 그런 큐가 없을 때. 또는 엔진이 6.3.4(rev 3299)
3865
- 미만이라 유량 통계 자체를 지원하지 않을 때.
3873
+ ILOperationException: 그런 큐가 없을 때. 또는 엔진이 6.3.3(rev 3067)
3874
+ 미만이라 **배열** 조회(요청 코드 3344)를 지원하지 않을 때.
3875
+ 단건 :meth:`getQueueFlowInfo` 는 그보다 오래된 엔진에서도
3876
+ 동작하므로, 구엔진까지 지원해야 하면
3877
+ ``ILRC.MIMQE_NOT_SUPPORTED`` 를 받았을 때 단건으로 폴백하라.
3866
3878
  ILException: 통신 실패.
3867
3879
 
3868
3880
  Note:
@@ -734,15 +734,15 @@ class ILC:
734
734
  #: 큐 속성이 2200 레이아웃으로 바뀐 **첫 엔진 리비전**(6.3.3.3155).
735
735
  #: 이 값보다 낮으면 4096 레이아웃으로 주고받아야 한다.
736
736
  QUEUE_LAYOUT_MIN_REVISION = 3155
737
- #: 구버전(4096) 블롭에서 공통 접두가 끝나고 레이아웃이 갈리는 지점.
738
- #: 큐 **유량 통계** 조회가 들어온 첫 엔진 리비전(6.3.4.3299).
739
- # 큐 유량 통계 **배열** 조회(요청 3344)가 들어온 첫 리비전(6.3.3.3067).
740
- # 단건 조회(3201)는 훨씬 오래된 코드라 6.3.1.2813 에서도 응답한다(실측).
737
+ #: 큐 유량 통계 **배열** 조회(요청 코드 3344)가 들어온 첫 엔진 리비전(6.3.3.3067).
738
+ #: 단건 조회(3201)는 훨씬 오래된 코드라 6.3.1.2813 에서도 정상 응답한다(실측) -
739
+ #: 이 기준은 **배열에만** 적용된다.
741
740
  QUEUE_FLOW_ARRAY_MIN_REVISION = 3067
742
- # 큐관리자 속성의 토픽 로거 구간(20바이트)이 들어온 첫 리비전(7.1.1.3283).
743
- # 그 자리는 구엔진의 volumeMonitorForceReloadSize 다 - 값을 실어 보내면
744
- # 구엔진 imqlsr 가 SIGFPE 로 죽는다(6.3.1.2813 실측).
741
+ #: 큐관리자 속성의 **토픽 로거** 구간(20바이트)이 들어온 첫 엔진 리비전(7.1.1.3283).
742
+ #: 그 자리는 구엔진의 ``volumeMonitorForceReloadSize`` 다 - 값을 실어 보내면
743
+ #: 구엔진 imqlsr 가 SIGFPE 로 죽는다(6.3.1.2813 실측).
745
744
  TOPIC_LOGGER_MIN_REVISION = 3283
745
+ #: 구버전(4096) 블롭에서 공통 접두가 끝나고 레이아웃이 갈리는 지점.
746
746
  QUEUE_LEGACY_DIVERGE_OFFSET = 1772
747
747
  #: 구버전(4096) 블롭에서 incomingDelayDepth 가 있는 위치. 현행과 같다.
748
748
  QUEUE_LEGACY_TAIL_OFFSET = 2142
@@ -28,6 +28,9 @@ def _format_millis(value: int, fmt: str) -> str:
28
28
 
29
29
  # 구엔진(rev 3283 미만)의 StorageVolumeMonitor ForceReloadSize 기본값.
30
30
  LEGACY_FORCE_RELOAD_SIZE = 1048576
31
+ # 구엔진(6.3.x)의 TCPListener SessionPerThread 기본값.
32
+ # 0 이면 imqlsr 가 nSessionCnt / nSessionPerThread 에서 0 나눗셈으로 죽는다.
33
+ LEGACY_SESSION_PER_THREAD = 10
31
34
 
32
35
  def _spec_maxlen(n):
33
36
  """``n`` 바이트 이하 문자열 규칙."""
@@ -2479,6 +2482,7 @@ class ILQmgrProperty(_AutoAccessor):
2479
2482
  self.volumeMonitorInterval = 10
2480
2483
  self.volumeMonitorSizeLimit = 10485760
2481
2484
  self._volumeTailRaw = None
2485
+ self._sessionPerThreadRaw = None
2482
2486
  self.logLevelSystem = 4
2483
2487
  self.logFileSizeSystem = 4194304
2484
2488
  self.logFileCountSystem = 5
@@ -2628,6 +2632,11 @@ class ILQmgrProperty(_AutoAccessor):
2628
2632
  offset += 2
2629
2633
  self.aclType = ba_pick_int(ba, offset, 2)
2630
2634
  offset += 2
2635
+ # v6.3.4 에서 async 를 없애며 sessionPerThread 를 뺐지만
2636
+ # **구엔진(6.3.x)에는 실재하는 필드**다. 0 을 보내면 imqlsr 가
2637
+ # nSessionCnt / nSessionPerThread 에서 죽는다(ManagerListener.h:129,
2638
+ # SIGFPE - 6.3.1 실측). 원본을 보관해 되돌려 쓴다.
2639
+ self._sessionPerThreadRaw = bytes(ba[offset:offset + 10])
2631
2640
  offset += 10
2632
2641
  self.deadLetterQueueName = ba_pick_string(ba, offset, 32)
2633
2642
  offset += 32
@@ -2692,7 +2701,14 @@ class ILQmgrProperty(_AutoAccessor):
2692
2701
  offset += 10
2693
2702
  ba_merge(self.recvWaitTimeout, ba, offset)
2694
2703
  offset += 10
2695
- offset += 20
2704
+ # v6.3.4 에서 async 를 없애며 acceptPoolSize/eventPoolSize 를 뺐지만
2705
+ # 구엔진(6.3.x)은 이 두 필드를 읽고 1~9 로 검증한다. 0 을 보내면
2706
+ # MIMQE_INVALID_ARGUMENT (AcceptPoolSize : 0) 로 거부된다(6.3.1 실측).
2707
+ # 자바는 v1.5.2 에서 같은 이유로 기본값 1 을 되살렸다 - 그것과 맞춘다.
2708
+ ba_merge(1, ba, offset)
2709
+ offset += 10
2710
+ ba_merge(1, ba, offset)
2711
+ offset += 10
2696
2712
  ba_merge(self.volumeMonitorInterval, ba, offset)
2697
2713
  offset += 10
2698
2714
  ba_merge(self.volumeMonitorSizeLimit, ba, offset)
@@ -2738,6 +2754,8 @@ class ILQmgrProperty(_AutoAccessor):
2738
2754
  offset += 2
2739
2755
  ba_merge(self.aclType, ba, offset)
2740
2756
  offset += 2
2757
+ # 구엔진에만 있는 sessionPerThread 자리 - 0 을 보내면 큐관리자가 죽는다
2758
+ session_offset = offset
2741
2759
  offset += 10
2742
2760
  ba_merge(self.deadLetterQueueName, ba, offset)
2743
2761
  offset += 32
@@ -2755,6 +2773,12 @@ class ILQmgrProperty(_AutoAccessor):
2755
2773
  else:
2756
2774
  # 새로 만든 객체라 받은 값이 없다 - 엔진 기본값을 쓴다
2757
2775
  ba_merge(LEGACY_FORCE_RELOAD_SIZE, ba, topic_offset)
2776
+ # 구엔진에만 있는 sessionPerThread 도 되돌려 준다
2777
+ raw2 = getattr(self, "_sessionPerThreadRaw", None)
2778
+ if raw2:
2779
+ ba[session_offset:session_offset + 10] = raw2
2780
+ else:
2781
+ ba_merge(LEGACY_SESSION_PER_THREAD, ba, session_offset)
2758
2782
  return bytes(ba)
2759
2783
 
2760
2784
  def get_status_string(self) -> str:
@@ -3649,7 +3673,14 @@ class ILServiceProperty(_AutoAccessor):
3649
3673
  offset += 10
3650
3674
  ba_merge(self.timeoutSocketRecv, ba, offset)
3651
3675
  offset += 10
3652
- offset += 20
3676
+ # v6.3.4 에서 async 를 없애며 acceptPoolSize/eventPoolSize 를 뺐지만
3677
+ # 구엔진(6.3.x) ilsvc 는 이 값으로 스레드 풀을 만든다
3678
+ # (ILinkServerMainClass.cpp:151, ServerListener.cpp:17). 0 이면 풀이 0개다.
3679
+ # 자바는 v1.5.2 에서 기본값 1 을 되살렸다 - 그것과 맞춘다.
3680
+ ba_merge(1, ba, offset)
3681
+ offset += 10
3682
+ ba_merge(1, ba, offset)
3683
+ offset += 10
3653
3684
  ba_merge(self.logLevelSystem, ba, offset)
3654
3685
  offset += 2
3655
3686
  ba_merge(self.logFileSizeSystem, ba, offset)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jetstream-api
3
- Version: 0.6.0
3
+ Version: 0.6.2
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jetstream-api"
7
- version = "0.6.0"
7
+ version = "0.6.2"
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
File without changes
File without changes