Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stuck game on prod site #2967

Open
cgolubi1 opened this issue Jul 25, 2024 · 11 comments
Open

stuck game on prod site #2967

cgolubi1 opened this issue Jul 25, 2024 · 11 comments
Labels

Comments

@cgolubi1
Copy link
Contributor

https://www.buttonweavers.com/ui/game.html?game=103527 shows: "Can't figure out what action to take next"

@cgolubi1
Copy link
Contributor Author

According to the database, the game is in state 46, aka CHOOSE_TURBO_SWING. So that explains why it's stuck --- a game shouldn't be able to get into that state and the UI can't deal with it --- but not how it got there.

@cgolubi1 cgolubi1 added the bug label Jul 25, 2024
@cgolubi1
Copy link
Contributor Author

The matchup is Boot2daHead (d(1) Gz(Z) !p(V) !n(Y,Y) oF(C)) vs Aysez (s(U) z(U) %(U) n(U) g(U) t(U)).

@cgolubi1
Copy link
Contributor Author

According to the action log, the last thing that happened was a skill attack in which [d(1):1, p(V=7)!:6, n(Y=4,Y=4)!:3] attacked %(U=30):13.

The attack was fire-assisted by oF(C), which was turned down from 5 to 2.

That should all be fine. We've played lots of replay games with Boot2daHead over time; i guess it's possible that none of those games has ever tried a fire-assisted attack where both turbo dice participate in the attack, but that strikes me as unlikely.

Hmm. What is this though:

mysql> select * from game_turbo_cache where game_id=103527;
+---------+---------+------------+
| game_id | die_idx | turbo_size |
+---------+---------+------------+
|  103527 |       2 |        127 |
|  103527 |       3 |         20 |
+---------+---------+------------+
2 rows in set (0.02 sec)

I don't know much about how this cache is used, but that first row doesn't look good.

@cgolubi1
Copy link
Contributor Author

Okay, i got it. I reproduced this in https://2928-mysql-80.cgolubi1.dev.buttonweavers.com/ui/game.html?game=262 --- it looks like when you enter turbo values during an attack that needs firing, those values aren't checked against the valid bounds. So i typed V=127 into the turbo box, submitted the skill attack, turned down fire dice, and here we are.

(I can do that again and get screencaps if it's not completely obvious what i'm talking about, but hopefully it is.)

That's the bug: the skill attack should have been rejected because the turbo selections submitted with that attack were invalid. Never mind that they're going into the cache and not being applied immediately, they should have been checked and rejected.

@cgolubi1
Copy link
Contributor Author

It looks like unsticking the game may not be trivial:

mysql> select * from game_turbo_cache where game_id=262 and die_idx=2;
+---------+---------+------------+
| game_id | die_idx | turbo_size |
+---------+---------+------------+
|     262 |       2 |        127 |
+---------+---------+------------+
1 row in set (0.00 sec)

mysql> update game_turbo_cache set turbo_size=7 where game_id=262 and die_idx=2; 
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from game_turbo_cache where game_id=262 and die_idx=2;
+---------+---------+------------+
| game_id | die_idx | turbo_size |
+---------+---------+------------+
|     262 |       2 |          7 |
+---------+---------+------------+
1 row in set (0.00 sec)

But the game is still stuck as before, because nothing tells it to retry applying those turbo values.

@randomlife
Copy link

At this point it would be good if you could delete the game. I can’t use the Next Game function while it’s still around. Thanks!

@cgolubi1
Copy link
Contributor Author

Sorry about that, randomlife! Let me snag this; i should be able to test and execute a quick database change to move the game to BROKEN this evening.

@cgolubi1
Copy link
Contributor Author

Okay, so i reproduced the broken state on staging, and then set the game's status_id to BROKEN:

mysql> select * from game_status;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | OPEN      |
|  2 | ACTIVE    |
|  3 | COMPLETE  |
|  4 | CANCELLED |
|  5 | BROKEN    |
|  6 | NEW       |
+----+-----------+
6 rows in set (0.00 sec)

mysql> update game set status_id=5 where id=530;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from game where status_id=5;
+-----+---------------------+---------------------+-----------+------------+-----------+--------------+----------------------+---------------+----------------+-----------------+------------+-------------------+----------------+---------------+-------------+------+------------------+
| id  | start_time          | last_action_time    | status_id | game_state | n_players | round_number | turn_number_in_round | n_target_wins | n_recent_draws | n_recent_passes | creator_id | current_player_id | last_winner_id | tournament_id | description | chat | previous_game_id |
+-----+---------------------+---------------------+-----------+------------+-----------+--------------+----------------------+---------------+----------------+-----------------+------------+-------------------+----------------+---------------+-------------+------+------------------+
| 530 | 2024-07-30 22:58:08 | 2024-07-30 23:00:14 |         5 |         46 |         2 |            1 |                    2 |             3 |              0 |               0 |          1 |                37 |           NULL |          NULL |             | NULL |             NULL |
+-----+---------------------+---------------------+-----------+------------+-----------+--------------+----------------------+---------------+----------------+-----------------+------------+-------------------+----------------+---------------+-------------+------+------------------+
1 row in set (0.00 sec)

mysql> 

@cgolubi1
Copy link
Contributor Author

Now i can browse to the game directly - https://staging.buttonweavers.com/ui/game.html?game=530 - and it says "can't figure out what action to take next", but it no longer shows up on my active games tab, and the "Next pending game" tab works again.

@cgolubi1
Copy link
Contributor Author

Same thing on prod:

mysql> select * from game_status;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | OPEN      |
|  2 | ACTIVE    |
|  3 | COMPLETE  |
|  4 | CANCELLED |
|  5 | BROKEN    |
|  6 | NEW       |
+----+-----------+
6 rows in set (0.00 sec)

mysql> update game set status_id=5 where id=103527;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

randomlife, that should unblock you from using your "Next game" button. And we can always move the game back out of BROKEN if we come up with a fix.

@cgolubi1
Copy link
Contributor Author

I put up a PR to fix the root cause. That doesn't unstick this particular game, and i don't think i have the cycles or a brilliant idea about how to easily do that, so i'm going to unassign this from myself.

@cgolubi1 cgolubi1 removed their assignment Jul 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants