-
Notifications
You must be signed in to change notification settings - Fork 176
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor connection creation from composeable ConnectionStrategy into composeable ConnectionFunctions and a parameter-less ConnectionStrategy that holds all connection target details. Refactor SSL fallback into ConnectionFunction as SSL is part of the initial handshake. Move startup options into ConnectionSettings. Simplify sink subscriptions into Flux composition for easier synchronization of closed connections. Add duration style parser. Add license headers and since tags, update documentation. [#120][resolves #474][#203] Signed-off-by: Mark Paluch <mpaluch@vmware.com>
- Loading branch information
Showing
33 changed files
with
1,271 additions
and
509 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* Copyright 2022 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.r2dbc.postgresql; | ||
|
||
import io.r2dbc.postgresql.client.Client; | ||
import io.r2dbc.postgresql.client.ConnectionSettings; | ||
import reactor.core.publisher.Mono; | ||
|
||
import java.net.SocketAddress; | ||
|
||
/** | ||
* Interface defining a function how to connect to a single {@link SocketAddress endpoint} applying {@link ConnectionSettings}. | ||
* <p>A connection function is a low-level utility whose result is a valid {@link Client} object. Connection functions may perform multiple connection attempts (e.g. SSL handshake downgrading). | ||
* Topology discovery is a higher-level concept that is typically encapsulated as part of a {@link ConnectionStrategy}. | ||
* | ||
* @see ConnectionStrategy | ||
* @since 1.0 | ||
*/ | ||
@FunctionalInterface | ||
public interface ConnectionFunction { | ||
|
||
/** | ||
* Establish a connection to the given {@link SocketAddress endpoint} applying {@link ConnectionSettings}. | ||
* | ||
* @param endpoint the endpoint to connect to | ||
* @param settings the settings to apply | ||
* @return a mono that connects to the given endpoint upon subscription | ||
* @throws IllegalArgumentException if {@code socketAddress} or {@code settings} is {@code null} | ||
*/ | ||
Mono<Client> connect(SocketAddress endpoint, ConnectionSettings settings); | ||
|
||
} |
52 changes: 31 additions & 21 deletions
52
src/main/java/io/r2dbc/postgresql/ConnectionStrategy.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,41 @@ | ||
/* | ||
* Copyright 2022 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.r2dbc.postgresql; | ||
|
||
import io.r2dbc.postgresql.client.Client; | ||
import io.r2dbc.postgresql.client.ConnectionSettings; | ||
import reactor.core.publisher.Mono; | ||
|
||
import java.net.SocketAddress; | ||
import java.util.Map; | ||
import java.util.function.Function; | ||
|
||
/** | ||
* Interface defining a connection strategy on how to obtain a Postgres {@link Client} object. | ||
* <p> | ||
* Typically, connection strategies use a {@link ConnectionFunction} and are configured with a connection endpoint to establish a client connection to the target server as the {@link #connect()} | ||
* method does not take any parameters. | ||
* | ||
* @see ConnectionFunction | ||
* @since 1.0 | ||
*/ | ||
@FunctionalInterface | ||
public interface ConnectionStrategy { | ||
|
||
/** | ||
* Establish a connection to a target server that is determined by this connection strategy. | ||
* | ||
* @return a mono that initiates the connection upon subscription. | ||
*/ | ||
Mono<Client> connect(); | ||
|
||
ConnectionStrategy withOptions(Map<String, String> options); | ||
|
||
interface ComposableConnectionStrategy extends ConnectionStrategy { | ||
|
||
default <T extends ConnectionStrategy> T chainIf(boolean guard, Function<ComposableConnectionStrategy, T> nextStrategyProvider, Class<T> klass) { | ||
return guard ? nextStrategyProvider.apply(this) : klass.cast(this); | ||
} | ||
|
||
ComposableConnectionStrategy withAddress(SocketAddress address); | ||
|
||
ComposableConnectionStrategy withConnectionSettings(ConnectionSettings connectionSettings); | ||
|
||
ComposableConnectionStrategy withOptions(Map<String, String> options); | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.