Skip to content

Automatically save solver testcase#3242

Merged
lslezak merged 7 commits intomasterfrom
solver-testcase
Mar 5, 2026
Merged

Automatically save solver testcase#3242
lslezak merged 7 commits intomasterfrom
solver-testcase

Conversation

@lslezak
Copy link
Copy Markdown
Contributor

@lslezak lslezak commented Mar 5, 2026

Problem

  • Debugging dependency problems is difficult without knowing the details

Solution

  • Automatically save the solver testcase when the solver run fails.
  • For debugging purposes allow saving the testcase even on solver success when the inst.solver_testcase=1 boot option is used. This can help debugging problems where the solver does not fail but some optional packages are not automatically installed (like kernel drivers, firmware packages, language packages...).
  • Include the solver testcase in the logs saved using the agama logs store command.

Notes

  • Saving the solver testcase is quite expensive (takes ~1.3s in Tumbleweed on a very fast machine, not that much but it needs to run several times during the Agama configuration phase). It also takes some storage space (=RAM in Live ISO!), about 9MB in Tumbleweed and about 2.5MB in SLES.
  • To avoid wasting resources a solver test case is saved only when the solver fails or when explicitly requested with the inst.solver_testcase=1 boot option.

Testing

  • Tested manually
# journalctl -u agama-web-server.service | grep "testcase saved"
Mar 05 12:23:50 agama-tw agama-web-server[3142]: Solver testcase saved to /var/log/zypp/testcase, elapsed time: 1.307023323s
Mar 05 12:23:52 agama-tw agama-web-server[3142]: Solver testcase saved to /var/log/zypp/testcase, elapsed time: 1.304726128s
Mar 05 12:23:53 agama-tw agama-web-server[3142]: Solver testcase saved to /var/log/zypp/testcase, elapsed time: 1.360524222s
# ls -lh /var/log/zypp/testcase/
total 8.9M
-rw-r--r-- 1 root root   30 Mar  5 12:23 @System.repo.gz
-rw-r--r-- 1 root root 8.8M Mar  5 12:23 agama-0.repo.gz
-rw-r--r-- 1 root root 5.6K Mar  5 12:23 agama-1.repo.gz
-rw-r--r-- 1 root root 1.2K Mar  5 12:23 agama-2.repo.gz
-rw-r--r-- 1 root root  37K Mar  5 12:23 solver.result
-rw-r--r-- 1 root root 5.5K Mar  5 12:23 testcase.t
-rw-r----- 1 root root 3.6K Mar  5 12:23 y2log
-rw-r--r-- 1 root root 6.1K Mar  5 12:23 zypp-control.yaml
-rw-r--r-- 1 root root 2.6K Mar  5 12:23 zypp-modalias.yaml

TODO

  • Document the inst.solver_testcase=1 boot option

lslezak added 4 commits March 5, 2026 14:13
Automatically save the solver testcase when the solver run fails.

For debugging purposes save the testcase even on solver success
when the "inst.solver_testcase=1" boot option is used.
trusted_keys: vec![],
unsigned_repos: vec![],
only_required: false,
save_solver_testcase: cmdline.get_last("inst.solver_testcase") == Some("1".to_string()),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should have a struct to hold configuration options like only_required, save_solver_testcase, etc. But that's out of scope here.

lslezak and others added 3 commits March 5, 2026 16:11
Co-authored-by: Imobach González Sosa <igonzalezsosa@suse.com>
@lslezak lslezak merged commit fbbdb83 into master Mar 5, 2026
19 of 20 checks passed
@lslezak lslezak deleted the solver-testcase branch March 5, 2026 15:23
@mlandres
Copy link
Copy Markdown

mlandres commented Mar 6, 2026

@lslezak Frankly I'd vote for something like /var/log/agama.solverTestCase (like /var/log/zypper.solverTestCase).
The /var/log/zypp directory is not intended to be used by applications and we (libzypp) think about giving it up in the future. The history file there will probably be moved to a location snapshoted and restored by Transactional.

lslezak added a commit that referenced this pull request Mar 9, 2026
...to /run/agama/testcase

- Do not save solver testcase when "ZYPP_FULLLOG=1" (in that case
libzypp creates the solver testcase automatically in the
/var/log/YaST2/autoTestcase/ directory)

- Related to gh##3242
lslezak added a commit that referenced this pull request Mar 9, 2026
...to /run/agama/testcase

- Do not save solver testcase when "ZYPP_FULLLOG=1" (in that case
libzypp creates the solver testcase automatically in the
/var/log/YaST2/autoTestcase/ directory)

- Related to gh##3242
lslezak added a commit that referenced this pull request Mar 9, 2026
…3259)

## Problem

- As discussed on the Slack, Agama should not save the solver testcase
to `/var/log/zypp`.
- Related to #3242

## Solution

- Use `/run/agama` for that

### Additional changes

