连接到自己的Azure Cosmos DB实例使用ScalarDB失败。

huangapple go评论112阅读模式
英文:

Failed to connect to my own azure cosmos db instance using ScalarDB

问题

在测试 ScalarDB(2.2.0 版本)的 Cosmos DB 功能时,我无法通过 ScalarDB 连接到 Azure Cosmos DB 实例。当我尝试使用以下代码初始化 DistributedTransaction 或 Cosmos 对象时:

  1. DatabaseConfig cosmosDBConfig = new DatabaseConfig(f);
  2. Cosmos cosmos = new Cosmos(cosmosDBConfig);
  3. DistributedTransactionManager db = Guice.createInjector(new TransactionModule(cosmosDBConfig))
  4. .getInstance(TransactionService.class); // 此处失败
  5. // 也尝试过这个
  6. // Cosmos cosmos = new Cosmos(cosmosDBConfig); // 此处失败

我遇到了以下错误:

  1. 网络故障
  2. java.lang.IllegalArgumentException: port out of range: -1
  3. at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)
  4. ...

我还尝试了在节点js和Java客户端上使用 Cosmos DB SDK(不使用 ScalarDB),成功向实例插入数据。以下是我的 ScalarDB 配置。我甚至尝试在我的一个 Azure 虚拟机上运行 ScalarDB 初始化代码,但仍然出现相同的错误。以下是我的 ScalarDB 配置:

  1. scalar.db.contact_points=<InstanceContactPoints>
  2. scalar.db.contact_port=<DefaultPort>
  3. scalar.db.username=<InstanceUsername>
  4. scalar.db.password=<InstancePassword>
  5. scalar.db.storage=cosmos

我想知道是否我的配置有问题?如何进行设置?提前感谢您的帮助。

英文:

While i was testing the functionality of cosmosdb of the scalardb (2.2.0), i couldn’t connect to the azure cosmos db instance via scalardb, when i try to initialize the DistributedTransaction or the Cosmos object with the following code

  1. DatabaseConfig cosmosDBConfig = new DatabaseConfig(f);
  2. Cosmos cosmos = new Cosmos(cosmosDBConfig);
  3. DistributedTransactionManager db = Guice.createInjector(new TransactionModule(cosmosDBConfig))
  4. .getInstance(TransactionService.class); // failed here
  5. // also tried with this
  6. // Cosmos cosmos = new Cosmos(cosmosDBConfig); // fail here

