jetstream-api 0.12.0__tar.gz → 0.14.0__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 (27) hide show
  1. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/PKG-INFO +52 -1
  2. jetstream_api-0.12.0/jetstream_api.egg-info/PKG-INFO → jetstream_api-0.14.0/README.md +764 -763
  3. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/__init__.py +1 -1
  4. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/admin.py +6936 -6898
  5. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/connectivity.py +1954 -1869
  6. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/producer.py +2718 -2703
  7. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/qmgr.py +2328 -2331
  8. jetstream_api-0.12.0/README.md → jetstream_api-0.14.0/jetstream_api.egg-info/PKG-INFO +814 -713
  9. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/pyproject.toml +1 -1
  10. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/LICENSE.txt +0 -0
  11. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/_codec.py +0 -0
  12. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/admintopic.py +0 -0
  13. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/common.py +0 -0
  14. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/exception.py +0 -0
  15. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/msg.py +0 -0
  16. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/partitioner.py +0 -0
  17. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/pattern.py +0 -0
  18. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/properties.py +0 -0
  19. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/py.typed +0 -0
  20. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/topic.py +0 -0
  21. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/ilink/util.py +0 -0
  22. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/jetstream_api.egg-info/SOURCES.txt +0 -0
  23. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/jetstream_api.egg-info/dependency_links.txt +0 -0
  24. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/jetstream_api.egg-info/requires.txt +0 -0
  25. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/jetstream_api.egg-info/top_level.txt +0 -0
  26. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/setup.cfg +0 -0
  27. {jetstream_api-0.12.0 → jetstream_api-0.14.0}/tests/test_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jetstream-api
3
- Version: 0.12.0
3
+ Version: 0.14.0
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,57 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
60
60
  ## 설치 방법
61
61
  pip install jetstream-api
62
62
 
