blob: 83d060509103276dd17fc135eccfe455499c89de [file] [log] [blame]
/*
* 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.commandline.cache.check_indexes_inline_size;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.ignite.internal.dto.IgniteDataTransferObject;
import org.apache.ignite.internal.processors.task.GridInternal;
import org.apache.ignite.internal.util.typedef.internal.U;
/**
* Represents information about secondary indexes inline size from the cluster nodes.
*/
@GridInternal
public class CheckIndexInlineSizesResult extends IgniteDataTransferObject {
/** */
private static final long serialVersionUID = 0L;
/** Index info (index name, inline size) per node. */
private Map<UUID, Map<String, Integer>> nodeToIndexes = new HashMap<>();
/** {@inheritDoc} */
@Override protected void writeExternalData(ObjectOutput out) throws IOException {
out.writeInt(nodeToIndexes.size());
for (UUID id : nodeToIndexes.keySet()) {
U.writeUuid(out, id);
U.writeMap(out, nodeToIndexes.get(id));
}
}
/** {@inheritDoc} */
@Override protected void readExternalData(
byte protoVer,
ObjectInput in
) throws IOException, ClassNotFoundException {
int size = in.readInt();
for (int i = 0; i < size; i++) {
UUID id = U.readUuid(in);
Map<String, Integer> map = U.readMap(in);
nodeToIndexes.put(id, map);
}
}
/**
* Adds to result information about indexes from node.
*
* @param nodeId Node id.
* @param indexNameToInlineSize Information about secondary indexes inline size.
*/
public void addResult(UUID nodeId, Map<String, Integer> indexNameToInlineSize) {
Map<String, Integer> prev = nodeToIndexes.put(nodeId, indexNameToInlineSize);
assert prev == null : nodeId + " prev: " + prev + " cur: " + indexNameToInlineSize;
}
/**
* Merge current result with given instance.
*
* @param res Given result instance.
*/
public void merge(CheckIndexInlineSizesResult res) {
for (Map.Entry<UUID, Map<String, Integer>> entry : res.nodeToIndexes.entrySet())
addResult(entry.getKey(), entry.getValue());
}
/**
* @return Information about secondary indexes inline size from the cluster nodes. (nodeId -> (index name, inline size)).
*/
public Map<UUID, Map<String, Integer>> inlineSizes() {
return nodeToIndexes;
}
}