不想发在知乎等地方,看得人太多了,遂决定发在这里吧
有点长絮絮叨叨的
10/08
回来就接到老师消息去聊聊办赛的事,然后到了我才知道,区域赛原来是跟EC Final一样的要在体育馆办的,400多个队伍光选手就1200人起步啊,这时距离10/17开赛只有11天了,感觉要爆炸,但是算是熟悉的老师也是接下来这活了(更完蛋的是上半年的邀请赛就我自己全程搞下来的,那回人没这么多还出了大问题,服务器中途崩了好久
这回大赛还我自己,呜呜)
10/09
志愿者招募,很经典的找不到任何有较丰富的运维/开发经验的同学,真的不理解这么大个计算机远那么多志愿者竟然找不到?甚至这活都明写了会有更多奖励,还会发其他福利都找不到,麻了
10/10
晚上志愿者全体会议,得知我只剩下4天时间要配置好所有的选手机,因为10/15所有机器就要拆线然后装车从实验大楼运到体育馆去了,找到的几个还算用过Linux的志愿者还全都满课,只能我自己配机器
而且啊,选手机要服务器先好了才能配置,因为监控啊还有一系列配置都需要服务器先起来,而天杀的服务器还得等别人备份完才能重装,可用时间-1day
10/11-10/12
下午服务器终于备份完了,火速重装系统然后配置好之前写的选手机用工具Natsume,把DomJudge的配置扔给志愿者让他们练练手看看能不能装起来(一翻测试后发现4个本校志愿者中只有一个能干活还只能干一点,另外仨完全不行,反而是俩中东来的留学生志愿者经验丰富得多,真无语了
)然后开始找哪个机房没课开始装选手机,ICPC WF镜像2025中的CLion Key又又又过期了(就这个Key啊,每次都折腾死人),找赛站负责人要,扔给我一个破解版,不是哥们你让我在Linux上给你配你那个破解版?万一后面影响了别的是不是还得我来修?果断决定去他的,直接咸鱼5块钱买了个Key省事了(,当天在实验大楼呆了一天,装了一半的机房吧差不多
10/13
把之前的另一个忙得很的师兄给硬拉过来帮忙了,不然我觉得我会累死自己,我俩人花了一整天配评测机(这B玩应还得我们自己修电脑的,真无语了下回再也不这么搞了直接要一台服务器起Docker跑吧)iVentory+PXE安装+自动化跑脚本还花了一整天啊,要是手动不知道得到啥时候。晚上回去发现志愿者配Nginx配不明白了,点了好几次还是搞不到点子上只能我自己来了,亏得没给他们root权限啊,上来就要硬写入PHP FPM本地socket文件的,也不知道咋这么勇
10/14
选手机开始拆机了,这天一直在搞服务器,起了一台单独的外榜服务器起了防御+反代,防止跟上回邀请赛一样直接从外榜被打崩了,然后把CDS也放到了这台外榜服务器上,ICPC Tools系列的工具我感觉都写的稀烂,一个个全Java写的跟有内存泄露一样吃的巨多,不知道咋搞的(后面会说Resolver滚榜,那玩意更是屎山
)完全不敢和DomJudge一起放到主竞赛服务器上(后来证明这真是正确的选择,这是后话了)然后又把打印的代码给重写了,加了过滤防止选手用ELF之类的干趴下打印机,同时还换用Typst解决了中文编码等问题
10/15
跟摄影组碰了下,搞了个脚本自动重命名并上传照的队伍照片,当天没啥别的事,在等机器搬过去
10/16
设备全运过去了,中午去看了眼赛场,信息处老师正在疯狂布网+搬设备,问了下估计得第二天才能全部接电,嘱咐了几句给服务器单独接一路电(因为去年EC Final刚开赛服务器负载一高直接跳闸了
)然后绕了一圈,结果发现,坏了服务器室不是之前的位置了,离照相的地方在两个对角,这下坏了没法拉网线了啊,紧急联系摄影组负责的同学火速改代码和流程
10/17
早上9点原本想睡个懒觉,因为说是得下午才来电,结果早上9点就被负责的师兄的电话叫醒了告诉我已经接电了,直接翻滚下床抓起包就走,到了看了下确实都接上了,直接开始调试,然后发现走的太急没带移动硬盘,然后我的WSL装在了移动硬盘上
服务器又已经完全隔离开了,一边叫其他志愿者同学火速去取一个路由器插在交换机上好连上服务器内网,一边想办法在被隔离的服务器上装Parallel-SSH,花了我一个小时才把所有依赖全搞定跑起来得以测试所有的选手机网络,万幸有之前写的Natsume可以快速监控所有的选手机,期间又碰到了经典的撞MAC导致互相抢的问题,直接换机器
,然后再测服务器的各种功能,后来现场那边人又不够了去帮了会忙,一直等到晚上9:30出题组的人才赶过来导入题目,然后又拿Oha打了波压力测试,啥问题没有美美回去睡觉了,到这里还一切顺利,比往年都顺利得很早得很
10/18
当天上午是开幕式啥的,下午是热身赛,前面没啥可说的主要是热身赛,开始都还比较顺利,然后到中间的时候突然现场有选手开始说网卡,我正看着呢服务器那边师兄对讲机呼我说DomJudge崩了
感觉天塌了,到了一看所有PHP FPM进程全都正常在,服务器负载不高,宽带也没打满,直接傻了这哪里出了问题啊??
没辙现场紧急,得先把服务恢复得,准备一通组合拳打出去,没想到一重启PHP FPM直接就恢复了
俩人面面相觑直接傻了,再去查日志,啥日志没有啊这咋办,压力测试也没测出来哪有问题啊,这下不完犊子了,就开改,把所有能想到的都改了想等等看,结果到快要结束的时候旁边裁判组喊说又卡了,火速重启后又好了(?这下没辙了,俩人说这咋办啊,拉个脚本监控吧,卡了就直接重启hhhhc(后来想了想,当时改了一堆PHP配置,结果我一直在头脑风暴想问题打断了师兄操作,然后我俩忘记reload了
)
10/19
热身赛结束,我俩的噩梦开始了,尝试滚榜,就这个Resolver啊我草,谁写的这x玩应真的我想xxxxx,谁家会把超时时间,各种配置写死在代码里啊?啊?
师兄的还是Mac,然后就出现了一个诡异的情况,同样的文件,在我win上面能跑,在他Mac上跑不了会报错,但是这个错误竟然是逻辑上进了不同的分支,不是哥们这对吗,这是个Java程序啊,花了我俩2h在那里调。期间心烦意乱的给出题组配比赛都没注意到Unfreeze Time设置得跟End Time一样的(大失误
),最终还是没搞定,故决定明天滚榜就用我的Win本了
10/20
早上到了后发现几台JudgeHost挂了,然后所有的技术志愿者全都没带电脑(不是哥们,你个技术不带电脑来干啥来了?)把JudgeHost启起来,然后开赛,赛到了一半师兄开始测试,然后,然后,发现我win本上滚榜也跑不起来了,woc这下完犊子了,没辙我俩只能开始翻源码推断他咋写的,你敢信这玩意,新的Stable Release没有之前的稳定,没之前的兼容性强吗?
然后更抽象的来了,师兄发现他在同一个文件上运行,每一次的运行结果都不一样难绷了,各种一通查后突然发现,不对啊这Homebrew装的Java怎么不是Apple原生的而是运行在Intel转译层上的啊?遂去下了个Zulu OpenJDK,然后啊哈,好了
那一刻我俩真的想一拳打碎显示器好吧,只可惜Mac太贵了打不起。然后赛中发现这DomJudge写的也是稀碎,就400多的并发量啊(因为外榜我做了长时间缓存,大部分的请求打不过来,只能过来缓存刷新的请求),直接把CPU干到了50%多,千兆宽带打到了50MB/s左右,尖峰还巨多,看来下回需要搞双网卡的链路聚合了。另外提一下外榜,那台服务器的宽带直接被打满了,还好我用的是Caddy没啥问题,总感觉有人在故意搞我们,但是没出问题懒得管了。
后面就是一路平稳到结束,然后我们发现榜没封住
,火速修了下后继续修这个Resolver,总算好了然后又修各种奖项问题呃呃呃,还给了他12GB的内存啊,后面滚榜更是惨不忍睹主持人看不懂滚榜的规则,瞎念一通,到后面图片还显示不出来了(后来关掉发现这玩意已经炸内存了,一堆worker thread out of memory的日志,还好没整个崩掉那就完蛋了),遂一致决定这玩意就是屎山,不如自己从头写一个新的出来
总的来说,不算完美因为榜没封住,但我自认为这算是前期我一个人,现场我+师兄俩人尽力了,几次下来每次都在新的环节会出问题,去年的EC Final前期查选手机问题跑得没了半条命,然后上半年邀请赛写了Natsume解决了选手机的问题结果被人干了服务器完全没关注赛后的滚榜,这回选手机和服务器全程没出问题然后滚榜又拉了,唉唉每次都有点问题,希望下回别就我自己撑着有人能帮我吧,也希望下回尽量完美



实际算法很菜的
