blob: b06b0bad672dc51f5d8d4852143fda48cd07c4e9 [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.client;
import java.io.Closeable;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
/**
* Distributed Set.
*
* <h1 class="header">Overview</h1>
* Cache set implements {@link Set} interface and provides all methods from collections.
*
* <h1 class="header">Colocated vs Non-colocated</h1>
* Set items can be placed on one node or distributed across grid nodes
* (governed by {@link ClientCollectionConfiguration#setColocated(boolean)} parameter).
* {@code Non-colocated} mode is provided only for partitioned caches.
* If {@code colocated} parameter is {@code true}, then all set items
* will be colocated on one node, otherwise items will be distributed across all grid nodes.
*
* @see IgniteClient#set(String, org.apache.ignite.client.ClientCollectionConfiguration)
*/
public interface ClientIgniteSet<T> extends Set<T>, Closeable {
/** {@inheritDoc} */
@Override boolean add(T o);
/** {@inheritDoc} */
@Override boolean addAll(Collection<? extends T> c);
/** {@inheritDoc} */
@Override void clear();
/** {@inheritDoc} */
@Override boolean contains(Object o);
/** {@inheritDoc} */
@Override boolean containsAll(Collection<?> c);
/** {@inheritDoc} */
@Override boolean isEmpty();
/**
* Returns an iterator over the elements in this collection.
* <p>
* There are no guarantees concerning the order in which the elements are returned.
* <p>
* Returned iterator is {@link AutoCloseable}: it may hold server-side resources and must be closed.
* It will close itself when the last page of data (see {@link #pageSize()}) is fetched from the server.
* When {@link Iterator#hasNext()} returns {@code false}, it is guaranteed that the iterator is closed.
* In other cases (incomplete iteration) the user must close the iterator.
*
* @return an Iterator over the elements in this collection.
*/
@Override ClientAutoCloseableIterator<T> iterator();
/** {@inheritDoc} */
@Override boolean remove(Object o);
/** {@inheritDoc} */
@Override boolean removeAll(Collection<?> c);
/** {@inheritDoc} */
@Override boolean retainAll(Collection<?> c);
/** {@inheritDoc} */
@Override int size();
/** {@inheritDoc} */
@Override Object[] toArray();
/** {@inheritDoc} */
@Override <T1> T1[] toArray(T1[] a);
/**
* Removes this set.
*/
@Override public void close();
/**
* Gets set name.
*
* @return Set name.
*/
public String name();
/**
* Gets a value indicating whether all items of this set are stored on a single node.
*
* @return {@code True} if all items of this set are stored on a single node, {@code false} otherwise.
*/
public boolean colocated();
/**
* Gets a value indicating whether this set has been removed ({@link #close()} was called).
*
* @return {@code True} if set was removed from cache, {@code false} otherwise.
*/
public boolean removed();
/**
* Sets a value indicating whether user objects should be kept in binary form on the server, or deserialized.
* <p>
* Default is {@code true}: does not require classes on server, interoperable with other thin clients, performs better.
* Suitable for most use cases.
* <p>
* Set to {@code false} if there is a requirement to use deserialized objects in "thick" API ({@link org.apache.ignite.IgniteSet})
* together with thin client API, like in this scenario:
*
* <pre> {@code
* ClientIgniteSet<UserObj> clientSet = client.set("my-set", new ClientCollectionConfiguration());
* clientSet.serverKeepBinary(false);
*
* IgniteSet<UserObj> serverSet = server.set(clientSet.name(), null);
*
* clientSet.add(new UserObj(1, "client"));
* assert serverSet.contains(new UserObj(1, "client"));
* }</pre>
*
* @param keepBinary Whether to keep objects in binary form on the server.
* @return This set instance (for chaining).
*/
public ClientIgniteSet<T> serverKeepBinary(boolean keepBinary);
/**
* Gets a value indicating whether user objects should be kept in binary form on the server, or deserialized.
* <p>
* Default is {@code true}: does not require classes on server, interoperable with other thin clients, performs better.
* Suitable for most use cases.
* <p>
* Set to {@code false} if there is a requirement to use deserialized objects in "thick" API ({@link org.apache.ignite.IgniteSet})
* together with thin client API, like in this scenario:
*
* <pre> {@code
* ClientIgniteSet<UserObj> clientSet = client.set("my-set", new ClientCollectionConfiguration());
* clientSet.serverKeepBinary(false);
*
* IgniteSet<UserObj> serverSet = server.set(clientSet.name(), null);
*
* clientSet.add(new UserObj(1, "client"));
* assert serverSet.contains(new UserObj(1, "client"));
* }</pre>
*
* @return {@code true} when user objects will be kept in binary form on the server, {@code false} otherwise.
*/
public boolean serverKeepBinary();
/**
* Sets the page size to be used for batched network data retrieval in {@link #iterator()} and {@link #toArray()}.
*
* @param pageSize Page size.
* @return This set instance (for chaining).
*/
public ClientIgniteSet<T> pageSize(int pageSize);
/**
* Gets the page size to be used for batched network data retrieval in {@link #iterator()} and {@link #toArray()}.
*
* @return Page size.
*/
public int pageSize();
}