mongo-charms-single-kernel 1.8.6__py3-none-any.whl → 1.8.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mongo-charms-single-kernel might be problematic. Click here for more details.

Files changed (47) hide show
  1. {mongo_charms_single_kernel-1.8.6.dist-info → mongo_charms_single_kernel-1.8.8.dist-info}/METADATA +2 -1
  2. {mongo_charms_single_kernel-1.8.6.dist-info → mongo_charms_single_kernel-1.8.8.dist-info}/RECORD +41 -40
  3. single_kernel_mongo/abstract_charm.py +8 -0
  4. single_kernel_mongo/config/literals.py +2 -23
  5. single_kernel_mongo/config/models.py +12 -0
  6. single_kernel_mongo/config/relations.py +0 -1
  7. single_kernel_mongo/config/statuses.py +10 -57
  8. single_kernel_mongo/core/abstract_upgrades_v3.py +149 -0
  9. single_kernel_mongo/core/k8s_workload.py +2 -2
  10. single_kernel_mongo/core/kubernetes_upgrades_v3.py +17 -0
  11. single_kernel_mongo/core/machine_upgrades_v3.py +54 -0
  12. single_kernel_mongo/core/operator.py +86 -5
  13. single_kernel_mongo/core/version_checker.py +7 -6
  14. single_kernel_mongo/core/vm_workload.py +30 -13
  15. single_kernel_mongo/core/workload.py +17 -19
  16. single_kernel_mongo/events/backups.py +3 -3
  17. single_kernel_mongo/events/cluster.py +1 -1
  18. single_kernel_mongo/events/database.py +1 -1
  19. single_kernel_mongo/events/lifecycle.py +5 -4
  20. single_kernel_mongo/events/tls.py +7 -4
  21. single_kernel_mongo/exceptions.py +4 -24
  22. single_kernel_mongo/lib/charms/operator_libs_linux/v1/systemd.py +288 -0
  23. single_kernel_mongo/managers/cluster.py +8 -8
  24. single_kernel_mongo/managers/config.py +5 -3
  25. single_kernel_mongo/managers/ldap.py +2 -1
  26. single_kernel_mongo/managers/mongo.py +48 -9
  27. single_kernel_mongo/managers/mongodb_operator.py +199 -96
  28. single_kernel_mongo/managers/mongos_operator.py +97 -35
  29. single_kernel_mongo/managers/sharding.py +4 -4
  30. single_kernel_mongo/managers/tls.py +54 -27
  31. single_kernel_mongo/managers/upgrade_v3.py +452 -0
  32. single_kernel_mongo/managers/upgrade_v3_status.py +133 -0
  33. single_kernel_mongo/state/app_peer_state.py +12 -2
  34. single_kernel_mongo/state/charm_state.py +31 -141
  35. single_kernel_mongo/state/config_server_state.py +0 -33
  36. single_kernel_mongo/state/unit_peer_state.py +10 -0
  37. single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2 +14 -0
  38. single_kernel_mongo/utils/helpers.py +0 -6
  39. single_kernel_mongo/utils/mongo_config.py +32 -8
  40. single_kernel_mongo/core/abstract_upgrades.py +0 -890
  41. single_kernel_mongo/core/kubernetes_upgrades.py +0 -194
  42. single_kernel_mongo/core/machine_upgrades.py +0 -188
  43. single_kernel_mongo/events/upgrades.py +0 -157
  44. single_kernel_mongo/managers/upgrade.py +0 -334
  45. single_kernel_mongo/state/upgrade_state.py +0 -134
  46. {mongo_charms_single_kernel-1.8.6.dist-info → mongo_charms_single_kernel-1.8.8.dist-info}/WHEEL +0 -0
  47. {mongo_charms_single_kernel-1.8.6.dist-info → mongo_charms_single_kernel-1.8.8.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mongo-charms-single-kernel
3
- Version: 1.8.6
3
+ Version: 1.8.8
4
4
  Summary: Shared and reusable code for Mongo-related charms
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -12,6 +12,7 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Intended Audience :: System Administrators
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Requires-Dist: boto3 (>=1.37.12,<1.38.0)
15
+ Requires-Dist: charm-refresh (>=3.1.0.2,<4.0.0.0)
15
16
  Requires-Dist: cosl
16
17
  Requires-Dist: cryptography
17
18
  Requires-Dist: dacite (>=1.9.0,<1.10.0)
@@ -1,32 +1,31 @@
1
1
  single_kernel_mongo/__init__.py,sha256=yTtXuLHbaXGJ5IgR7PhhNOzmqlpqywkTNI4bmkNECQ4,421
2
- single_kernel_mongo/abstract_charm.py,sha256=hFJZOGiLxF7C2L9ejN8Qtw0MXk5-eDibm3yAIUWs460,5403
2
+ single_kernel_mongo/abstract_charm.py,sha256=x8LnydlO2hoiJBp_ijRUNrfOH1YrvpcZy5SpuYR1jdg,5762
3
3
  single_kernel_mongo/config/__init__.py,sha256=OGTmp5MZXk2ZGgElT0A1yVyQz6FB4JzjG34mbeIWG2k,128
4
- single_kernel_mongo/config/literals.py,sha256=i_AlPqB5D7GahaiB3X9QnLUgISKx-H5wG7Xh61kICUc,2391
5
- single_kernel_mongo/config/models.py,sha256=SA8fbwSV50xUSHTeNKyNCTtAIBGi36SMP71VLqMDJjc,6399
6
- single_kernel_mongo/config/relations.py,sha256=JhE_CmQ1dxav1jdiP4SaXlbcuKi9NpzSfPFl3xvIxXY,1089
7
- single_kernel_mongo/config/statuses.py,sha256=ZPZRWUk6A6T1R8ITlGdgN8JZnKqHO6vooIFQtPmyc34,22909
4
+ single_kernel_mongo/config/literals.py,sha256=8e6s8L6ehDBeqgQ65pT96qFtLFlfXZaKFkPtrYUxCLY,2023
5
+ single_kernel_mongo/config/models.py,sha256=MruFI2EJndfH3KaJ5iaNar1oyMrTfSZaTQ3yxTxllnc,6770
6
+ single_kernel_mongo/config/relations.py,sha256=fV0_x46OV4nTxbqQx_TNRO3BAxGht9Q_3pej23MgiP0,1047
7
+ single_kernel_mongo/config/statuses.py,sha256=sjXIWwlZu8RgCV2mrtn9J9eoGOFEpbqYa35flDy6wXs,21183
8
8
  single_kernel_mongo/core/__init__.py,sha256=K1XAyFSIkldkT-008Eeg_o7H_XveWaxRuXGJnwoB_DU,124
9
- single_kernel_mongo/core/abstract_upgrades.py,sha256=I1xow2-ZGV05hbPoaRbRGKOvnDsxg3TryF-Q5ioZEjg,37967
10
- single_kernel_mongo/core/k8s_workload.py,sha256=x21P5Py37P2_RKBUC0juB5ta6DCMDdRtpKOwyhhIkkQ,5383
11
- single_kernel_mongo/core/kubernetes_upgrades.py,sha256=pPYjZqx0oBhJNS5pn9KcT2PQRak-Aa9nwz4pigBQug4,8251
12
- single_kernel_mongo/core/machine_upgrades.py,sha256=AIFnrLy4Gw9LlkZ8VDgDoHECUtfb5IshxrIcB0tnSqA,7774
13
- single_kernel_mongo/core/operator.py,sha256=i_Hv1fQh486x-vMls6NuAhF_vRxYRYVhq7SkD3Bjv4E,10949
9
+ single_kernel_mongo/core/abstract_upgrades_v3.py,sha256=AU_eiZ5PU76mcJWoXcZZRaVWCTAZqLyw0RXk3J3bxbQ,5744
10
+ single_kernel_mongo/core/k8s_workload.py,sha256=wp3plDVg6h8vfG8Zpi_p2mq_TNP_2uBlPMt0kWlWrgk,5442
11
+ single_kernel_mongo/core/kubernetes_upgrades_v3.py,sha256=OdzU2g2m2_QI9fAzxaJKnAek5dEc9ZxQ05bgqIT7GHw,339
12
+ single_kernel_mongo/core/machine_upgrades_v3.py,sha256=ae_ehbL_dK778qhF3YYy4BB7ir9uekKp0HIdtf_S41o,1961
13
+ single_kernel_mongo/core/operator.py,sha256=xgmDfMS_loqxsNtnyhSrRenaSulARIgTf8szA9p1at4,14551
14
14
  single_kernel_mongo/core/secrets.py,sha256=SOS19OhzpWdPur7JpggJ84u333tNyapTEgf_kjDjD6M,6755
15
15
  single_kernel_mongo/core/structured_config.py,sha256=wUC6RyzvnL7L7lKmf0cD0V1h0YN5e20Hc0uZAMCD0K4,4246
16
- single_kernel_mongo/core/version_checker.py,sha256=HYNLuOl6R-gQaImZReqkTrmFVc-X-kRNQbgBWHjIvs8,3664
17
- single_kernel_mongo/core/vm_workload.py,sha256=1Q1ywW8g_Sw6Ao-jZR_1k_Hs-iZQo_-1J-y9EZlpaAI,6210
18
- single_kernel_mongo/core/workload.py,sha256=EQOlV3zjt1FGhgbEmQUPAQmm1LEW45nuJ4TXCVYnAmQ,10124
16
+ single_kernel_mongo/core/version_checker.py,sha256=q8HZZUvy-h3CKxcaCtBss6UvwoexD92OaLmru6ikuJ0,3711
17
+ single_kernel_mongo/core/vm_workload.py,sha256=7KUgc82DaWVaxx3UEypuLZ3AIR_dlnqDnB6sorhbArw,7043
18
+ single_kernel_mongo/core/workload.py,sha256=l0AqhnvgcXfrm0c-mKcGUf3-hoo5Gzc8EhQh01RfQKU,10107
19
19
  single_kernel_mongo/events/__init__.py,sha256=xatr1vi0ZKdqF1X-L2vaRuz1vJHwxschJu0XYxd_zoM,126
20
- single_kernel_mongo/events/backups.py,sha256=0LOqxEBlJJou97DISRAsu8h4hw_DLxSJAyx2V9WZlk4,13186
21
- single_kernel_mongo/events/cluster.py,sha256=TpWHgkCFBHOuMPhmi1h8ttXk4j9vqgcGWWN4zdZu350,7782
22
- single_kernel_mongo/events/database.py,sha256=rvU6TqlxV1dIe4m3ezQwHSc-IN3794Ld7NAYcmZdzpA,6052
20
+ single_kernel_mongo/events/backups.py,sha256=01yq8bk5n2YlbNA0XcBT5ENSK1EsT8WmtDPh-M_zmEM,13168
21
+ single_kernel_mongo/events/cluster.py,sha256=oEKrdB6UCdUnSV12Kh1Nm3k2fTHxGQ9rLLW8lbRu0cY,7802
22
+ single_kernel_mongo/events/database.py,sha256=xcmeLnEnYyaL2Y7e-peHEVRZUKuM8w0w9Eh-9f8t7U4,6046
23
23
  single_kernel_mongo/events/ldap.py,sha256=XyU-2BD7hqqQ6EvEZvVXaHTtFX-4Nu2w5fdBhEB3oRk,6510
24
- single_kernel_mongo/events/lifecycle.py,sha256=l6qg70jGvIbeXCoVUu8scUKO4mqoTZV7qzyqy9rd46w,10847
24
+ single_kernel_mongo/events/lifecycle.py,sha256=huLQemAFfqNlCOu1AxsYHz9tCMBCvS1Ps2DvEXYcCuY,10927
25
25
  single_kernel_mongo/events/primary_action.py,sha256=S7BE2BPnqZwXMuAZbn-OjfsZtTR-pe7Pdo69nimSCG4,1304
26
26
  single_kernel_mongo/events/sharding.py,sha256=A5T7n7P36u_7_7QoTfRy4TWUsPT-rYan7ZWxWmTnYxQ,7259
27
- single_kernel_mongo/events/tls.py,sha256=myJG0oC8dz3VyLTHDE35fzhwiRaPqSvsyKaYbsObMws,8717
28
- single_kernel_mongo/events/upgrades.py,sha256=v4i5dc2UhlhWQiyuhTfGYfzSLxC0ttKhix7Z74q_HCM,6147
29
- single_kernel_mongo/exceptions.py,sha256=5KrQAUlXzu76WVH9rkySVTKmiAyYM4pnAPPjfr_Dths,8000
27
+ single_kernel_mongo/events/tls.py,sha256=SN43SWlpsfCe9V3f__eJGWnj0q72ne6MqnEsvTucSmU,8891
28
+ single_kernel_mongo/exceptions.py,sha256=frF-vmLwSQH9BxgRgnZTfkkihnyf3epv1pHz31RkOaY,7416
30
29
  single_kernel_mongo/lib/charms/certificate_transfer_interface/v0/certificate_transfer.py,sha256=KnvPKlHwkUSn1ND5fJ6ddAiBussfITBw5dMGKPqy8-8,17999
31
30
  single_kernel_mongo/lib/charms/data_platform_libs/v0/data_interfaces.py,sha256=BOabAUHQ2KeHHWA_BpB45sFEUz_RdGcf3YWUAAw6gXw,202649
32
31
  single_kernel_mongo/lib/charms/data_platform_libs/v0/s3.py,sha256=INOhfzcJWr7eXxVgvVqtenVeoODnSxjgFne6AbL_3bY,28557
@@ -35,22 +34,24 @@ single_kernel_mongo/lib/charms/grafana_agent/v0/cos_agent.py,sha256=sxHb-cBg9FkY
35
34
  single_kernel_mongo/lib/charms/grafana_k8s/v0/grafana_dashboard.py,sha256=uhj9L22fiQqDoJ-HXJMfKjlZ_GXDm33z1fbFlMgnyk8,86082
36
35
  single_kernel_mongo/lib/charms/loki_k8s/v0/loki_push_api.py,sha256=Ei5pYncLc7SM7_oa3kMDG-_g5Io2F3mlNq70R-j3GtU,99795
37
36
  single_kernel_mongo/lib/charms/operator_libs_linux/v0/sysctl.py,sha256=FwLyNGlNVsc32gYnyIqIAgXx2LmkS4liJMXZQmVHiuc,9497
37
+ single_kernel_mongo/lib/charms/operator_libs_linux/v1/systemd.py,sha256=eyexodlMtvlcX7yUl5PBeJyOVAr8QapuyB0aGi8upno,8505
38
38
  single_kernel_mongo/lib/charms/operator_libs_linux/v2/snap.py,sha256=9vycyj8zDYqBRpNiSlR28DX1f7ZEw2zJbJwxfj_eIUM,48916
39
39
  single_kernel_mongo/lib/charms/prometheus_k8s/v0/prometheus_scrape.py,sha256=Wrq14k-KwYRAK7sfF3ycy4Agb7Ez7qKzjfjUFD3z7vw,99121
40
40
  single_kernel_mongo/lib/charms/tls_certificates_interface/v3/tls_certificates.py,sha256=N0Z9vZsySy1L4UyPCfFFFs5COIQMjnNa5X-1ALSWltI,94254
41
41
  single_kernel_mongo/managers/__init__.py,sha256=EUhvtK85skMEcT3yacYwezyIW4ajsoC5SwxpZcmPZnM,145
42
42
  single_kernel_mongo/managers/backups.py,sha256=L5UrxCSoYEJI8dtWA4tikNvTo71IQJqtMamvgKxsTGQ,40176
43
- single_kernel_mongo/managers/cluster.py,sha256=w1wFDTss80UCTy4iM1B2ouFkUrYRluUNJIM1qMypk3E,20576
44
- single_kernel_mongo/managers/config.py,sha256=q-cOIwMtBEUD2pUdJlcKVJyUQZqrHRPSmFRZvI9lOPE,18149
43
+ single_kernel_mongo/managers/cluster.py,sha256=IjifWuqa7cUDnLCKUDDL0KiBEnQvkp0nSN2LepJ3gGU,20672
44
+ single_kernel_mongo/managers/config.py,sha256=wHMs6XLuWKGOxDCKh_L66HJKP6y1OAepKv21_CuijRI,18332
45
45
  single_kernel_mongo/managers/k8s.py,sha256=I9NNaUKYlOGt6JoTa3gicqzPdO9yPWgO4tPgGBac1uQ,11036
46
- single_kernel_mongo/managers/ldap.py,sha256=mmTtkvEsNlx8yZWbmmHMbsEdUFcvOUca6wBJ_xwChA0,15709
47
- single_kernel_mongo/managers/mongo.py,sha256=i1_0d6qNbHE_kKNpZxst05BMYfW5MEb4az0qU_pDGoA,22587
48
- single_kernel_mongo/managers/mongodb_operator.py,sha256=MgVJZZMKIMRSAqpX-BF-7ZSiREDL6vV084JJnugejOk,52133
49
- single_kernel_mongo/managers/mongos_operator.py,sha256=EBa5clIzbM81yC2Xzxee-EGQMInmmpWd2V9lSpmMIBU,23364
46
+ single_kernel_mongo/managers/ldap.py,sha256=xDyfWZWdrku1WY1phAJELPZAwynBM1Q2bXRA2gOyQto,15823
47
+ single_kernel_mongo/managers/mongo.py,sha256=_ffIIsDsR59v9SJN9sZ1Fg_QEGLM4XRCziyENSBG7eg,24325
48
+ single_kernel_mongo/managers/mongodb_operator.py,sha256=stS2-IXS1SRHMM6q-H0wAxuJ5U-HRsqh0vfsYDlXOQU,55989
49
+ single_kernel_mongo/managers/mongos_operator.py,sha256=8MFM5HpxllG4_CJBh5VfuqK-dYDlqa03WNsDoqnKGOA,25487
50
50
  single_kernel_mongo/managers/observability.py,sha256=j5Nt5Wv43HaYVcr2f6Y_DqHJaP5XhUMjjh7Gg8JwsZI,3584
51
- single_kernel_mongo/managers/sharding.py,sha256=vTQdiO7pk2lwiOsvwgIsvfan0oT4gAyeCG1xp9Cjpkk,46039
52
- single_kernel_mongo/managers/tls.py,sha256=6XhIl-RrpmSEW1Bqet69OnRyDjD41LVTREgG9W_l5es,14588
53
- single_kernel_mongo/managers/upgrade.py,sha256=1p7S005sJcpRxkRDtHlTxnF52-SYuiDYiJ-zIk-twDE,14857
51
+ single_kernel_mongo/managers/sharding.py,sha256=0CYPFHZiwqsQGSaTY40r3FYnhtW4ftQkeZxLqqWDOHg,46045
52
+ single_kernel_mongo/managers/tls.py,sha256=7WRR8nV2Tq3LCyxZmvRqteUxbbi1_ITIunfxYQi9Mpg,15481
53
+ single_kernel_mongo/managers/upgrade_v3.py,sha256=Wci00SC1Ey599T0VefWHbfsl3nnqUVNru7RU3qJnCbY,19673
54
+ single_kernel_mongo/managers/upgrade_v3_status.py,sha256=IRo4Geyv3mUmqy8QgnD4qWzQaTHLiGkMkKD1dC4ZZq4,5770
54
55
  single_kernel_mongo/observability_rules/__init__.py,sha256=VuClFh0iGrw64cP4JppbSotFRyGpNVGmT8oD8pAbJoM,146
55
56
  single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_Cluster_Summary.json,sha256=z1mqwwTqot3lJogtinuCFMwecmPuInUsuOVSeHq9tj4,42626
56
57
  single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_ReplSet_Summary.json,sha256=qYyPM__vsL52jzUlC9ta9GkTZoKMZCmSN1AJoOy0wis,110603
@@ -59,22 +60,22 @@ single_kernel_mongo/observability_rules/loki/.gitkeep,sha256=47DEQpj8HBSa-_TImW-
59
60
  single_kernel_mongo/observability_rules/vm_prometheus_alert_rules/percona-mongodb-exporter.yml,sha256=tkp6G6S0hfGMJphTx6dZljocKViJAlEC2nqt_KrRWYc,1201
60
61
  single_kernel_mongo/state/__init__.py,sha256=V5TWoUtibFiyVO0BqPHnZOZrLNTIIgiVm3vmrhw8tS4,145
61
62
  single_kernel_mongo/state/abstract_state.py,sha256=2bSGXu0KehBw_XIu7THWZEVzrX6C8-73_9mlUrfEMXg,2471
62
- single_kernel_mongo/state/app_peer_state.py,sha256=VSDcE_4iHqurCtIRWr7OQ4L1VIUI5anDl-2PZ2NS_j8,7082
63
- single_kernel_mongo/state/charm_state.py,sha256=-8ZEppLMg2E2VOmQJ7XAGsRf-4M7rm8GGgpd_ppt3-A,33321
63
+ single_kernel_mongo/state/app_peer_state.py,sha256=ul2Z4EBFBm2HW58UaDFrR0mgj6cE8O5zWPzlTPRl8Cs,7501
64
+ single_kernel_mongo/state/charm_state.py,sha256=yiYsRuUuP-7uIenxAKK531QZSLeqpmt2KTEYVU9CqbY,29359
64
65
  single_kernel_mongo/state/cluster_state.py,sha256=KI2Ful1H-ChkUC5kJfp0nUfe8m3SGFW5rx9to-sNKSQ,2947
65
- single_kernel_mongo/state/config_server_state.py,sha256=X02ACkHEgR_Efn5HYwg9DJEkDFZ5yiVs2kGObpsqQuM,4902
66
+ single_kernel_mongo/state/config_server_state.py,sha256=L-UZv3S1mBzgQJu23dnwNFvBq9Gc4AUD4Q2c9IEYCbw,3799
66
67
  single_kernel_mongo/state/ldap_state.py,sha256=7XxjYoFMI8vujlqbCj5JyqigIlmYc-ebL9e0MEDW23Q,7915
67
68
  single_kernel_mongo/state/models.py,sha256=Ipfy2OdCekL1bIBr22Cb-pJiYhQdNvLIZYR4wPmc30g,592
68
69
  single_kernel_mongo/state/tls_state.py,sha256=pCdMBxCXdJaYiDKqTyNz1D7yDX0WwaiBfC6NZdscg7c,2300
69
- single_kernel_mongo/state/unit_peer_state.py,sha256=iWlYxURfXhnTGzv2YF5Fs2qmLEgwFebUP4S59CjYufI,3678
70
- single_kernel_mongo/state/upgrade_state.py,sha256=fC73y4Q12XF4YWXoXg9bWuNUpnoHdF8c0pJGTFxlv5M,4267
70
+ single_kernel_mongo/state/unit_peer_state.py,sha256=99Qn6DkKXO_y5isuLXICfrQeVg3uqy0uW_48g7WqGK0,4080
71
71
  single_kernel_mongo/templates/__init__.py,sha256=8-zJnYHONfuTjeihx1ZL34URMW6c_MwJaIMBJgoPGTc,141
72
+ single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2,sha256=hHYGtnZq9pVsx4jqNxiyuvnqK5rDf-WM6OsktfhJzBk,511
72
73
  single_kernel_mongo/templates/ldap.conf.j2,sha256=aPTzSu42jheL1i3RXAp6P7SQRIdmPfZx-8JbxtZC_IM,107
73
74
  single_kernel_mongo/templates/logrotate.j2,sha256=iemZzi9hHjA9ANzP7QxW63mdM7fJRUzqkqgsR2qpPQU,753
74
75
  single_kernel_mongo/utils/__init__.py,sha256=JH9SDM2bQq7R5hb1nRTeUKQVHbdqg6RbQu5-qAJ0Xpg,116
75
76
  single_kernel_mongo/utils/event_helpers.py,sha256=_rVQZKjs0osHGtjA5LEdV5LTnxCVXGPe2UY8wmRazBE,981
76
- single_kernel_mongo/utils/helpers.py,sha256=Kx8exm4d3gTkksTnRo3hv4NlnEVOxON8q2YXC6HLYxA,4244
77
- single_kernel_mongo/utils/mongo_config.py,sha256=0M7aCxZLXOoa15cTjn90vrhQBlpcz6546R77wWpbgWs,3419
77
+ single_kernel_mongo/utils/helpers.py,sha256=VdDERCFkUxMZ2SzLEl76BBrzcEjkFVmz509e0_e-Uac,4006
78
+ single_kernel_mongo/utils/mongo_config.py,sha256=tU7dGUZPSWdfttUn868vi_q5y6EWvGN2SREfexM8pxU,4134
78
79
  single_kernel_mongo/utils/mongo_connection.py,sha256=330gz1Ha5WdfdfxYmci1jVRnrRswtomoukn3AASSXCU,28540
79
80
  single_kernel_mongo/utils/mongo_error_codes.py,sha256=mM_KHTR3b9UA4BaxmzSlCVrFUNhRAc458ndBvJ4fg_8,479
80
81
  single_kernel_mongo/utils/mongodb_users.py,sha256=7Ckkkuy9eYeOHpNyk291P-rpH0Flk8KKCa3gkdE3BYI,6575
@@ -84,7 +85,7 @@ single_kernel_mongo/workload/log_rotate_workload.py,sha256=VmWUJ_mqxN4v_IAFHw6lL
84
85
  single_kernel_mongo/workload/mongodb_workload.py,sha256=UHXVUQI1FyAhnP2TTLKiTFWWrUUaX-On4wDIsT5DXvQ,1527
85
86
  single_kernel_mongo/workload/mongos_workload.py,sha256=p1ZjqbGTokcxNnqKCvCIUQvmDvkOcN8pRvkPfA7Rgeg,1815
86
87
  single_kernel_mongo/workload/monitor_workload.py,sha256=dw-F3Y11_jpqI30Hg30-y6kxFFXGnHcSbgdAAJE8C8Q,1793
87
- mongo_charms_single_kernel-1.8.6.dist-info/METADATA,sha256=lIg8U2_Juo3I_JlEduUTgZVMXbp4rEeA2T62C14VWtM,5260
88
- mongo_charms_single_kernel-1.8.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
89
- mongo_charms_single_kernel-1.8.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
90
- mongo_charms_single_kernel-1.8.6.dist-info/RECORD,,
88
+ mongo_charms_single_kernel-1.8.8.dist-info/METADATA,sha256=dY1Trv07HoAiqp6LaI8bZgc2JzNjfh37l4NVRzGVhD4,5310
89
+ mongo_charms_single_kernel-1.8.8.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
90
+ mongo_charms_single_kernel-1.8.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
91
+ mongo_charms_single_kernel-1.8.8.dist-info/RECORD,,
@@ -26,6 +26,7 @@ a DB Engine and storage), and the main peer relation name will be
26
26
  import logging
