This happens only on node 0.9.x, 0.8.11 works just fine.
To check: npm install aligned-buffer + require it in node.js repl.
| #!/bin/sh | |
| # EDITOR should be set to rmate | |
| # Usage: git diff | rmatein | |
| # First arg may be set to file extension to hint rmate about file type | |
| if [ -n "${1}" ]; then | |
| POSTFIX=".${1}" | |
| fi | 
| // /mnt/sdd/testfile is 4Gb file | |
| // we read this file in 50 "threads" | |
| // node.js results: ~1700 ops/s 7 Mb/s | |
| // randomio results: ~290 ops/s 19 Mb/s | |
| var fs = require("fs"), | |
| fd = fs.openSync("/mnt/sdd/testfile", "r"), | |
| i = 0, | |
| l = 1204 * 64; | 
| // for some reason from time to time it may output WTFs | |
| // the way i run it: trace -f node buggy.js 2>&1 | grep '\(pwrite\|pread\|WTF\)' | |
| // all reads come after writes | |
| var fs = require("fs"), | |
| file = fs.openSync("aa", "a+"), | |
| bufs = {}, | |
| off = fs.fstatSync(file).size, | |
| offs = {}; | |
| var fs = require("fs"), | |
| file = fs.openSync("aa", "a+"), | |
| bufs = {}, | |
| off = fs.fstatSync(file).size, | |
| offs = {}; | |
| Object.keys(offs).forEach(function(o) { | |
| offs[o] += off; | |
| }); | 
| // rm aa; node buggy3.js | fgrep WTF | wc -l | |
| // different results for each run | |
| // writes are sequential | |
| function FileWriterQueue(file) { | |
| this.file = file; | |
| this.queue = []; | |
| } | |
| FileWriterQueue.prototype.write = function(buffer, offset, callback) { | 
| // writing 3 buffers starting from offset 0 | |
| // 3 bytes | 5 bytes | 10 bytes | |
| // second | first | third | |
| // last byte of the last buffer should be at offset 18 | |
| // file should be 18 bytes long | |
| // this is WRONG on linux, file grows up for 18 bytes after each run | |
| // and every single written buffer can't be read properly | |
| // | |
| // holy fuck, the whole day lost. | 
| web # id; npm config ls -l; npm config get user | |
| uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),26(tape),27(video) | |
| ; cli configs | |
| long = true | |
| registry = "https://registry.npmjs.org/" | |
| ; default values | |
| always-auth = false | |
| browser = "google-chrome" | |
| cache = "/root/.npm" | 
| web372 backpack # npm install --verbose aligned-buffer | |
| npm info it worked if it ends with ok | |
| npm verb cli [ 'node', | |
| npm verb cli '/usr/bin/npm', | |
| npm verb cli 'install', | |
| npm verb cli '--verbose', | |
| npm verb cli 'aligned-buffer' ] | |
| npm info using [email protected] | |
| npm info using [email protected] | |
| npm verb read json /opt/backpack/package.json | 
This happens only on node 0.9.x, 0.8.11 works just fine.
To check: npm install aligned-buffer + require it in node.js repl.
| <?php | |
| // observable user | |
| class User { | |
| const EVENT_TYPE_AFTER_LOAD_FOR_UPDATE = 'afterLoadForUpdate'; | |
| const EVENT_TYPE_AFTER_SAVE = 'afterSave'; | |
| private $Foo; |