Reputation: 2344
I'm trying to increment the value of "view_amount" from my node app in the background, but it only seems to work half the time when there's a big load on it. The other half, I get this error:
[Error: set]
This is my code (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
And this is the path I'm setting it on:
{
"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
}
What could make the transaction code fail? Is it possible I'm running a transaction too many times a second on that specific path? Does the transaction fail if I change the "style_code" at the same time as running the transaction?
Update: This is the error I'm getting on my Node worker. I find the "set" error quite confusing, since I'm trying to do a transaction on the path "view_amount". I'm at no point doing a "set" on that path.
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)
Upvotes: 2
Views: 477
Reputation: 16309
Sorry for the poor error message, but this error means that you did a set()
or update()
operation on a related path (anything at, above, or below /listings/<val.listing_id>/view_amount
) before the transaction completed, and so we cancelled the transaction since we don't know if we should re-run the transaction on top of your set()
or if your set()
should override the transaction's write, etc.
In general, you need to be careful not to mix set()
and transaction()
calls on the same part of your database.
Upvotes: 3