63
+ ## 0.14.0 변경 - 소켓 keepalive 탐침 타이머, NIO 커넥터 수신 기한 정합 (자바 v2.10.0 과 같음)
64
+
65
+ - **연결 소켓에 keepalive 탐침 타이머를 겁니다(유휴 60초 + 10초 간격 x 6회).** 엔진이 쓰는 값과 같습니다.
66
+ 지금까지는 `SO_KEEPALIVE` 만 켜고 타이머는 운영체제 기본에 맡겼습니다(리눅스 약 2시간 11분).
67
+ - **얻는 것은 주로 NAT · 방화벽 유휴 만료 방지입니다.** 60초마다 탐침이 흐르므로 중간 장비가 연결 상태를 지우지
68
+ 않습니다. 조용한 발행자가 밤새 붙어 있는 배치에서 제일 자주 걸립니다.
69
+ - 상대가 사라진 연결을 커널이 약 2분에 끊어 주는 것은 덤입니다. 다만 **라이브러리가 그것을 감지해 스스로 다시
70
+ 붙지는 않습니다** - 실패는 다음 요청에서 드러나고, 그건 이미 세션 타임아웃(기본 30초)이 덮습니다.
71
+ - **응용 요청이 아니라 커널 탐침입니다.** 엔진의 수신 타임아웃(`SOCKTIMEOUTRCV`)은 요청을 읽는 시계라
72
+ 탐침으로는 갱신되지 않습니다. 조용한 세션은 그 기한을 향해 그대로 늙습니다.
73
+ - **타이머를 걸지 못해도 연결은 그대로 씁니다.** 그때는 운영체제 기본 타이머로 동작합니다.
74
+ 결과는 `ilink.connectivity.keepalive_timer_state` 로 볼 수 있습니다(진단용).
75
+ - **NIO 커넥터(`TCPConnectorNIO`)의 수신 기한을 나머지와 같은 규칙으로 맞췄습니다.** 기한이 프레임 전체가 아니라
76
+ **소켓 읽기 하나마다**이고, `0` 이하면 끝없이 기다립니다. 0.13.0 까지는 헤더와 본문이 한 기한을 나눠 썼습니다.
77
+ - 송신 쪽은 전처럼 기한 하나를 씁니다. 조금씩만 나아가는 송신이 끝나지 않던 것을 0.7.4 에서 막은 것입니다.
78
+ - 이 커넥터는 `set_conn` 으로 직접 갈아 끼울 때만 쓰입니다. 기본 경로는 달라진 것이 없습니다.
79
+
80
+ ### keepalive 타이머가 실제로 걸리는 환경
81
+
82
+ 자바 클라이언트는 걸 수 있는 자리가 좁습니다. `TCP_KEEPIDLE` 계열이 `jdk.net.ExtendedSocketOptions`(자바 11 이상)에만
83
+ 있고, 윈도우는 그 판에서도 받지 않기 때문입니다.
84
+
85
+ | | 자바 8 | 자바 11 이상 |
86
+ |---|---|---|
87
+ | 윈도우 | 걸리지 않음 | **걸리지 않음** |
88
+ | 리눅스 · macOS | 걸리지 않음 | 걸림 |
89
+
90
+ **파이썬 클라이언트는 전 플랫폼에서 걸립니다.** 윈도우는 탐침 횟수가 운영체제 고정값(10회)이라 약 160초,
91
+ 그 밖은 60초 + 10초 x 6 = 약 2분입니다.
92
+
93
+ ## 0.13.0 변경 - 세션 타임아웃 기본값 30초, acks 값 검사, 수신 기한 수정 (자바 v2.9.0 과 같음)
94
+
95
+ - **세션 타임아웃 기본값이 경로마다 달라집니다.** 리더가 얼어붙어 응답이 오지 않으면 0.12.0 까지는 최대 10분을 매달렸습니다.
96
+ - 데이터 경로(`ILQmgr` / 큐 / 토픽): **600000 -> 30000**. 접속 대기 시간도 같은 값이라 페일오버 재접속이 빨라집니다.
97
+ - 관리 경로(`ILAdminService`): **600000 유지**. 엔진이 큐 관리자 정지 · 삭제 응답을 실제로 내려갈 때까지 붙들고, 토픽을 닫으며
98
+ 파티션마다 fsync 하느라 수 분이 걸릴 수 있습니다.
99
+ - 큐 `get(wait)` 은 전처럼 알아서 늘어납니다(대기 시간의 2배). 기본 대기 60초면 수신 상한이 120초라 **기본 동작은 그대로입니다**.
100
+ **무한 대기(`set_wait_msg_timeout_ms(-1)`)도 이제 같이 늘어납니다.** 무한 대기는 엔진에 60초를 주고 루프를 도는 것이라
101
+ 엔진이 쥐는 시간은 유한 대기와 같은데 전에는 예외로 두고 있었습니다. 기본값이 600000 일 때는 드러나지 않던 자리입니다.
102
+ - 전처럼 오래 기다리려면 `qmgr.set_session_timeout(600000)` 을 부르면 됩니다.
103
+ - **`spokeSwitchTo(key, timeoutSec)`** 는 엔진이 그 시간만큼 응답을 붙들기에, 그 호출 동안만 수신 상한을 `timeoutSec` 의 2배로
104
+ 올리고 되돌립니다.
105
+ - **수신 기한이 소켓 읽기 하나마다 걸립니다.** 프레임 전체의 기한이 아닙니다 - 응답이 조각으로 나뉘어 와도 다음 조각이 그 시간 안에
106
+ 오면 계속 받습니다(자바와 같은 규칙). 느린 회선의 큰 메시지가 파이썬에서만 끊기던 것이 사라집니다.
107
+ - 기한이 지나면 `MIMQE_WAIT_TIMEOUT` 입니다. 전에는 `MIMQE_INTERNAL_ERROR`("unhandled exception")로 나왔습니다.
108
+ - 세션 타임아웃 `0` 은 **끝없이 기다립니다**(자바와 같습니다). 전에는 곧바로 기한 초과였습니다.
109
+ - **`ILProducerConfig.acks` 는 0 과 1 만 받습니다.** 그 밖의 값은 `ValueError` 입니다(자바 `IllegalArgumentException` 과 짝).
110
+ 0.12.0 까지는 0 이 아닌 값을 모두 1 로 보정해 `acks=2` 같은 오타가 조용히 통과했습니다.
111
+ - 문서: 클러스터에서 `acks(1)` 은 팔로워 확인(HW)까지라는 것(= Kafka `acks=all`), 파티션이 많은 토픽에서는 그 대기가 봉투 안
112
+ 파티션마다 겹쳐 `requestTimeoutMs` 가 먼저 끝날 수 있다는 것, `removeSession` 이 반쯤 열린 연결을 푸는 수단이라는 것을 적었습니다.
113
+
63
114
  ## 0.12.0 변경 - 큐 전용 요청 코드(엔진 7.0.1.3431 이상) 자동 사용 (자바 v2.8.0 과 같음)
64
115
 
65
116
  - **앱 코드는 바꿀 것이 없습니다.** 엔진 판 줄이 7.x 이고 리비전이 3431 이상이면 클라이언트가 스스로 새 요청 코드를 씁니다.