2016-07-07 5 views
2

ノードアプリケーションから「view_amount」の値を増やそうとしていますが、大きな負荷がかかる場合は半分の時間しかかかりません。残りの半分は、私はこのエラーを取得する:Firebaseトランザクションでのエラー:[エラー:設定]

[Error: set] 

これは私のコード(CoffeeScriptの)です:

@ref.firebaseClient.child('listings').child(val.listing_id).child("view_amount").transaction (current_value) -> 
    (current_value || 0) + 1 
, (error, committed, snapshot) -> 
    if error 
    console.log error 

そして、これは私が上でそれを設定していますパスです:

{ 
    "headline" : "Yeezy Boost 750", 
    "shoe_size" : 9.5, 
    "short_url" : "K5wv", 
    "size_type" : "men", 
    "status" : "active", 
    "style_code" : "BB1840", 
    "timestamp" : 1467842400000, 
    "view_amount" : 3043, 
    "watching_amount" : 2 
} 

何がトランザクションコードを失敗させる可能性がありますか?その特定のパスでトランザクションを1秒間に何回も実行している可能性はありますか?トランザクションを実行するのと同時に「style_code」を変更した場合、トランザクションは失敗しますか?

更新:これは私のNode workerに発生しているエラーです。私は "view_amount"というパス上でトランザクションをしようとしているので、 "set"エラーがかなり混乱していることがわかります。私は決してその道に「セット」をしていません。

Aug 17 12:15:44 Worker app/worker.1: error: Error: set 
Aug 17 12:15:44 Worker app/worker.1: at Error (native) 
Aug 17 12:15:44 Worker app/worker.1: at hi (/app/node_modules/firebase/database-node.js:222:395) 
Aug 17 12:15:44 Worker app/worker.1: at Yh (/app/node_modules/firebase/database-node.js:220:351) 
Aug 17 12:15:44 Worker app/worker.1: at /app/node_modules/firebase/database-node.js:220:286 
Aug 17 12:15:44 Worker app/worker.1: at /app/node_modules/firebase/database-node.js:145:167 
Aug 17 12:15:44 Worker app/worker.1: at Dg.h.ud (/app/node_modules/firebase/database-node.js:146:104) 
Aug 17 12:15:44 Worker app/worker.1: at rg.ud (/app/node_modules/firebase/database-node.js:137:364) 
Aug 17 12:15:44 Worker app/worker.1: at Xf.eg (/app/node_modules/firebase/database-node.js:135:280) 
Aug 17 12:15:44 Worker app/worker.1: at $f (/app/node_modules/firebase/database-node.js:123:109) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Ka.onmessage (/app/node_modules/firebase/database-node.js:121:467) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].EventTarget.dispatchEvent (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js:22:30) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._receiveMessage (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api.js:134:10) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].<anonymous> (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api.js:34:49) 
Aug 17 12:15:44 Worker app/worker.1: at emitOne (events.js:82:20) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].emit (events.js:169:7) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].<anonymous> (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:451:14) 
Aug 17 12:15:44 Worker app/worker.1: at pipe (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:37:40) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Pipeline._loop (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:44:3) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Pipeline.processIncomingMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:13:8) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.processIncomingMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/websocket_extensions.js:133:20) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._emitMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:442:22) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._emitFrame (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:405:19) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.parse (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:141:18) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.parse (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/client.js:62:58) 
Aug 17 12:15:44 Worker app/worker.1: at [object Object].IO.write (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/streams.js:80:16) 
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.ondata (_stream_readable.js:528:20) 
Aug 17 12:15:44 Worker app/worker.1: at emitOne (events.js:77:13) 
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.emit (events.js:169:7) 
Aug 17 12:15:44 Worker app/worker.1: at readableAddChunk (_stream_readable.js:146:16) 
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.Readable.push (_stream_readable.js:110:10) 
Aug 17 12:15:44 Worker app/worker.1: at TLSWrap.onread (net.js:523:20) 

答えて

3

貧弱なエラーメッセージについて申し訳ありませんが、このエラーは、(上記、で何かを、または/listings/<val.listing_id>/view_amountの下)に関連するパス上set()またはupdate()操作をしたトランザクションが完了する前に、と私たちはキャンセルしたことを意味ないミックスする私たちはあなたのset()の上または場合は、トランザクションを再実行する必要がある場合、我々は知らないので、トランザクションがあなたなど一般に

トランザクションの書き込みを、オーバーライドする必要があります、あなたは注意する必要がありset()set()transaction()データベースの同じ部分で呼び出します。

+0

@ frank-van-puffelen [OK]をクリックします。私が "viewing_amount"でトランザクションを実行するのと同じ時間に "watching_amount"を設定すると、トランザクションが通過しない可能性があります。 "watching_amount"を設定する代わりに更新するとどうなりますか?トランザクションの実行に関連して、兄弟パスの "更新"と "設定"に違いはありますか? –

+0

update()とset()も同様に動作します。しかし、トランザクションが動作しているデータには影響しないため、トランザクション()を問題なく実行している場所の兄弟*を設定することができます。したがって、/ foo/barと/ foo/bazのトランザクションは正常ですが、/ foo/barのトランザクションと/ fooまたは/ foo/bar/foobarを設定するとエラーが発生します。 –

+0

うーん...ちょっと混乱するよ。私はいつでも "view_amount"パス上に "set"をしています(更新された質問を参照)。私はアイテム自体に一般的な "更新"を行っているかもしれませんが、私は "view_amount"を更新していません。そのアイテムの子ノードでトランザクションを実行しているときにアイテム自体に「更新」を行うと、エラーが発生する可能性がありますか?その特定のアイテムとパスについて、同時に多くのトランザクションが同時に発生することがあります。それは何か問題を引き起こすだろうか? –