Minetest logo

IRC log for #minetest-dev, 2023-03-01

| Channels | #minetest-dev index | Today | | Google Search | Plaintext

All times shown according to UTC.

Time Nick Message
00:05 Baytuch joined #minetest-dev
00:22 proller joined #minetest-dev
01:44 LandarVargan joined #minetest-dev
03:43 dzho joined #minetest-dev
03:43 dzho joined #minetest-dev
05:00 MTDiscord joined #minetest-dev
05:36 calcul0n joined #minetest-dev
09:24 appguru joined #minetest-dev
12:05 Baytuch joined #minetest-dev
12:40 proller joined #minetest-dev
12:51 BuckarooBanzai0 joined #minetest-dev
12:52 jojje joined #minetest-dev
12:56 Noisytoot joined #minetest-dev
13:00 Pexin joined #minetest-dev
13:00 Thomas-S joined #minetest-dev
13:00 basxto joined #minetest-dev
13:00 nore joined #minetest-dev
13:09 Baytuch_2 joined #minetest-dev
13:19 Baytuch joined #minetest-dev
13:32 Baytuch joined #minetest-dev
14:37 Baytuch joined #minetest-dev
15:51 appguru joined #minetest-dev
18:12 Desour joined #minetest-dev
18:32 appguru joined #minetest-dev
19:08 book` joined #minetest-dev
19:40 calcul0n joined #minetest-dev
19:47 cfnblx For those of you who don't Discord -- FYI, I submitted a PR for the MariaDB backend: https://github.com/minetest/minetest/pull/13266
19:48 cfnblx wsor / sfan5 have tagged it, and it has passed all checks. I pulled the current master just prior to pushing my commits, so it should be able to be merged in very simply
19:49 cfnblx I've had a couple friends look over to code to make sure it didn't introduce any errors, and everyone has given it a thumbs up. Hoping you guys will do the same.
19:54 Krock Desour: about #13264 - we're already drawing the tooltips ourselves (GUIFormSpecMenu::showTooltip). What's the difference in the PR?
19:54 pgimeno https://github.com/minetest/minetest/pull/13264 -- Draw irrlicht tooltips ourself by Desour
19:56 Krock cfnblx: what exactly is the motivation behind this change? better integration with existing database servers?
19:56 Desour Krock: irrlicht iguielements also have a tooltip (the one set by setToolTip). our table[] elements use this. these tooltips are usually drawn in the guienvironment
19:56 Desour see also the github code comment I made
19:57 Krock I saw the comment but did not see any such Irrlicht tooltips
19:58 ROllerozxa hover over any of the icons in the multiplayer server list?
19:58 Desour grep for setToolTip, it's done in gui/guiTable.cpp
19:58 Krock yes but I mean in the code. where exactly is it rendered
19:58 Desour ah, see the linked irrlicht PR
19:59 Krock oh. that's the part I missed. thanks.
20:03 cfnblx Krock: yes - to add MariaDB as an option for database backends. It fully supports map, auth, player, and mod storage in a single database and is fully tested.
20:04 Krock Desour: you could as well skip the tooltip drawing if `getSkin()->getColor(EGDC_TOOLTIP) == 0` in which case there would not be a text in first place.. but if we're not using the Irrlicht feature we could as well just purge everything as suggested
20:06 cfnblx Similar to PostgreSQL, I can't imagine many people would want to go through the trouble of setting it up for a client-only installation, so it's mostly intended for people running servers, especially those who may already have large investments into learning/running MySQL/MariaDB like myself.
20:06 Krock yes that makes entirely sense. thanks.
20:06 cfnblx Obviously I can continue to reintegrate my code and build from source, but it would be wonderful if next release could include my PR so I could actually use it on my public servers.
20:07 cfnblx (without all that extra trouble, I mean)
20:07 Krock problem is that a new release should be out for months already but it's still the same things blocking it
20:08 cfnblx Well, this one is hopefully a no-brainer as I've done all the work to make sure it's painless as possible for you guys.
20:09 Krock cfnblx: src/database/database-mariadb.h and .cpp lack an #if USE_MARIADB  guard. compiling will fail if these headers are not found
20:09 Krock although I find it interesting the the build bot pased
20:10 Krock actually nvm it did not start in first place due to first-time contributor status
20:10 Krock (nvm x2 because the build bot status is not shown in the "commits" tab but it did eventually run in the past)
20:11 Krock either way I'll add it to the meeting points to decide its roadmap
20:11 cfnblx Uhm, no they're not
20:11 nrz_ Interesting, i should check query quality and schème
20:13 Desour Krock: FYI, I tried setting the font to NULL, but it falls back to the default font. I haven't tried setting the color to 0, as I wasn't sure if then the tooltips might be just uglily invisible. anyway, such solutions also seemed a bit hacky to me
20:13 cfnblx Wait, I stand corrected. .cpp does have the condition, .h does not
20:14 cfnblx database-postgre.h does not have the condition. Are you sure mine should?
20:14 Krock Desour: setting the color to 0 will make the tooltips render anyway. it was a suggestion to change the behavior in IrrlichtMt
20:14 ROllerozxa well technically the header won't be included if USE_MARIADB is false since it's walled off in server.cpp
20:14 Desour ah, I see
20:14 cfnblx right, so why do I need to add it to the .h?
20:15 Krock cfnblx: I did not check the include paths. if the header is protected from inclusion properly (where it is actually needed) it serves its purpose too
20:15 cfnblx yes, it is
20:15 ROllerozxa ok so redis' and leveldb's header files are gated but not postgre
20:15 cfnblx I spent a month on this project. It was not rushed, nor pushed prematuretly.
20:15 Krock src/map.cpp - it's included and protected there. good to know, thanks!
20:16 ROllerozxa that maybe should be sorted out
20:18 Krock yes there's some inconsistencies which might have contributed to my hasty remark about the guards. even still, there's way more inconsistent code in Minetes
20:18 MTDiscord <luatic> The code is repeating the pattern try { ... } catch (sql::SQLException &e) { std::string msg = std::string("[MariaDB] Error: ") + e.what(); std::cout << msg << std::endl; throw DatabaseException(msg); } a lot. I'd consider looking into how to deduplicate this, using a macro as a last resort of all else fails.
20:18 MTDiscord <luatic> s/of/if
20:19 cfnblx https://github.com/minetest/minetest/pull/13266/commits/54ad5654db1ba8fd191c12b72fa3725a073ac830
20:19 cfnblx resolved inconsistency
20:20 MTDiscord <luatic> btw, does MariaDB not have a CREATE TABLE IF NOT EXISTS? because I see plenty of if (!tableExists(...)) createTable(...) in the code.
20:21 MTDiscord <caffeinatedblocks> It does, I just chose to make it a separate query.
20:21 MTDiscord <ROllerozxa> CREATE TABLE IF NOT EXISTS does in fact exist in mariadb, I believe
20:21 Krock the PR will be discussed this Sunday if the meeting takes place, and reviewers should appear automatically
20:21 MTDiscord <luatic> why?
20:22 MTDiscord <caffeinatedblocks> Why not?
20:22 MTDiscord <caffeinatedblocks> Technically, my way is less expensive.
20:22 MTDiscord <caffeinatedblocks> (bandwidth/network wise)
20:22 Krock does it matter for one-time queries?
20:22 MTDiscord <paradust> not at all
20:23 MTDiscord <caffeinatedblocks> it only sends a full table definition over the wire if the table actually doesn't exist
20:23 MTDiscord <paradust> every query needs to grab and release a table lock
20:23 MTDiscord <ROllerozxa> more queries is less expensive?
20:23 MTDiscord <paradust> that's going to be 100x more expensive than a few extra bytes on the wire
20:23 Baytuch joined #minetest-dev
20:23 MTDiscord <ROllerozxa> yeah
20:23 MTDiscord <caffeinatedblocks> It's a one time thing at startup.
20:23 MTDiscord <luatic> yeah, and that's why I'd go for the shorter version that does less queries (if the tables don't exist)
20:24 MTDiscord <caffeinatedblocks> But then you're sending longer queries for the life of the database
20:24 MTDiscord <caffeinatedblocks> Mine sends one extra query the very first time you ever start a new world/database.
20:24 MTDiscord <luatic> sounds like premature optimization
20:24 MTDiscord <caffeinatedblocks> Your way would send a full table creation query every single startup for the life of the database.
20:24 MTDiscord <paradust> yea if it's only done once, this doesn't matter much
20:24 MTDiscord <luatic> yes, and that's completely negligible
20:25 MTDiscord <caffeinatedblocks> Mine sends two once, then only a short "does this exist?" forever
20:25 MTDiscord <luatic> which is why the shorter way should be preferred, IMO
20:25 MTDiscord <caffeinatedblocks> @luatic how many production MariaDB servers are you running with hundreds of tables and millions of rows of data?
20:26 MTDiscord <luatic> irrelevant authority argument immediately dismissed
20:26 MTDiscord <caffeinatedblocks> My ways are tried and true
20:26 MTDiscord <luatic> ...
20:26 MTDiscord <ROllerozxa> I would hope it aborts as soon as it realises the table already exists, you'll save code lines, indentation levels and query count
20:26 MTDiscord <caffeinatedblocks> You're welcome to argue on the merit of "what you think" if you prefer
20:26 Krock does network traffic of 500 characters matter when you're constantly retrieving mapblocks in the 16k+ magnitude from the database afterwards?
20:26 MTDiscord <luatic> it doesn't
20:26 MTDiscord <luatic> this is premature optimization at the cost of code quality
20:27 MTDiscord <luatic> if you really want to shorten your queries, why don't you remove those NOT NULL constraints from x, y, z - they are redundant with the primary key constraint? :trollface:
20:29 MTDiscord <ROllerozxa> or utf8mb4_unicode_ci everywhere
20:30 MTDiscord <luatic> @caffeinatedblocks btw, all your error handling is using std::cout << msg << std::endl; - I think you should prefer using one of Minetest's logging streams, probably errorstream here.
20:34 MTDiscord <caffeinatedblocks> Actually, I used that inconsistently it seems.
20:34 MTDiscord <caffeinatedblocks> I intended to replace all of them with errorstream like I did in the Database_MariaDB constructor, but apparently I forgot that
20:36 Krock also you wouldn't need to first write the error message into `std::string` before feeding it into `errorstream`
20:37 Krock unless there's a log printing race condition that I am not aware of..
20:37 MTDiscord <caffeinatedblocks> allows concatenation with e.what()
20:37 MTDiscord <caffeinatedblocks> (for thrown exception message)
20:37 Krock errorstream << "test test " << e.what() << std::endl;   works just fine
20:37 MTDiscord <caffeinatedblocks> I suppose I could just output to errorstream and throw a generic exception ("MariaDB fail")
20:38 MTDiscord <caffeinatedblocks> I'm currently outputting full error message with e.what() to both cout/errorstream and also into the exception itself (which may or may not be useful)
20:40 Krock I see. the exceptions need to be re-thrown as a Minetest type..
20:44 Krock In case you'd like to change it quickly in the future and not repeat too much code, you could resort to a copy&paste tool like Macros: https://pastebin.com/raw/nDhNsbHd  (just mentioning in case you'd be interested)
20:45 Baytuch joined #minetest-dev
20:47 MTDiscord <caffeinatedblocks> I've opted to simply do what I said above
20:54 MTDiscord <caffeinatedblocks> In following the same rules I've learned in marriage ("do you want to be RIGHT or HAPPY?"), here you go:
20:54 MTDiscord <caffeinatedblocks> https://github.com/minetest/minetest/pull/13266/commits/c02a8377a9b630d71cac26e3ba9d71c64fc30dc0
20:55 MTDiscord <caffeinatedblocks> Have I now appeased the powers that be?
20:58 ShadowBot joined #minetest-dev
20:59 Krock I should resort to github reviews again. They should leave me less headroom for premature/rushed comments. thanks for the errorstream change. The PR will be discussed at least this week again, possibly including other opinions
21:00 Krock it's easier to work with when there's an entire review than just random comments
21:02 MTDiscord <caffeinatedblocks> I've removed the unnecessary separate existence check queries for database and tables, redirected all error output to errorstream, modified all exceptions to simply throw "MariaDB error" (since error is output to errorstream already anyway), and also removed the NOT NULL definitions as per luatic's comments
21:03 Baytuch joined #minetest-dev
21:05 Krock I think that particular comment from luatic was not meant serious (considering the "trollface" reaction)
21:08 MTDiscord <caffeinatedblocks> When your boss is fresh out of college, and all you have is more time and experience in the field than he's been alive, what else do you do? Argue with him? Nah, just shut up and do as asked. He'll figure it out eventually.
21:10 Krock I'd call it unprofessional like my initial blunder on the header guard
21:13 MTDiscord <caffeinatedblocks> Personally, I'd have kept the NOT NULL. In my experience, indexes can change, and forgetting the implicit NOT NULL can result in catastrophe if/when that happens.
21:15 MTDiscord <caffeinatedblocks> Well, personally, errorstream redirection aside, I'd have kept everything as-is. "Code quality" is not compromised by a if (!tableExists) -- if anything, it tells me exactly what is happening without having to scroll up to be sure "IF NOT EXISTS" was actually included in the statement.
21:16 proller somebody make benchmarks of all dbbackends ?
21:18 MTDiscord <caffeinatedblocks> I benchmarked mine using an emerge script
21:19 MTDiscord <caffeinatedblocks> SQLite/Postgre operates about 53% faster with an emerge from (-64, -64, -64) to (64, 64, 64), but all other benchmarks are/were purely observational/anecdotal
21:20 MTDiscord <caffeinatedblocks> With regard to that additional latency, I spoke with the CTO of MariaDB and he opened this issue to have that addressed in a later release: https://jira.mariadb.org/browse/MDEV-30736
21:20 proller whats about redis or leveldb ?
21:20 MTDiscord <caffeinatedblocks> I did not test either
21:21 MTDiscord <caffeinatedblocks> I just compared to the default (sqlite) and the "competition" (postgre)
21:21 proller or "slow" and "very slow" ?
21:21 proller why do not try faster variants?
21:22 MTDiscord <caffeinatedblocks> SQLite and Postgre are actually both on par with each other as far as the emerge goes. SQLite finished 2 seconds faster.
21:23 MTDiscord <caffeinatedblocks> MariaDB, on the other hand, has the ability to run fully in memory like REDIS, unlike SQLite/Postgre (without using, for example, memfs/ramdisk)
21:23 MTDiscord <paradust> does minetest really store blockdata in sql? good lord
21:24 MTDiscord <paradust> i thought it was just for user/auth records, but i've never looked into it
21:24 proller 8)
21:24 MTDiscord <caffeinatedblocks> (though I currently have it hard-coded for InnoDB, that could be easily changed to any of the other many supported storage engines, or you could even write your own storage engine)
21:26 MTDiscord <caffeinatedblocks> With additional optimization tweaks (which make InnoDB less ACID compliant), you can also increase current performance by setting innodb_flush_log_at_trx_commit = 2
21:26 proller somebody should make some standard bench code for all available backends, for write-read thousands blocks and print times/speeds
21:27 MTDiscord <caffeinatedblocks> That's difficult.
21:27 proller blockdata should not be stored in any sql and cloud bases
21:27 MTDiscord <caffeinatedblocks> When working with the fellas over at MariaDB to develop this backend, we came up with some really creative tools to benchmark in a hypothetical sense... Minetest doesn't come anywhere optimal performance.
21:30 proller now leveldb should be fastest
21:31 proller and adding rocksdb may make faster
21:31 Baytuch joined #minetest-dev
21:32 MTDiscord <ROllerozxa> doesn't leveldb have... pretty serious reliability issues
21:32 MTDiscord <ROllerozxa> I'd wanna know if rocksdb could solve them though, leveldb is in fact pretty neat
21:32 proller also it almost frozen development
21:33 proller ROllerozxa> thats why and i have hand crafted repair tool
21:34 proller it works fine if dont power off server every day
21:35 MTDiscord <caffeinatedblocks> https://dpaste.com/4XU5EJQ98
21:35 MTDiscord <caffeinatedblocks> Here's a script written by a fellow over at MariaDB
21:36 MTDiscord <caffeinatedblocks> On my server, that takes 218643.792236 ms to complete, whereas emerge blocks (-64, -64, -64) (64, 64, 64) takes 282s
21:36 MTDiscord <caffeinatedblocks> the extra 64 seconds are minetest overhead/latency
21:38 MTDiscord <caffeinatedblocks> Then again, I seriously doubt anyone is running a server anywhere near mine in terms of hardware performance
21:39 MTDiscord <caffeinatedblocks> My server's a bad mammajamma and has some seriously fast NVMes: https://dpaste.com/B4YFMCWTU
21:42 MTDiscord <caffeinatedblocks> (and that's not even bare-metal performance... that includes over head from VMware's Paravirtual SCSI controller)
21:43 MTDiscord <caffeinatedblocks> That said, if anyone comes up with some tools to benchmark all available backends, I'd be happy to try them out 🙂
21:56 pgimeno is there any DB backend that can keep each world database in the world directory, besides sqlite?
21:58 MTDiscord <Jonathon> leveldb
21:58 MTDiscord <Jonathon> but i wouldnt use it unless you love data loss/restoring from backups
21:59 pgimeno I'd consider firebird as a backend then
22:56 Baytuch joined #minetest-dev
23:08 proller joined #minetest-dev
23:46 kilbith joined #minetest-dev
23:50 Baytuch joined #minetest-dev
23:53 Baytuch joined #minetest-dev

| Channels | #minetest-dev index | Today | | Google Search | Plaintext