Search in sources :

Example 1 with MultipleEntryResponse

use of org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse in project ignite-3 by apache.

the class MetaStorageServiceImpl method watchResponse.

private static WatchEvent watchResponse(Object obj) {
    MultipleEntryResponse resp = (MultipleEntryResponse) obj;
    List<EntryEvent> evts = new ArrayList<>(resp.entries().size() / 2);
    Entry o = null;
    Entry n;
    for (int i = 0; i < resp.entries().size(); i++) {
        SingleEntryResponse s = resp.entries().get(i);
        EntryImpl e = new EntryImpl(new ByteArray(s.key()), s.value(), s.revision(), s.updateCounter());
        if (i % 2 == 0) {
            o = e;
        } else {
            n = e;
            evts.add(new EntryEvent(o, n));
        }
    }
    return new WatchEvent(evts);
}
Also used : ArrayList(java.util.ArrayList) ByteArray(org.apache.ignite.lang.ByteArray) MultipleEntryResponse(org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse) SingleEntryResponse(org.apache.ignite.internal.metastorage.common.command.SingleEntryResponse)

Example 2 with MultipleEntryResponse

use of org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse in project ignite-3 by apache.

the class MetaStorageListener method onRead.

/**
 * {@inheritDoc}
 */
@Override
public void onRead(Iterator<CommandClosure<ReadCommand>> iter) {
    while (iter.hasNext()) {
        CommandClosure<ReadCommand> clo = iter.next();
        ReadCommand command = clo.command();
        if (command instanceof GetCommand) {
            GetCommand getCmd = (GetCommand) command;
            Entry e;
            if (getCmd.revision() != 0) {
                e = storage.get(getCmd.key(), getCmd.revision());
            } else {
                e = storage.get(getCmd.key());
            }
            SingleEntryResponse resp = new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter());
            clo.result(resp);
        } else if (command instanceof GetAllCommand) {
            GetAllCommand getAllCmd = (GetAllCommand) command;
            Collection<Entry> entries;
            if (getAllCmd.revision() != 0) {
                entries = storage.getAll(getAllCmd.keys(), getAllCmd.revision());
            } else {
                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));
        } else if (command instanceof CursorHasNextCommand) {
            CursorHasNextCommand cursorHasNextCmd = (CursorHasNextCommand) command;
            CursorMeta cursorDesc = cursors.get(cursorHasNextCmd.cursorId());
            clo.result(!(cursorDesc == null) && cursorDesc.cursor().hasNext());
        } else {
            assert false : "Command was not found [cmd=" + command + ']';
        }
    }
}
Also used : GetCommand(org.apache.ignite.internal.metastorage.common.command.GetCommand) Entry(org.apache.ignite.internal.metastorage.server.Entry) ReadCommand(org.apache.ignite.raft.client.ReadCommand) Collection(java.util.Collection) List(java.util.List) ArrayList(java.util.ArrayList) MultipleEntryResponse(org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse) SingleEntryResponse(org.apache.ignite.internal.metastorage.common.command.SingleEntryResponse) CursorHasNextCommand(org.apache.ignite.internal.metastorage.common.command.cursor.CursorHasNextCommand) GetAllCommand(org.apache.ignite.internal.metastorage.common.command.GetAllCommand)

Example 3 with MultipleEntryResponse

use of org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse in project ignite-3 by apache.

the class MetaStorageListener method onWrite.

/**
 * {@inheritDoc}
 */