and I got the following errors

  1. Network failure
  2. java.lang.IllegalArgumentException: port out of range:-1
  3. at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)
  4. at java.net.InetSocketAddress.&lt;init&gt;(InetSocketAddress.java:188)
  5. at reactor.netty.tcp.InetSocketAddressUtil.createForIpString(InetSocketAddressUtil.java:88)
  6. at reactor.netty.tcp.InetSocketAddressUtil.createInetSocketAddress(InetSocketAddressUtil.java:74)
  7. at reactor.netty.tcp.InetSocketAddressUtil.createUnresolved(InetSocketAddressUtil.java:48)
  8. at reactor.netty.tcp.TcpUtils._updatePort(TcpUtils.java:91)
  9. at reactor.netty.tcp.TcpUtils.updatePort(TcpUtils.java:73)
  10. at reactor.netty.tcp.TcpClient.lambda$port$5(TcpClient.java:411)
  11. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  12. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  13. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  14. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  15. at reactor.netty.tcp.TcpClient.connect(TcpClient.java:196)
  16. at reactor.netty.http.client.HttpClientFinalizer.connect(HttpClientFinalizer.java:68)
  17. at reactor.netty.http.client.HttpClientFinalizer.responseConnection(HttpClientFinalizer.java:85)
  18. at com.azure.cosmos.implementation.http.ReactorNettyClient.send(ReactorNettyClient.java:123)
  19. at com.azure.cosmos.implementation.RxGatewayStoreModel.performRequest(RxGatewayStoreModel.java:159)
  20. at com.azure.cosmos.implementation.RxGatewayStoreModel.read(RxGatewayStoreModel.java:91)
  21. at com.azure.cosmos.implementation.RxGatewayStoreModel.invokeAsyncInternal(RxGatewayStoreModel.java:351)
  22. at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$invokeAsync$3(RxGatewayStoreModel.java:366)
  23. at com.azure.cosmos.implementation.BackoffRetryUtility.lambda$executeRetry$0(BackoffRetryUtility.java:34)
  24. at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
  25. at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:79)
  26. at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
  27. at reactor.core.publisher.FluxFromMonoOperator.subscribe(FluxFromMonoOperator.java:76)
  28. at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
  29. at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
  30. at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
  31. at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117)
  32. at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
  33. at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
  34. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  35. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
  36. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
  37. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  38. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  39. at java.lang.Thread.run(Thread.java:748)
  40. Failed to retrieve database account information. java.lang.IllegalArgumentException: port out of range:-1
  41. Fail to reach global gateway [scalardb-test-cosmos.cassandra.cosmos.azure.com], [null]
  42. startRefreshLocationTimerAsync() - Unable to refresh database account from any location. Exception: CosmosException{userAgent=Linux/4.18.0-147.8.1.el8_1.x86_64 JRE/1.8.0_252 cosmosdb-java-sdk/4.1.0, error=null, resourceAddress=&#39;null&#39;, requestUri=&#39;null&#39;, statusCode=0, message=null, causeInfo=[class: class java.lang.IllegalArgumentException, message: port out of range:-1], responseHeaders={}, requestHeaders=[Accept=application/json, x-ms-date=Thu, 01 Oct 2020 09:28:49 GMT]}
  43. CosmosException{userAgent=Linux/4.18.0-147.8.1.el8_1.x86_64 JRE/1.8.0_252 cosmosdb-java-sdk/4.1.0, error=null, resourceAddress=&#39;null&#39;, requestUri=&#39;null&#39;, statusCode=0, message=null, causeInfo=[class: class java.lang.IllegalArgumentException, message: port out of range:-1], responseHeaders={}, requestHeaders=[Accept=application/json, x-ms-date=Thu, 01 Oct 2020 09:28:49 GMT]}
  44. at com.azure.cosmos.BridgeInternal.createCosmosException(BridgeInternal.java:281)
  45. at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$toDocumentServiceResponse$2(RxGatewayStoreModel.java:301)
  46. at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88)
  47. at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:134)
  48. at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165)
  49. at reactor.core.publisher.MonoSingle$SingleSubscriber.onError(MonoSingle.java:141)
  50. at reactor.core.publisher.Operators.error(Operators.java:196)
  51. at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:134)
  52. at reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49)
  53. at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57)
  54. at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
  55. at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:79)
  56. at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
  57. at reactor.core.publisher.FluxFromMonoOperator.subscribe(FluxFromMonoOperator.java:76)
  58. at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
  59. at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
  60. at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
  61. at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117)
  62. at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
  63. at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
  64. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  65. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
  66. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
  67. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  68. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  69. at java.lang.Thread.run(Thread.java:748)
  70. Caused by: java.lang.IllegalArgumentException: port out of range:-1
  71. at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)
  72. at java.net.InetSocketAddress.&lt;init&gt;(InetSocketAddress.java:188)
  73. at reactor.netty.tcp.InetSocketAddressUtil.createForIpString(InetSocketAddressUtil.java:88)
  74. at reactor.netty.tcp.InetSocketAddressUtil.createInetSocketAddress(InetSocketAddressUtil.java:74)
  75. at reactor.netty.tcp.InetSocketAddressUtil.createUnresolved(InetSocketAddressUtil.java:48)
  76. at reactor.netty.tcp.TcpUtils._updatePort(TcpUtils.java:91)
  77. at reactor.netty.tcp.TcpUtils.updatePort(TcpUtils.java:73)
  78. at reactor.netty.tcp.TcpClient.lambda$port$5(TcpClient.java:411)
  79. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  80. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  81. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  82. at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
  83. at reactor.netty.tcp.TcpClient.connect(TcpClient.java:196)
  84. at reactor.netty.http.client.HttpClientFinalizer.connect(HttpClientFinalizer.java:68)
  85. at reactor.netty.http.client.HttpClientFinalizer.responseConnection(HttpClientFinalizer.java:85)
  86. at com.azure.cosmos.implementation.http.ReactorNettyClient.send(ReactorNettyClient.java:123)
  87. at com.azure.cosmos.implementation.RxGatewayStoreModel.performRequest(RxGatewayStoreModel.java:159)
  88. at com.azure.cosmos.implementation.RxGatewayStoreModel.read(RxGatewayStoreModel.java:91)
  89. at com.azure.cosmos.implementation.RxGatewayStoreModel.invokeAsyncInternal(RxGatewayStoreModel.java:351)
  90. at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$invokeAsync$3(RxGatewayStoreModel.java:366)
  91. at com.azure.cosmos.implementation.BackoffRetryUtility.lambda$executeRetry$0(BackoffRetryUtility.java:34)
  92. at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
  93. ... 15 more
  94. Exception in thread &quot;main&quot; java.lang.NullPointerException
  95. at com.azure.cosmos.BridgeInternal.isEnableMultipleWriteLocations(BridgeInternal.java:163)
  96. at com.azure.cosmos.implementation.RxDocumentClientImpl.initializeGatewayConfigurationReader(RxDocumentClientImpl.java:264)
  97. at com.azure.cosmos.implementation.RxDocumentClientImpl.init(RxDocumentClientImpl.java:281)
  98. at com.azure.cosmos.implementation.AsyncDocumentClient$Builder.build(AsyncDocumentClient.java:203)
  99. at com.azure.cosmos.CosmosAsyncClient.&lt;init&gt;(CosmosAsyncClient.java:79)
  100. at com.azure.cosmos.CosmosClientBuilder.buildAsyncClient(CosmosClientBuilder.java:649)
  101. at com.azure.cosmos.CosmosClient.&lt;init&gt;(CosmosClient.java:30)
  102. at com.azure.cosmos.CosmosClientBuilder.buildClient(CosmosClientBuilder.java:661)
  103. at com.scalar.db.storage.cosmos.Cosmos.&lt;init&gt;(Cosmos.java:58)

