0

を使用してGoogleクラウドプラットフォームの「悪いコマンドライン形式」大きな値を持つには、多くの場合、その後の要求は、その後で満たされる応答Error: bad command line formatMemcacheの応答:例の修正Node.jsの

に大きな文字列の結果を格納するon the Google App Engine Documentationを見つけましたセット機能の何かが短時間サーバーをオフラインにするかのように、Error: Server at <IP>:11211 not available

GAEの共有Memcacheと、違いなく1GB(1秒あたり10,000 MCU)の専用メモリを試しました。

複数のnodejs memcachedライブラリと大きなバッファとJSONフォーマットの値は、すべて同じエラーを返します。私の研究では、このエラーは250文字以上の「キー」から来る傾向がありますが、大きな値からではありません(Memcacheのクォータと値ごとの1MiBの制限の両方には不十分です)。ここで

は、実証するための完全なapp.jsです:

'use strict'; 

var express = require('express'); 
var Memcached = require('memcached'); 

var app = express(); 

// The environment variables are automatically set by App Engine when running 
// on GAE. When running locally, you should have a local instance of the 
// memcached daemon running. 
var memcachedAddr = process.env.MEMCACHE_PORT_11211_TCP_ADDR || 'localhost'; 
var memcachedPort = process.env.MEMCACHE_PORT_11211_TCP_PORT || '11211'; 
var memcached = new Memcached(memcachedAddr + ':' + memcachedPort); 

app.get('/', function(req, res, next) { 
    memcached.get('foo', function(err, value) { 
    if (err) { return next(err); } 
    if (value) { 
     console.log('Exists'); 
     return res.status(200).send('Value: ' + value); 
    } 


    var str = ""; 

    // Make a big string 
    var loops = 1000; 
    // works with loops = 10, fails with loops = 1000 
    for(var i = 0; i < loops; i++){ 
     str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    } 

    memcached.set('foo', str, 60, function(err) { 
     if (err) { return next(err); } 
     console.log('Created'); 
     return res.redirect('/'); 
    }); 
    }); 
}); 

var server = app.listen(process.env.PORT || 8080, '0.0.0.0', function() { 
    console.log('App listening at http://%s:%s', server.address().address, 
    server.address().port); 
    console.log('Press Ctrl+C to quit.'); 
}); 

同じ大きな文字列を手動でGoogleクラウドコンソールのフォームを使用してMemcacheの中で設定することができます。値を取得するための後続の呼び出しも機能します。私は値の大きさに基づいてMCUを大幅に誤算していますか?

ローカルで実行しているとき(OSX)、問題は発生せず、非常に大きな値を格納できます。エラーはデプロイされたコードでのみ発生します。どんなアドバイスや指示も大変ありがとうございます。

+1

修正プログラムはマージされており、次のリリースに含まれるはずです。 –

+0

これを修正する必要があります。 –

答えて

2

Memcacheプロキシに現在4KB以上の値が書き込まれないようにするバグがあります。その間にMemcacheサーバを混乱させるパケットを切り捨てるバッファがあります。当面は、4kb以上のデータは何らかのデータベースに保存する必要があります(クッキーは4kb以上のデータを保存することができないため、クッキーは動作しません)。問題が修正されたら、この質問を更新します。

編集:問題が修正されるようになりました。