Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未返回的MemcachedClient cas操作已存在_Java_Memcached - Fatal编程技术网

Java 未返回的MemcachedClient cas操作已存在

Java 未返回的MemcachedClient cas操作已存在,java,memcached,Java,Memcached,我有以下使用net.spy.memcached.MemcachedClient的单元测试 @Test public void testCASFailsWrite() throws Exception { Integer begin = new Integer(3); client.set(key, 0, begin); CASValue<Object> casValue = client.gets(key); Assert.assertNo

我有以下使用net.spy.memcached.MemcachedClient的单元测试

    @Test
public void testCASFailsWrite() throws Exception {
    Integer begin = new Integer(3);
    client.set(key, 0, begin);

    CASValue<Object> casValue = client.gets(key);

    Assert.assertNotNull(casValue);
    Assert.assertTrue(casValue.getValue() instanceof Integer);

    Integer fromCache = (Integer) casValue.getValue();  
    Integer nextSeq = new Integer(fromCache + 9);

    long myInvalidValue = casValue.getCas() - 1;

    CASResponse response = client.cas(key, myInvalidValue, nextSeq);
    Assert.assertEquals(CASResponse.EXISTS, response);
}
@测试
public void testCASFailsWrite()引发异常{
整数开始=新整数(3);
client.set(key,0,begin);
CASValue CASValue=client.get(键);
Assert.assertNotNull(casValue);
Assert.assertTrue(casValue.getValue()instanceof Integer);
整数fromCache=(整数)casValue.getValue();
整数nextSeq=新整数(fromCache+9);
long myInvalidValue=casValue.getCas()-1;
CASResponse=client.cas(key,myInvalidValue,nextSeq);
Assert.assertEquals(CASResponse.EXISTS,response);
}

我希望CASResponse显示该值已经存在,因为我有一个无效的casValue,但是在最后一次断言时它返回为OK。我希望确保我的密钥句柄在多个JVM中同时更新。我的单元测试通过com.thimbleware.jmemcached.AbstractCache的实现使用嵌入式memcache进程。当我的密钥已经在memcache中,并且我没有相同的casValue(),我是否可以依赖CASResponse来显示存在?

这可能是因为您正在对memcached的全新实例运行此测试。cas值在memcached实例中是全局的,第一个集合接收cas值1,第二个集合获取cas值2,依此类推。运行测试时,密钥的cas值为1。由于您的无效cas是通过减少此密钥的cas值生成的,因此您的无效cas值最终为0。在更新中指定cas值0意味着忽略cas,只进行更新。将myInvalidValue设置为像123456这样的随机数,这个问题就会消失。另一件有趣的事情是,如果您在上面两次运行测试,它将通过第二次测试。

我更新了代码并将myInvalidValue设置为459,它仍然响应Ok。有趣的是,我看到casValue正在更新。似乎com.thimbleware.jmemcached.AbstractCache未启用cas支持。我将这个单元测试指向一个外部memcached服务器,它可以按预期工作。