27
27
  from typing import ClassVar, Generic, TypeVar
28
28
 
29
+ import ops.log
29
30
  from data_platform_helpers.advanced_statuses.handler import StatusHandler
30
31
  from data_platform_helpers.advanced_statuses.models import StatusObject
31
32
  from data_platform_helpers.advanced_statuses.protocol import ManagerStatusProtocol
@@ -43,6 +44,8 @@ T = TypeVar("T", bound=MongoConfigModel)
43
44
  U = TypeVar("U", bound=OperatorProtocol)
44
45
 
45
46
  logger = logging.getLogger(__name__)
47
+ logging.getLogger("httpx").setLevel(logging.WARNING)
48
+ logging.getLogger("httpcore").setLevel(logging.WARNING)
46
49
 
47
50
 
48
51
  class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
@@ -69,6 +72,11 @@ class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
69
72
  # Init the Juju object Object
70
73
  super(Generic, self).__init__(*args)
71
74
 
75
+ root_logger = logging.getLogger()
76
+ for handler in root_logger.handlers:
77
+ if isinstance(handler, ops.log.JujuLogHandler):
78
+ handler.setFormatter(logging.Formatter("{name}:{message}", style="{"))
79
+
72
80
  # Create the operator instance (one of MongoDBOperator or MongosOperator)
