-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature Proposal] client supporting JDK7 #132
Labels
type/feature
The PR added a new feature or issue requested a new feature
Comments
merlimat
added
the
type/feature
The PR added a new feature or issue requested a new feature
label
Dec 3, 2016
sijie
pushed a commit
to sijie/pulsar
that referenced
this issue
Mar 4, 2018
There's far too much java8 usage to ever go to JDK7, so closing this as a won't fix. |
hrsakai
pushed a commit
to hrsakai/pulsar
that referenced
this issue
Dec 10, 2020
* Move pkg stuff under pulsar/internal * Fixed exclude path
codelipenghui
added a commit
that referenced
this issue
Jan 4, 2021
### Motivation Fix namespace bundle unloads hangs. In the BrokerService, we maintained a ConcurrentOpenHashMap for storing all topic references. In #8968 cleanup the topics when unloading namespace bundles, see https://github.com/apache/pulsar/pull/8968/files#diff-0210356c8a88e4efa89eb769a027fa6c166db479dbad8bbbbc704c6ed6e317f5R1572-R1579 Since StampedLock is not a reentrant and the method `foreach` of the ConcurrentOpenHashMap also acquire read lock, this might block the namespace unloading, here is the thread dump: ``` "pulsar-io-16-7" #132 prio=5 os_prio=31 tid=0x00007ff370ae2800 nid=0x1f603 waiting on condition [0x00007000121d0000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0000000780a0be18> (a org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap$Section) at java.util.concurrent.locks.StampedLock.acquireWrite(StampedLock.java:1119) at java.util.concurrent.locks.StampedLock.writeLock(StampedLock.java:354) at org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap$Section.remove(ConcurrentOpenHashMap.java:306) at org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap$Section.access$200(ConcurrentOpenHashMap.java:180) at org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap.remove(ConcurrentOpenHashMap.java:135) at org.apache.pulsar.broker.service.BrokerService.removeTopicFromCache(BrokerService.java:1658) at org.apache.pulsar.broker.service.BrokerService.lambda$cleanUnloadedTopicFromCache$61(BrokerService.java:1611) at org.apache.pulsar.broker.service.BrokerService$$Lambda$1003/2064147704.accept(Unknown Source) at org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap$Section.forEach(ConcurrentOpenHashMap.java:387) at org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap.forEach(ConcurrentOpenHashMap.java:159) at org.apache.pulsar.broker.service.BrokerService.cleanUnloadedTopicFromCache(BrokerService.java:1607) at org.apache.pulsar.broker.namespace.OwnedBundle.lambda$handleUnloadRequest$1(OwnedBundle.java:140) at org.apache.pulsar.broker.namespace.OwnedBundle$$Lambda$999/503902413.apply(Unknown Source) at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:836) at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:811) at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975) at org.apache.pulsar.broker.service.nonpersistent.NonPersistentTopic.lambda$null$18(NonPersistentTopic.java:442) at org.apache.pulsar.broker.service.nonpersistent.NonPersistentTopic$$Lambda$994/682846231.run(Unknown Source) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) ``` This also makes the current ci unstable while shutdown the mock broker after the tests. ### Modifications Use `keys()` method of the `ConcurrentOpenHashMap` to get a new keys array list.
dlg99
pushed a commit
to dlg99/pulsar
that referenced
this issue
Sep 22, 2022
…ts (apache#132) Co-authored-by: Michael Marshall <mmarshall@apache.org>
2 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Client supporting JDK7
[merlimat]
That would be very tricky. The current Java API itself is built upon JDK8 features like CompletableFuture.
That would mean to do a rewrite of the client library to support JDK 7, but since it was EOLd ~2 years ago, I don't think it would be worth the effort.
As Andrew said above, WebSocket is probably a much easier/quicker way to solve that .
[DongbinNie]
While JDK7 is end of public updates from April 2015, JDK7 is still used widely, 45% in Plumber's report https://plumbr.eu/blog/java/java-version-and-vendor-data-analyzed-2016-edition
It will be helpful for Pulsar's adoption if the client supporting JDK7. Though WebSocket is a solution, but developers always prefer the first-class client.
The text was updated successfully, but these errors were encountered: