2011-11-22 66 views
0

我在我的服务日志中看到很少有一个很难找到的错误。我想知道会导致这样的异常,所以我可以确定我们的代码碰巧触发它吗?不幸的是,我没有重现的步骤,所以我无法确定哪些调用代码导致它。间谍memcached转换异常,可能的错误?

  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); 

而且在间谍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; 
} 

一切都似乎是在顺序,它将正确接口的匿名实现放入队列中,稍后应进行优化。我错过了发生问题的地方。

+0

能够通过它,但我希望能够使用优化,如果有人有想法。 \t \t KetamaBinaryConnectionFactory connectionFactory的新= KetamaBinaryConnectionFactory(){ \t @覆盖 \t公共布尔shouldOptimize(){返回false; } \t}; –

回答

2

这是bug 96,7月份确定。你正在运行一个旧版本。

相关问题