Skip to content
Open
Changes from 1 commit
Commits
Show all changes
812 commits
Select commit Hold shift + click to select a range
1687244
[improve][offload] Extend the offload policies to allow specifying mo…
zymap Jul 18, 2023
f5553a2
[fix][build] Upgrade PyYaml version to 6.0.1 (#20831)
yaalsn Jul 20, 2023
5d0aa56
[improve] [ws] add cryptoKeyReaderFactoryClassName into the file webs…
poorbarcode Jul 20, 2023
514fa60
[fix][sec] Suppress addressed CVE-2023-2976 in clickhouse-jdbc-0.4.6-…
JooHyukKim Jul 20, 2023
aa4fef2
[fix][broker] Fix direct memory leak by delayed index OutOfDirectMemo…
mattisonchao Jul 20, 2023
ac94296
[improve][broker] Follow up #4196 use `PulsarByteBufAllocator` handle…
mattisonchao Jul 20, 2023
d5f97bf
[improve][broker] Add broker interceptor conf (#20719)
crossoverJie Jul 21, 2023
9b6a123
[fix][broker] Inconsistent behaviour for topic auto_creation (#20843)
mattisonchao Jul 21, 2023
b8e6948
[fix][broker] Broker failed to load v1 namespace resources cache (#20…
rdhabalia Jul 21, 2023
9ccc562
[fix][broker] Pass `bytesToRead` when reading compacted entries (#20850)
coderzc Jul 22, 2023
ebfef6d
[optimize][admin]Enhancing Transaction Buffer Stats and Introducing T…
liangyepianzhou Jul 22, 2023
54f0ca1
[cleanup][io] Cleanup Kafka connector (#20721)
cbornet Jul 22, 2023
e7ae9e2
[fix][broker] Fix potential OOM due to client use sasl authentication…
315157973 Jul 23, 2023
3c82d27
[fix][broker] Fix the built-in admin failed to delete a topic with a …
BewareMyPower Jul 23, 2023
9256407
[improve][broker] Avoid print redirect exception log when get list fr…
Demogorgon314 Jul 23, 2023
4ccb5bb
[improve][broker] Add the MessageExpirer interface to make code clear…
BewareMyPower Jul 23, 2023
69d7a2b
[improve][broker] Add broker filter sync method back to guarantee the…
Demogorgon314 Jul 24, 2023
563f929
[fix][broker] Fix inconsensus namespace policies by `getPoliciesIfCac…
mattisonchao Jul 25, 2023
3f63768
[fix][broker] Avoid infinite bundle unloading (#20822)
Demogorgon314 Jul 25, 2023
b12dbe7
[improve][cli] Better error message for pulsar-admin schema upload (#…
tisonkun Jul 26, 2023
e55ed58
[improve][broker] Add annotation for topic compaction strategy (#20858)
Demogorgon314 Jul 26, 2023
362c4f4
[fix][broker] Gracefully shutdown does not work with admin cli in sta…
JooHyukKim Jul 26, 2023
ee47b92
[improve][ci] Add "pip" into the scope of the pull request title chec…
poorbarcode Jul 26, 2023
ffb9d30
[fix][doc] Fix links to find older PIPs (#20882)
asafm Jul 26, 2023
a0372f4
[fix][broker] Fix IndexOutOfBoundsException in the CompactedTopicUtil…
coderzc Jul 26, 2023
5d72615
[pip][design] PIP-279: Reformat property in generateResponseWithEntry…
StevenLuMT Jul 28, 2023
9be0b52
[fix][broker] In replication scenario, remote consumer could not be r…
poorbarcode Jul 28, 2023
ca01447
[improve][txn]Add log when can't send TcClientConnectRequest to broke…
liangyepianzhou Jul 31, 2023
001b134
[improve][sql] Fix the wrong format of the logs (#20907)
crossoverJie Jul 31, 2023
4349e9f
[fix][broker] fix MessageDeduplication throw NPE when enable broker d…
lifepuzzlefun Aug 1, 2023
782e91f
[fix] [ml] fix discontinuous ledger deletion (#20898)
poorbarcode Aug 1, 2023
c0f23eb
[fix][build] Fix generating javadoc issue (#20922)
Technoboy- Aug 3, 2023
69298da
[fix][client] Fix perf-producer get OOM with high publish latency (#2…
codelipenghui Aug 3, 2023
2ab184e
[improve][doc] improve the wiki Pulsar Improvement Proposal (PIP) (#2…
poorbarcode Aug 4, 2023
9862884
[fix][test] Fix flaky test `testCloseTransactionBufferWhenTimeout` an…
Technoboy- Aug 11, 2023
e41883e
[fix][broker]Check that the super user role is in the MultiRolesToken…
tuteng Aug 11, 2023
d9538ea
[improve][broker] Improve performance of `StatsOutputStream` by using…
JooHyukKim Aug 12, 2023
64cd753
[improve][bk] Improve getIsolationGroup by avoid creating arrayList (…
AnonHxy Aug 12, 2023
499eef6
[feat][build] Use git-archive to generate source release (#20981)
tisonkun Aug 13, 2023
980dfc8
[improve][cli] Add some checks for topic-level `setOffloadPolicies` (…
Technoboy- Aug 14, 2023
bafc827
[fix][broker] Fix http error message of Bookie rack placement config …
1Jack2 Aug 14, 2023
75d4d82
[cleanup][admin] Do not print full stacktrace when get partitioned me…
Demogorgon314 Aug 14, 2023
63d9eaf
[fix][broker] Fix incorrect number of read compacted entries (#20978)
coderzc Aug 14, 2023
3ab420c
[fix][broker] Fix message loss during topic compaction (#20980)
coderzc Aug 14, 2023
9127d89
[pip][design] PIP-281: Add notifyError method on PushSource (#20807)
shibd Aug 15, 2023
d6734b7
[fix][io] Update test certs for Elasticsearch (#21001)
michaeljmarshall Aug 16, 2023
d014713
[pip][design] PIP 289: Secure Pulsar Connector Configuration (#20903)
michaeljmarshall Aug 16, 2023
bfde0de
[feat][io] Support configuration secret interpolation (#20901)
michaeljmarshall Aug 16, 2023
0cb1c78
[fix][broker] Fix get outdated compactedTopicContext after compaction…
coderzc Aug 16, 2023
4a9fec6
[fix][broker] Fix consumers are not redirected to migrated cluster (#…
vineeth1995 Aug 18, 2023
3160b76
[fix][test] fix flaky testSplitBundleAdminApi (#21019)
heesung-sohn Aug 18, 2023
4facdad
[fix][broker] Fix incorrect unack msk count when dup ack a message (#…
Technoboy- Aug 18, 2023
0daa46d
[fix][build] Lombok 1.8.28 (#21007)
merlimat Aug 19, 2023
d06cda6
[improve][proxy] Support disabling metrics endpoint (#21031)
michaeljmarshall Aug 19, 2023
00ca6aa
[fix][client] Fix RawReader hasMessageAvailable returns true when no …
Technoboy- Aug 20, 2023
7c96a36
[fix] [admin] Fix get topic stats fail if a subscription catch up con…
poorbarcode Aug 20, 2023
deeb8a2
[fix][meta] Fix deadlock in AutoRecovery. (#21010)
horizonzy Aug 21, 2023
976a580
[improve][meta] Improve fault tolerance of blocking calls by supporti…
mattisonchao Aug 21, 2023
f2f0bf4
[fix][broker] fix ModularLoadManagerImpl always delete active bundle-…
lifepuzzlefun Aug 21, 2023
dbbaddb
[improve][pip] PIP-293: Delete config `disableBrokerInterceptors` (#2…
Technoboy- Aug 21, 2023
43cd86d
[fix][broker] Fix compaction subscription delete by inactive subscrip…
lifepuzzlefun Aug 21, 2023
3eb9610
[fix] [doc] Update BookKeeper metadataServiceUri doc (#20909)
hangc0276 Aug 21, 2023
0d25e9a
[improve][broker] PIP-293: Delete config disableBrokerInterceptors (…
Technoboy- Aug 21, 2023
ee91edc
[improve][client] Add backoff for `seek` (#20963)
Technoboy- Aug 21, 2023
4634311
[improve][io] Improve kinesis connector config. (#21004)
shibd Aug 22, 2023
9e2195c
[fix][broker] Fix can't stop phase-two of compaction even though mess…
coderzc Aug 22, 2023
d3a6df3
[fix][broker] Fix potential case cause retention policy not working o…
Technoboy- Aug 22, 2023
c1b0454
[fix][broker]Delete subscription and disconnect replicators after top…
vineeth1995 Aug 22, 2023
e951cd0
[improve][broker] Removing webURL check null (#21043)
AnonHxy Aug 23, 2023
4f9b199
[refactor][cli] [PIP-280] Create new pulsar-cli-utils module (#20782)
JooHyukKim Aug 23, 2023
faa2d3d
[improve] [pip] PIP-290 Provide a way to implement WSS E2E encryption…
poorbarcode Aug 23, 2023
30073db
[fix] [broker] Producer is blocked on creation because backlog exceed…
heesung-sohn Aug 24, 2023
c05954e
[fix][broker] Use MessageDigest.isEqual when comparing digests (#21061)
Crispy-fried-chicken Aug 24, 2023
07eef59
[feat][ws] PIP-290 Make WSS support E2E encryption (#20958)
poorbarcode Aug 25, 2023
db20035
[fix] [bk] Correctct the bookie info after ZK client is reconnected (…
poorbarcode Aug 25, 2023
e0c481e
[fix][broker] Fix typos lister -> listener (#21068)
Aug 25, 2023
bb9c9b4
[fix][broker] Make sure all inflight writes have finished before com…
coderzc Aug 28, 2023
671cfb4
[fix][misc] Bump broker okio version to 3.4.0 (#21064)
mattisonchao Aug 28, 2023
d099ac4
[improve] [broker] Improve cache handling for partitioned topic metad…
poorbarcode Aug 28, 2023
6ff83b6
[fix][misc] Bump GRPC version to 1.55.3 to fix CVE (#21057)
mattisonchao Aug 29, 2023
eb2e3a2
[fix][client] Fix consumer can't consume resent chunked messages (#21…
RobertIndie Aug 29, 2023
eded9f1
[improve][doc] Add stronger Security Policy Language to README (#21066)
dave2wave Aug 30, 2023
dab5b2f
[fix][build] Upgrade Guava to 32.1.2-jre (#21090)
Aug 30, 2023
53ffe81
[refactor][cli] PIP-280 Add pulsar-cli-utils to core-modules profile …
JooHyukKim Aug 30, 2023
99e3fea
[fix][client] Fix cannot retry chunk messages and send to DLQ (#21048)
RobertIndie Aug 30, 2023
4a87c64
[fix] [broker] remove bundle-data in local metadata store. (#21078)
thetumbled Aug 31, 2023
b0b13bc
[fix][broker]Fix chunked messages will be filtered by duplicating (#2…
liangyepianzhou Aug 31, 2023
f1c8684
[fix][io] Allow setting sourceType in config file (#19836)
alpreu Aug 31, 2023
ba0f2ba
[fix][auto-recovery] Improve to the ReplicaitonWorker performance by …
horizonzy Aug 31, 2023
f35d3e0
[fix] [broker] consider iowait as idle. (#19110)
thetumbled Aug 31, 2023
eedbdb1
[fix][client] Fix logging problem in pulsar client (#21094)
Shawyeok Aug 31, 2023
7ecb93c
[fix][io] Fix --retain[-key]-ordering not working error for sink (#21…
jiangpengcheng Aug 31, 2023
64d006b
[fix][fn] Fix ProducerConfig cannot update error (#21037)
jiangpengcheng Aug 31, 2023
843b830
[improve] [ml] Persist mark deleted ops to ZK if create cursor ledger…
poorbarcode Aug 31, 2023
0956def
[improve][pip] PIP-264: Enhanced OTel-based metric system (#21080)
asafm Sep 1, 2023
835e9b6
[improve][broker] Make read compacted entries support maxReadSizeByte…
coderzc Sep 1, 2023
a25125d
[improve][pip] Implement getLastMessageIds API for Reader (#21052)
liangyepianzhou Sep 1, 2023
927d1b2
[fix][broker] Fix unsubscribe non-durable subscription error (#21099)
Technoboy- Sep 1, 2023
a1405ea
[fix][broker] Fix deleting topic not delete the related topic policy …
Technoboy- Sep 1, 2023
cb24ab0
[improve][pip] Replace reader with table view in the topic policy ser…
mattisonchao Sep 3, 2023
59a8e72
[fix][client] Avoid ack hole for chunk message (#21101)
liangyepianzhou Sep 4, 2023
e59c850
[fix][broker] Avoid splitting one batch message into two entries in S…
Demogorgon314 Sep 4, 2023
2921a41
[fix][broker] Fix write duplicate entries into the compacted ledger a…
coderzc Sep 4, 2023
b26ee8a
[fix][broker] Cleanup correctly heartbeat bundle ownership when handl…
Demogorgon314 Sep 4, 2023
abd7bfa
[fix] [broker] Fix isolated group not work problem. (#21096)
horizonzy Sep 5, 2023
35bb021
[fix][client] Fix repeat consume when using n-ack and batched message…
poorbarcode Sep 5, 2023
29addaa
[fix][fn] Fix the --batch-builder not working error for functions (#2…
jiangpengcheng Sep 5, 2023
c675a3d
[fix][broker] revert remove duplicate topics name when deleteNamespac…
TakaHiR07 Sep 5, 2023
674c52a
[fix][proxy] Fix Proxy 502 gateway error when it is configured with K…
Apurva007 Sep 5, 2023
209f222
[cleanup][misc] Delete .github/ISSUE_TEMPLATE/pip.md (#21120)
asafm Sep 6, 2023
88231f7
[improve][pip] PIP-297: Support terminating Function & Connector with…
RobertIndie Sep 6, 2023
dfc7bac
[improve] [broker] Improve logs for troubleshooting (#21141)
poorbarcode Sep 6, 2023
3bbd5a3
[fix][broker] Fix web tls url null cause NPE (#21137)
Technoboy- Sep 7, 2023
d890432
[improve][pip] PIP-277: Add `current` option in the Clusters list cmd…
Technoboy- Sep 7, 2023
3cb7926
[fix][test]Flaky test testMaxPendingChunkMessages (#21103)
liangyepianzhou Sep 7, 2023
d1f8f96
[improve][cli] Add current option in the Clusters list cmd (#21139)
Technoboy- Sep 7, 2023
e5cf216
[cleanup][build] Bumped version to 3.2.0-SNAPSHOT (#21147)
Technoboy- Sep 8, 2023
e9d1d99
[improve] [doc] Add doc for customized util class (#21110)
thetumbled Sep 9, 2023
9f12ace
[improve][broker] Upgrade bookkeeper to 4.16.3 (#21146)
zymap Sep 11, 2023
6e8bf93
[fix][broker] Fix unack count when mixing non batch index and batch i…
erobot Sep 11, 2023
550476f
[improve] [bookie] Enable forceAllowCompaction by default (#21130)
hangc0276 Sep 11, 2023
f2b9a3f
[fix] [client] fix same producer/consumer use more than one connectio…
poorbarcode Sep 11, 2023
fc86f3b
[fix][broker] fix UniformLoadShedder seleet wrong overloadbroker and …
aloyszhang Sep 12, 2023
d00a35e
[improve][client] Implement getLastMessageIds API for Reader (#21051)
liangyepianzhou Sep 12, 2023
b13407d
[cleanup][monitor] Remove metric `topic_load_times` (#21167)
Technoboy- Sep 12, 2023
65706c6
[improve] [broker] improve read entry error log for troubleshooting (…
poorbarcode Sep 13, 2023
af20a8a
[fix] [bookie] Fix RocksDB configuration (#21157)
hangc0276 Sep 13, 2023
bda16b6
[fix] [broker] Make specified producer could override the previous on…
poorbarcode Sep 13, 2023
5918efd
[fix][broker] Fix missing generate some metrics in BrokerOperabilityM…
Technoboy- Sep 14, 2023
39f2d1d
[improve] [bk] Update the document of diskUsageWarnThreshold (#21142)
hangc0276 Sep 14, 2023
1ac19fc
[improve][io] PIP-297: Support terminating Function & Connector with …
RobertIndie Sep 14, 2023
b10eed6
[improve] [broker] disable balancing based on DirectMemory. (#21168)
thetumbled Sep 14, 2023
b8ebfe3
[improve][ci] Protect branch-3.1 (#21185)
Technoboy- Sep 15, 2023
2aa8c3b
[fix][broker] fix bug caused by optimistic locking (#18390)
thetumbled Sep 15, 2023
97723eb
[fix][auto-recovery] Fix metadata store deadlock due to BookkeeperInt…
horizonzy Sep 17, 2023
4fb5203
[improve] [bookie] Change flushEntrylogBytes default value from 256MB…
hangc0276 Sep 17, 2023
62a88f9
[fix][doc] fix doc comment for subscriptionType (#20987)
chenhongSZ Sep 17, 2023
1363777
[fix][broker] Fix PulsarService.getLookupServiceAddress returns wron…
Technoboy- Sep 18, 2023
8ff51eb
[fix] [auto-recovery] Fix PulsarLedgerUnderreplicationManager notify …
horizonzy Sep 18, 2023
eefc517
[fix] [auto-recovery] Fix pulsar ledger auditor dead lock problem. (#…
horizonzy Sep 19, 2023
1b7084b
[fix][broker] Delete unused param (#20866)
zhanghaou Sep 20, 2023
e5b0f17
[improve][proxy] When adding new brokers resolve the DNS name more qu…
frankjkelly Sep 20, 2023
66271e3
[fix][broker] replicator leak when removeReplicator in NonPersistentT…
hanmz Sep 21, 2023
d6c3fa4
[improve] [proxy] Not close the socket if lookup failed caused by too…
poorbarcode Sep 21, 2023
be4ab66
[improve] [client] Merge lookup requests for the same topic (#21232)
poorbarcode Sep 22, 2023
be4bcac
[fix] [broker] fix flaky test PatternTopicsConsumerImplTest (#21222)
poorbarcode Sep 23, 2023
c632431
[fix][broker] Fixed reset for AggregatedNamespaceStats (#21225)
asafm Sep 24, 2023
2a27e7b
[fix][broker]Fixed produce and consume when anonymousUserRole enabled…
tuteng Sep 24, 2023
5c9b72a
[improve][pip] PIP-301: Introduce LoadBalanceResources to unify the l…
AnonHxy Sep 25, 2023
944c9a0
[fix][fn] fix functions_log4j2.xml delete strategy config (#21215)
hanmz Sep 25, 2023
dcf1ea1
[improve][io] Use `SinkContext.fatal` in elastic search connector (#2…
RobertIndie Sep 25, 2023
48d5b9d
[improve][pip] PIP-286: Make the TopicCompactionService to support fi…
coderzc Sep 26, 2023
afc9244
[fix][broker] Fix inconsistent topic policy (#21231)
mattisonchao Sep 26, 2023
7a3f304
[fix][broker] Miss headersAndPayload and messageIdData in MessagePubl…
kecona Sep 27, 2023
0b32b17
[fix][txn] fix the consumer stuck due to deduplicated messages in pen…
hrzzzz Sep 27, 2023
09a1720
[improve] [broker] Not close the socket if lookup failed caused by bu…
poorbarcode Sep 27, 2023
9061d8b
[improve] [auto-recovery] Migrate the replication testing from BookKe…
horizonzy Sep 28, 2023
6d82b09
[fix] [client] fix reader.hasMessageAvailable return false when incom…
poorbarcode Sep 28, 2023
8485d68
[improve] [broker] Print warn log if ssl handshake error & print ledg…
poorbarcode Sep 28, 2023
1bf7371
[fix][sec] Add OWASP Dependency Check suppressions (#21281)
lhotari Sep 30, 2023
682eb36
[fix][build] Upgrade Lombok to 1.18.30 to support compiling with JDK2…
lhotari Sep 30, 2023
6bdcfeb
[fix][sec] Upgrade Jetty to address CVEs (#21279)
lhotari Oct 3, 2023
07f4eb3
[improve][misc] Upgrade Netty to 4.1.99.Final (#21277)
lhotari Oct 3, 2023
643428b
[fix][sec] Upgrade snappy-java to 1.1.10.5 (#21280)
lhotari Oct 3, 2023
70d086f
[fix][ml] Fix thread safe issue with RangeCache.put and RangeCache.cl…
lhotari Oct 7, 2023
dbb1577
[fix][test]Fix flaky test because the too short receive time (#21273)
liangyepianzhou Oct 7, 2023
d9ebaf5
[fix][broker] rackaware policy is ineffective when delete zk rack inf…
TakaHiR07 Oct 7, 2023
f85e0dc
[fix][broker] Fix lookup heartbeat and sla namespace bundle when usin…
Demogorgon314 Oct 8, 2023
4ee5cd7
[fix] [ml] Reader can set read-pos to a deleted ledger (#21248)
poorbarcode Oct 8, 2023
9ab7417
[fix] [metadata] Fix zookeeper related flacky test (#21310)
horizonzy Oct 8, 2023
bbdc173
[refactor][broker] PIP-301 Part-1: Add BundleDataResources (#21119)
AnonHxy Oct 8, 2023
ca77982
[fix] [ml] fix wrong msg backlog of non-durable cursor after trim led…
poorbarcode Oct 8, 2023
8c70943
[feat][sql] Support UUID for json and avro (#21267)
liangyepianzhou Oct 9, 2023
8438e43
[fix][test] Move NarUnpackerTest to flaky group (#21316)
nodece Oct 9, 2023
e76a86e
[fix][test] Fix flaky test NarUnpackerTest (#21328)
lhotari Oct 9, 2023
66c5e1f
Revert "[fix][broker] Miss headersAndPayload and messageIdData in Mes…
codelipenghui Oct 9, 2023
c883f50
[fix][test] Fix flaky CompactionTest.testDispatcherMaxReadSizeBytes (…
lhotari Oct 9, 2023
16199d2
[fix][test] Fix flaky OneWayReplicatorTest.testReplicatorProducerStat…
lhotari Oct 9, 2023
fcc123d
[fix][bk] Fix the var name for IsolationGroups (#21320)
AnonHxy Oct 9, 2023
9449ae4
[improve][offload] Avoid implementation details leak on getOffloadPol…
tisonkun Oct 10, 2023
c35524d
[fix][test] Fix flaky AdminApiMaxUnackedMessagesTest.testMaxUnackedMe…
lhotari Oct 10, 2023
903e223
[feat][cli] Add command line option for configuring the memory limit …
JooHyukKim Oct 10, 2023
8420420
[fix][sec] Fix MultiRoles token provider when using anonymous clients…
merlimat Oct 10, 2023
61a7adf
[fix] [bk-client] Fix bk client MinNumRacksPerWriteQuorum and Enforc…
horizonzy Oct 11, 2023
eb9fa63
[fix][ml] Make mlOwnershipChecker asynchronous so that it doesn't blo…
lhotari Oct 11, 2023
aecdb03
[improve][broker] use ConcurrentHashMap in ServiceUnitStateChannel an…
heesung-sohn Oct 11, 2023
1a352f1
[improve] [pip] PIP-299: Stop dispatch messages if the individual ack…
poorbarcode Oct 12, 2023
421c98a
[fix][ci] Fix docker image building by releasing more disk space befo…
lhotari Oct 14, 2023
d6a56ad
[improve][broker] Optimize and clean up aggregation of topic stats (#…
lhotari Oct 14, 2023
c8183e7
[feat] [broker] PIP-188 Add support to auto create topic resources in…
rdhabalia Oct 14, 2023
a5f4c1e
[fix][broker] make closing producer thread-safe while updating recent…
rdhabalia Oct 14, 2023
d09642c
[fix][client] fix producer/consumer perform lookup for migrated topic…
rdhabalia Oct 14, 2023
a10564d
[fix][broker]Support to migrate topics from blue to green cluster pe…
vraulji567 Oct 16, 2023
a7acdf6
[refactor][cli][PIP-280] Refactor `pulsar-client-tools` module (#20764)
JooHyukKim Oct 16, 2023
39235ed
[fix][test] Fix a resource leak in ClusterMigrationTest (#21366)
lhotari Oct 16, 2023
e088411
[fix][broker] Fix avoid creating new topic after migration is started…
rdhabalia Oct 16, 2023
689976b
[fix][broker] Fix race condition of replication cluster connection du…
rdhabalia Oct 16, 2023
f5222d6
[fix][sec] Bump avro version to 1.11.3 for CVE-2023-39410 (#21341)
tisonkun Oct 17, 2023
e6cd11f
[fix][test] Fix some resource leaks in compaction tests (#21374)
lhotari Oct 17, 2023
ffc083b
[fix][test] Fix resource leaks with Pulsar Functions tests (#21378)
lhotari Oct 17, 2023
cb7c98a
[fix][test] Fix resource leak in TransactionCoordinatorClientTest (#2…
lhotari Oct 17, 2023
de8f543
[fix][test] Fix resource leak in PulsarServiceTest (#21386)
lhotari Oct 18, 2023
da7e545
[fix][test] Cleanup cached executors in tests (#21383)
lhotari Oct 18, 2023
602478f
[fix][test] Cleanup test resources in pulsar-client module (#21382)
lhotari Oct 18, 2023
271906d
[improve][ci] Upgrade Gradle Enterprise Maven extension (#21384)
lhotari Oct 18, 2023
6681d33
[fix][test] Fix resource leak in AdminApiTenantTest (#21387)
lhotari Oct 18, 2023
59422be
[improve][pip]PIP-307: Optimize Bundle Unload(Transfer) Protocol for …
heesung-sohn Oct 18, 2023
1b2a991
[improve][client] Add `REAL_SUBSCRIPTION` when produces msg to DLQ (#…
Technoboy- Oct 18, 2023
187e0cf
[fix][fn] Make python install dependencies from requirements.txt (#20…
jiangpengcheng Oct 18, 2023
2ff1b8c
[improve][pip] PIP-302 Introduce refreshAsync API for TableView (#21271)
liangyepianzhou Oct 18, 2023
03915eb
[fix][doc] Fix typos in doc for Validator class (#21323)
hanmz Oct 18, 2023
9b643c8
[fix][doc] Fix typos in doc for broker.conf (#21322)
hanmz Oct 18, 2023
b1bca56
[improve][broker][PIP-286] Make the TopicCompactionService to support…
coderzc Oct 18, 2023
a9d5d25
[improve][build] Upgrade Jacoco version to 0.8.11 to support Java 21 …
lhotari Oct 18, 2023
e2c6c08
[improve][ci] Add new CI unit test group "Broker Group 4" with cluste…
lhotari Oct 18, 2023
5af821d
[improve][build] Upgrade spotbugs maven plugin version for Java 21 co…
lhotari Oct 18, 2023
c8a2f49
[fix][broker] Fix heartbeat namespace create transaction internal top…
TakaHiR07 Oct 19, 2023
8315bf8
[improve][test] Upgrade Mockito to 5.6.0 for Java 21 compatibility (#…
lhotari Oct 19, 2023
700a29d
[fix][broker] Fix heartbeat namespace create event topic and cannot d…
TakaHiR07 Oct 19, 2023
ecd40e4
[fix][broker] Fix unload operation stuck when use ExtensibleLoadManag…
Demogorgon314 Oct 19, 2023
22fd8c2
[fix][sec] Upgrade Jetty to 9.4.53 to address CVE-2023-44487 (#21395)
lhotari Oct 19, 2023
aae6c71
[fix][sec] Upgrade Netty to 4.1.100 to address CVE-2023-44487 (#21397)
lhotari Oct 19, 2023
e5120ec
[fix][sec] Upgrade Zookeeper to 3.8.3 to address CVE-2023-44981 (#21398)
lhotari Oct 19, 2023
b6a593c
[fix][broker] Fix typos in Subscription interface (#21321)
hanmz Oct 19, 2023
772f16c
[improve][ci] Parameterize CI build so that Java 21 can be selected f…
lhotari Oct 20, 2023
0e9bb8a
[improve][ci] Schedule daily Pulsar CI build with Java 21 (#21410)
lhotari Oct 21, 2023
30d59e3
[refactor][broker ] PIP-301 Part-2: Add BrokerTimeAverageDataResource…
AnonHxy Oct 23, 2023
e3debb9
[fix][client] Fix typos in AuthenticationDataProvider interface (#21404)
hanmz Oct 23, 2023
e16671f
[fix][doc] Fix typos in TransactionBuilderImpl class (#21405)
hanmz Oct 23, 2023
a0f8b0d
[fix][test] Fix LocalBookkeeperEnsemble resource leak in tests (#21407)
lhotari Oct 23, 2023
bcfc388
[fix][test] Close admin clients before replacing in tests (#21424)
lhotari Oct 24, 2023
6518e4f
[improve][test] Fix test retries for tests that don't call internalSe…
lhotari Oct 24, 2023
cad4e75
[fix][test] Fix thread leaks in tests by closing executors properly (…
lhotari Oct 24, 2023
618aede
[improve] [pip] PIP-298 Consumer supports specifying consumption isol…
hzh0425 Oct 24, 2023
c702be1
[improve][pip] PIP-307: Support subscribing multi topics for WebSocke…
Technoboy- Oct 24, 2023
c6704df
[fix][test] Fix thread leaks in Managed Ledger tests and remove dupli…
lhotari Oct 24, 2023
fe2d61d
[fix][proxy] Move status endpoint out of auth coverage (#21428)
mattisonchao Oct 24, 2023
defeaed
[fix][test] Close metadata stores in MultiBrokerTestZKBaseTests (#21436)
lhotari Oct 24, 2023
6947b7f
[improve][pip] PIP-305: Customize DNS servers to use for Pulsar Clien…
diegosalvi Oct 24, 2023
25c662d
[improve][client] Add a way to configure which DNS use (#21227)
diegosalvi Oct 24, 2023
789d284
[fix][broker] Allow broker deployment in heterogeneous hw config clus…
rdhabalia Oct 24, 2023
9a369be
[improve][broker] Improve error messages when updating partition coun…
alpreu Oct 25, 2023
3ebb855
[improve][pip] Add title in PIP template (#21437)
tisonkun Oct 25, 2023
04d1225
[feat] [broker] PIP-188 Fix cluster migration state store into local …
rdhabalia Oct 25, 2023
d3216d2
[fix][broker] Ignore individual acknowledgment for CompactorSubscript…
coderzc Oct 25, 2023
bd3de15
[fix][broker] Intercept REDELIVER_UNACKNOWLEDGED_MESSAGES command (#2…
kecona Oct 25, 2023
8056987
[fix][broker] Fix MultiRoles token provider NPE when using anonymous …
Technoboy- Oct 25, 2023
3a9f99f
[feat] [broker] PIP-188 Fix cluster migration state store into local …
rdhabalia Oct 25, 2023
5e16ecf
[fix][test] Fix resource leaks in LoadBalancerTest (#21443)
lhotari Oct 26, 2023
867c6ef
Merge branch 'master' into issue/20753/gracefulshutdown
labuladong Oct 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[feat][io] Support configuration secret interpolation (apache#20901)
PIP: apache#20903
Relates to: apache#20862 

### Motivation

The primary motivation is to make it possible to configure Pulsar Connectors in a secure, non-plaintext way. See the PIP for background and relevant details. The new interpolation feature only applies when deploying with functions to Kubernetes.

### Modifications

* Add `SecretsProvider#interpolateSecretForValue` method with a default that maintains the current behavior.
* Override `interpolateSecretForValue` in the `EnvironmentBasedSecretsProvider` so that configuration values formatted as `${my-env-var}` will be replaced with the result of `System.getEnv("my-env-var")` if the result is not `null`.
* Implement a recursive string interpolation method that will replace any configuration value that the `interpolateSecretForValue` implementation determines ought to be replaced.

### Verifying this change

Tests are added/modified.

### Documentation

- [x] `doc-required`

### Matching PR in forked repository

PR in forked repository: michaeljmarshall#55
  • Loading branch information
michaeljmarshall authored Aug 16, 2023
commit bfde0def2c2ebf974e7257061f4c63a15306e833
9 changes: 9 additions & 0 deletions pulsar-functions/instance/pom.xml
Original file line number Diff line number Diff line change
@@ -269,6 +269,15 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<environmentVariables>
<TEST_JAVA_INSTANCE_PARSE_ENV_VAR>some-configuration</TEST_JAVA_INSTANCE_PARSE_ENV_VAR>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>

Original file line number Diff line number Diff line change
@@ -862,11 +862,7 @@ private void setupInput(ContextImpl contextImpl) throws Exception {
Thread.currentThread().setContextClassLoader(this.componentClassLoader);
}
try {
if (sourceSpec.getConfigs().isEmpty()) {
this.source.open(new HashMap<>(), contextImpl);
} else {
this.source.open(parseComponentConfig(sourceSpec.getConfigs()), contextImpl);
}
this.source.open(augmentAndFilterConnectorConfig(sourceSpec.getConfigs()), contextImpl);
if (this.source instanceof PulsarSource) {
contextImpl.setInputConsumers(((PulsarSource) this.source).getInputConsumers());
}
@@ -877,31 +873,60 @@ private void setupInput(ContextImpl contextImpl) throws Exception {
Thread.currentThread().setContextClassLoader(this.instanceClassLoader);
}
}
private Map<String, Object> parseComponentConfig(String connectorConfigs) throws IOException {
return parseComponentConfig(connectorConfigs, instanceConfig, componentClassLoader, componentType);

/**
* Recursively interpolate configured secrets into the config map by calling
* {@link SecretsProvider#interpolateSecretForValue(String)}.
* @param secretsProvider - the secrets provider that will convert secret's values into config values.
* @param configs - the connector configuration map, which will be mutated.
*/
private static void interpolateSecretsIntoConfigs(SecretsProvider secretsProvider,
Map<String, Object> configs) {
for (Map.Entry<String, Object> entry : configs.entrySet()) {
Object value = entry.getValue();
if (value instanceof String) {
String updatedValue = secretsProvider.interpolateSecretForValue((String) value);
if (updatedValue != null) {
entry.setValue(updatedValue);
}
} else if (value instanceof Map) {
interpolateSecretsIntoConfigs(secretsProvider, (Map<String, Object>) value);
}
}
}

private Map<String, Object> augmentAndFilterConnectorConfig(String connectorConfigs) throws IOException {
return augmentAndFilterConnectorConfig(connectorConfigs, instanceConfig, secretsProvider,
componentClassLoader, componentType);
}

static Map<String, Object> parseComponentConfig(String connectorConfigs,
InstanceConfig instanceConfig,
ClassLoader componentClassLoader,
org.apache.pulsar.functions.proto.Function
static Map<String, Object> augmentAndFilterConnectorConfig(String connectorConfigs,
InstanceConfig instanceConfig,
SecretsProvider secretsProvider,
ClassLoader componentClassLoader,
org.apache.pulsar.functions.proto.Function
.FunctionDetails.ComponentType componentType)
throws IOException {
final Map<String, Object> config = ObjectMapperFactory
final Map<String, Object> config = connectorConfigs.isEmpty() ? new HashMap<>() : ObjectMapperFactory
.getMapper()
.reader()
.forType(new TypeReference<Map<String, Object>>() {})
.readValue(connectorConfigs);
if (componentType != org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK
&& componentType != org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) {
return config;
}

interpolateSecretsIntoConfigs(secretsProvider, config);

if (instanceConfig.isIgnoreUnknownConfigFields() && componentClassLoader instanceof NarClassLoader) {
final String configClassName;
if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) {
configClassName = ConnectorUtils
.getConnectorDefinition((NarClassLoader) componentClassLoader).getSourceConfigClass();
} else if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK) {
} else {
configClassName = ConnectorUtils
.getConnectorDefinition((NarClassLoader) componentClassLoader).getSinkConfigClass();
} else {
return config;
}
if (configClassName != null) {

@@ -1014,19 +1039,11 @@ private void setupOutput(ContextImpl contextImpl) throws Exception {
Thread.currentThread().setContextClassLoader(this.componentClassLoader);
}
try {
if (sinkSpec.getConfigs().isEmpty()) {
if (log.isDebugEnabled()) {
log.debug("Opening Sink with empty hashmap with contextImpl: {} ", contextImpl.toString());
}
this.sink.open(new HashMap<>(), contextImpl);
} else {
if (log.isDebugEnabled()) {
log.debug("Opening Sink with SinkSpec {} and contextImpl: {} ", sinkSpec,
contextImpl.toString());
}
final Map<String, Object> config = parseComponentConfig(sinkSpec.getConfigs());
this.sink.open(config, contextImpl);
if (log.isDebugEnabled()) {
log.debug("Opening Sink with SinkSpec {} and contextImpl: {} ", sinkSpec.getConfigs(),
contextImpl.toString());
}
this.sink.open(augmentAndFilterConnectorConfig(sinkSpec.getConfigs()), contextImpl);
} catch (Exception e) {
log.error("Sink open produced uncaught exception: ", e);
throw e;
Original file line number Diff line number Diff line change
@@ -47,6 +47,7 @@
import org.apache.pulsar.functions.proto.Function.FunctionDetails;
import org.apache.pulsar.functions.proto.Function.SinkSpec;
import org.apache.pulsar.functions.proto.InstanceCommunication;
import org.apache.pulsar.functions.secretsprovider.EnvironmentBasedSecretsProvider;
import org.jetbrains.annotations.NotNull;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
@@ -191,9 +192,10 @@ public void testStatsManagerNull() throws Exception {

@Test
public void testSinkConfigParsingPreservesOriginalType() throws Exception {
final Map<String, Object> parsedConfig = JavaInstanceRunnable.parseComponentConfig(
final Map<String, Object> parsedConfig = JavaInstanceRunnable.augmentAndFilterConnectorConfig(
"{\"ttl\": 9223372036854775807}",
new InstanceConfig(),
new EnvironmentBasedSecretsProvider(),
null,
FunctionDetails.ComponentType.SINK
);
@@ -203,16 +205,69 @@ public void testSinkConfigParsingPreservesOriginalType() throws Exception {

@Test
public void testSourceConfigParsingPreservesOriginalType() throws Exception {
final Map<String, Object> parsedConfig = JavaInstanceRunnable.parseComponentConfig(
final Map<String, Object> parsedConfig = JavaInstanceRunnable.augmentAndFilterConnectorConfig(
"{\"ttl\": 9223372036854775807}",
new InstanceConfig(),
new EnvironmentBasedSecretsProvider(),
null,
FunctionDetails.ComponentType.SOURCE
);
Assert.assertEquals(parsedConfig.get("ttl").getClass(), Long.class);
Assert.assertEquals(parsedConfig.get("ttl"), Long.MAX_VALUE);
}

@DataProvider(name = "component")
public Object[][] component() {
return new Object[][]{
// Schema: component type, whether to map in secrets
{ FunctionDetails.ComponentType.SINK },
{ FunctionDetails.ComponentType.SOURCE },
{ FunctionDetails.ComponentType.FUNCTION },
{ FunctionDetails.ComponentType.UNKNOWN },
};
}

@Test(dataProvider = "component")
public void testEmptyStringInput(FunctionDetails.ComponentType componentType) throws Exception {
final Map<String, Object> parsedConfig = JavaInstanceRunnable.augmentAndFilterConnectorConfig(
"",
new InstanceConfig(),
new EnvironmentBasedSecretsProvider(),
null,
componentType
);
Assert.assertEquals(parsedConfig.size(), 0);
}

// Environment variables are set in the pom.xml file
@Test(dataProvider = "component")
public void testInterpolatingEnvironmentVariables(FunctionDetails.ComponentType componentType) throws Exception {
final Map<String, Object> parsedConfig = JavaInstanceRunnable.augmentAndFilterConnectorConfig(
"""
{
"key": {
"key1": "${TEST_JAVA_INSTANCE_PARSE_ENV_VAR}",
"key2": "${unset-env-var}"
},
"key3": "${TEST_JAVA_INSTANCE_PARSE_ENV_VAR}"
}
""",
new InstanceConfig(),
new EnvironmentBasedSecretsProvider(),
null,
componentType
);
if ((componentType == FunctionDetails.ComponentType.SOURCE
|| componentType == FunctionDetails.ComponentType.SINK)) {
Assert.assertEquals(((Map) parsedConfig.get("key")).get("key1"), "some-configuration");
Assert.assertEquals(((Map) parsedConfig.get("key")).get("key2"), "${unset-env-var}");
Assert.assertEquals(parsedConfig.get("key3"), "some-configuration");
} else {
Assert.assertEquals(((Map) parsedConfig.get("key")).get("key1"), "${TEST_JAVA_INSTANCE_PARSE_ENV_VAR}");
Assert.assertEquals(((Map) parsedConfig.get("key")).get("key2"), "${unset-env-var}");
Assert.assertEquals(parsedConfig.get("key3"), "${TEST_JAVA_INSTANCE_PARSE_ENV_VAR}");
}
}

public static class ConnectorTestConfig1 {
public String field1;
@@ -243,9 +298,10 @@ public void testSinkConfigIgnoreUnknownFields(boolean ignoreUnknownConfigFields,
final InstanceConfig instanceConfig = new InstanceConfig();
instanceConfig.setIgnoreUnknownConfigFields(ignoreUnknownConfigFields);

final Map<String, Object> parsedConfig = JavaInstanceRunnable.parseComponentConfig(
final Map<String, Object> parsedConfig = JavaInstanceRunnable.augmentAndFilterConnectorConfig(
"{\"field1\": \"value\", \"field2\": \"value2\"}",
instanceConfig,
new EnvironmentBasedSecretsProvider(),
narClassLoader,
type
);
Original file line number Diff line number Diff line change
@@ -18,12 +18,20 @@
*/
package org.apache.pulsar.functions.secretsprovider;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* This defines a very simple Secrets Provider that looks up environment variable
* thats named the same as secretName and fetches it.
*/
public class EnvironmentBasedSecretsProvider implements SecretsProvider {

/**
* Pattern to match ${secretName} in the value.
*/
private static final Pattern interpolationPattern = Pattern.compile("\\$\\{(.+?)}");

/**
* Fetches a secret.
*
@@ -33,4 +41,15 @@ public class EnvironmentBasedSecretsProvider implements SecretsProvider {
public String provideSecret(String secretName, Object pathToSecret) {
return System.getenv(secretName);
}

@Override
public String interpolateSecretForValue(String value) {
Matcher m = interpolationPattern.matcher(value);
if (m.matches()) {
String secretName = m.group(1);
// If the secret doesn't exist, we return null and don't override the current value.
return provideSecret(secretName, null);
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -39,4 +39,16 @@ default void init(Map<String, String> config) {}
* @return The actual secret
*/
String provideSecret(String secretName, Object pathToSecret);

/**
* If the passed value is formatted as a reference to a secret, as defined by the implementation, return the
* referenced secret. If the value is not formatted as a secret reference or the referenced secret does not exist,
* return null.
*
* @param value a config value that may be formatted as a reference to a secret
* @return the materialized secret. Otherwise, null.
*/
default String interpolateSecretForValue(String value) {
return null;
}
}