Skip to content

Commit ec56b3d

Browse files
authored
Merge pull request #50781 from jmartisk/3.27.1-backports-3
[3.27] 3.27.1 backports 3
2 parents 3f13cdd + 2c39ddb commit ec56b3d

File tree

67 files changed

+1523
-225
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1523
-225
lines changed

.github/matrix-jvm-tests.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@
1818
"os-name": "ubuntu-latest",
1919
"modules": "-pl\n!docs\n-Dno-test-modules"
2020
},
21+
{
22+
"name": "JVM Tests - JDK 25",
23+
"category": "Runtime",
24+
"java-version": 25,
25+
"java-version-gradle": 17,
26+
"maven_args": "$JVM_TEST_MAVEN_ARGS",
27+
"maven_opts": "-Xmx3g -XX:MaxMetaspaceSize=1g",
28+
"os-name": "ubuntu-latest",
29+
"modules": "-pl\n!docs\n-Dno-test-modules"
30+
},
2131
{
2232
"name": "JVM Tests - JDK 17 Windows",
2333
"category": "Runtime",
@@ -40,7 +50,15 @@
4050
"name": "JVM Integration Tests - JDK 21",
4151
"category": "Integration",
4252
"java-version": 21,
43-
"java-version-gradle": 20,
53+
"maven_args": "$JVM_TEST_MAVEN_ARGS",
54+
"maven_opts": "-Xmx3g -XX:MaxMetaspaceSize=1g",
55+
"os-name": "ubuntu-latest",
56+
"modules": "-f\nintegration-tests\n-pl\n!gradle\n-pl\n!maven\n-pl\n!devmode\n-pl\n!devtools"
57+
},
58+
{
59+
"name": "JVM Integration Tests - JDK 25",
60+
"category": "Integration",
61+
"java-version": 25,
4462
"maven_args": "$JVM_TEST_MAVEN_ARGS",
4563
"maven_opts": "-Xmx3g -XX:MaxMetaspaceSize=1g",
4664
"os-name": "ubuntu-latest",

bom/application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<smallrye-health.version>4.2.0</smallrye-health.version>
5252
<smallrye-metrics.version>4.0.0</smallrye-metrics.version>
5353
<smallrye-open-api.version>4.0.12</smallrye-open-api.version>
54-
<smallrye-graphql.version>2.14.1</smallrye-graphql.version>
54+
<smallrye-graphql.version>2.14.2</smallrye-graphql.version>
5555
<smallrye-fault-tolerance.version>6.9.3</smallrye-fault-tolerance.version>
5656
<smallrye-jwt.version>4.6.2</smallrye-jwt.version>
5757
<smallrye-context-propagation.version>2.2.1</smallrye-context-propagation.version>

bom/dev-ui/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<codeblock.version>1.1.1</codeblock.version>
3838
<qomponent.version>1.0.4</qomponent.version>
3939
<ldrs.version>1.1.7</ldrs.version>
40-
<directory-tree.version>1.0.3</directory-tree.version>
40+
<directory-tree.version>1.0.4</directory-tree.version>
4141
<hpcc-js-wasm.version>2.15.3</hpcc-js-wasm.version>
4242
<yargs.version>17.7.2</yargs.version>
4343
<cliui.version>8.0.1</cliui.version>

core/runtime/src/main/java/io/quarkus/runtime/ExecutorRecorder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ public void run() {
9292
intervalRemaining, interruptRemaining);
9393
try {
9494
if (!executor.awaitTermination(Math.min(remaining, intervalRemaining), TimeUnit.NANOSECONDS)) {
95-
long elapsed = System.nanoTime() - start;
95+
long end = System.nanoTime();
96+
long elapsed = Math.max(0, end - start);
97+
start = end;
9698
intervalRemaining -= elapsed;
9799
remaining -= elapsed;
98100
interruptRemaining -= elapsed;

docs/src/main/asciidoc/security-oidc-expanded-configuration.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,7 @@ In this case, Quarkus attempts to refresh the verification key set, but blocks a
848848
|Property | Default |Description
849849

850850
|quarkus.oidc.token.allow-jwt-introspection |true| Allow JWT introspection
851-
|quarkus.oidc.token.require-jwt-introspection-only |true| Require JWT introspection only
851+
|quarkus.oidc.token.require-jwt-introspection-only |false| Require JWT introspection only
852852
|quarkus.oidc.token.allow-opaque-token-introspection |false| Allow JWT introspection
853853
|====
854854

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.quarkus.devui.spi.workspace;
22

3+
import java.io.File;
34
import java.nio.file.Path;
45
import java.util.List;
56
import java.util.stream.Collectors;
@@ -10,20 +11,20 @@
1011
* This hold all files in the user's project root
1112
*/
1213
public final class WorkspaceBuildItem extends SimpleBuildItem {
13-
private final List<WorkspaceItem> workspaceItems;
14+
private final WorkspaceItems workspaceItems;
1415
private final Path rootPath;
1516

1617
public WorkspaceBuildItem(Path rootPath, List<WorkspaceItem> workspaceItems) {
1718
this.rootPath = rootPath;
18-
this.workspaceItems = workspaceItems;
19+
this.workspaceItems = new WorkspaceItems(workspaceItems, File.separator);
1920
}
2021

21-
public List<WorkspaceItem> getWorkspaceItems() {
22+
public WorkspaceItems getWorkspaceItems() {
2223
return workspaceItems;
2324
}
2425

2526
public List<Path> getPaths() {
26-
return workspaceItems.stream()
27+
return workspaceItems.items.stream()
2728
.map(WorkspaceBuildItem.WorkspaceItem::path)
2829
.collect(Collectors.toList());
2930
}
@@ -32,7 +33,10 @@ public Path getRootPath() {
3233
return this.rootPath;
3334
}
3435

35-
public static record WorkspaceItem(String name, Path path) {
36+
public record WorkspaceItems(List<WorkspaceItem> items, String fileSeparator) {
37+
}
38+
39+
public record WorkspaceItem(String name, Path path) {
3640

3741
}
3842
}

extensions/devui/resources/src/main/resources/dev-ui/qui/qui-ide-link.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ export class QuiIdeLink extends observeState(LitElement) {
6767
}
6868

6969
_checkIfStringStartsWith(str, substrs) {
70-
return substrs.some(substr => {
70+
return substrs?.some(substr => {
7171
if(substr && substr.trim !== ""){
7272
return str.startsWith(substr);
7373
}
7474
return false;
75-
});
75+
}) ?? false;
7676
}
7777

7878
render() {

extensions/devui/resources/src/main/resources/dev-ui/qwc/qwc-workspace.js

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
119119

120120
static properties = {
121121
_workspaceItems: {state: true},
122+
_fileSeparator: {state: false},
122123
_workspaceTreeNames: {state: true},
123124
_workspaceActions: {state: true},
124125
_filteredActions: {state: true},
@@ -134,6 +135,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
134135
super();
135136
this.md = new MarkdownIt();
136137
this._workspaceItems = null;
138+
this._fileSeparator = '/';
137139
this._workspaceTreeNames = null;
138140
this._workspaceActions = [];
139141
this._filteredActions = this._workspaceActions;
@@ -192,8 +194,9 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
192194
directoryTree.selectFile(this._selectedWorkspaceItem.name);
193195
this._selectWorkspaceItem(this._selectedWorkspaceItem);
194196
} else {
195-
directoryTree.selectFile([...this._workspaceItems.values()][0].name);
196-
this._selectWorkspaceItem([...this._workspaceItems.values()][0]);
197+
const selectedItem = QwcWorkspace.getFirstJavaFile([...this._workspaceItems.values()]);
198+
directoryTree.selectFile(selectedItem.name);
199+
this._selectWorkspaceItem(selectedItem);
197200
}
198201
}
199202
}
@@ -217,6 +220,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
217220
_renderWorkspaceTree(){
218221
return html`<qui-directory-tree id="directoryTree" class="files"
219222
.directory="${this._workspaceTreeNames}"
223+
.fileSeparator="${this._fileSeparator}"
220224
header="Source Code"
221225
@file-select="${this._onFileSelect}"
222226
></qui-directory-tree>`;
@@ -252,7 +256,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
252256
</div>
253257
254258
<div class="mainMenuBarTitle" @dblclick="${this._toggleSplit}">
255-
${this._selectedWorkspaceItem?.name?.split('/').pop()}
259+
${this._selectedWorkspaceItem?.name?.split(this._fileSeparator).pop()}
256260
</div>
257261
258262
<div class="mainMenuBarActions">
@@ -679,8 +683,10 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
679683

680684
_loadWorkspaceItems(){
681685
this.jsonRpc.getWorkspaceItems().then(jsonRpcResponse => {
682-
if (Array.isArray(jsonRpcResponse.result)) {
683-
this._workspaceItems = new Map(jsonRpcResponse.result.map(obj => [obj.name, obj]));
686+
const items = jsonRpcResponse.result?.items;
687+
if (Array.isArray(items)) {
688+
this._fileSeparator = jsonRpcResponse.result.fileSeparator;
689+
this._workspaceItems = new Map(items.map(obj => [obj.name, obj]));
684690
} else {
685691
console.error("Expected an array but got:", jsonRpcResponse.result);
686692
}
@@ -738,7 +744,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
738744
_convertDirectoryStructureToTree() {
739745
const root = [];
740746
this._workspaceItems.forEach((value, key) => {
741-
const parts = value.name.split('/');
747+
const parts = value.name.split(this._fileSeparator);
742748
let currentLevel = root;
743749

744750
parts.forEach((part, index) => {
@@ -761,7 +767,21 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
761767
});
762768
});
763769

770+
// folder goes first so that we have same deterministic behavior on Windows and Linux
771+
root.sort((a, b) => {
772+
const aIsFolder = a.type === 'folder' ? 0 : 1;
773+
const bIsFolder = b.type === 'folder' ? 0 : 1;
774+
return aIsFolder - bIsFolder;
775+
});
776+
764777
return root;
765778
}
779+
780+
static getFirstJavaFile(workspaceItems) {
781+
const javaFileNode = workspaceItems.find(node => {
782+
return node.name && node.name.endsWith('.java');
783+
});
784+
return javaFileNode || workspaceItems[0];
785+
}
766786
}
767787
customElements.define('qwc-workspace', QwcWorkspace);

extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanClientProducer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.infinispan.client.hotrod.RemoteCache;
2121
import org.infinispan.client.hotrod.RemoteCacheManager;
2222
import org.infinispan.client.hotrod.RemoteCounterManagerFactory;
23-
import org.infinispan.client.hotrod.configuration.ClientIntelligence;
2423
import org.infinispan.client.hotrod.configuration.ClusterConfigurationBuilder;
2524
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
2625
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
@@ -360,6 +359,9 @@ private ConfigurationBuilder builderFromProperties(String infinispanClientName,
360359
if (runtimeCacheConfig.nearCacheUseBloomFilter().isPresent()) {
361360
builder.remoteCache(cacheName).nearCacheUseBloomFilter(runtimeCacheConfig.nearCacheUseBloomFilter().get());
362361
}
362+
if (runtimeCacheConfig.transactionMode().isPresent()) {
363+
builder.remoteCache(cacheName).transactionMode(runtimeCacheConfig.transactionMode().get());
364+
}
363365
}
364366

365367
for (Map.Entry<String, InfinispanClientRuntimeConfig.BackupClusterConfig> backupCluster : infinispanClientRuntimeConfig
@@ -369,8 +371,7 @@ private ConfigurationBuilder builderFromProperties(String infinispanClientName,
369371
ClusterConfigurationBuilder clusterConfigurationBuilder = builder.addCluster(backupCluster.getKey());
370372
clusterConfigurationBuilder.addClusterNodes(backupClusterConfig.hosts());
371373
if (backupClusterConfig.clientIntelligence().isPresent()) {
372-
clusterConfigurationBuilder.clusterClientIntelligence(
373-
ClientIntelligence.valueOf(backupClusterConfig.clientIntelligence().get()));
374+
clusterConfigurationBuilder.clusterClientIntelligence(backupClusterConfig.clientIntelligence().get());
374375
}
375376
}
376377

extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanClientRuntimeConfig.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
import javax.net.ssl.SSLContext;
88

9+
import org.infinispan.client.hotrod.configuration.ClientIntelligence;
910
import org.infinispan.client.hotrod.configuration.NearCacheMode;
11+
import org.infinispan.client.hotrod.configuration.TransactionMode;
1012

1113
import io.quarkus.runtime.annotations.ConfigGroup;
1214
import io.smallrye.config.WithDefault;
@@ -264,6 +266,13 @@ public interface RemoteCacheConfig {
264266
*/
265267
// @formatter:on
266268
Optional<Boolean> nearCacheUseBloomFilter();
269+
270+
// @formatter:off
271+
/**
272+
* Enables transaction mode in the client side, for transactional caches.
273+
*/
274+
// @formatter:on
275+
Optional<TransactionMode> transactionMode();
267276
}
268277

269278
@ConfigGroup
@@ -289,7 +298,7 @@ public interface BackupClusterConfig {
289298
*/
290299
// @formatter:on
291300
@WithDefault("HASH_DISTRIBUTION_AWARE")
292-
Optional<String> clientIntelligence();
301+
Optional<ClientIntelligence> clientIntelligence();
293302

294303
// @formatter:off
295304
/**

0 commit comments

Comments
 (0)