[ 
https://issues.apache.org/jira/browse/IGNITE-3772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16919401#comment-16919401
 ] 

Alexandre SIMON edited comment on IGNITE-3772 at 8/30/19 10:28 AM:
-------------------------------------------------------------------

[~auszone] I even here have a limit of 2000 bytes with a PHP client.

 
{code:java}
<?php
$client = new Memcached();
$client->addServer("ignite1", 11211);
$client->setOption(Memcached::OPT_BINARY_PROTOCOL, true);

function storeAndAssert($key, $value) {
    global $client;

    echo "*** Test to store $key, len=".strlen($value)."***\n";

    if ($client->set($key, $value)) {
        echo "set return OK\n";

        if ($storedValue = $client->get($key) != $value) {
            echo "Server key value holding KO: ".$storedValue."\n";
        } else {
            echo "Server key value holding OK\n";
        }
    } else {
        echo "set return KO\n";
    }
}

function genValue($len) {
    return str_repeat('a', $len);
}

storeAndAssert('toto', 'val'.uniqid());
storeAndAssert('v1', genValue(100));
storeAndAssert('v1', genValue(500));
storeAndAssert('v1', genValue(1000));
storeAndAssert('v1', genValue(2000));
storeAndAssert('v1', genValue(1999));
{code}
Ouput :
{code:java}
*** Test to store toto, len=16***
set return OK
Server key value holding OK
*** Test to store v1, len=100***
set return OK
Server key value holding OK
*** Test to store v1, len=500***
set return OK
Server key value holding OK
*** Test to store v1, len=1000***
set return OK
Server key value holding OK
*** Test to store v1, len=2000***
set return OK
Server key value holding KO: 1
*** Test to store v1, len=1999***
set return OK
Server key value holding OK
{code}
As I suspect you would ask, PHP version is 7.2.21, libmemcached 1.0.18, pecl 
memcached 3.1.3.

here the configuration of the node :
{code:java}
<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd";>
    <bean id="ignite.cfg" 
class="org.apache.ignite.configuration.IgniteConfiguration">
       <property name="memoryConfiguration">
        <bean class="org.apache.ignite.configuration.MemoryConfiguration">
            <!-- Set the size of default memory region to 1GB. -->
            <property name="defaultMemoryPolicySize" value="#{1L * 1024 * 1024 
* 1024}"/>
            <property name="concurrencyLevel" value="4"/>
            <property name="pageSize" value="8192"/>
        </bean>
       </property>
       <property name="cacheConfiguration">
            <list>
                <!-- Partitioned cache example configuration (Atomic mode).
                <bean 
class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="default"/>
                    <property name="atomicityMode" value="ATOMIC"/>
                    <property name="backups" value="1"/>
                </bean>
-->
               <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="default"/>
                    <property name="cacheMode" value="REPLICATED"/>
                    <property name="atomicityMode" value="ATOMIC"/>
                    <property name="rebalanceMode" value="SYNC"/>
                </bean>            </list>
        </property>
<!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. 
-->
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <!--
                        Ignite provides several options for automatic discovery 
that can be used
                        instead os static IP based discovery. For information 
on all options refer
                        to our documentation: 
http://apacheignite.readme.io/docs/cluster-config
                    -->
                    <!-- Uncomment static IP finder to enable static-based 
discovery of initial nodes. -->
                    <!-- <bean 
class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
 -->
                    <!-- <bean 
class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> 
-->
                    <bean 
class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <!-- In distributed environment, replace with 
actual host IP address. -->
                                <value>ignite2:47500</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>
{code}
 

But the more important thing is that with the same runtime and code client from 
a real memcached (1.5.16), everything is fine...

Any change this get resolved ?

 

Thanks.


was (Author: lexsimon):
[~auszone] I even here have a limit of 2000 bytes with a PHP client.

 
{code:java}
<?php
$client = new Memcached();
$client->addServer("ignite1", 11211);
$client->setOption(Memcached::OPT_BINARY_PROTOCOL, true);

function storeAndAssert($key, $value) {
    global $client;

    echo "*** Test to store $key, len=".strlen($value)."***\n";

    if ($client->set($key, $value)) {
        echo "set return OK\n";

        if ($storedValue = $client->get($key) != $value) {
            echo "Server key value holding KO: ".$storedValue."\n";
        } else {
            echo "Server key value holding OK\n";
        }
    } else {
        echo "set return KO\n";
    }
}

function genValue($len) {
    return str_repeat('a', $len);
}

storeAndAssert('toto', 'val'.uniqid());
storeAndAssert('v1', genValue(100));
storeAndAssert('v1', genValue(500));
storeAndAssert('v1', genValue(1000));
storeAndAssert('v1', genValue(2000));
storeAndAssert('v1', genValue(1999));
{code}
Ouput :
{code:java}
*** Test to store toto, len=16***
set return OK
Server key value holding OK
*** Test to store v1, len=100***
set return OK
Server key value holding OK
*** Test to store v1, len=500***
set return OK
Server key value holding OK
*** Test to store v1, len=1000***
set return OK
Server key value holding OK
*** Test to store v1, len=2000***
set return OK
Server key value holding KO: 1
*** Test to store v1, len=1999***
set return OK
Server key value holding OK
{code}
As I suspect you would ask, PHP version is 7.2.21, libmemcached 1.0.18, pecl 
memcached 3.1.3.

But the more important thing is that with the same runtime and code client from 
a real memcached (1.5.16), everything is fine...

Any change this get resolved ?

 

Thanks.

> Large values are corrupted when saved via Memcached client
> ----------------------------------------------------------
>
>                 Key: IGNITE-3772
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3772
>             Project: Ignite
>          Issue Type: Bug
>          Components: clients
>    Affects Versions: 1.7
>            Reporter: Valentin Kulichenko
>            Priority: Major
>
> When a value which is larger than 32768 bytes is saved via Memcached client, 
> it ends up corrupted in cache. Most likely something wrong with the parsing 
> and the length of binary value is calculated incorrectly.
> Modified {{MemcacheRestExample}} which reproduces the issue is attached.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to