java - spy memcached 转换异常,可能的错误?

标签 java memcached spymemcached

我在服务器日志中看到一个罕见的错误,该错误很难追踪。我想知道会导致这样的异常,以便我可以确定我们的代码中发生了什么触发它?不幸的是,我没有重现的步骤,所以我无法确定是什么调用了代码导致了它。

           java.lang.ClassCastException: net.spy.memcached.MemcachedClient$5 cannot be cast to net.spy.memcached.ops.GetOperation$Callback
           at net.spy.memcached.protocol.ProxyCallback.addCallbacks(ProxyCallback.java:25)
           at net.spy.memcached.protocol.binary.OptimizedGetImpl.addOperation(OptimizedGetImpl.java:28)
           at net.spy.memcached.protocol.binary.OptimizedGetImpl.<init>(OptimizedGetImpl.java:21)
           at net.spy.memcached.protocol.binary.BinaryMemcachedNodeImpl.optimizeGets(BinaryMemcachedNodeImpl.java:46)
           at net.spy.memcached.protocol.binary.BinaryMemcachedNodeImpl.optimize(BinaryMemcachedNodeImpl.java:35)
           at net.spy.memcached.protocol.TCPMemcachedNodeImpl.fillWriteBuffer(TCPMemcachedNodeImpl.java:177)
           at net.spy.memcached.MemcachedConnection.handleWrites(MemcachedConnection.java:374)
           at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:326)
           at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:219)
           at net.spy.memcached.MemcachedClient.run(MemcachedClient.java:1591)

更新: 我相当确定这是我这边的违规代码:

    Future<CASValue<Object>> profiles;
    String userID = "OBFUSCATED";
    profiles = memClient.asyncGets("PROFILES_" + userID);

并且在 spy memcached中它应该运行:

 public <T> OperationFuture<CASValue<T>> asyncGets(final String key,
  final Transcoder<T> tc) {

final CountDownLatch latch = new CountDownLatch(1);
final OperationFuture<CASValue<T>> rv =
    new OperationFuture<CASValue<T>>(key, latch, operationTimeout);

Operation op = opFact.gets(key, new GetsOperation.Callback() {
  private CASValue<T> val = null;

  public void receivedStatus(OperationStatus status) {
    rv.set(val, status);
  }

  public void gotData(String k, int flags, long cas, byte[] data) {
    assert key.equals(k) : "Wrong key returned";
    assert cas > 0 : "CAS was less than zero: " + cas;
    val =
        new CASValue<T>(cas, tc.decode(new CachedData(flags, data,
            tc.getMaxSize())));
  }

  public void complete() {
    latch.countDown();
  }
});
rv.setOperation(op);
addOp(key, op);
return rv;
}

一切似乎都按顺序进行,它将正确接口(interface)的匿名实现放入队列中,稍后应该对其进行优化。我不知道问题发生在哪里。

最佳答案

这是bug 96 ,于七月修复。您正在运行旧版本。

关于java - spy memcached 转换异常,可能的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229676/

相关文章:

java - Node.js API 通过 SQS 将数据发送给 Java Worker,并通过 SQS 将 Worker 的结果返回给 API

java - 在 Android 屏幕旋转后,是否有适当的方法来保留带有自定义对象列表的对话框?

php - 使用 Memcached/Elasticache 的 Nginx 全页缓存并使用 PHP 进行清除

mysql内存缓存

java - Memcached 性能随着要缓存的值大小的减小而下降

java - 有保证的 memcached 锁

java - 在 Swing JTable 中使用微调器作为编辑器有什么方便的方法吗?

memcached - 在没有 pidfile 的情况下监控 memcached 配置

java - memcached (spymemcached) 计数器和到期时间

java - JMockit:如何模拟 protected 方法?