IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#i2p-dev
/2023/01/08
zzz eyedeekay, I forgot to ask yesterday, following our process improvements, please confirm you are good with the checkin deadline w.r.t. Android
eyedeekay Yes I'm OK with the checkin deadline zzz, thanks for asking
lbt Heya! I switched apparmor to enforcing and am getting a single DENIED when starting up the router about operation="file_mmap" profile="system_i2p" name="/usr/lib/jvm/java-11-openjdk-amd64/lib/server/classes.jsa". From the looks the router seems to be running fine. But is there something not in memory now that should/needs be loaded there or similar? This is under Debian with the project's packages, so should
lbt be kinda ... standardish I assume?
lbt apparmor.d/abstactions/i2p states # */client/classes.jsa is only found (and needed) in 32-bit JVMs.
lbt So should this even be loaded then?
lbt Oh, sry, that's client not server/classes
zzz beats me, that note is from kytv, 2015
lbt I searched the repo for "classes.jsa" and that line is the only match :o
zzz it's a jvm thing
zzz I guess
lbt You see anything I can/should do here?
zzz and I don't know why the line is in there twice
zzz change it to /usr/lib/jvm/**/classes.jsa?
lbt will check
zzz let me know if it works and I'll squeeze it into the release tomorrow
lbt will do
dr|z3d got a recurrent error on one router, zzz, not seeing it anywhere else: cake.i2p/view/ZeRLiLnAR7_25kVKFuhRF1Vbof1MV32ztgJ38ZDQ1_4y1kep7G7c/ZeRLiLnAR7.txt
lbt It's now a single line "/usr/lib/jvm/**/classes.jsa m," and with that a restart happens without any message from apparmor
zzz great, thanks lbt, will check it in
zzz dr|z3d, is that router firewalled?
dr|z3d no, zzz.
zzz hmph. looking...
zzz SSU 1 ...
zzz oh yeah I got it like crazy too
zzz good catch
dr|z3d *thumbs up*
zzz mostly been testing with SSU 1 disabled
dr|z3d got some routers with ssu1 disabled, some with it still enabled.
lbt "however Trac still available for now." (from i2p-projekt.i2p/en/get-involved/guides/new-developers) - is this still true? I had tried to reach the trac site to see if my account there is still active, but wasn't able to reach it in several attempts ...
dr|z3d trac is dead.
lbt thx4confirming
dr|z3d tickets have been imported into gitlab.
zzz dr|z3d, not so simple a fix; I'm averaging about 1 NPE/hr so I'm going to test for a few hours and then push and let you know so you can try it too
lbt Hm, I've changed the docu page (gitlab gui) to reflect that trac isn't around anymore. At least some, the variable for the URL is still named trac and I didn not touch that (yet). I'm struggling to find guidance on how I would commit that, however - the GUI offers "commit to master branch/create new branch" with a ticked "start new merge request" after forking the project. Should I just press "commit" there,
lbt is there some guide how to do it better (?), or should I just leave you guys alone so you can release? ;) I want to learn how to do this at some point though, it feels like docu is niche where I could actually contribute some ...
zzz dunno, I always do it via ssh
dr|z3d roger that, zzz.
dr|z3d have you got the your own git repo locally, lbt?
lbt Not yet, but that wouldn't be a problem. I'm unaware how to create merge-requests from there, though
dr|z3d assuming you have a clone of the remote repo, and you have a gitlab acct, you'd just push to your own repo and then send over a merge request via gitlab's ui.
lbt Oki, on it
dr|z3d I've added error level log events to the critical log section, zzz, which makes for easier identification of potential issues.
zzz yeah I've just been so busy I haven't been updating and monitoring all my routers enough
zzz lesson learned
dr|z3d without error logs appearing in critical, I'd probably have missed that error.
zzz I have different configs on all of them so I need to check them all. I just grep the logs
zzz the systray popup works great for local router
dr|z3d fair enough, don't have that enabled here.
zzz very hard to miss when it's popping off
zzz saved me more than once
zzz recommended
dr|z3d yeah, I think I'd find that too distracting. Having critical and error logs persist serves more or less the same goal without being so invasive :)
zzz if I've f'ed up I want invasive
dr|z3d gitlab.com/i2pplus/I2P.Plus/-/commit/69c72a5bf3f05b0bb30f03e6c497ef1d48f54a50 is where I added error level logs to the critical section.
lbt Seeing how long the first clone takes ... has the "git cannot resume" been much of a problem? I remember it was "the" argument against git years ago ...
zzz unlikely to succeed lbt, clone from GH then switch origin, or use the bootstrap "bundle" or whatever it's called that idk created. search my forum for howtos
lbt Receiving objects: 56% - let me try this to the end first ;)
zzz there's that time 15 years ago dr|z3d checked in all his build jars...
zzz eyedeekay, your GPG key expired 4 days ago, please renew and provide a link
lbt It did work though :) Took a good while, but ...
zzz nice. I gave up on i2p.plugins.firefox the other day and complained to eyedeekay about it
zzz eyedeekay, actually, that was probably why t-bird was complaining, not eche's key
zzz my subkeys are expiring soon, I gotta do it too
eyedeekay Yeah we're all on close to the same schedule, I'll update mine today
eyedeekay I removed all the BLob's from the git history for i2p.plugins.firefox so the size is reduced considerably, but the build times are way up
eyedeekay And it's a little more complicated because of the Go parts of the setup script, going to work around this by using the profile release artifacts when the Go tools aren't present
eyedeekay As far as cloning, the trick is to clone to --depth=1 then cd to the directory and unshallow, unshallow is resumable
zzz now I have divergent branches in i2p.plugins.firefox
lbt eyedeekay: I found your blog post git-over-i2p, where you have described that, thx :)
zzz but I've never committed anything there
zzz I guess I just pull with --rebase ?
zzz I'm still such a git noob
zzz On branch main
zzz Your branch and 'origin/main' have diverged,
zzz and have 868 and 1083 different commits each, respectively.
zzz (use "git pull" to merge the remote branch into yours)
lbt How can you even have differing commits if you never committed?
zzz right
zzz eyedeekay, your commit to i2p.i2p yesterday was after the checkin deadline, which either is very no bueno if it's not for the release, or very no bueno for not telling me if it is
zzz which is it?
eyedeekay It is for the release
eyedeekay It needs to be there for Maven, I did a local maven test and found it
eyedeekay Sorry for not pinging you about it, will next time, thanks for asking
eyedeekay Re: git commits being different that is a side-effect of the blob removal, you can `git pull --force` to blow away the the differing ones
zzz eyedeekay, that's a fundamental process violation, let's do better
zzz I ran mavenCentral.deps earlier in the week...
zzz retrying...
eyedeekay It's for the part where I have to build with override.properties and the alternative classpath
zzz right but mavenCentral.deps should do the same thing, that's what I added to my process
zzz mavenCentral.deps worked
zzz so I'm not sure what's different
zzz why did you not catch it before the checkin deadline?
eyedeekay I hadn't built using the override.properties in a while, I was doing Java 19 builds.
eyedeekay Re different: I was using ant mavenLocal && ./build/installer/maven-dev-release.sh
eyedeekay javac.compilerargs=-bootclasspath .../openjdk-7/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:.../usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jce.jar
eyedeekay I do maven builds with java-1.8.0-openjdk-amd64 and that in my override.properties
zzz mavenCentral.deps calls forceJava7 target but I guess that's not sufficient w/o bootclasspath
eyedeekay I guess not? I'm not sure, and I'm timid about doing it differently because I don't want to break downstreams again, this is the way which I know works for any Android apps that embed us, for the F-Droid main C/D and all that
eyedeekay That said, if I do a mavenLocal build with Java 19 it seems to not result in the same predictable 11-minute crash as when it's built with the wrong bootclasspath when I turn it into an Android app
eyedeekay But I've only used that on my own device, when I upload to maven I make sure I've got the whole chain configured first
zzz have you thoroughly tested your changes?
zzz because I need to stare at them a little more
eyedeekay On Android yes, and I'm using a local build with them now on my laptop, the only thing I did was unwrap putIfAbsent into a check(containsKey) and either a put+get or just a get
zzz on further review, I'm not happy with the changes at all. There was a much easier fix. I think we need to delay the release by at least a day to straighten it all out, plus the NPE fix for today
zzz you really should have talked to me before, not just after, your fix
zzz you really went off in the weeds on thios
eyedeekay I apologize, I will next time
eyedeekay I considered other approaches, I'm interested to know if I thought about what I should have done
eyedeekay I also thought about either changing the Map to a concrete type, or factored the putIfAbsent out to a function and put it in all three places?
eyedeekay *method
zzz just declare _recentlyClosedIDs as a ConcurrentHashMap instead of a Map. oneliner. I'll fix it
zzz but still can't get mavenCentral.deps to fail even with bootclasspath
eyedeekay I have no idea why, I got this bootclasspath from you, and you got it from Debian jessie IIRC?
zzz right
zzz oh wait, it's a LHMCache, not a ConcurrentHashMap
zzz that might be harder
eyedeekay That's why I didn't do the concrete type approach, I tried CHM and then it broke because it needed to be passed to another function as a LHMCache
zzz yeah I forgot it's a LinkedHashMap. putIfAbsent is in Map as of Java 8
zzz ok, good, I have it failing now with bootclasspath
zzz will update my checklist
zzz dr|z3d, NPE fix pushed, please test on a SSU1-enabled router
zzz ok now lets look at this putIfAbsent thing
eyedeekay I just realized I made a big mistake, if (_recentlyClosedConnIDs.containsKey(id)){ should be if (!_recentlyClosedConnIDs.containsKey(id)){
eyedeekay I will refrain from pushing it until you ack or choose a different solution to the underlying issue
zzz yeah, don't ever push (or even commit without pushing) after checkin deadline without asking, becasue it won't be in the release, and people looking at the history will think it is
zzz that's why it's against the rules
zzz and for anything non-trivial it's going to delay the release
zzz lets pull up xxdiff and see what's going on here
zzz aside from the bug
zzz your version is bad because it's accessing the map either twice or 3 times, depending
zzz so I believe the best way is:
zzz old = map.put(new)
zzz if (old != null)
zzz map.put(old); // put back the old one
zzz so that gets us back to once in the usual case, or twice in the unlikely case of a dup
eyedeekay OK I get it, I just did what seemed obvious "check first then put" but the put-and-put-back-if-not-null makes sense
eyedeekay That's pretty cool
zzz ok, I'll code it up and test it and push as -16-rc
zzz eche|on, release pushed to tuesday
zzz you're clear on the release process now, right? This was really bad. The only reason I noticed was I tried to push the NPE fix so dr|z3d could test it
eyedeekay If I catch something during this period before release, don't check it in, ping you
zzz super
dr|z3d thx, zzz, will test.
zzz hold off 5 minutes for -16
dr|z3d what about idk's latest commits, are they going to be backed out?
dr|z3d 10 4.
zzz not backed out, just rewrite/fix
zzz there you go dr|z3d
zzz thanks for testing
dr|z3d so we've pushed back the release until Tuesday?
dr|z3d okies
zzz looks like i2pd point release will be Wed.
dr|z3d ok, good. some useful new stuff since the 2.1.0 i2pd release.
zzz 2.45.0 -> .1
dr|z3d yeah, that.
zzz the naive approach:
zzz if (!map.containsKey(id))
zzz map.put(id, new)
zzz requires 2 accesses in the common case (no dups) and 1 in case of dups
zzz 3 accesses are never required, which made the previous code a headscratcher
zzz my way works because we're under a lock; if we weren't under a lock, it would be a CHM and we'd have putIfAbsent()