@Override
public void onWrite(Iterator<CommandClosure<WriteCommand>> iter) {
    while (iter.hasNext()) {
        CommandClosure<WriteCommand> clo = iter.next();
        WriteCommand command = clo.command();
        if (command instanceof PutCommand) {
            PutCommand putCmd = (PutCommand) command;
            storage.put(putCmd.key(), putCmd.value());
            clo.result(null);
        } else if (command instanceof GetAndPutCommand) {
            GetAndPutCommand getAndPutCmd = (GetAndPutCommand) command;
            Entry e = storage.getAndPut(getAndPutCmd.key(), getAndPutCmd.value());
            clo.result(new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter()));
        } else if (command instanceof PutAllCommand) {
            PutAllCommand putAllCmd = (PutAllCommand) command;
            storage.putAll(putAllCmd.keys(), putAllCmd.values());
            clo.result(null);
        } else if (command instanceof GetAndPutAllCommand) {
            GetAndPutAllCommand getAndPutAllCmd = (GetAndPutAllCommand) command;
            Collection<Entry> entries = storage.getAndPutAll(getAndPutAllCmd.keys(), getAndPutAllCmd.vals());
            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));
        } else if (command instanceof RemoveCommand) {
            RemoveCommand rmvCmd = (RemoveCommand) command;
            storage.remove(rmvCmd.key());
            clo.result(null);
        } else if (command instanceof GetAndRemoveCommand) {
            GetAndRemoveCommand getAndRmvCmd = (GetAndRemoveCommand) command;
            Entry e = storage.getAndRemove(getAndRmvCmd.key());
            clo.result(new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter()));
        } else if (command instanceof RemoveAllCommand) {
            RemoveAllCommand rmvAllCmd = (RemoveAllCommand) command;
            storage.removeAll(rmvAllCmd.keys());
            clo.result(null);
        } else if (command instanceof GetAndRemoveAllCommand) {
            GetAndRemoveAllCommand getAndRmvAllCmd = (GetAndRemoveAllCommand) command;
            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));
        } else if (command instanceof InvokeCommand) {
            InvokeCommand cmd = (InvokeCommand) command;
            boolean res = storage.invoke(toCondition(cmd.condition()), toOperations(cmd.success()), toOperations(cmd.failure()));
            clo.result(res);
        } else if (command instanceof MultiInvokeCommand) {
            MultiInvokeCommand cmd = (MultiInvokeCommand) command;
            StatementResult res = storage.invoke(toIf(cmd.iif()));
            clo.result(new StatementResultInfo(res.bytes()));
        } else if (command instanceof RangeCommand) {
            RangeCommand rangeCmd = (RangeCommand) command;
            IgniteUuid cursorId = rangeCmd.getCursorId();
            Cursor<Entry> cursor = (rangeCmd.revUpperBound() != -1) ? storage.range(rangeCmd.keyFrom(), rangeCmd.keyTo(), rangeCmd.revUpperBound()) : storage.range(rangeCmd.keyFrom(), rangeCmd.keyTo());
            cursors.put(cursorId, new CursorMeta(cursor, CursorType.RANGE, rangeCmd.requesterNodeId()));
            clo.result(cursorId);
        } else if (command instanceof CursorNextCommand) {
            CursorNextCommand cursorNextCmd = (CursorNextCommand) command;
            CursorMeta cursorDesc = cursors.get(cursorNextCmd.cursorId());
            if (cursorDesc == null) {
                clo.result(new NoSuchElementException("Corresponding cursor on the server side is not found."));
                return;
            }
            try {
                if (cursorDesc.type() == CursorType.RANGE) {
                    Entry e = (Entry) cursorDesc.cursor().next();
                    clo.result(new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter()));
                } else if (cursorDesc.type() == CursorType.WATCH) {
                    WatchEvent evt = (WatchEvent) cursorDesc.cursor().next();
                    List<SingleEntryResponse> resp = new ArrayList<>(evt.entryEvents().size() * 2);
                    for (EntryEvent e : evt.entryEvents()) {
                        Entry o = e.oldEntry();
                        Entry n = e.entry();
                        resp.add(new SingleEntryResponse(o.key(), o.value(), o.revision(), o.updateCounter()));
                        resp.add(new SingleEntryResponse(n.key(), n.value(), n.revision(), n.updateCounter()));
                    }
                    clo.result(new MultipleEntryResponse(resp));
                }
            } catch (NoSuchElementException e) {
                clo.result(e);
            }
        } else if (command instanceof CursorCloseCommand) {
            CursorCloseCommand cursorCloseCmd = (CursorCloseCommand) command;
            CursorMeta cursorDesc = cursors.remove(cursorCloseCmd.cursorId());
            if (cursorDesc == null) {
                clo.result(null);
                return;
            }
            try {
                cursorDesc.cursor().close();
            } catch (Exception e) {
                throw new IgniteInternalException(e);
            }
            clo.result(null);
        } else if (command instanceof WatchRangeKeysCommand) {
            WatchRangeKeysCommand watchCmd = (WatchRangeKeysCommand) command;
            IgniteUuid cursorId = watchCmd.getCursorId();
            Cursor<WatchEvent> cursor = storage.watch(watchCmd.keyFrom(), watchCmd.keyTo(), watchCmd.revision());
            cursors.put(cursorId, new CursorMeta(cursor, CursorType.WATCH, watchCmd.requesterNodeId()));
            clo.result(cursorId);
        } else if (command instanceof WatchExactKeysCommand) {
            WatchExactKeysCommand watchCmd = (WatchExactKeysCommand) command;
            IgniteUuid cursorId = watchCmd.getCursorId();
            Cursor<WatchEvent> cursor = storage.watch(watchCmd.keys(), watchCmd.revision());
            cursors.put(cursorId, new CursorMeta(cursor, CursorType.WATCH, watchCmd.requesterNodeId()));
            clo.result(cursorId);
        } else if (command instanceof CursorsCloseCommand) {
            CursorsCloseCommand cursorsCloseCmd = (CursorsCloseCommand) command;
            Iterator<CursorMeta> cursorsIter = cursors.values().iterator();
            while (cursorsIter.hasNext()) {
                CursorMeta cursorDesc = cursorsIter.next();
                if (cursorDesc.requesterNodeId().equals(cursorsCloseCmd.nodeId())) {
                    try {
                        cursorDesc.cursor().close();
                    } catch (Exception e) {
                        throw new IgniteInternalException(e);
                    }
                    cursorsIter.remove();
                }
            }
            clo.result(null);
        } else {
            assert false : "Command was not found [cmd=" + command + ']';
        }
    }
}
Also used : WriteCommand(org.apache.ignite.raft.client.WriteCommand) GetAndRemoveCommand(org.apache.ignite.internal.metastorage.common.command.GetAndRemoveCommand) RemoveCommand(org.apache.ignite.internal.metastorage.common.command.RemoveCommand) StatementResult(org.apache.ignite.internal.metastorage.server.StatementResult) CursorNextCommand(org.apache.ignite.internal.metastorage.common.command.cursor.CursorNextCommand) GetAndPutCommand(org.apache.ignite.internal.metastorage.common.command.GetAndPutCommand) ArrayList(java.util.ArrayList) Cursor(org.apache.ignite.internal.util.Cursor) InvokeCommand(org.apache.ignite.internal.metastorage.common.command.InvokeCommand) MultiInvokeCommand(org.apache.ignite.internal.metastorage.common.command.MultiInvokeCommand) Entry(org.apache.ignite.internal.metastorage.server.Entry) IgniteUuid(org.apache.ignite.lang.IgniteUuid) EntryEvent(org.apache.ignite.internal.metastorage.server.EntryEvent) CursorCloseCommand(org.apache.ignite.internal.metastorage.common.command.cursor.CursorCloseCommand) Iterator(java.util.Iterator) List(java.util.List) ArrayList(java.util.ArrayList) WatchEvent(org.apache.ignite.internal.metastorage.server.WatchEvent) PutAllCommand(org.apache.ignite.internal.metastorage.common.command.PutAllCommand) GetAndPutAllCommand(org.apache.ignite.internal.metastorage.common.command.GetAndPutAllCommand) WatchExactKeysCommand(org.apache.ignite.internal.metastorage.common.command.WatchExactKeysCommand) GetAndRemoveCommand(org.apache.ignite.internal.metastorage.common.command.GetAndRemoveCommand) IgniteInternalException(org.apache.ignite.lang.IgniteInternalException) CursorsCloseCommand(org.apache.ignite.internal.metastorage.common.command.cursor.CursorsCloseCommand) GetAndRemoveAllCommand(org.apache.ignite.internal.metastorage.common.command.GetAndRemoveAllCommand) RemoveAllCommand(org.apache.ignite.internal.metastorage.common.command.RemoveAllCommand) MultipleEntryResponse(org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse) MultiInvokeCommand(org.apache.ignite.internal.metastorage.common.command.MultiInvokeCommand) IgniteInternalException(org.apache.ignite.lang.IgniteInternalException) NoSuchElementException(java.util.NoSuchElementException) WatchRangeKeysCommand(org.apache.ignite.internal.metastorage.common.command.WatchRangeKeysCommand) RangeCommand(org.apache.ignite.internal.metastorage.common.command.RangeCommand) StatementResultInfo(org.apache.ignite.internal.metastorage.common.StatementResultInfo) GetAndRemoveAllCommand(org.apache.ignite.internal.metastorage.common.command.GetAndRemoveAllCommand) GetAndPutAllCommand(org.apache.ignite.internal.metastorage.common.command.GetAndPutAllCommand) Collection(java.util.Collection) GetAndPutCommand(org.apache.ignite.internal.metastorage.common.command.GetAndPutCommand) PutCommand(org.apache.ignite.internal.metastorage.common.command.PutCommand) SingleEntryResponse(org.apache.ignite.internal.metastorage.common.command.SingleEntryResponse) NoSuchElementException(java.util.NoSuchElementException)

