Just like Lari mentioned, it's added in PIP-335. Actually I was +0 so I didn't vote. AFAIK, StreamNative keeps evolving the Oxia so having it as a built-in metadata store for now is not bad. I didn't have much context about why it's contributed to the core Pulsar repo. I guess the metadata store is still not completely decoupled. In future, we can move some built-in metadata store implementations out of the core repo (like the cpp/python clients, some connectors and adaptors) to avoid making the core repo heavy.
Thanks, Yunze On Tue, Aug 13, 2024 at 1:37 AM Dave Fisher <w...@apache.org> wrote: > > Hi Yunze, > > Given your comment on the DISCUSSION thread abut the extra repository. > > > - Metadata store. From my personal perspective, I don't suggest making > > InMemory, Etcd, Oxia as the built-in implementations. Having ZK as > > default and RocksDB for a lightweight standalone is enough. > > I have to ask the hypothetical question: Why is the project working on > StreamNative Oxia support? (https://github.com/streamnative/oxia) > > Since we are then we should make it just as easy to work on any metadata > store plugin. > > Best, > Dave > > > On Aug 12, 2024, at 1:57 AM, poorbarcode (via GitHub) <g...@apache.org> > > wrote: > > > > > > poorbarcode opened a new pull request, #23154: > > URL: https://github.com/apache/pulsar/pull/23154 > > > > ### Motivation & Modifications > > > > Once the Oxia's operation fails to execute, you will get many kinds of > > errors, such as `io.grpc.StatusRuntimeException`, which is not expected, we > > should convert these exceptions to `MetadataStoreException` > > > > ``` > > Aug 12, 2024 4:52:07 PM > > com.github.benmanes.caffeine.cache.LocalAsyncCache lambda$handleCompletion$7 > > WARNING: Exception thrown during asynchronous load > > java.util.concurrent.CompletionException: io.grpc.StatusRuntimeException: > > UNAVAILABLE: io exception > > at > > java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:332) > > at > > java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:347) > > at > > java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:874) > > at > > java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) > > at > > java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) > > at > > java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2162) > > at io.streamnative.oxia.client.batch.Operation.fail(Operation.java:56) > > at > > io.streamnative.oxia.client.batch.ReadBatch.lambda$onError$0(ReadBatch.java:80) > > at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) > > at > > io.streamnative.oxia.client.batch.ReadBatch.onError(ReadBatch.java:80) > > at > > io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:491) > > at > > io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:567) > > at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:71) > > at > > io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:735) > > at > > io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:716) > > at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) > > at > > io.grpc.internal.SerializeReentrantCallsDirectExecutor.execute(SerializeReentrantCallsDirectExecutor.java:49) > > at > > io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.closedInternal(ClientCallImpl.java:743) > > at > > io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.closed(ClientCallImpl.java:683) > > at > > io.grpc.internal.FailingClientStream.start(FailingClientStream.java:61) > > at > > io.grpc.internal.ClientCallImpl.startInternal(ClientCallImpl.java:291) > > at io.grpc.internal.ClientCallImpl.start(ClientCallImpl.java:193) > > at io.grpc.stub.ClientCalls.startCall(ClientCalls.java:345) > > at > > io.grpc.stub.ClientCalls.asyncUnaryRequestCall(ClientCalls.java:319) > > at > > io.grpc.stub.ClientCalls.asyncUnaryRequestCall(ClientCalls.java:307) > > at > > io.grpc.stub.ClientCalls.asyncServerStreamingCall(ClientCalls.java:91) > > at > > io.streamnative.oxia.proto.OxiaClientGrpc$OxiaClientStub.read(OxiaClientGrpc.java:558) > > at io.streamnative.oxia.client.batch.ReadBatch.send(ReadBatch.java:62) > > at > > io.streamnative.oxia.client.batch.Batcher.batcherLoop(Batcher.java:125) > > at > > io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > > at java.base/java.lang.Thread.run(Thread.java:833) > > Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception > > at io.grpc.Status.asRuntimeException(Status.java:539) > > ... 21 more > > ``` > > > > > > > > ### Documentation > > > > <!-- DO NOT REMOVE THIS SECTION. CHECK THE PROPER BOX ONLY. --> > > > > - [ ] `doc` <!-- Your PR contains doc changes. --> > > - [ ] `doc-required` <!-- Your PR changes impact docs and you will update > > later --> > > - [x] `doc-not-needed` <!-- Your PR changes do not impact docs --> > > - [ ] `doc-complete` <!-- Docs have been already added --> > > > > ### Matching PR in forked repository > > > > PR in forked repository: x > > > > > > -- > > This is an automated message from the Apache Git Service. > > To respond to the message, please log on to GitHub and use the > > URL above to go to the specific comment. > > > > To unsubscribe, e-mail: commits-unsubscr...@pulsar.apache.org > > > > For queries about this service, please contact Infrastructure at: > > us...@infra.apache.org > > >