This is an automated email from the ASF dual-hosted git repository.
ibessonov 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 9b95c8ac09 IGNITE-18707 Make Meta Storage Entry serializable (#1628)
9b95c8ac09 is described below
commit 9b95c8ac092b94e7ffd1b4376c32e020fb7a2974
Author: Alexander Polovtcev <[email protected]>
AuthorDate: Mon Feb 6 09:10:56 2023 +0200
IGNITE-18707 Make Meta Storage Entry serializable (#1628)
---
...ibutionZoneManagerConfigurationChangesTest.java | 8 +-
...butionZoneManagerLogicalTopologyEventsTest.java | 8 +-
.../DistributionZoneManagerScaleUpTest.java | 14 +---
.../DistributionZoneManagerWatchListenerTest.java | 10 +--
.../apache/ignite/internal/metastorage/Entry.java | 3 +-
.../metastorage/command/MultipleEntryResponse.java | 47 ------------
.../metastorage/command/SingleEntryResponse.java | 89 ----------------------
.../internal/metastorage/impl/CursorImpl.java | 47 ++++--------
.../internal/metastorage/impl/EntryImpl.java | 2 +
.../metastorage/impl/MetaStorageServiceImpl.java | 59 +++++---------
.../server/raft/MetaStorageListener.java | 22 ++----
.../server/raft/MetaStorageWriteHandler.java | 25 ++----
12 files changed, 60 insertions(+), 274 deletions(-)
diff --git
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
index 0d55d7f9fe..dde5995b89 100644
---
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
+++
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
@@ -59,8 +59,6 @@ import
org.apache.ignite.internal.metastorage.MetaStorageManager;
import org.apache.ignite.internal.metastorage.command.GetAllCommand;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.Iif;
import org.apache.ignite.internal.metastorage.impl.EntryImpl;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
@@ -269,12 +267,10 @@ public class
DistributionZoneManagerConfigurationChangesTest extends IgniteAbstr
keysSet.stream().map(ByteArray::bytes).collect(Collectors.toList())
).revision(0).build();
- return metaStorageService.run(getAllCommand).thenApply(bi -> {
- MultipleEntryResponse resp = (MultipleEntryResponse) bi;
-
+ return
metaStorageService.<List<Entry>>run(getAllCommand).thenApply(entries -> {
Map<ByteArray, Entry> res = new HashMap<>();
- for (SingleEntryResponse e : resp.entries()) {
+ for (Entry e : entries) {
ByteArray key = new ByteArray(e.key());
res.put(key, new EntryImpl(key.bytes(), e.value(),
e.revision(), e.updateCounter()));
diff --git
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerLogicalTopologyEventsTest.java
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerLogicalTopologyEventsTest.java
index 984f35e2a0..99aaaf4202 100644
---
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerLogicalTopologyEventsTest.java
+++
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerLogicalTopologyEventsTest.java
@@ -58,9 +58,7 @@ import
org.apache.ignite.internal.metastorage.MetaStorageManager;
import org.apache.ignite.internal.metastorage.command.GetCommand;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.Iif;
-import org.apache.ignite.internal.metastorage.impl.EntryImpl;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
import org.apache.ignite.internal.metastorage.server.raft.MetaStorageListener;
import org.apache.ignite.internal.raft.Command;
@@ -257,11 +255,7 @@ public class
DistributionZoneManagerLogicalTopologyEventsTest {
GetCommand getCommand =
commandsFactory.getCommand().key(key.bytes()).build();
- return metaStorageService.run(getCommand).thenApply(bi -> {
- SingleEntryResponse resp = (SingleEntryResponse) bi;
-
- return new EntryImpl(resp.key(), resp.value(),
resp.revision(), resp.updateCounter());
- });
+ return metaStorageService.run(getCommand);
}).when(metaStorageManager).get(any());
return distributionZoneManager;
diff --git
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpTest.java
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpTest.java
index d66caacba7..4b9d52aeb7 100644
---
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpTest.java
+++
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpTest.java
@@ -72,8 +72,6 @@ import
org.apache.ignite.internal.metastorage.command.GetAllCommand;
import org.apache.ignite.internal.metastorage.command.GetCommand;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.Iif;
import org.apache.ignite.internal.metastorage.impl.EntryImpl;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
@@ -299,12 +297,10 @@ public class DistributionZoneManagerScaleUpTest {
keysSet.stream().map(ByteArray::bytes).collect(Collectors.toList())
).revision(0).build();
- return metaStorageService.run(getAllCommand).thenApply(bi -> {
- MultipleEntryResponse resp = (MultipleEntryResponse) bi;
-
+ return
metaStorageService.<List<Entry>>run(getAllCommand).thenApply(entries -> {
Map<ByteArray, Entry> res = new HashMap<>();
- for (SingleEntryResponse e : resp.entries()) {
+ for (Entry e : entries) {
ByteArray key = new ByteArray(e.key());
res.put(key, new EntryImpl(key.bytes(), e.value(),
e.revision(), e.updateCounter()));
@@ -319,11 +315,7 @@ public class DistributionZoneManagerScaleUpTest {
GetCommand getCommand =
commandsFactory.getCommand().key(key.bytes()).build();
- return metaStorageService.run(getCommand).thenApply(bi -> {
- SingleEntryResponse resp = (SingleEntryResponse) bi;
-
- return new EntryImpl(resp.key(), resp.value(),
resp.revision(), resp.updateCounter());
- });
+ return metaStorageService.<Entry>run(getCommand);
}).when(metaStorageManager).get(any());
}
diff --git
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerWatchListenerTest.java
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerWatchListenerTest.java
index e2631a0a57..c984406d5e 100644
---
a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerWatchListenerTest.java
+++
b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerWatchListenerTest.java
@@ -74,8 +74,6 @@ import org.apache.ignite.internal.metastorage.WatchListener;
import org.apache.ignite.internal.metastorage.command.GetAllCommand;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.Iif;
import org.apache.ignite.internal.metastorage.impl.EntryImpl;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
@@ -293,12 +291,10 @@ public class DistributionZoneManagerWatchListenerTest
extends IgniteAbstractTest
keysSet.stream().map(ByteArray::bytes).collect(Collectors.toList())
).revision(0).build();
- return metaStorageService.run(getAllCommand).thenApply(bi -> {
- MultipleEntryResponse resp = (MultipleEntryResponse) bi;
+ return
metaStorageService.<List<Entry>>run(getAllCommand).thenApply(entries -> {
+ Map<ByteArray, Entry> res = new HashMap<>();
- Map<ByteArray, org.apache.ignite.internal.metastorage.Entry>
res = new HashMap<>();
-
- for (SingleEntryResponse e : resp.entries()) {
+ for (Entry e : entries) {
ByteArray key = new ByteArray(e.key());
res.put(key, new EntryImpl(key.bytes(), e.value(),
e.revision(), e.updateCounter()));
diff --git
a/modules/metastorage-api/src/main/java/org/apache/ignite/internal/metastorage/Entry.java
b/modules/metastorage-api/src/main/java/org/apache/ignite/internal/metastorage/Entry.java
index 8945b17f28..1d72229898 100644
---
a/modules/metastorage-api/src/main/java/org/apache/ignite/internal/metastorage/Entry.java
+++
b/modules/metastorage-api/src/main/java/org/apache/ignite/internal/metastorage/Entry.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.metastorage;
+import java.io.Serializable;
import org.jetbrains.annotations.Nullable;
/**
@@ -29,7 +30,7 @@ import org.jetbrains.annotations.Nullable;
* <li>revision - a number which denotes a version of whole meta storage.
Each change increments the revision.</li>
* </ul>
*/
-public interface Entry {
+public interface Entry extends Serializable {
/**
* Returns a key.
*
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/MultipleEntryResponse.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/MultipleEntryResponse.java
deleted file mode 100644
index 65b99f414a..0000000000
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/MultipleEntryResponse.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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
- *
- * http://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 org.apache.ignite.internal.metastorage.command;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Defines response for command which returns a number of results.
- */
-public class MultipleEntryResponse implements Serializable {
- /** Single responses. */
- private final List<SingleEntryResponse> entries;
-
- /**
- * Constructs multiple entries response.
- *
- * @param entries The ;list of single responses.
- */
- public MultipleEntryResponse(List<SingleEntryResponse> entries) {
- this.entries = entries;
- }
-
- /**
- * Returns the list of single responses.
- *
- * @return The list of single responses.
- */
- public List<SingleEntryResponse> entries() {
- return entries;
- }
-}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/SingleEntryResponse.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/SingleEntryResponse.java
deleted file mode 100644
index 1fa4b59a30..0000000000
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/command/SingleEntryResponse.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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
- *
- * http://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 org.apache.ignite.internal.metastorage.command;
-
-import java.io.Serializable;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Defines response for command which returns exactly one result (entry).
- */
-public class SingleEntryResponse implements Serializable {
- /** Key. */
- private final byte[] key;
-
- /** Value. */
- private final byte @Nullable [] val;
-
- /** Revision. */
- private final long rev;
-
- /** Update counter. */
- private final long updCntr;
-
- /**
- * Constructs single entry response.
- *
- * @param key Key. Couldn't be {@code null}.
- * @param val Value. Could be {@code null} for empty and tombstone
entries.
- * @param rev Revision number.
- * @param updCntr Update counter.
- */
- public SingleEntryResponse(byte[] key, byte @Nullable [] val, long rev,
long updCntr) {
- this.key = key;
- this.val = val;
- this.rev = rev;
- this.updCntr = updCntr;
- }
-
- /**
- * Returns key.
- *
- * @return Entry key. Couldn't be {@code null}.
- */
- public byte[] key() {
- return key;
- }
-
- /**
- * Returns value.
- *
- * @return Entry value. Could be {@code null} for empty and tombstone
entries.
- */
- public byte @Nullable [] value() {
- return val;
- }
-
- /**
- * Returns revision.
- *
- * @return Entry revision.
- */
- public long revision() {
- return rev;
- }
-
- /**
- * Returns update counter.
- *
- * @return Entry update counter.
- */
- public long updateCounter() {
- return updCntr;
- }
-}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/CursorImpl.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/CursorImpl.java
index 0cd297fa7e..93bf0f68a0 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/CursorImpl.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/CursorImpl.java
@@ -22,15 +22,15 @@ import static
org.apache.ignite.lang.ErrorGroups.MetaStorage.CURSOR_CLOSING_ERR;
import static
org.apache.ignite.lang.ErrorGroups.MetaStorage.CURSOR_EXECUTION_ERR;
import java.util.Iterator;
+import java.util.List;
import java.util.NoSuchElementException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
-import java.util.function.Function;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
+import org.apache.ignite.internal.metastorage.Entry;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import
org.apache.ignite.internal.metastorage.command.cursor.CursorCloseCommand;
-import org.apache.ignite.internal.metastorage.command.cursor.CursorNextCommand;
import org.apache.ignite.internal.metastorage.exceptions.MetaStorageException;
import org.apache.ignite.internal.raft.service.RaftGroupService;
import org.apache.ignite.internal.util.Cursor;
@@ -40,10 +40,8 @@ import org.jetbrains.annotations.Nullable;
/**
* Meta storage service side implementation of cursor.
- *
- * @param <T> Cursor parameter.
*/
-public class CursorImpl<T> implements Cursor<T> {
+public class CursorImpl implements Cursor<Entry> {
/** The logger. */
private static final IgniteLogger LOG = Loggers.forClass(CursorImpl.class);
@@ -56,7 +54,7 @@ public class CursorImpl<T> implements Cursor<T> {
/** Meta storage raft group service. */
private final RaftGroupService metaStorageRaftGrpSvc;
- private final Iterator<T> it;
+ private final InnerIterator it;
/**
* Constructor.
@@ -64,19 +62,16 @@ public class CursorImpl<T> implements Cursor<T> {
* @param commandsFactory Commands factory.
* @param metaStorageRaftGrpSvc Meta storage raft group service.
* @param initOp Future that runs meta storage service
operation that provides cursor.
- * @param fn Function transforming the result of {@link
CursorNextCommand} to the type of {@link T},
- * or to the {@link Iterable} of type {@link
T} if needed.
*/
CursorImpl(
MetaStorageCommandsFactory commandsFactory,
RaftGroupService metaStorageRaftGrpSvc,
- CompletableFuture<IgniteUuid> initOp,
- Function<Object, Object> fn
+ CompletableFuture<IgniteUuid> initOp
) {
this.commandsFactory = commandsFactory;
this.metaStorageRaftGrpSvc = metaStorageRaftGrpSvc;
this.initOp = initOp;
- this.it = new InnerIterator(fn);
+ this.it = new InnerIterator();
}
/** {@inheritDoc} */
@@ -89,7 +84,7 @@ public class CursorImpl<T> implements Cursor<T> {
return metaStorageRaftGrpSvc.run(cursorCloseCommand);
}).get();
- ((InnerIterator) it).close();
+ it.close();
} catch (InterruptedException | ExecutionException e) {
if (e.getCause() instanceof NodeStoppingException) {
return;
@@ -109,22 +104,16 @@ public class CursorImpl<T> implements Cursor<T> {
/** {@inheritDoc} */
@Override
- public T next() {
+ public Entry next() {
return it.next();
}
/**
* Extension of {@link Iterator}.
*/
- private class InnerIterator implements Iterator<T> {
- private final Function<Object, Object> fn;
-
+ private class InnerIterator implements Iterator<Entry> {
@Nullable
- private Iterator<T> internalCacheIterator;
-
- public InnerIterator(Function<Object, Object> fn) {
- this.fn = fn;
- }
+ private Iterator<Entry> internalCacheIterator;
/** {@inheritDoc} */
@Override
@@ -151,25 +140,19 @@ public class CursorImpl<T> implements Cursor<T> {
/** {@inheritDoc} */
@Override
- public T next() {
+ public Entry next() {
try {
if (internalCacheIterator != null &&
internalCacheIterator.hasNext()) {
return internalCacheIterator.next();
} else {
- Object res = initOp
+ List<Entry> res = initOp
.thenCompose(cursorId ->
-
metaStorageRaftGrpSvc.run(commandsFactory.cursorNextCommand().cursorId(cursorId).build()))
+
metaStorageRaftGrpSvc.<List<Entry>>run(commandsFactory.cursorNextCommand().cursorId(cursorId).build()))
.get();
- Object transformed = fn.apply(res);
-
- if (transformed instanceof Iterable) {
- internalCacheIterator = ((Iterable<T>)
transformed).iterator();
+ internalCacheIterator = res.iterator();
- return internalCacheIterator.next();
- } else {
- return (T) transformed;
- }
+ return internalCacheIterator.next();
}
} catch (InterruptedException | ExecutionException e) {
Throwable cause = e.getCause();
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/EntryImpl.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/EntryImpl.java
index 1b38283b52..123b022779 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/EntryImpl.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/EntryImpl.java
@@ -43,6 +43,8 @@ import org.jetbrains.annotations.Nullable;
* </ul>
*/
public final class EntryImpl implements Entry {
+ private static final long serialVersionUID = 3636551347117181271L;
+
/** Key. */
private final byte[] key;
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageServiceImpl.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageServiceImpl.java
index b27046728c..99c5a8171b 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageServiceImpl.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageServiceImpl.java
@@ -17,7 +17,6 @@
package org.apache.ignite.internal.metastorage.impl;
-import static java.util.stream.Collectors.toList;
import static
org.apache.ignite.internal.metastorage.command.GetAllCommand.getAllCommand;
import static
org.apache.ignite.internal.metastorage.command.GetAndPutAllCommand.getAndPutAllCommand;
import static
org.apache.ignite.internal.metastorage.command.GetAndRemoveAllCommand.getAndRemoveAllCommand;
@@ -25,7 +24,6 @@ import static
org.apache.ignite.internal.metastorage.command.PutAllCommand.putAl
import static
org.apache.ignite.internal.metastorage.command.RemoveAllCommand.removeAllCommand;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -41,20 +39,19 @@ import
org.apache.ignite.internal.metastorage.command.GetCommand;
import org.apache.ignite.internal.metastorage.command.InvokeCommand;
import
org.apache.ignite.internal.metastorage.command.MetaStorageCommandsFactory;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
import org.apache.ignite.internal.metastorage.command.PrefixCommand;
import org.apache.ignite.internal.metastorage.command.PutAllCommand;
import org.apache.ignite.internal.metastorage.command.PutCommand;
import org.apache.ignite.internal.metastorage.command.RangeCommand;
import org.apache.ignite.internal.metastorage.command.RemoveAllCommand;
import org.apache.ignite.internal.metastorage.command.RemoveCommand;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.Condition;
import org.apache.ignite.internal.metastorage.dsl.Iif;
import org.apache.ignite.internal.metastorage.dsl.Operation;
import org.apache.ignite.internal.metastorage.dsl.StatementResult;
import org.apache.ignite.internal.raft.service.RaftGroupService;
import org.apache.ignite.internal.util.Cursor;
+import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.lang.ByteArray;
import org.apache.ignite.lang.IgniteUuidGenerator;
import org.apache.ignite.network.ClusterNode;
@@ -96,7 +93,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Entry> get(ByteArray key) {
GetCommand getCommand =
commandsFactory.getCommand().key(key.bytes()).build();
- return
metaStorageRaftGrpSvc.run(getCommand).thenApply(MetaStorageServiceImpl::singleEntryResult);
+ return metaStorageRaftGrpSvc.run(getCommand);
}
/** {@inheritDoc} */
@@ -104,7 +101,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Entry> get(ByteArray key, long revUpperBound) {
GetCommand getCommand =
commandsFactory.getCommand().key(key.bytes()).revision(revUpperBound).build();
- return
metaStorageRaftGrpSvc.run(getCommand).thenApply(MetaStorageServiceImpl::singleEntryResult);
+ return metaStorageRaftGrpSvc.run(getCommand);
}
/** {@inheritDoc} */
@@ -112,7 +109,8 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Map<ByteArray, Entry>> getAll(Set<ByteArray>
keys) {
GetAllCommand getAllCommand = getAllCommand(commandsFactory, keys, 0);
- return
metaStorageRaftGrpSvc.run(getAllCommand).thenApply(MetaStorageServiceImpl::multipleEntryResult);
+ return metaStorageRaftGrpSvc.<List<Entry>>run(getAllCommand)
+ .thenApply(MetaStorageServiceImpl::multipleEntryResult);
}
/** {@inheritDoc} */
@@ -120,7 +118,8 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Map<ByteArray, Entry>> getAll(Set<ByteArray>
keys, long revUpperBound) {
GetAllCommand getAllCommand = getAllCommand(commandsFactory, keys,
revUpperBound);
- return
metaStorageRaftGrpSvc.run(getAllCommand).thenApply(MetaStorageServiceImpl::multipleEntryResult);
+ return metaStorageRaftGrpSvc.<List<Entry>>run(getAllCommand)
+ .thenApply(MetaStorageServiceImpl::multipleEntryResult);
}
/** {@inheritDoc} */
@@ -136,7 +135,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Entry> getAndPut(ByteArray key, byte[] value) {
GetAndPutCommand getAndPutCommand =
commandsFactory.getAndPutCommand().key(key.bytes()).value(value).build();
- return
metaStorageRaftGrpSvc.run(getAndPutCommand).thenApply(MetaStorageServiceImpl::singleEntryResult);
+ return metaStorageRaftGrpSvc.run(getAndPutCommand);
}
/** {@inheritDoc} */
@@ -152,7 +151,8 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Map<ByteArray, Entry>>
getAndPutAll(Map<ByteArray, byte[]> vals) {
GetAndPutAllCommand getAndPutAllCommand =
getAndPutAllCommand(commandsFactory, vals);
- return
metaStorageRaftGrpSvc.run(getAndPutAllCommand).thenApply(MetaStorageServiceImpl::multipleEntryResult);
+ return metaStorageRaftGrpSvc.<List<Entry>>run(getAndPutAllCommand)
+ .thenApply(MetaStorageServiceImpl::multipleEntryResult);
}
/** {@inheritDoc} */
@@ -168,7 +168,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Entry> getAndRemove(ByteArray key) {
GetAndRemoveCommand getAndRemoveCommand =
commandsFactory.getAndRemoveCommand().key(key.bytes()).build();
- return
metaStorageRaftGrpSvc.run(getAndRemoveCommand).thenApply(MetaStorageServiceImpl::singleEntryResult);
+ return metaStorageRaftGrpSvc.run(getAndRemoveCommand);
}
/** {@inheritDoc} */
@@ -184,7 +184,8 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
public CompletableFuture<Map<ByteArray, Entry>>
getAndRemoveAll(Set<ByteArray> keys) {
GetAndRemoveAllCommand getAndRemoveAllCommand =
getAndRemoveAllCommand(commandsFactory, keys);
- return
metaStorageRaftGrpSvc.run(getAndRemoveAllCommand).thenApply(MetaStorageServiceImpl::multipleEntryResult);
+ return metaStorageRaftGrpSvc.<List<Entry>>run(getAndRemoveAllCommand)
+ .thenApply(MetaStorageServiceImpl::multipleEntryResult);
}
@Override
@@ -236,7 +237,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
long revUpperBound,
boolean includeTombstones
) {
- return new CursorImpl<>(
+ return new CursorImpl(
commandsFactory,
metaStorageRaftGrpSvc,
metaStorageRaftGrpSvc.run(
@@ -249,8 +250,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
.includeTombstones(includeTombstones)
.batchSize(RangeCommand.DEFAULT_BATCH_SIZE)
.build()
- ),
- MetaStorageServiceImpl::multipleEntryResultForCache
+ )
);
}
@@ -268,7 +268,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
@Override
public Cursor<Entry> prefix(ByteArray prefix, long revUpperBound) {
- return new CursorImpl<>(
+ return new CursorImpl(
commandsFactory,
metaStorageRaftGrpSvc,
metaStorageRaftGrpSvc.run(
@@ -280,8 +280,7 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
.includeTombstones(false)
.batchSize(PrefixCommand.DEFAULT_BATCH_SIZE)
.build()
- ),
- MetaStorageServiceImpl::multipleEntryResultForCache
+ )
);
}
@@ -302,29 +301,13 @@ public class MetaStorageServiceImpl implements
MetaStorageService {
metaStorageRaftGrpSvc.shutdown();
}
- private static Map<ByteArray, Entry> multipleEntryResult(Object obj) {
- MultipleEntryResponse resp = (MultipleEntryResponse) obj;
+ private static Map<ByteArray, Entry> multipleEntryResult(List<Entry>
entries) {
+ Map<ByteArray, Entry> res = IgniteUtils.newHashMap(entries.size());
- Map<ByteArray, Entry> res = new HashMap<>();
-
- for (SingleEntryResponse e : resp.entries()) {
- res.put(new ByteArray(e.key()), new EntryImpl(e.key(), e.value(),
e.revision(), e.updateCounter()));
+ for (Entry e : entries) {
+ res.put(new ByteArray(e.key()), e);
}
return res;
}
-
- private static List<Entry> multipleEntryResultForCache(Object obj) {
- MultipleEntryResponse resp = (MultipleEntryResponse) obj;
-
- return resp.entries().stream()
- .map(MetaStorageServiceImpl::singleEntryResult)
- .collect(toList());
- }
-
- private static Entry singleEntryResult(Object obj) {
- SingleEntryResponse resp = (SingleEntryResponse) obj;
-
- return new EntryImpl(resp.key(), resp.value(), resp.revision(),
resp.updateCounter());
- }
}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageListener.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageListener.java
index ded27cc751..dc18da854a 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageListener.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageListener.java
@@ -20,11 +20,11 @@ package org.apache.ignite.internal.metastorage.server.raft;
import static java.util.Objects.requireNonNull;
import static
org.apache.ignite.lang.ErrorGroups.MetaStorage.CURSOR_CLOSING_ERR;
+import java.io.Serializable;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.concurrent.ConcurrentHashMap;
@@ -32,10 +32,8 @@ import java.util.function.Consumer;
import org.apache.ignite.internal.metastorage.Entry;
import org.apache.ignite.internal.metastorage.command.GetAllCommand;
import org.apache.ignite.internal.metastorage.command.GetCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
import org.apache.ignite.internal.metastorage.command.PrefixCommand;
import org.apache.ignite.internal.metastorage.command.RangeCommand;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import
org.apache.ignite.internal.metastorage.command.cursor.CursorCloseCommand;
import
org.apache.ignite.internal.metastorage.command.cursor.CursorHasNextCommand;
import org.apache.ignite.internal.metastorage.command.cursor.CursorNextCommand;
@@ -93,9 +91,7 @@ public class MetaStorageListener implements RaftGroupListener
{
e = storage.get(getCmd.key());
}
- SingleEntryResponse resp = new SingleEntryResponse(e.key(),
e.value(), e.revision(), e.updateCounter());
-
- clo.result(resp);
+ clo.result(e);
} else if (command instanceof GetAllCommand) {
GetAllCommand getAllCmd = (GetAllCommand) command;
@@ -107,13 +103,7 @@ public class MetaStorageListener implements
RaftGroupListener {
entries = storage.getAll(getAllCmd.keys());
}
- List<SingleEntryResponse> res = new
ArrayList<>(entries.size());
-
- for (Entry e : entries) {
- res.add(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
- }
-
- clo.result(new MultipleEntryResponse(res));
+ clo.result((Serializable) entries);
} else if (command instanceof CursorHasNextCommand) {
CursorHasNextCommand cursorHasNextCmd = (CursorHasNextCommand)
command;
@@ -180,17 +170,17 @@ public class MetaStorageListener implements
RaftGroupListener {
try {
int batchSize = requireNonNull(cursorDesc.batchSize());
- var resp = new ArrayList<SingleEntryResponse>(batchSize);
+ var resp = new ArrayList<Entry>(batchSize);
Cursor<Entry> cursor = cursorDesc.cursor();
for (int i = 0; i < batchSize && cursor.hasNext(); i++) {
Entry e = cursor.next();
- resp.add(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
+ resp.add(e);
}
- clo.result(new MultipleEntryResponse(resp));
+ clo.result(resp);
} catch (NoSuchElementException e) {
clo.result(e);
}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageWriteHandler.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageWriteHandler.java
index 14db5071c3..ddc91f2f65 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageWriteHandler.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/raft/MetaStorageWriteHandler.java
@@ -17,9 +17,8 @@
package org.apache.ignite.internal.metastorage.server.raft;
-import java.util.ArrayList;
+import java.io.Serializable;
import java.util.Collection;
-import java.util.List;
import org.apache.ignite.internal.metastorage.Entry;
import org.apache.ignite.internal.metastorage.command.GetAndPutAllCommand;
import org.apache.ignite.internal.metastorage.command.GetAndPutCommand;
@@ -27,12 +26,10 @@ import
org.apache.ignite.internal.metastorage.command.GetAndRemoveAllCommand;
import org.apache.ignite.internal.metastorage.command.GetAndRemoveCommand;
import org.apache.ignite.internal.metastorage.command.InvokeCommand;
import org.apache.ignite.internal.metastorage.command.MultiInvokeCommand;
-import org.apache.ignite.internal.metastorage.command.MultipleEntryResponse;
import org.apache.ignite.internal.metastorage.command.PutAllCommand;
import org.apache.ignite.internal.metastorage.command.PutCommand;
import org.apache.ignite.internal.metastorage.command.RemoveAllCommand;
import org.apache.ignite.internal.metastorage.command.RemoveCommand;
-import org.apache.ignite.internal.metastorage.command.SingleEntryResponse;
import org.apache.ignite.internal.metastorage.dsl.CompoundCondition;
import org.apache.ignite.internal.metastorage.dsl.ConditionType;
import org.apache.ignite.internal.metastorage.dsl.Iif;
@@ -80,7 +77,7 @@ class MetaStorageWriteHandler {
Entry e = storage.getAndPut(getAndPutCmd.key(),
getAndPutCmd.value());
- clo.result(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
+ clo.result(e);
} else if (command instanceof PutAllCommand) {
PutAllCommand putAllCmd = (PutAllCommand) command;
@@ -92,13 +89,7 @@ class MetaStorageWriteHandler {
Collection<Entry> entries =
storage.getAndPutAll(getAndPutAllCmd.keys(), getAndPutAllCmd.values());
- List<SingleEntryResponse> resp = new ArrayList<>(entries.size());
-
- for (Entry e : entries) {
- resp.add(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
- }
-
- clo.result(new MultipleEntryResponse(resp));
+ clo.result((Serializable) entries);
} else if (command instanceof RemoveCommand) {
RemoveCommand rmvCmd = (RemoveCommand) command;
@@ -110,7 +101,7 @@ class MetaStorageWriteHandler {
Entry e = storage.getAndRemove(getAndRmvCmd.key());
- clo.result(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
+ clo.result(e);
} else if (command instanceof RemoveAllCommand) {
RemoveAllCommand rmvAllCmd = (RemoveAllCommand) command;
@@ -122,13 +113,7 @@ class MetaStorageWriteHandler {
Collection<Entry> entries =
storage.getAndRemoveAll(getAndRmvAllCmd.keys());
- List<SingleEntryResponse> resp = new ArrayList<>(entries.size());
-
- for (Entry e : entries) {
- resp.add(new SingleEntryResponse(e.key(), e.value(),
e.revision(), e.updateCounter()));
- }
-
- clo.result(new MultipleEntryResponse(resp));
+ clo.result((Serializable) entries);
} else if (command instanceof InvokeCommand) {
InvokeCommand cmd = (InvokeCommand) command;