73
81
  self.operator = self.operator_type(self)
74
82
  self.state = self.operator.state
@@ -50,28 +50,9 @@ class InternalUsernames(str, Enum):
50
50
  LOGROTATE = "logrotate"
51
51
 
52
52
 
53
- class UnitState(str, Enum):
54
- """Unit upgrade state."""
55
-
56
- HEALTHY = "healthy"
57
- RESTARTING = "restarting" # Kubernetes only
58
- UPGRADING = "upgrading" # Machines only
59
- OUTDATED = "outdated" # Machines only
60
-
61
-
62
53
  SECRETS_APP = [f"{user}-password" for user in InternalUsernames] + ["keyfile"]
63
54
 
64
-
65
- @dataclass(frozen=True)
66
- class Snap:
67
- """The Snap related information."""
68
-
69
- name: str = "charmed-mongodb"
70
- channel: str = "8/edge"
71
- revision: str = "133"
72
-
73
-
74
- SNAP = Snap(channel="8/edge", revision="133")
55
+ VERSIONS_FILE = Path("refresh_versions.toml")
75
56
 
76
57
  T = TypeVar("T", bound=str | int)
77
58
 
@@ -112,9 +93,7 @@ PBM_RESTART_DELAY = 5
112
93
  FEATURE_VERSION = "8.0"
