PMXBOT Log file Viewer

Help | Karma | Search:

#mongodb logs for Sunday the 14th of February, 2016

(Back to #mongodb overview) (Back to channel listing) (Animate logs)
[00:06:07] <joannac> kryo_: i don't understand the question. Why can't you just index fieldName.obj ?
[00:07:29] <kryo_> joannac: yeah i googled some more and found out you can just use dot notation
[00:07:52] <kryo_> i'm using mongoose for nodejs so it wasn't obvious at first
[00:09:23] <joannac> cool
[00:15:29] <StephenLynx> i recommend you dont use mongoose, kryo_
[00:15:33] <StephenLynx> its nothing but trouble
[00:15:41] <StephenLynx> and extremely slow while at it
[00:36:46] <zamnuts> mongodb v3.0.8, nodejs driver v2.0.55: cursor.count never invokes callback: cursor.find(true,function(err,count){/* never gets here */}); cursor server = null, cursor connection = null, but cursor find query is _correct_ any ideas?
[00:37:11] <zamnuts> s/cursor.find/cursor.count/
[00:37:39] <StephenLynx> try updating the driver
[00:38:04] <StephenLynx> 2.1.7 is the latest release
[00:38:55] <zamnuts> StephenLynx, 2.0.55 is the latest 2.0 patch version, i've tried updated to 2.1.7 but other queries aren't working as expected, level of effort is too great to upgrade minor versions right now
[00:39:16] <zamnuts> s/updated/updating/ (grr, can't type today)
[00:39:18] <StephenLynx> hm, werid.
[00:40:07] <StephenLynx> show me your code
[00:41:44] <zamnuts> StephenLynx, will take a minute to prepare, the cursor builder isn't so simple
[00:42:12] <zamnuts> also, i can't reproduce this locally, only in prod, which is making this more difficult to troubleshoot
[00:42:48] <zamnuts> already double checked deps and versions on both envs for nodejs engine, npm package versions, etc.
[00:42:57] <StephenLynx> cursor builder?
[00:43:01] <StephenLynx> hm
[00:43:09] <StephenLynx> then I assume your issue is not with the driver or the code.
[00:43:17] <StephenLynx> but with your data or your server in production.
[00:46:00] <zamnuts> i agree w/ "not with driver or code but with data or prod server"
[00:46:25] <zamnuts> I'm more or less wondering if anyone else has had this problem before and what they did to resolve it
[00:46:44] <StephenLynx> your count is never returning?
[00:47:05] <StephenLynx> you sure it just isn't taking too long?
[00:47:08] <zamnuts> StephenLynx, correct, it _never_ invokes the callback
[00:47:19] <StephenLynx> did you check for your running queries?
[00:47:42] <zamnuts> i checked db.currentOp(); and the count is not present, just the normal local.oplog.rs stuff
[00:47:50] <StephenLynx> welp
[00:48:00] <zamnuts> most troubling!
[00:48:00] <StephenLynx> try the same count on the terminal
[00:48:09] <zamnuts> i have, and it responds quickly
[00:48:12] <zamnuts> :)
[00:48:12] <StephenLynx> hmmm
[00:48:21] <StephenLynx> same server, same query?
[00:48:30] <StephenLynx> it might be an issue with the driver in the end.
[00:48:35] <zamnuts> yup yup, only difference is one is from the application, and one is from the mongo shell
[00:49:05] <StephenLynx> when you try with the newest version of the driver, it worked for this?
[00:49:49] <zamnuts> StephenLynx, i get errors before it gets that far :( so i have no idea
[00:50:13] <zamnuts> it seems like the cursor.count never sends data over the wire, like i said above, cursor's server and connection are both null
[00:50:34] <StephenLynx> no idea, then.
[00:50:44] <StephenLynx> if I were you, I would try and fix these errors
[00:50:48] <zamnuts> StephenLynx, thanks for at least responding and trying
[00:50:52] <StephenLynx> and if even then the newest version doesn`t work
[00:50:56] <StephenLynx> I would contact the driver dev
[00:51:00] <StephenLynx> I know I found a bug on it once
[00:51:08] <StephenLynx> and the code is not exactly
[00:51:10] <StephenLynx> pristine
[00:51:16] <kryo_> StephenLynx: mongoose seems a whole lot better than the standard nodejs driver, what would you reccommend instead?
[00:51:24] <StephenLynx> the standard node driver.
[00:51:29] <kryo_> hmm
[00:51:32] <StephenLynx> mongoose is just a pile of crap on top of the driver
[00:51:35] <StephenLynx> check the dependencies.
[00:52:04] <zamnuts> +1 for mongoose is built on mongodb native driver :)
[00:52:08] <StephenLynx> https://www.npmjs.com/package/mongoose
[00:52:14] <StephenLynx> Dependencies (12)
[00:52:22] <StephenLynx> mongodb
[00:52:28] <StephenLynx> you gain nothing from using mongoose.
[00:52:42] <StephenLynx> its just more bugs and crappy behaviour
[00:52:48] <kryo_> there was something about the standard driver
[00:52:54] <kryo_> too many callbacks or something
[00:52:55] <kryo_> lol
[00:52:58] <StephenLynx> nope
[00:53:04] <StephenLynx> it even offers promises now.
[00:53:09] <StephenLynx> which I avoid because they are cancer
[00:53:09] <zamnuts> the native driver uses promises now
[00:53:18] <StephenLynx> but are there for anyone that wishes to use them,
[00:54:19] <StephenLynx> and honestly
[00:54:32] <StephenLynx> this whole "callbacks are bad mmmkay" is just a dumb meme
[00:54:41] <StephenLynx> nesting with callbacks is no worse than nesting with fors or ifs.
[00:55:24] <StephenLynx> and as easily fixable.
[00:56:05] <StephenLynx> but since the node community is full of dumbasses, they fall for the meme and sacrifice performance in the process.
[00:56:33] <kryo_> i can't remember if it was callbacks or what
[00:56:38] <zamnuts> StephenLynx, nesting w/ callbacks != nesting w/ fors/ifs... closures being the major difference
[00:56:46] <StephenLynx> same crap
[00:56:54] <kryo_> but i had a friend that used the mongo driver, while i used mongoose, seperate projects
[00:57:10] <kryo_> and we found something that mongoose added that was a big help
[00:57:14] <kryo_> can't remember what it was xP
[00:57:16] <StephenLynx> crutches
[00:57:21] <zamnuts> kryo_, forced schema perhaps?
[00:57:24] <StephenLynx> mongoose is just a crutch.
[00:57:34] <StephenLynx> so newbies usually go with them.
[00:57:44] <StephenLynx> being newbies they don`t know better than to avoid crutches.
[00:57:56] <StephenLynx> and surprising no one, become actual crippled in the long term.
[00:57:59] <kryo_> with php this sort of thinking is commonplace
[00:58:06] <kryo_> no one uses the standard mysql driver
[00:58:07] <StephenLynx> yup
[00:58:18] <kryo_> not since the 90s :P
[00:58:26] <StephenLynx> and you can see clearly where this culture led the PHP community/
[00:58:41] <StephenLynx> bloat on top of bloat on top of bloat
[00:58:47] <zamnuts> kryo_, the standard driver is _not_ recommended in PHP... use PDO as your minimum integration point
[00:58:59] <StephenLynx> they can't build software that doesn't require a whole cluster for the life in them
[00:59:25] <kryo_> honestly i find php frameworks like laravel/symfony really nice, the bloat is kinda worth it
[00:59:37] <StephenLynx> laravel is pure garbage
[00:59:45] <StephenLynx> it is one of the slowest frameworks for PHP
[00:59:50] <kryo_> it's convenient though
[00:59:55] <zamnuts> the lack of documentation in laravel drives me up a wall, for one.
[01:00:29] <StephenLynx> the db wraper for laravel is crap too.
[01:00:33] <StephenLynx> useless
[01:00:33] <kryo_> yeah you end up having to read the source..
[01:01:10] <StephenLynx> i know of a community project
[01:01:16] <StephenLynx> that crowdfunded 12k
[01:01:22] <StephenLynx> completely failed
[01:01:29] <StephenLynx> mostly because of laravel
[01:01:34] <kryo_> lol :P
[01:01:45] <kryo_> not because of the devs' own incompetence
[01:01:47] <kryo_> ?
[01:01:50] <StephenLynx> that too
[01:02:01] <StephenLynx> it couldn't perform better than a 8 year old PHP software they were using
[01:02:13] <StephenLynx> some roadblocks were purely because of laravel
[01:02:26] <StephenLynx> written by some 15yo
[01:02:33] <StephenLynx> that grew up to become some coke addict
[01:02:39] <StephenLynx> and this guy couldn't do better.
[01:02:45] <StephenLynx> with laravel
[01:02:57] <StephenLynx> any web framework is radioactive ebola cancer to be honest.
[01:03:01] <kryo_> idk eloquent is really handy
[01:03:13] <kryo_> makes it really easy to do some tasks
[01:03:14] <StephenLynx> they are the epitome of everything wrong with web developers
[01:03:24] <zamnuts> any clue as to where i can get a changelog for the native nodejs mongodb driver changes from 2.0 to 2.1? not finding anything...
[01:03:27] <StephenLynx> the lazyiness, the incompetence, the short sighting
[01:03:33] <kryo_> i'm at the point where i know laravel well enough that i'm not bothered by the lack of documentation though
[01:03:51] <zamnuts> i guess the answer is JIRA, but, ugh, deciphering tickets.
[01:03:56] <zamnuts> perhaps a migration guide?
[01:05:08] <StephenLynx> I found it
[01:05:13] <StephenLynx> go to the source
[01:05:22] <StephenLynx> its on history.md
[01:05:34] <zamnuts> oooo, ty StephenLynx
[01:06:22] <StephenLynx> weird, I never had any issues with changes on the mongo driver
[01:06:32] <StephenLynx> I have been keeping up my software for almost a year now with it
[01:06:48] <zamnuts> omg "Implements the new GridFS specification" ...i'm screwed, this is going to be like a crate full of cans of worms.
[01:07:02] <zamnuts> for 2.1.0
[01:07:21] <StephenLynx> didn't change a thing for me
[01:07:27] <StephenLynx> and my software heavily relies on gridfs
[01:08:15] <zamnuts> StephenLynx, i use gridfs-locks, do you?
[01:08:19] <kryo_> nodejs really needs to find some solution for the amount of callbacks involved
[01:08:31] <kryo_> i guess javascript ES6 makes the syntax nicer
[01:08:37] <zamnuts> kryo_, those are "promises" and "events"
[01:09:09] <kryo_> after working on ES6 code for a while the amount of times the word "function" appears in my code is starting to make me sick :P
[01:09:12] <StephenLynx> promises are crap
[01:09:13] <kryo_> events sounds good
[01:09:20] <StephenLynx> there is nothing wrong with callbacks.
[01:09:22] <kryo_> i hear a lot of mixed opinions on promises
[01:09:27] <StephenLynx> they are slow.
[01:09:33] <StephenLynx> until they are as fast as callback, they are useless.
[01:09:36] <zamnuts> StephenLynx, we've been over "promises are crap" i was just responding to "solution for the amount of callbacks"
[01:09:44] <StephenLynx> the thing is:
[01:09:48] <StephenLynx> there is not a solution
[01:09:52] <StephenLynx> because there is not a problem.
[01:10:07] <zamnuts> could use Caolan's async lib
[01:10:18] <kryo_> this is the issue i have with callbacks :P http://puu.sh/n58Py/4c7466257b.png
[01:10:20] <StephenLynx> performance loss with zero gains
[01:10:30] <StephenLynx> that is just crap code.
[01:10:31] <kryo_> count-em, 10 closing brackets
[01:10:36] <StephenLynx> nothing pertinent to callbacks ther.
[01:10:41] <StephenLynx> the person that wrote that is just an idiot.
[01:10:45] <kryo_> cause every callback has an "err" parameter that needs to be checked
[01:10:49] <StephenLynx> so
[01:11:05] <StephenLynx> create a function
[01:11:08] <StephenLynx> and unest it.
[01:11:10] <kryo_> so the amount of brackets required is ridiculous
[01:11:11] <zamnuts> async.series ftw.
[01:11:13] <StephenLynx> is not callback`s fault.
[01:11:20] <kryo_> well then you end up with 25 functions
[01:11:25] <StephenLynx> false.
[01:11:46] <StephenLynx> you are extrapolating for the sake of supporting your argument.
[01:12:13] <kryo_> it's my code
[01:12:20] <StephenLynx> its awful.
[01:12:26] <StephenLynx> and is not callback`s fault.
[01:12:35] <StephenLynx> that code is just bad. period.
[01:12:36] <kryo_> i didn't pay much attention to the code style since i'm trying to write it quickly
[01:12:46] <kryo_> so i don't mind it being called bad
[01:12:49] <StephenLynx> so don`t blame callbacks.
[01:12:54] <StephenLynx> it was your fault.
[01:13:00] <kryo_> but if i count the number of callbacks used i guarantee it will be 10-20
[01:13:11] <StephenLynx> 2
[01:13:19] <StephenLynx> there are just TWO callbacks on that whole mess.
[01:13:19] <kryo_> that's just 1 function though
[01:13:24] <StephenLynx> 3 actually
[01:13:29] <kryo_> if i go through the whole app
[01:13:36] <kryo_> ~400 lines
[01:13:55] <kryo_> there's like 1 callback every 10 lines
[01:14:33] <StephenLynx> and that whole design is awful, too.
[01:14:39] <StephenLynx> your initial function doesn't take a callback to it.
[01:14:49] <StephenLynx> so you can't actually abstract and handle any error.
[01:14:57] <zamnuts> kryo_, http://pastebin.com/suttzSPP
[01:15:06] <kryo_> funny enough there's precisely 25 callbacks in the 40 lines
[01:15:33] <kryo_> *400 lines
[01:15:34] <zamnuts> i only count 3 callbacks hmm
[01:15:40] <StephenLynx> if your top function were to take a callback to it, you could remove one callback, at the end
[01:15:41] <kryo_> talking about the whole app
[01:15:48] <zamnuts> oh.
[01:15:56] <StephenLynx> because the thing that called this function could handle the callback of the last function that takes a callback
[01:16:19] <StephenLynx> zamnuts, those libraries are awful.
[01:16:26] <StephenLynx> they have a huge performance impact
[01:16:30] <kryo_> so i should not handle each error individually?
[01:16:30] <StephenLynx> and makes code less intuitive
[01:16:35] <zamnuts> StephenLynx, everything is awful to you :(
[01:16:44] <StephenLynx> you could send the error to the top callback.
[01:16:56] <StephenLynx> and then have the thing that started the operation to handle it.
[01:17:02] <zamnuts> kryo_, the point is, if you set up your error handling correctly in Transaction/Balance, you don't have to handle each error individually
[01:17:20] <kryo_> seems like i could provide more specific error messages this way
[01:17:33] <kryo_> especially helpful for debugging
[01:17:38] <zamnuts> kryo_, why? what is more specific than a properly constructed Error object?
[01:17:42] <StephenLynx> that
[01:18:07] <kryo_> this way i'm logging the error and a specific message about it
[01:18:15] <zamnuts> new Error(...).stack new Error(...).code .message, etc.
[01:18:20] <kryo_> but i guess i could just look at the stacktrace to find the line that caused the error
[01:18:49] <StephenLynx> https://gitgud.io/LynxChan/LynxChan/blob/master/src/be/engine/domManipulator/static.js#L367
[01:18:51] <StephenLynx> for example
[01:19:12] <StephenLynx> see how the callback this function takes is passed directly to writeData
[01:19:12] <zamnuts> if you attach a specific error code to your error object when it is created, then you can use at as a lookup in a hash table or something for UX/UI side of things if that is applicable
[01:19:32] <StephenLynx> so this function doesn`t have to handle the error from that, the thing that called this function handles that error
[01:20:02] <StephenLynx> this way you can abstract the parts of your code
[01:20:44] <zamnuts> aside: time to graduate from console.log to a _real_ log lib, e.g. winston
[01:22:03] <StephenLynx> using a lib for loggin is awful
[01:22:24] <kryo_> for a 400 line project i think i'll stick with console.log :P
[01:22:36] <StephenLynx> I have a 30k LOC one and I use console.log
[01:22:41] <StephenLynx> or crashes to output stacks
[01:22:54] <zamnuts> micro services arch?
[01:23:00] <StephenLynx> no
[01:23:09] <zamnuts> then why do you want a peristent application to crash?
[01:23:10] <StephenLynx> pretty much monolithic
[01:23:15] <StephenLynx> debug mode
[01:23:28] <StephenLynx> it crashes to expose the full error stack
[01:23:37] <StephenLynx> it might be possible to get that without a crash though
[01:23:39] <StephenLynx> but meh
[01:23:39] <zamnuts> StephenLynx, console.log(err.stack) ?
[01:23:44] <StephenLynx> yeah
[01:23:48] <StephenLynx> I should`ve checked that.
[01:24:00] <StephenLynx> but it was never an issue
[01:24:25] <StephenLynx> since I have a special mode for the crashes
[01:26:47] <kryo_> hmmmm ty for that pastebin zamnuts
[01:27:51] <zamnuts> kryo_, yw, just a diff way to think about it, many people frown on the use of that async module in favor of promises although it is still maintained and improved upon
[01:28:17] <kryo_> i have used promises before but it's a pretty big job to figure it all out
[01:29:21] <kryo_> async looks a *lot* simpler
[01:54:58] <rpdprd> so I'm using genghis, and I have a field named "default". Unlike the other fields which simply appear as fieldName without quotes, default appears as "default" with quotes. Any idea why this is?
[01:56:07] <StephenLynx> what is genghis?
[01:56:22] <rpdprd> http://genghisapp.com/
[01:56:41] <StephenLynx> you should try to contact their devs.
[01:57:30] <rpdprd> yeah, it seemed a bit odd because in mongo shell, the "default" field name doesn't appear any differently. maybe it's something json/javascript related
[01:57:41] <rpdprd> as long as mongodb doesn't have an issue with field named "default", I'm not concerned
[01:57:50] <StephenLynx> let me check that
[01:57:59] <StephenLynx> it would be {default:"thing"}
[01:58:04] <StephenLynx> that would trigger your issue?
[01:59:34] <StephenLynx> thats an issue with your thingie.
[01:59:43] <StephenLynx> default isn't a reserved word on js, afaik
[02:00:08] <StephenLynx> except for when you use a switch
[02:00:23] <rpdprd> thanks. I didn't think so either. it just seemed like a weird thing for genghis (running on PHP) to do. I'm going to stop using it sooner or later so it's not a big deal
[02:00:34] <StephenLynx> hm, actually
[02:00:56] <StephenLynx> I think default is a reserved word after all
[02:01:23] <StephenLynx> I am trying to declare an object {default:1}
[02:01:29] <StephenLynx> and it doesn`t work
[02:01:43] <StephenLynx> not even when I use quotes
[02:01:54] <rpdprd> what do you mean declare an object? as in inserting it?
[02:02:09] <StephenLynx> just declaring an object on a variable like that on node
[02:02:11] <StephenLynx> it won't go
[02:02:28] <rpdprd> maybe related to http://stackoverflow.com/questions/18934493/how-do-i-set-default-value-of-an-integer-in-mongodb?
[02:02:51] <rpdprd> maybe node/mongoose specific?
[02:03:01] <StephenLynx> could be
[02:03:05] <StephenLynx> something with V8
[02:03:14] <StephenLynx> sonce the terminal client doesn`t have any issues
[02:03:26] <rpdprd> genghis on the other hand runs on php, so I'm not sure how to explain that. working fine on terminal for me as well
[02:03:40] <StephenLynx> hm, actually
[02:03:42] <StephenLynx> it worked
[02:04:02] <StephenLynx> so I dunno
[02:04:09] <StephenLynx> I think its something with your thing
[02:05:09] <rpdprd> thanks. https://docs.mongodb.org/manual/reference/limits/ also doesn't mention "default" as some reserved keyword, etc, so either i'll avoid it for now, or change it to something like "def" instead
[02:05:48] <StephenLynx> i wouldnt be concerned with mongo
[02:06:20] <StephenLynx> node on the other hand
[02:06:24] <StephenLynx> doesn't play ball
[02:07:39] <rpdprd> genghis is a web interface (uses javascript), since default is a js keyword, it might be problematic with node and genghis
[02:56:25] <zamnuts> rpdprd, mongodb has no problem w/ the word "default" being a key in an object, even in standard js you could even write var a = {default:1} -- don't let bad syntax highlighters fool you
[03:03:28] <rpdprd> zamnuts: thanks. I looked into genghis and it seems to be something with javascript
[03:03:54] <rpdprd> or perhaps genghis. the json file of the data seems correct, it's probably genghis's problem
[03:03:59] <zamnuts> rpdprd, i'm curious as to what, i just scanned the src and couldn't find where it would be a problem
[03:04:15] <zamnuts> the src of genghis, that is
[03:04:29] <rpdprd> zamnuts: yea, I did the same thing, did a search for "default" in php, couldn't find anything constructive
[03:04:45] <rpdprd> zamnuts: same as the json served by the php server, so it makes me think it's something in the genghis frontend
[03:06:38] <rpdprd> {"count":1,"page":1,"pages":1,"per_page":50,"offset":0,"documents":[{"_id":{"$genghisType":"ObjectId","$value":"56bfed849287bf9fb9e5b05a"},"default":"hello world"}]} is the json document served by genghis, and nothing seems odd about the default field, so I suspect it's something in the frontend (that genghis fetches on demand from a cdn)
[03:07:32] <zamnuts> rpdprd, sounds like it
[03:07:36] <zamnuts> or looks? yea.
[07:51:34] <Drzoid> o/
[07:54:35] <Drzoid> someone may guide me about setting up a one-collection replication from a master db to a new (empty) slave one ? (i'm too affraid to make mistake since english isn't my native language and i didn't understood the docs well ^^')
[11:59:25] <bilr> hello. Is there a dedicated channel for generic wiredtiger question? Is it ok to ask here if there isnt?
[13:04:44] <kurushiyama> I am currently reworking the spec files for the rpms. Is there a preferred branch I should work on? Currently, I am working on 3.2
[20:49:12] <jiffe> so what exactly does 'replSet need to rollback, but in inconsistent state; mean?
[20:59:57] <jiffe> that's followed by minvalid: 56c0be65:15 our last optime: 56c0be5f:5
[21:56:15] <kurushiyama> jiffe: It is clear to you what rollback means or shall I explain it?
[22:25:28] <pac1> Hello. I have cursor running in mongo shell, with an insert: d.forEach(function(x){ db.tokens.insert(x,{w:0})}). This runs very slowly. (about 1 insert per second.) No indexes on tokens. Why is it so slow?
[22:29:57] <pac1> MongoDB shell version: 3.2.1
[23:08:05] <kurushiyama> Freman: Increase memory.
[23:08:07] <kurushiyama> ?
[23:09:00] <jiffe> kurushiyama: I know what rollback means, I don't know why mongodb crashes because of this
[23:09:12] <Freman> CRITICAL - Memory Usage: 200.10GB resident, 368.34GB virtual, 178.31GB mapped, 356.61GB mappedWithJournal <- tbh, not even sure wtf
[23:09:40] <Gasher> oh, you're an op here too GothAlice :D
[23:09:44] <Gasher> hi everyone
[23:09:51] <Freman> Hi dr nick
[23:10:13] <Gasher> I just wrote something to mongodb with mongoose and I got a field "__v" - what is it?
[23:10:13] <kurushiyama> jiffe: Well, wait a sec. Freman should be pretty easy to handle, then I will help you.
[23:10:56] <kurushiyama> Gasher: optimistic lock version field?
[23:11:06] <Gasher> what is it?
[23:11:19] <kurushiyama> Gasher: Google it. pretty hard to explain.
[23:11:37] <kurushiyama> Freman: physical memory on that machine?
[23:12:06] <Freman> thanks, kurushiyama, it might not seem like it, but I do appreciate the help and info you guys offer up. I'm just getting tired of being lumped with the organizations mongo issues and wish they'd just hire someone that knew mongo (I'm closer to being a MySQL support engineer - a job I actually turned down before sun/oracle bought it than anything Mongo related)
[23:13:04] <kurushiyama> Freman: I AM a certified MongoDB associate...
[23:13:05] <Gasher> kurushiyama; tried googling and ducking, didn't find much
[23:13:51] <kurushiyama> Gasher: Explains it pretty well: https://en.wikipedia.org/wiki/Optimistic_concurrency_control
[23:15:09] <Gasher> danke
[23:15:12] <Freman> so, looks like we have 256gb of memory
[23:15:27] <kurushiyama> jiffe: Ok, here is what I would do: Create a backup of both an instance without the need to rollback and one of the instance which needs rollback (datafiles, if necessary)
[23:16:28] <kurushiyama> jiffe: Then, follow the procedure described here https://docs.mongodb.org/manual/core/replica-set-rollbacks/
[23:17:08] <Gasher> kurushiyama; I didn't understand much from that website... Should I just leave that field be?
[23:17:28] <kurushiyama> Gasher: Aye.
[23:17:35] <Gasher> ok, thx
[23:18:11] <kurushiyama> Freman: WT or MMAPv1?
[23:18:45] <Freman> and mongo 2.6.5
[23:19:03] <Freman> Not sure, how do I ask it?
[23:19:24] <Freman> I assume because we're not using Mongo 3 that it's probably MMAPv1
[23:21:20] <jiffe> kurushiyama: so reading that it sounds like that is applicable if the rollback was already completed successfully
[23:21:42] <kurushiyama> Freman: Yes. Well, the memory surely is closing in at it's limits, but quite a bit away from being critical. What is the IOWait percentage? Use "top" on the machine to find a rough estimate. While at it, the system load might be helpful to determine wether you are in real trouble or not.
[23:22:04] <kurushiyama> jiffe: Aye.
[23:22:37] <kurushiyama> jiffe: But you might want to inspect the according data, if created. If there is not anything to find. I'd resync.
[23:23:06] <Freman> systen load is 0.47 over 5 mins, and io is pretty close to idle - disk access is in kb/s
[23:23:08] <jiffe> kurushiyama: in my case the mongod is crashing before rolling back complaining about some inconsistent state
[23:23:27] <Freman> (nothing like our logging servers which run in the mb/s and a load of like 4)
[23:23:45] <jiffe> I really hate resyncing, it takes a week+ to do a resync, I need to find ways to fix things without having to resync
[23:24:06] <kurushiyama> jiffe: Oh. A _week_? What is your data size?
[23:24:17] <Freman> Is now a good time to push the higher ups to let us upgrade and switch engines? :D
[23:24:18] <jiffe> these are 30TB machines
[23:24:37] <jiffe> we've got about 56TB across two replica sets total
[23:24:55] <kurushiyama> Freman: use the top command on the shell (bash/zsh)
[23:25:31] <kurushiyama> jiffe: Well, that sounds about right about the duration. But the setup sounds rather strange.
[23:25:32] <Freman> yeh "top - 10:19:04 up 489 days, 4:33, 1 user, load average: 0.60, 0.48, 0.43" it's not doing much
[23:25:53] <jiffe> kurushiyama: what about the setup sounds strange?
[23:26:13] <kurushiyama> Freman: there should be an value in the CPU line with "wa"
[23:26:26] <kurushiyama> jiffe: very large sizes for a single shard.
[23:26:37] <jiffe> kurushiyama: how is that strange?
[23:26:47] <Freman> Cpu(s): 2.9%us, 0.4%sy, 0.0%ni, 96.6%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
[23:27:01] <kurushiyama> jiffe: Sounds like you missed the sweet spot for getting the most bang for the buck/server.
[23:27:11] <kurushiyama> Freman: looks good.
[23:27:42] <Freman> yeh, just getting full right?
[23:27:44] <jiffe> actually that's why we chose this setup
[23:27:54] <kurushiyama> Freman: Aye.
[23:27:55] <jiffe> 12 drives 3TB each
[23:28:12] <kurushiyama> jiffe: Well, I _need_ to know your provider...
[23:28:18] <Freman> switching to WT will help? or is this memory thing going to be a hard limit?
[23:28:28] <jiffe> provider?
[23:28:32] <kurushiyama> jiffe: Or do you host yourself?
[23:28:47] <jiffe> yeah these are our machines in our own datacenters
[23:28:52] <kurushiyama> jiffe: like Softlayer, i thought. Only much, much cheaper ;)
[23:29:09] <kurushiyama> Freman: That is not an easy question to answer.
[23:29:45] <Freman> this is a cluster - I believe, of 3 nodes.
[23:29:46] <jiffe> nothing about this setup is virtualized
[23:30:44] <kurushiyama> jiffe: SL offers metal, too.
[23:30:53] <Freman> 4 nodes, + 1 hidden + 1 arbiterOnly
[23:31:04] <kurushiyama> Freman: I doubt that.
[23:31:11] <kurushiyama> Ah, no, works
[23:31:13] <kurushiyama> hidden
[23:31:31] <jiffe> I see, no we're a telco so plenty of bandwidth and rackspace
[23:32:18] <kurushiyama> Freman: To make a long story short: You wont get a suggestion on wether to migrate to WT or not. There are so many factors to be taken into account, this can easily take hours (and I make my living of those hours) ;)
[23:32:20] <jiffe> we used supermicro machines and seagate HDs so the machines came out to be pretty cheap
[23:32:20] <Freman> (yeh helps if you actually connect and ask it how it's configured vs going off overheard conversations.)
[23:32:40] <Freman> I understand kurushiyama, and I appreciate it
[23:34:16] <kurushiyama> Freman: My suggestion is to stay calm, and get yourself a decent MongoDB DBA *caugh* to review your setup and help you to decide on what actions need to be taken, if.
[23:35:10] <kurushiyama> Freman: As long as your disks are holding, the emergency plan should be to increase RAM, if that's feasible (calculate conservatively).
[23:42:07] <kurushiyama> jiffe: That's really a... not so nice thingy...
[23:42:36] <kurushiyama> jiffe: Trying to wrap my head around it.
[23:43:22] <jiffe> the seagates are what killed us, they've been dying on us a lot lately, we're switching slowly to WDs
[23:44:27] <kurushiyama> There is a German joke about Seagate: "Sie geht oder sie geht nicht!" where "Sie geht" is pronounced (slightly incorrectly) like "Sea gate"
[23:45:00] <kurushiyama> The meaning is: "They work – or dont."
[23:45:14] <jiffe> hah
[23:45:42] <jiffe> seagate used to be really good, I think they had a bad batch of 3TBs
[23:46:07] <GothAlice> I have a wall of dead seagate drives going back 20 years.
[23:46:28] <GothAlice> Some Maxtor sprinkled in from the early days, too.
[23:46:33] <jiffe> heh, ok maybe not, back when I was in school my seagates never died when everything else seemed to
[23:46:44] <jiffe> maxtor was bad, those maxtor drives always ran really hot
[23:46:48] <GothAlice> OTOH, I've never had a WD drive actually fail on me.
[23:48:04] <kurushiyama> GothAlice: +1
[23:48:32] <kurushiyama> jiffe: Wt or mmap?
[23:48:42] <jiffe> kurushiyama: mmap
[23:48:58] <Freman> kurushiyama: yeh that'll be new boxes, I think those machines are fully populated.
[23:49:00] <jiffe> this was originally setup on 2.0.4
[23:49:17] <kurushiyama> jiffe: what do you run now?
[23:49:36] <jiffe> kurushiyama: 3.0.8
[23:49:40] <kurushiyama> Freman: could well be. Without hard facts, that is hard to say.
[23:49:58] <kurushiyama> jiffe: You should not run that. There have been nasty bugs.
[23:50:17] <Freman> thanks tho, did just have a chat with the cto (he walked in while I was talking to you) and he's going to get the guys using that db to go through and clean it up
[23:50:18] <kurushiyama> jiffe: Though not related, iirc.
[23:50:27] <Freman> (my favourite option! :D)
[23:50:50] <kurushiyama> Freman: for everything else: I am usually available here or on #go-buts
[23:51:00] <Freman> buts?
[23:51:03] <kurushiyama> Freman: sorry, #go-nuts
[23:51:07] <Freman> hehe
[23:51:41] <kurushiyama> jiffe: But you do journaling, do you?
[23:53:26] <jiffe> kurushiyama: journaling is enabled, yes
[23:55:13] <kurushiyama> jiffe: strange.
[23:55:40] <Freman> so uh kurushiyama, as a certified fella, I wonder what your opinion is of this https://github.com/freman/queryguard (I know the best way would be to give them an interface so they don't touch the db, but devs are devs :()
[23:56:23] <Freman> I discovered I could abuse the bson sent in the packet to include extra detail in the currentOp()s
[23:56:24] <kurushiyama> Freman: Frankly – nothing.
[23:56:32] <Freman> aw :(
[23:56:40] <kurushiyama> Freman: Profile your queries, optimize them
[23:57:02] <kurushiyama> Something like that only adds a moving part at best and latency at worst.
[23:57:02] <GothAlice> $comment is darned handy
[23:57:18] <GothAlice> I pass JSON data to back-ends that ¬_¬ do things with the oplog that way.
[23:57:19] <Freman> yeh that's done, this is to catch operator error (for something that they shouldn't even be doing)
[23:57:57] <kurushiyama> Freman: still.
[23:58:00] <Freman> I didn't want to touch $comment incase a dev was using it, I added another field and mongo seems to otherwise ignore it.
[23:58:22] <Freman> if it makes you feel better, any machine operations that connect don't go through this, it's only a human proxy