You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2025/01/20 15:54:15 UTC
(ignite-3) branch main updated: IGNITE-24254 Thin client: add schema name placeholder to protocol (#5077)
This is an automated email from the ASF dual-hosted git repository.
ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 05c673f045 IGNITE-24254 Thin client: add schema name placeholder to protocol (#5077)
05c673f045 is described below
commit 05c673f0457e2306a510e435ef8f03701e9f2f86
Author: Pavel Tupitsyn <pt...@apache.org>
AuthorDate: Mon Jan 20 17:54:10 2025 +0200
IGNITE-24254 Thin client: add schema name placeholder to protocol (#5077)
Reserve space for schema name in `TABLE_GET` and `TABLES_GET` payloads.
---
.../handler/requests/table/ClientTableGetRequest.java | 1 +
.../handler/requests/table/ClientTablesGetRequest.java | 1 +
.../apache/ignite/internal/client/table/ClientTables.java | 13 +++++++++++--
.../cpp/ignite/client/detail/table/tables_impl.cpp | 6 +++++-
.../dotnet/Apache.Ignite.Tests/ClientSocketTests.cs | 1 +
modules/platforms/dotnet/Apache.Ignite.Tests/FakeServer.cs | 2 ++
.../platforms/dotnet/Apache.Ignite/Internal/Table/Tables.cs | 5 +++--
7 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTableGetRequest.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTableGetRequest.java
index f3e8457647..cdd2b13fb1 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTableGetRequest.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTableGetRequest.java
@@ -41,6 +41,7 @@ public class ClientTableGetRequest {
IgniteTables tables
) {
String tableName = in.unpackString();
+ in.unpackStringNullable(); // Skip schema name placeholder.
return tables.tableAsync(tableName).thenAccept(table -> {
if (table == null) {
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTablesGetRequest.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTablesGetRequest.java
index 174255c336..75b78a8e61 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTablesGetRequest.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/table/ClientTablesGetRequest.java
@@ -45,6 +45,7 @@ public class ClientTablesGetRequest {
out.packInt(tableImpl.tableId());
out.packString(table.name());
+ out.packString(null); // Schema placeholder.
}
});
}
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTables.java b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTables.java
index ba9d44adf7..9097eea919 100644
--- a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTables.java
+++ b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTables.java
@@ -63,7 +63,11 @@ public class ClientTables implements IgniteTables {
var res = new ArrayList<Table>(cnt);
for (int i = 0; i < cnt; i++) {
- res.add(new ClientTable(ch, marshallers, in.unpackInt(), in.unpackString()));
+ int id = in.unpackInt();
+ String name = in.unpackString();
+ @SuppressWarnings("unused") String schemaName = in.unpackStringNullable();
+
+ res.add(new ClientTable(ch, marshallers, id, name));
}
return res;
@@ -81,7 +85,12 @@ public class ClientTables implements IgniteTables {
public CompletableFuture<Table> tableAsync(String name) {
Objects.requireNonNull(name);
- return ch.serviceAsync(ClientOp.TABLE_GET, w -> w.out().packString(name),
+ return ch.serviceAsync(
+ ClientOp.TABLE_GET,
+ w -> {
+ w.out().packString(name);
+ w.out().packString(null); // Schema placeholder.
+ },
r -> r.in().tryUnpackNil() ? null : new ClientTable(ch, marshallers, r.in().unpackInt(), name));
}
}
diff --git a/modules/platforms/cpp/ignite/client/detail/table/tables_impl.cpp b/modules/platforms/cpp/ignite/client/detail/table/tables_impl.cpp
index 0eacd8d571..79a7c8db04 100644
--- a/modules/platforms/cpp/ignite/client/detail/table/tables_impl.cpp
+++ b/modules/platforms/cpp/ignite/client/detail/table/tables_impl.cpp
@@ -23,7 +23,10 @@
namespace ignite::detail {
void tables_impl::get_table_async(std::string_view name, ignite_callback<std::optional<table>> callback) {
- auto writer_func = [&name](protocol::writer &writer) { writer.write(name); };
+ auto writer_func = [&name](protocol::writer &writer) {
+ writer.write(name);
+ writer.write_nil(); // Schema name.
+ };
auto reader_func = [name, conn = m_connection](protocol::reader &reader) mutable -> std::optional<table> {
if (reader.try_read_nil())
@@ -51,6 +54,7 @@ void tables_impl::get_tables_async(ignite_callback<std::vector<table>> callback)
for (std::int32_t table_idx = 0; table_idx < size; ++table_idx) {
auto id = reader.read_int32();
auto name = reader.read_string();
+ auto schema = reader.read_string_nullable();
tables.emplace_back(table{std::make_shared<table_impl>(std::move(name), id, conn)});
}
return tables;
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/ClientSocketTests.cs b/modules/platforms/dotnet/Apache.Ignite.Tests/ClientSocketTests.cs
index e70800fc22..ba3694cc89 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/ClientSocketTests.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/ClientSocketTests.cs
@@ -39,6 +39,7 @@ namespace Apache.Ignite.Tests
using var requestWriter = ProtoCommon.GetMessageWriter();
requestWriter.MessageWriter.Write("non-existent-table");
+ requestWriter.MessageWriter.Write("my-schema");
using var response = await socket.DoOutInOpAsync(ClientOp.TableGet, requestWriter);
Assert.IsTrue(response.GetReader().TryReadNil());
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/FakeServer.cs b/modules/platforms/dotnet/Apache.Ignite.Tests/FakeServer.cs
index 62c9e9073f..2a50e5772c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/FakeServer.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/FakeServer.cs
@@ -228,6 +228,7 @@ namespace Apache.Ignite.Tests
case ClientOp.TableGet:
{
var tableName = reader.ReadString();
+ _ = reader.ReadStringNullable(); // Schema name.
var tableId = tableName switch
{
@@ -241,6 +242,7 @@ namespace Apache.Ignite.Tests
{
using var arrayBufferWriter = new PooledArrayBuffer();
arrayBufferWriter.MessageWriter.Write(tableId);
+ arrayBufferWriter.MessageWriter.WriteNil(); // Schema name.
Send(handler, requestId, arrayBufferWriter);
diff --git a/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Tables.cs b/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Tables.cs
index e6b8340191..5cadb33e6e 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Tables.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Tables.cs
@@ -73,6 +73,7 @@ namespace Apache.Ignite.Internal.Table
{
var id = r.ReadInt32();
var name = r.ReadString();
+ _ = r.ReadStringNullable(); // Schema name.
var table = _cachedTables.GetOrAdd(
id,
@@ -104,17 +105,17 @@ namespace Apache.Ignite.Internal.Table
using var writer = ProtoCommon.GetMessageWriter();
writer.MessageWriter.Write(name);
+ writer.MessageWriter.WriteNil(); // Schema name.
using var resBuf = await _socket.DoOutInOpAsync(ClientOp.TableGet, writer).ConfigureAwait(false);
return Read(resBuf.GetReader());
- // ReSharper disable once LambdaExpressionMustBeStatic (requires .NET 5+)
Table? Read(MsgPackReader r) =>
r.TryReadNil()
? null
: _cachedTables.GetOrAdd(
r.ReadInt32(),
- (int id, (string Name, Tables Tables) arg) => new Table(arg.Name, id, arg.Tables._socket, arg.Tables._sql),
+ static (int id, (string Name, Tables Tables) arg) => new Table(arg.Name, id, arg.Tables._socket, arg.Tables._sql),
(name, this));
}
}