113
94
 
114
95
 
115
- OS_REQUIREMENTS = {
116
- "vm.max_map_count": "262144",
117
- }
96
+ OS_REQUIREMENTS = {"vm.max_map_count": "262144", "vm.overcommit_memory": "1"}
118
97
 
119
98
  TRUST_STORE_PATH = Path("/usr/local/share/ca-certificates")
120
99
 
@@ -62,6 +62,18 @@ class LdapConfig:
62
62
  LDAP_CONFIG = LdapConfig()
63
63
 
64
64
 
65
+ @dataclass(frozen=True)
66
+ class THPConfig:
67
+ """Configuration for transparent huge tables."""
68
+
69
+ service_template: Traversable = TEMPLATE_DIRECTORY / "enable-transparent-huge-pages.service.j2"
70
+ service_file_path: Path = Path("/etc/systemd/system/enable-transparent-huge-pages.service")
71
+ service_name = "enable-transparent-huge-pages"
72
+
73
+
74
+ THP_CONFIG = THPConfig()
75
+
76
+
65
77
  @dataclass(frozen=True)
66
78
  class AuditLogConfig:
67
79
  """Audit log related configuration."""
@@ -23,7 +23,6 @@ class RelationNames(str, Enum):
23
23
  CONFIG_SERVER = "config-server"