However, I was able to insert data into the instance using the cosmosdb sdk (without scalardb) on both nodejs and java client. Below is my scalardb configuration. I even tried to run the scalardb initialization code on one of my azure vm but didn’t work as well with the same error.
Below is my scalardb configuration

  1. scalar.db.contact_points=&lt;InstanceContactPoints&gt;
  2. scalar.db.contact_port=&lt;DefaultPort&gt;
  3. scalar.db.username=&lt;InstanceUsername&gt;
  4. scalar.db.password=&lt;InstancePassword&gt;
  5. scalar.db.storage=cosmos

I wonder if my configuration is wrong? How do I set it up? Thanks in advance.

答案1

得分: 1

你的代码看起来不错。
我想知道 scalar.db.contact_points 在你的 Scalar DB 配置中是否像 ...:443 这样带有端口。
对于 Cosmos DB,不需要 scalar.db.contract_port,因为 contact_point 已经包含了端口信息。你可以删除 scalar.db.contact_port 这一行。

英文:

Your code looks good.
I'm wondering whether the scalar.db.contact_points has the port like ...:443 in your Scalar DB configuration.
The scalar.db.contract_port isn't required for Cosmos DB because the contact_point has the port. You can remove the scalar.db.contact_port line.

huangapple
  • 本文由 发表于 2020年10月2日 12:44:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/64166260.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定