【问题标题】:ClosedChannelException when trying to write to Cloud Bigtable in GAE尝试在 GAE 中写入 Cloud Bigtable 时出现 ClosedChannelException
【发布时间】:2015-10-16 07:10:43
【问题描述】:

我正在尝试在我的应用引擎 servlet 中写入云 bigtable。我从 https://github.com/GoogleCloudPlatform/cloud-bigtable-examples/blob/master/java/managed-vm-gae/gae-bigtable-hello/src/main/java/com.example.cloud.bigtable.helloworld/BigtableHelper.java 复制了 BigTableHelper,并在我的 servlet 中简单地执行了以下操作。

  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {
    try (Table t = BigtableHelper.getConnection().getTable(BigtableHelper.TEST_TABLE)) {
      Put put = new Put(Bytes.toBytes("row1"));
      put.addColumn(BigtableHelper.RAW_UPDATE_FAMILY, BigtableHelper.RAW_UPDATE_QUALIFIER,
              Bytes.toBytes("testdata"));
      t.put(put);
    } catch (IOException e) {
      log("writeToBigtable", e);
    }
}

put 失败并出现错误。

java.io.IOException:执行操作失败。 Operation='put', projectId='myprojectid', tableName='test_table', rowKey='row1' at com.google.cloud.bigtable.hbase.BigtableTable.put(BigtableTable.java:288) at ...

原因:com.google.bigtable.repackaged.com.google.common.util.concurrent.UncheckedExecutionException: io.grpc.StatusRuntimeException: UNKNOWN at io.grpc.stub.Calls.getUnchecked(Calls.java:117)在 io.grpc.stub.Calls.blockingUnaryCall(Calls.java:129) 在 com.google.cloud.bigtable.grpc.BigtableGrpcClient.mutateRow(BigtableGrpcClient.java:210) 在 com.google.cloud.bigtable.hbase.BigtableTable .put(BigtableTable.java:285) ... 32 更多

原因:io.grpc.StatusRuntimeException:在 io.grpc.stub.Calls$UnaryStreamToFuture.onClose(Calls.java:324) 处 io.grpc.Status.asRuntimeException(Status.java:428) 处未知。 grpc.ChannelImpl$CallImpl$ClientStreamListenerImpl$3.run(ChannelImpl.java:402) at io.grpc.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145 ) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ... 还有 1 个

原因:java.nio.channels.ClosedChannelException

BigtableHelper.getConnection() 没有抛出异常,我假设它连接成功。 put语句有什么问题吗?什么可能导致这个问题?谢谢!

【问题讨论】:

  • 我需要查看您的 RAW_UPDATE_FAMILY 和 RAW_UPDATE_QUALIFIER 以提供帮助。同时,你可以看看 doPost() 方法中的github.com/GoogleCloudPlatform/cloud-bigtable-examples/blob/…
  • 它们的定义如下 public static final byte[] RAW_UPDATE_FAMILY = Bytes.toBytes("u");公共静态最终字节[] RAW_UPDATE_QUALIFIER = Bytes.toBytes("r");
  • 我想你创建的表 w/u 作为列族?
  • 是的。我用“u”作为列族创建了表格。
  • 看起来您确实在其他地方关闭了连接,而不是在显示的代码中。

标签: google-app-engine google-cloud-bigtable


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2012-02-13
    相关资源
    最近更新 更多