- Do not save the solver testcase when `ZYPP_FULLLOG=1` is set, in that
case libzypp creates the solver testcase automatically in the
`/var/log/YaST2/autoTestcase` directory. Avoid dumping it twice.

## Testing

- Tested manually
bmwiedemann pushed a commit to bmwiedemann/openSUSE that referenced this pull request Mar 11, 2026
https://build.opensuse.org/request/show/1338002
by user IGonzalezSosa + anag_factory
- Recalculate the issues and actions on language change (gh#agama-project/agama#3262).

- Always add hardware/filesystem/locale proposed packages when
  running solver (bsc#1258193)

- Move the location of the dumped solver testcase
  to /run/agama/testcase, do not save solver testcase when
  "ZYPP_FULLLOG=1" (in that case libzypp creates the solver
  testcase automatically in the /var/log/YaST2/autoTestcase/
  directory) (related to gh#agama-project/agama#3242)

- Fix typo (bsc#1259357)

- Honor inst.finish in interactive installation (jsc#PED-15031).

- Improve registration and software issues reporting (related to bsc#1258034).

- Automatically save the solver testcase to /var/log/zypp/testcase/
  directory when the solver run fails or when requested with the
  "inst.solver_testcase=1" b
@imobachgs imobachgs mentioned this pull request Mar 17, 2026
imobachgs added a commit that referenced this pull request Mar 17, 2026
Prepare to release version 19.

* #1829
* #2508
* #2772
* #2818
* #2826
* #2848
* #2860
* #2863
* #2864
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2937
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2949
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2981
* #2982
* #2983
* #2984
* #2988
* #2989
* #2990
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2998
* #2999
* #3000
* #3001
* #3002
* #3004
* #3005
* #3006
* #3007
* #3008
* #3009
* #3011
* #3012
* #3013
* #3014
* #3015
* #3016
* #3018
* #3019
* #3020
* #3021
* #3022
* #3023
* #3024
* #3025
* #3026
* #3027
* #3028
* #3029
* #3030
* #3031
* #3033
* #3034
* #3035
* #3036
* #3037
* #3039
* #3040
* #3041
* #3042
* #3043
* #3044
* #3045
* #3046
* #3047
* #3048
* #3049
* #3050
* #3051
* #3052
* #3053
* #3054
* #3055
* #3056
* #3057
* #3058
* #3060
* #3061
* #3062
* #3063
* #3064
* #3065
* #3066
* #3067
* #3068
* #3069
* #3070
* #3071
* #3072
* #3073
* #3074
* #3075
* #3076
* #3077
* #3078
* #3079
* #3086
* #3087
* #3088
* #3089
* #3090
* #3091
* #3092
* #3093
* #3094
* #3095
* #3096
* #3097
* #3098
* #3099
* #3100
* #3101
* #3102
* #3103
* #3104
* #3105
* #3106
* #3107
* #3108
* #3109
* #3110
* #3112
* #3113
* #3114
* #3115
* #3116
* #3117
* #3118
* #3119
* #3120
* #3122
* #3123
* #3124
* #3127
* #3128
* #3129
* #3130
* #3131
* #3133
* #3134
* #3135
* #3136
* #3137
* #3138
* #3139
* #3140
* #3141
* #3142
* #3143
* #3144
* #3145
* #3146
* #3147
* #3148
* #3149
* #3150
* #3151
* #3152
* #3153
* #3154
* #3155
* #3157
* #3158
* #3159
* #3160
* #3161
* #3162
* #3163
* #3164
* #3165
* #3166
* #3167
* #3168
* #3169
* #3170
* #3174
* #3175
* #3176
* #3177
* #3178
* #3179
* #3181
* #3182
* #3184
* #3185
* #3186
* #3188
* #3189
* #3190
* #3191
* #3192
* #3194
* #3195
* #3196
* #3197
* #3198
* #3199
* #3200
* #3201
* #3202
* #3203
* #3205
* #3206
* #3208
* #3209
* #3210
* #3213
* #3214
* #3215
* #3216
* #3217
* #3218
* #3219
* #3220
* #3222
* #3223
* #3224
* #3225
* #3226
* #3227
* #3228
* #3229
* #3230
* #3231
* #3232
* #3233
* #3234
* #3235
* #3236
* #3237
* #3238
* #3239
* #3240
* #3241
* #3242
* #3243
* #3244
* #3246
* #3247
* #3248
* #3250
* #3251
* #3252
* #3253
* #3254
* #3255
* #3256
* #3257
* #3258
* #3259
* #3260
* #3261
* #3262
* #3263
* #3265
* #3266
* #3267
* #3268
* #3269
* #3270
* #3271
* #3272
* #3273
* #3274
* #3275
* #3276
* #3277
* #3278
* #3279
* #3280
* #3281
* #3282
* #3283
* #3284
* #3285
* #3286
* #3287
* #3288
* #3289
* #3290
* #3291
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants