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));
         }
     }