24
24
  CLUSTER = "cluster"
25
25
  MONGOS_PROXY = "mongos_proxy"
26
- UPGRADE_VERSION = "upgrade-version-a"
27
26
 
28
27
 
29
28
  class Scopes(str, Enum):
@@ -139,16 +139,16 @@ class MongosStatuses(Enum):
139
139
  check="Relation validation failed.",
140
140
  action="Verify the certificates relations. Use the same CA for all cluster components.",
141
141
  )
142
-
143
- # Running statuses:
142
+ MONGOS_NOT_STARTED = StatusObject(status="waiting", message="Waiting to start mongos...")
144
143
  MISSING_CONF_SERVER_REL = StatusObject(
145
144
  status="blocked",
146
145
  message="The cluster relation with the config-server is missing.",
147
146
  short_message="Missing cluster relation.",
148
147
  check="Relation validation failed.",
149
148
  action="Add the cluster relation (config-server interface) to mongos.",
150
- running="async",
151
149
  )
150
+
151
+ # Running statuses:
152
152
  STARTING_MONGOS = StatusObject(
153
153
  status="maintenance", message="Starting mongos.", running="blocking"
154
154
  )
@@ -437,66 +437,19 @@ class UpgradeStatuses(Enum):
437
437
  """Upgrade statuses."""