Example 4 with MultipleEntryResponse

use of org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse in project ignite-3 by apache.

the class MetaStorageServiceImpl method multipleEntryResult.

private static Map<ByteArray, Entry> multipleEntryResult(Object obj) {
    MultipleEntryResponse resp = (MultipleEntryResponse) obj;
    Map<ByteArray, Entry> res = new HashMap<>();
    for (SingleEntryResponse e : resp.entries()) {
        ByteArray key = new ByteArray(e.key());
        res.put(key, new EntryImpl(key, e.value(), e.revision(), e.updateCounter()));
    }
    return res;
}
Also used : HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ByteArray(org.apache.ignite.lang.ByteArray) MultipleEntryResponse(org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse) SingleEntryResponse(org.apache.ignite.internal.metastorage.common.command.SingleEntryResponse)

Aggregations

MultipleEntryResponse (org.apache.ignite.internal.metastorage.common.command.MultipleEntryResponse)4 SingleEntryResponse (org.apache.ignite.internal.metastorage.common.command.SingleEntryResponse)4 ArrayList (java.util.ArrayList)3 Collection (java.util.Collection)2 List (java.util.List)2 Entry (org.apache.ignite.internal.metastorage.server.Entry)2 ByteArray (org.apache.ignite.lang.ByteArray)2 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 NoSuchElementException (java.util.NoSuchElementException)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 StatementResultInfo (org.apache.ignite.internal.metastorage.common.StatementResultInfo)1 GetAllCommand (org.apache.ignite.internal.metastorage.common.command.GetAllCommand)1 GetAndPutAllCommand (org.apache.ignite.internal.metastorage.common.command.GetAndPutAllCommand)1 GetAndPutCommand (org.apache.ignite.internal.metastorage.common.command.GetAndPutCommand)1 GetAndRemoveAllCommand (org.apache.ignite.internal.metastorage.common.command.GetAndRemoveAllCommand)1 GetAndRemoveCommand (org.apache.ignite.internal.metastorage.common.command.GetAndRemoveCommand)1 GetCommand (org.apache.ignite.internal.metastorage.common.command.GetCommand)1 InvokeCommand (org.apache.ignite.internal.metastorage.common.command.InvokeCommand)1 MultiInvokeCommand (org.apache.ignite.internal.metastorage.common.command.MultiInvokeCommand)1