Commit Graph

1344 Commits

Author SHA1 Message Date
Avgustin Marinov
aa79097c1f Bump to Spring Boot 4.1.0 (#3125)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-06-12 11:34:33 +03:00
Vasil Ilchev
9cb8a7cf00 Fix ghost joins in rsql with maps (#3088)
Signed-off-by: vasilchev <vasil.ilchev@bosch.com>
2026-06-12 10:39:55 +03:00
Avgustin Marinov
65c3c97b3a Declare access controllers as infra (#3127)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-06-11 16:31:39 +03:00
Avgustin Marinov
19eedab40e Optimize test logging (#3126)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-06-11 16:07:00 +03:00
Stanislav Trailov
f44b6268b0 Introduce soft deleted list option for soft deletable entities (#3093)
* Introduce soft deleted list option for soft deletable entities

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* fix verify build

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* fix typo in license

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Add sorting option on deleted field

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* add missing import in tests

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Rename SoftDeletedFilter to SoftDeletedMode and its values

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Introduce MgmtSoftDeletedMode on api layer

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* remove unused imports

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Integrate the enum on API layer

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Fix OpenApi spec

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* address some comments

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Get rid of count(SoftDeletedMode) at all

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* remove formatter for enum - stop supporting lowercase values in API

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-06-08 16:37:05 +03:00
Stanislav Trailov
95680962cc Fix target group assignment with RSQL negation filters (e.g. tag!=tag… (#3116)
* Fix target group assignment with RSQL negation filters (e.g. tag!=tag1) failing on EclipseLink/MySQL

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* address comments

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Fix test for chunked calls to use also negate operator

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* address comments

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-06-08 15:15:50 +03:00
Vasil Ilchev
97df5bf8d1 Fix Error/Success Conditions not evaluated case. Fix 'Cancel' final s… (#3110)
* Fix Error/Success Conditions not evaluated case. Fix 'Cancel' final status not mapped - now mapped to Error. Fix Delete Action does not update properly group count and percentage evaluation.

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

* Add ThreshholdRolloutGroupSuccessCondition

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

* Cancel Action not included in ERROR/SUCCESS. Trigger SuccessAction on SuccessCondition/GroupFINISHED.

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

* Review Findings add comments to tests

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

---------

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>
2026-06-05 15:03:20 +03:00
Stanislav Trailov
794455064f Fix RSQL filter in batch update query in assign target group (#3107)
* Fix RSQL filter in batch update query in assign target group

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Stick with old approach when using hibernate

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* avoid fully qualified classname

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Refer review changes

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* add link to the bug reported to eclipse link

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-06-02 10:12:43 +03:00
Stanislav Trailov
d6fcbac047 Auto action cleanup rely on hard db update on last modified at rather than hard time limit (#3103) 2026-05-26 18:11:09 +03:00
Vasil Ilchev
2a4c12fd29 Fix/exception mapper (#3083)
* Added mapping for OptimisticLockingFailureException in ExceptionMapper for proper propagation

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

* Added ExceptionMapperTest

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>

---------

Signed-off-by: vasilchev <vasil.ilchev@bosch.com>
2026-05-18 09:22:49 +03:00
clayly
eba16e529e Add indexes on sp_action.rollout and rollout_group (#3045)
* perf(repository): add indexes on sp_idx_action_rollout_group_status and sp_idx_action_rollout_status

Rollout monitoring queries (existsByRolloutId, getStatusCountByRolloutId, getStatusCountByRolloutGroupId) filter by rollout or rollout_group on sp_action. The flyway baseline did not index either column, so Postgres
falls back to Seq Scan on every monitoring poll. With 16k action rows this is meaningful — the group-count query takes ~500 ms without the index and ~27 ms with it (Index Only Scan, Heap Fetches: 0).

Bench (16k rows, 1000 iter):
- WHERE tenant=? AND rollout_group=?           18.6x faster on PG
                                               17.6x faster on YugabyteDB
- WHERE tenant=? AND rollout=? GROUP BY status  2.5x faster on PG
                                                1.5x faster on YugabyteDB

Adds V1_20_2 sibling migrations for POSTGRESQL, H2, and MYSQL.
2026-05-15 10:54:39 +03:00
Avgustin Marinov
6311e64ea9 Clean up distribution lock (#3081)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-05-14 09:10:17 +03:00
Vasil Ilchev
275348d524 Fix JdbcLockRegistry ttl (#3080)
Signed-off-by: vasilchev <vasil.ilchev@bosch.com>
2026-05-13 11:51:29 +03:00
Stanislav Trailov
b63ded1b2b Use AccessContext.actor() in getApprovalUser in default rollout approval strategy (#3036)
Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-04-24 16:20:53 +03:00
clayly
2e53a66b79 Fix test assertions that depend on undefined row ordering (#3007)
* Fix test assertions that depend on undefined row ordering

Several tests use containsExactly() or index-based comparison on query
results that have no ORDER BY clause. SQL does not guarantee row ordering
without explicit ORDER BY, and databases like YugabyteDB return results
in a different (but valid) order than PostgreSQL/H2.

These tests verify set membership (correct targets assigned, correct
actions stored), not ordering. Changed to order-independent assertions:

- AutoAssignTest: containsExactly -> containsExactlyInAnyOrder
- ControllerManagementTest: index-based loop -> containsExactlyInAnyOrderElementsOf
- TargetFilterQueryManagementTest: containsExactly -> containsExactlyInAnyOrder

Verified passing on H2 (default) and YugabyteDB (PostgreSQL-compatible).

* Trigger ECA re-check
2026-04-21 17:21:38 +03:00
Avgustin Marinov
c029c88db6 Improved AccessContext (#3029)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-21 13:51:37 +03:00
Avgustin Marinov
e9aa13e68f Improved SDK Setup - defaults (#3027)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-17 16:48:43 +03:00
Avgustin Marinov
37559cdedc Cleanup/fix jackson 2 -> 3 migration (#3024)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-16 13:29:26 +03:00
Avgustin Marinov
82ee1cc4e6 Fix sonar findings on 21 style (#3020)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-15 16:57:10 +03:00
Avgustin Marinov
8015b0e3f1 Fix sonar findings (2) (#3016)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-15 14:39:28 +03:00
Avgustin Marinov
a00374f455 Fix sonar findings (#3015)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-15 13:14:31 +03:00
Avgustin Marinov
1be473b22c [#2845] Bump Spring boot to 4.x (#2941)
Notes:
1. (!) Eclipselink shall be migrated to 5.0 (in 4.0.8 there are incompatible classes, e.g EJBQueryImpl doesn't implement some newer methods). In the moment is with beta (5.0.0-B12) - JUST for testing!
2. (!) Ethlo plugin doesn't work with Eclipselink 5.0, it builds with Eclipselink 4.0.8 (could be a problem)
3. Dependencies - new starters, test starters changes, some dependencies refactoring
4. Auto-configs split - package changes, some properties classes changes
5. Spring nullable org.springframework.lang.Nullable/NonNull are depecated and replaced with jspcify -> org.jspecify.annotations.Nullable/NonNull (NullMarked)
6. Lombok config - adding lombok.addNullAnnotations=jspecify - to do not mess annotations
7. Distributed lock table changes - SP_LOCK table db migration
8. Spring Retry replaced with Spring Core Retry - does repace retry in hawkbit
9. Specifications -> added Update/Delete(/Predicate) Specifications and JpaSpecificationExecutor changed
10. HawkbitBaseRepositoryFactoryBean modified to register properly
11. Jackson - 2 -> 3, package migrations, finals are not deserialized by default(enable finals deserialization, consider make non-final), too ‘smart’ tries to set complex objects instead of using non args constructor (-> @JsonIgnore), some other default configs made

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-14 11:31:41 +03:00
Stanislav Trailov
f6cb143283 Fix force quit actions to explicitly handle 0 active actions (#3004)
* Fix force quit actions to explicitly handle 0 active actions

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Fix dynamic rollout behaviour when using Postgres

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-04-09 10:44:06 +03:00
Stanislav Trailov
f9bb49d33e Remove table alias on SET when stopping rollouts (#3002)
Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-04-07 16:56:55 +03:00
Avgustin Marinov
dd593677fd Fix stop rollout when using PosgreSQL (2) (#3000)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-07 09:59:34 +03:00
Stanislav Trailov
5498a79534 Fix stop rollout when using PostgreSQL (#2996)
Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-04-07 08:23:31 +03:00
Stanislav Trailov
e9acb301f2 fix flaky controller management test (#2986)
Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-03-30 11:24:17 +03:00
Stanislav Trailov
ba3a08e560 Add Target Poll Event in Service Events (#2981)
* Add Target Poll Event in Service Events

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Target poll event to service event

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-03-27 10:18:37 +02:00
Stanislav Trailov
f2615fe812 Modify TargetPollEvent to be per batch update (not per target) (#2965)
* Modify TargetPollEvent to be per batch update (not per target)

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Get use of remote event's timestame for targetPollEvent

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>

* Revert "Get use of remote event's timestame for targetPollEvent"

This reverts commit 27e3b740e2bb0b02cad1d5a6137db7928901f069.

---------

Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-03-25 09:29:23 +02:00
Stanislav Trailov
4375cd0887 Increase TTL & refresh for DistributedLockTest (#2972)
Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
2026-03-24 11:00:55 +02:00
Avgustin Marinov
011d7f567e Refactor header authority controller authentication (#2954)
1. (breaking changes) hawkbit.server.ddi.security.rp.cnHeader and sslIssuerHashHeader are renamed to controllerIdHeader and authorityHeader correspondingly.
2. (breaking changes) their default values are changed: X-Ssl-Client-Cn -> X-Controller-Id and X-Ssl-Issuer-Hash-%d -> X-Authority
3. Now the authority header configuration is not a string forma but just a string. The implemenation checks for this header as comma or ; separated list or seeks for header iteration <authority_header>-%d (iteration starts from 0 or 1
4. Doc fixed
5. As there are breaking changes configuration changes may be needed: a) with changing the hawkbit.server.ddi.security.rp you could turn back the previous default headers (note X-Ssl-Issuer-Hash-%d shall now be X-Ssl-Issuer-Hash), or b) you may change the headers sent by the reverse proxy

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-03-12 10:36:37 +02:00
Avgustin Marinov
a1608cce19 Remove DB migrations up to 1.0.0 baseline (#2953)
For the existing DBs the 0.10.0 release shall be applied before hawkbit 1.0.0!

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-03-09 16:58:31 +02:00
Vasil Ilchev
51e3e3f806 Add rollout_group index on parent column (#2952) 2026-03-06 16:02:47 +02:00
Avgustin Marinov
7a642f564e Remove the ROLE_CONTROLLER_ANONYMOUS (#2948)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-03-05 10:01:43 +02:00
Avgustin Marinov
b38df5b512 WithUser refactoring (#2944)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-27 14:30:52 +02:00
Avgustin Marinov
5d043b2766 Improve WithUser testing (#2943)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-27 12:59:13 +02:00
Vasil Ilchev
937195af1e Tenant Configuration values varchar to text - support bigger values f… (#2938)
* Tenant Configuration values varchar to text - support bigger values for configs
access_control_context varchar to text - support bigger values for configs

* Add size constraint in App for Tenant 'conf.value' and rollout/target_filter_query 'access_control_context

* add explicitly not null constraint for clarity
2026-02-26 12:15:43 +02:00
Avgustin Marinov
14f754b30e Remove HawkbitEclipseLinkJpaDialect sync workaround - already in Spring (#2940)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-26 08:58:08 +02:00
Avgustin Marinov
3ec7350624 Add Multi-Tenancy delete methods (#2937)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-25 14:11:31 +02:00
Avgustin Marinov
56da119979 Remove SYSTEM_ADMIN (#2936)
Not needed. Overlaping with system role. Could be added on top of others if needed

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-25 14:00:25 +02:00
Avgustin Marinov
6631bf8344 Add baselines for hawkbit 1.0 (#2902)
* Add baselines for hawkbit 1.0

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>

* Add SQL format, close to the already used

* Organize and unify

* Refactor B1_POSTGRES index names

* Revert ignoreMigrationPattern - will be included in separate PR

---------

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
Co-authored-by: vasilchev <vasil.ilchev@bosch.com>
2026-02-24 11:36:27 +02:00
Avgustin Marinov
6b3fbef400 Fix postgres unify migration (#2932)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-23 15:16:47 +02:00
Avgustin Marinov
2660bca4c7 Unify sp_rollout_group.target_percentage type REAL -> FLOAT (#2930)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-23 14:38:39 +02:00
Vasil Ilchev
ea3fe213e0 Schema changes int->tinyint and foreginkeys/indexes rename (#2922)
* Schema changes int->tinyint and foreginkeys/indexes rename

* Optimize schema migration to do all related changes within one statement per table - i.e. no redundant table re-builds

* Foreign key checks disabled for huge dbs

* Merge unify and convergence schemas as they both do migrations on common tables - reduce downtime

* Rename unify schema
2026-02-19 13:43:47 +02:00
Avgustin Marinov
62c76311e5 Fix some compile warnings (#2919)
* Fix some compile warnings
* Some classes made final
* JPA entities made not serializable

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-11 14:05:46 +02:00
Avgustin Marinov
87c4cd8cd1 Remove not used WeightValidationHelper (#2916)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-10 12:50:31 +02:00
Avgustin Marinov
a0e8c411c8 Drop sp_idx_rollout_group_parent index for mysql (#2911)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-09 14:38:18 +02:00
Avgustin Marinov
738234f0e2 Add to unification also index rename (#2909)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-09 13:15:02 +02:00
Avgustin Marinov
075701d07d Unify flyway schemas and fix PostgreSQL v1_12_35 (#2906)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-02-09 08:52:33 +02:00
Desislava Marinova
ff21d788b3 MECS-21328: Tenant metric label case unification (#2907) 2026-02-06 09:09:05 +02:00