jetstream-api 0.13.0__tar.gz → 0.15.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.
- {jetstream_api-0.13.0/jetstream_api.egg-info → jetstream_api-0.15.0}/PKG-INFO +66 -1
- jetstream_api-0.13.0/PKG-INFO → jetstream_api-0.15.0/README.md +799 -784
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/__init__.py +3 -1
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/admin.py +7 -7
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/common.py +4 -1
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/connectivity.py +82 -13
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/properties.py +102 -36
- jetstream_api-0.13.0/README.md → jetstream_api-0.15.0/jetstream_api.egg-info/PKG-INFO +849 -734
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/pyproject.toml +1 -1
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/LICENSE.txt +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/_codec.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/admintopic.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/exception.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/msg.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/partitioner.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/pattern.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/producer.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/py.typed +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/qmgr.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/topic.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/ilink/util.py +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/jetstream_api.egg-info/SOURCES.txt +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/jetstream_api.egg-info/dependency_links.txt +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/jetstream_api.egg-info/requires.txt +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/jetstream_api.egg-info/top_level.txt +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.0}/setup.cfg +0 -0
- {jetstream_api-0.13.0 → jetstream_api-0.15.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.
|
|
3
|
+
Version: 0.15.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,71 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
|
|
|
60
60
|
## 설치 방법
|
|
61
61
|
pip install jetstream-api
|
|
62
62
|
|
|
63
|
+
## 0.15.0 변경 - 큐의 "파티션" 이 "세그먼트" 가 됩니다 (자바 v2.11.0 과 같음)
|
|
64
|
+
|
|
65
|
+
- **`ILQueueProperty.numberOfPartition` 이 `numberOfSegment` 로 바뀝니다.** 값도 자리도 그대로이고 **이름만** 바뀝니다.
|
|
66
|
+
- **옛 이름은 그대로 돕니다.** `numberOfPartition` 은 같은 값을 가리키는 별칭으로 남습니다 - 읽기도 쓰기도 되고,
|
|
67
|
+
`getNumberOfPartition()` / `setNumberOfPartition()` 도 전처럼 동작합니다. **고치지 않아도 되는 변경입니다.**
|
|
68
|
+
- `__str__` 라벨이 `NUM-PARTITION` 에서 `NUM-SEGMENT` 로 바뀝니다. 이 출력을 정규식으로 읽는 곳이 있으면 그곳만 봐 주세요.
|
|
69
|
+
- **왜 바꾸는지**: 같은 "파티션" 이라는 말이 토픽과 큐에서 **정반대** 를 뜻하고 있었습니다.
|
|
70
|
+
|
|
71
|
+
| 말 | 뜻 |
|
|
72
|
+
|---|---|
|
|
73
|
+
| 파티션 | **분산 처리 단위** (토픽. 리더 · 팔로워가 붙는다) |
|
|
74
|
+
| 세그먼트 | **한 노드 안의 저장 칸** (큐. 파일 1~N, 메모리, 공유메모리) |
|
|
75
|
+
|
|
76
|
+
토픽의 `PARTITIONS` 와 큐의 `PARTITION` 이 한 글자 차이로 서로 다른 개념이었습니다. 엔진이 큐에 진짜 분산 파티션을
|
|
77
|
+
들이기 전에 옛 이름을 비워 두는 것입니다.
|
|
78
|
+
- **와이어는 달라지지 않습니다.** 큐 속성 직렬화는 위치 기반 고정폭이라 **속성 이름이 실리지 않습니다.** 어느 이름으로
|
|
79
|
+
넣든 나가는 2200바이트(구엔진용 4096 레이아웃도)가 같습니다. 그래서 이 판은 **엔진 판을 가리지 않습니다.**
|
|
80
|
+
- **엔진 쪽 이름도 같이 바뀝니다**(ilsc `PARTITION(n)` -> `SEGMENT(n)`, `VIEW QUEUE` 머리글, 컨피그 XML
|
|
81
|
+
`Storage/@NumberOfPartition` -> `@NumberOfSegment`). 엔진도 옛 이름을 계속 받습니다.
|
|
82
|
+
- ★ **ilsc 에서 `SEGMENT` 를 쓰려면 엔진도 같이 올려야 합니다.** 클라이언트만 올린 환경에서는 엔진이 그 키워드를
|
|
83
|
+
모릅니다 - 그때도 큐는 정상 동작하고, ilsc 에서 `PARTITION` 을 쓰면 됩니다.
|
|
84
|
+
- **큐 실시간 정보의 "파티션" 목록도 같이 바뀝니다.** `getQueueRealTimeInfo()` 가 돌려주는
|
|
85
|
+
`ILQueueRealTimeInfo` 의 `partitions` 가 **`segments`** 가 되고, 항목 클래스 `PartitionItem` 은 **`SegmentItem`** 이 됩니다.
|
|
86
|
+
- 여기도 **옛 이름이 그대로 돕니다.** `partitions` 는 같은 목록을 가리키는 별칭이고(`getPartitions()` / `setPartitions()` 포함),
|
|
87
|
+
`PartitionItem` 은 `SegmentItem` 과 **같은 클래스 객체**라 `isinstance` 도 전처럼 통합니다.
|
|
88
|
+
- ★ **토픽의 `getPartitions()` 와는 뜻이 다릅니다.** 지금까지 두 클래스에서 **같은 이름이 정반대**를 뜻하고 있었습니다 -
|
|
89
|
+
토픽 쪽은 분산 처리 단위, 큐 실시간 정보 쪽은 한 노드 안의 저장 칸입니다. 이번 개명의 목적이 바로 이것입니다.
|
|
90
|
+
- `__str__` 머리글이 `Partitions ---` 에서 `Segments ---` 로 바뀝니다(엔진 `VIEW QUEUE` 가 `SEGMENTS(` 로 나가는 것과 맞춥니다).
|
|
91
|
+
- `ILC.MIMQ_VO_SEGMENT_ITEM_LEN` 이 생기고 `ILC.MIMQ_VO_PARTITION_ITEM_LEN` 은 같은 값(128)의 별칭으로 남습니다.
|
|
92
|
+
- **자바 클라이언트는 클래스 이름을 바꾸지 않습니다**(`PartitionItem` 유지, `getSegments()` 추가). 자바는 제네릭이 불변이라
|
|
93
|
+
`ArrayList<PartitionItem>` 을 별칭으로 덮을 수 없고, 사본으로 옛 접근자를 만들면 목록 수정이 조용히 사라지기 때문입니다.
|
|
94
|
+
파이썬은 클래스 별칭이 완전해서 이런 제약이 없습니다.
|
|
95
|
+
- **없어진 이름은 하나도 없습니다.** 이 판은 **추가와 별칭뿐**입니다.
|
|
96
|
+
- **디스크 파일 이름은 그대로입니다** (`QUEUE.P001`). 저장 레이아웃 자체라 바꾸지 않습니다.
|
|
97
|
+
|
|
98
|
+
## 0.14.0 변경 - 소켓 keepalive 탐침 타이머, NIO 커넥터 수신 기한 정합 (자바 v2.10.0 과 같음)
|
|
99
|
+
|
|
100
|
+
- **연결 소켓에 keepalive 탐침 타이머를 겁니다(유휴 60초 + 10초 간격 x 6회).** 엔진이 쓰는 값과 같습니다.
|
|
101
|
+
지금까지는 `SO_KEEPALIVE` 만 켜고 타이머는 운영체제 기본에 맡겼습니다(리눅스 약 2시간 11분).
|
|
102
|
+
- **얻는 것은 주로 NAT · 방화벽 유휴 만료 방지입니다.** 60초마다 탐침이 흐르므로 중간 장비가 연결 상태를 지우지
|
|
103
|
+
않습니다. 조용한 발행자가 밤새 붙어 있는 배치에서 제일 자주 걸립니다.
|
|
104
|
+
- 상대가 사라진 연결을 커널이 약 2분에 끊어 주는 것은 덤입니다. 다만 **라이브러리가 그것을 감지해 스스로 다시
|
|
105
|
+
붙지는 않습니다** - 실패는 다음 요청에서 드러나고, 그건 이미 세션 타임아웃(기본 30초)이 덮습니다.
|
|
106
|
+
- **응용 요청이 아니라 커널 탐침입니다.** 엔진의 수신 타임아웃(`SOCKTIMEOUTRCV`)은 요청을 읽는 시계라
|
|
107
|
+
탐침으로는 갱신되지 않습니다. 조용한 세션은 그 기한을 향해 그대로 늙습니다.
|
|
108
|
+
- **타이머를 걸지 못해도 연결은 그대로 씁니다.** 그때는 운영체제 기본 타이머로 동작합니다.
|
|
109
|
+
결과는 `ilink.connectivity.keepalive_timer_state` 로 볼 수 있습니다(진단용).
|
|
110
|
+
- **NIO 커넥터(`TCPConnectorNIO`)의 수신 기한을 나머지와 같은 규칙으로 맞췄습니다.** 기한이 프레임 전체가 아니라
|
|
111
|
+
**소켓 읽기 하나마다**이고, `0` 이하면 끝없이 기다립니다. 0.13.0 까지는 헤더와 본문이 한 기한을 나눠 썼습니다.
|
|
112
|
+
- 송신 쪽은 전처럼 기한 하나를 씁니다. 조금씩만 나아가는 송신이 끝나지 않던 것을 0.7.4 에서 막은 것입니다.
|
|
113
|
+
- 이 커넥터는 `set_conn` 으로 직접 갈아 끼울 때만 쓰입니다. 기본 경로는 달라진 것이 없습니다.
|
|
114
|
+
|
|
115
|
+
### keepalive 타이머가 실제로 걸리는 환경
|
|
116
|
+
|
|
117
|
+
자바 클라이언트는 걸 수 있는 자리가 좁습니다. `TCP_KEEPIDLE` 계열이 `jdk.net.ExtendedSocketOptions`(자바 11 이상)에만
|
|
118
|
+
있고, 윈도우는 그 판에서도 받지 않기 때문입니다.
|
|
119
|
+
|
|
120
|
+
| | 자바 8 | 자바 11 이상 |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| 윈도우 | 걸리지 않음 | **걸리지 않음** |
|
|
123
|
+
| 리눅스 · macOS | 걸리지 않음 | 걸림 |
|
|
124
|
+
|
|
125
|
+
**파이썬 클라이언트는 전 플랫폼에서 걸립니다.** 윈도우는 탐침 횟수가 운영체제 고정값(10회)이라 약 160초,
|
|
126
|
+
그 밖은 60초 + 10초 x 6 = 약 2분입니다.
|
|
127
|
+
|
|
63
128
|
## 0.13.0 변경 - 세션 타임아웃 기본값 30초, acks 값 검사, 수신 기한 수정 (자바 v2.9.0 과 같음)
|
|
64
129
|
|
|
65
130
|
- **세션 타임아웃 기본값이 경로마다 달라집니다.** 리더가 얼어붙어 응답이 오지 않으면 0.12.0 까지는 최대 10분을 매달렸습니다.
|