438
438
 
439
439
  ACTIVE_IDLE = StatusObject(status="active", message="")
440
- WAITING_POST_UPGRADE_STATUS = StatusObject(
441
- status="waiting", message="Waiting for post upgrade checks..."
442
- )
443
- UNHEALTHY_UPGRADE = StatusObject(
444
- status="blocked",
445
- message="Unhealthy after refresh. Rollback to previous revision with `juju refresh`.",
446
- approved_critical_component=True,
447
- )
448
- INCOMPATIBLE_UPGRADE = StatusObject(
449
- status="blocked",
450
- message="Refresh incompatible. Rollback to previous revision with `juju refresh`.",
440
+ HEALTH_CHECK_FAILED = StatusObject(
441
+ status="maintenance",
442
+ message="MongoDB is not running after upgrade",
443
+ action="check logs for extra information.",
451
444
  approved_critical_component=True,
452
445
  )
453
- REFRESH_IN_PROGRESS = StatusObject(
446
+ CLUSTER_CHECK_FAILED = StatusObject(
454
447
  status="maintenance",
455
- message="Refreshing...",
456
- action="To rollback, run `juju refresh` to the previous revision.",
448
+ message="Cluster is not healthy after upgrade",
449
+ action="check logs for extra information.",
457
450
  approved_critical_component=True,
458
451
  )
459
452
 
460
- @staticmethod
461
- def vm_active_upgrade(
462
- unit_workload_version: str | None,
463
- unit_workload_container_version: str | None,
464
- current_versions: str,
465
- outdated: bool = False,
466
- ) -> StatusObject:
467
- """Returns the active status for a vm unit."""
468
- outdated_str = " (outdated)" if outdated else ""
469
- return StatusObject(
470
- status="active",
471
- message=f"MongoDB {unit_workload_version} running; "
472
- f"Snap revision {unit_workload_container_version}{outdated_str}; "
473
- f"Charm revision {current_versions}.",
474
- approved_critical_component=True,
475
- )
476
-
477
- @staticmethod
478
- def k8s_active_upgrade(
479
- workload_version: str, charm_version: str, outdated=False
480
- ) -> StatusObject:
481
- """Returns the active status for a k8s unit."""
482
- outdated_str = " (restart pending)" if outdated else ""
483
- return StatusObject(
484
- status="active",
485
- message=f"MongoDB {workload_version} running{outdated_str}; Charm revision {charm_version}.",
486
- approved_critical_component=True,
487
- )
488
-
489
- @staticmethod
490
- def refreshing_needs_resume(
491
- resume_string: str,
492
- ) -> StatusObject:
493
- """Returns refreshing status."""
494
- return StatusObject(
495
- status="blocked",
496
- message=f"Refreshing. {resume_string}To rollback, `juju refresh` to last revision.",
497
- approved_critical_component=True,
498
- )
499
-
500
453
 
501
454
  class LdapStatuses(Enum):
502
455
  """Ldap Statuses."""
@@ -0,0 +1,149 @@
1
+ """Common code for upgrades."""
2
+
3
+ import abc
4
+ import dataclasses
5
+ import logging
6
+
7
+ import charm_refresh
8
+ import poetry.core.constraints.version as poetry_version
9
+ from tenacity import RetryError
10
+ from typing_extensions import override
11
+
12
+ from single_kernel_mongo.config.literals import CharmKind
13
+ from single_kernel_mongo.config.models import BackupState
14
+ from single_kernel_mongo.core.operator import OperatorProtocol
15
+ from single_kernel_mongo.exceptions import (
16
+ FailedToMovePrimaryError,
17
+ )
18
+ from single_kernel_mongo.managers.upgrade_v3 import MongoDBUpgradesManager
19
+ from single_kernel_mongo.state.charm_state import CharmState
20
+
21
+ logger = logging.getLogger()
22
+
23
+
24
+ @dataclasses.dataclass(eq=False)
25
+ class MongoDBRefresh(charm_refresh.CharmSpecificCommon, abc.ABC):
26
+ """Common code for MongoDB Refreshes."""
27
+
28
+ dependent: OperatorProtocol
29
+ upgrades_manager: MongoDBUpgradesManager
30
+ state: CharmState
31
+
32
+ @classmethod
33
+ @override
34
+ def is_compatible(
35
+ cls,
36
+ *,
37
+ old_charm_version: charm_refresh.CharmVersion,
38
+ new_charm_version: charm_refresh.CharmVersion,
39
+ old_workload_version: str,
40
+ new_workload_version: str,
41
+ ) -> bool:
42
+ # Check charm version compatibility
43
+ if not super().is_compatible(
44
+ old_charm_version=old_charm_version,
45
+ new_charm_version=new_charm_version,
46
+ old_workload_version=old_workload_version,
47
+ new_workload_version=new_workload_version,
48
+ ):
49
+ return False
50
+ return cls.is_workload_compatible(
51
+ old_workload_version=old_workload_version, new_workload_version=new_workload_version
52
+ )
53
+
54
+ @staticmethod
55
+ def is_workload_compatible(
56
+ old_workload_version: str,
57
+ new_workload_version: str,
58
+ ) -> bool:
59
+ """Check if the workload versions are compatible.
60
+
61
+ This method is called on the new charm code version. This means that it is responsible for
62
+ determining which versions the charm code supports refreshing from - not refreshing to.
63
+ """
64
+ try:
65
+ old_version = poetry_version.Version.parse(old_workload_version)
66
+ new_version = poetry_version.Version.parse(new_workload_version)
67
+ except ValueError:
68
+ # Not enough values to unpack or cannot convert
69
+ logger.error(
70
+ "Unable to parse workload versions."
71
+ f"Got {old_workload_version} to {new_workload_version}"
72
+ )
73
+ return False
74
+
75
+ if old_version.major != new_version.major:
76
+ logger.info(
77
+ "Refreshing to a different major version workload is not supported. "
78
+ f"Got {old_version.major} to {new_version.major}"
79
+ )
80
+ return False
81
+
82
+ if old_version > new_version:
83
+ logger.info(
84
+ "Refreshing to an older minor version workload is not supported. "
85
+ f"Got {old_version} to {new_version}"
86
+ )
87
+ return False
88
+
89
+ return True
90
+
91
+ def _mongodb_checks(self) -> None:
92
+ """MongoDB specific checks."""
93
+ try:
94
+ self.upgrades_manager.wait_for_cluster_healthy()
95
+ except RetryError as e:
96
+ logger.error(
97
+ "Cannot proceed with refresh. Failed to check cluster health, error: %s", e
98
+ )
99
+ raise charm_refresh.PrecheckFailed("Cluster is not healthy")
100
+
101
+ try:
102
+ self.upgrades_manager.move_primary_to_last_upgrade_unit()
103
+ except FailedToMovePrimaryError:
104
+ logger.error("Cluster failed to move primary before re-election.")
105
+ raise charm_refresh.PrecheckFailed("Primary switchover failed")
106
+
107
+ if not self.upgrades_manager.is_cluster_able_to_read_write():
108
+ logger.error("Cluster cannot read/write to replicas")
109
+ raise charm_refresh.PrecheckFailed("Cluster is not able to read/write to replicas")
110
+
111
+ fcv = self.state.app_peer_data.feature_compatibility_version
112
+ if not self.upgrades_manager.is_feature_compatibility_version(fcv):
113
+ logger.info(
114
+ "Not all replicas have the expected feature compatibility: %s",
115
+ fcv,
116
+ )
117
+ raise charm_refresh.PrecheckFailed(f"Not all replicas have the expected FCV {fcv}.")
118
+
119
+ def run_pre_refresh_checks_after_1_unit_refreshed(self):
120
+ """Implement pre-refresh checks."""
121
+ if not self.state.db_initialised:
122
+ return
123
+
124
+ if self.dependent.name == CharmKind.MONGOS:
125
+ if not self.upgrades_manager.is_mongos_able_to_read_write():
126
+ raise charm_refresh.PrecheckFailed("mongos is not able to read/write")
127
+ return
128
+
129
+ backup_state = self.dependent.backup_manager.backup_state()
130
+
131
+ if backup_state == BackupState.BACKUP_RUNNING:
132
+ raise charm_refresh.PrecheckFailed("Backup in progress.")
133
+ if backup_state == BackupState.RESTORE_RUNNING:
134
+ raise charm_refresh.PrecheckFailed("Restore in progress.")
135
+
136
+ self._mongodb_checks()
137
+
138
+ if not self.upgrades_manager.are_pre_upgrade_operations_config_server_successful():
139
+ raise charm_refresh.PrecheckFailed("Failed to disabled balancer.")
140
+
141
+ def run_pre_refresh_checks_before_any_units_refreshed(self):
142
+ """Runs before the upgrade."""
143
+ if not self.state.db_initialised:
144
+ return
145
+ if self.dependent.name == CharmKind.MONGOD:
146
+ if not self.dependent.mongo_manager.mongod_ready():
147
+ logger.error("Cannot proceed with refresh. Service mongod is not running.")
148
+ raise charm_refresh.PrecheckFailed("mongod is not running")
149
+ self.run_pre_refresh_checks_after_1_unit_refreshed()
@@ -39,8 +39,8 @@ class KubernetesWorkload(WorkloadBase):
39
39
  return self.container.can_connect()
40
40
 
41
41
  @override
42
- def install(self) -> None:
43
- return None
42
+ def install(self, revision: str | None = None, retry_and_raise: bool = True) -> bool:
43
+ return True
44
44
 
45
45
  @override
46
46
  def start(self) -> None:
@@ -0,0 +1,17 @@
1
+ """Kubernetes code for upgrades."""
2
+
3
+ import dataclasses
4
+
5
+ import charm_refresh
6
+
7
+ from single_kernel_mongo.core.abstract_upgrades_v3 import MongoDBRefresh
8
+
9
+
10
+ @dataclasses.dataclass(eq=False)
11
+ class KubernetesMongoDBRefresh(
12
+ MongoDBRefresh,
13
+ charm_refresh.CharmSpecificKubernetes,
14
+ ):
15
+ """Kubernetes specific refresh code."""
16
+
17
+ pass
@@ -0,0 +1,54 @@
1
+ """Machine code for upgrades."""
2
+
3
+ import dataclasses
4
+ import logging
5
+
6
+ import charm_refresh
7
+
8
+ from single_kernel_mongo.config.literals import CharmKind
9
+ from single_kernel_mongo.core.abstract_upgrades_v3 import MongoDBRefresh
10
+ from single_kernel_mongo.exceptions import FailedToElectNewPrimaryError, MongoDBUpgradeError
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ @dataclasses.dataclass(eq=False)
16
+ class MachineMongoDBRefresh(
17
+ MongoDBRefresh,
18
+ charm_refresh.CharmSpecificMachines,
19
+ ):
20
+ """Machine specific refresh code."""
21
+
22
+ def refresh_snap(
23
+ self, *, snap_name: str, snap_revision: str, refresh: charm_refresh.Machines
24
+ ) -> None:
25
+ """Refreshes a snap."""
26
+ self.dependent.stop_charm_services()
27
+
28
+ if self.dependent.name == CharmKind.MONGOD:
29
+ try:
30
+ if self.dependent.charm.unit.name == self.dependent.primary_unit_name:
31
+ self.dependent.mongo_manager.step_down_primary_and_wait_reelection()
32
+ except FailedToElectNewPrimaryError:
33
+ logger.error("Failed to reelect primary before upgrading unit.")
34
+ return
35
+
36
+ revision_before_refresh = self.dependent.workload.snap_revision()
37
+ assert (
38
+ snap_revision != revision_before_refresh
39
+ ), "current snap revision and target revision are equal"
40
+
41
+ logger.info("Updating snap installation")
42
+ if not self.dependent.workload.install(revision=snap_revision, retry_and_raise=False):
43
+ logger.exception("Snap refresh failed")
44
+
45
+ if self.charm.workload.snap_revision() == revision_before_refresh:
46
+ self.dependent.start_charm_services()
47
+ else:
48
+ refresh.update_snap_revision()
49
+
50
+ # Ensures that the unit receives another juju event.
51
+ raise MongoDBUpgradeError("Snap Refresh failed.")
52
+
53
+ refresh.update_snap_revision()
54
+ logger.info(f"Updated snap to revision {snap_revision}")