/**
* Copyright 2012 Comcast Corporation
*
* Licensed 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 com.comcast.cmb.common.persistence;
import java.util.List;
import java.util.Map;
import java.util.Random;
import com.comcast.cmb.common.util.CMBProperties;
import com.comcast.cmb.common.util.PersistenceException;
public abstract class AbstractDurablePersistence {
protected static Random rand = new Random();
public static final String CMB_KEYSPACE = CMBProperties.getInstance().getCMBKeyspace();
public static final String CQS_KEYSPACE = CMBProperties.getInstance().getCQSKeyspace();
public static final String CNS_KEYSPACE = CMBProperties.getInstance().getCNSKeyspace();
public static class CMB_SERIALIZER {
public static final CmbStringSerializer STRING_SERIALIZER = new CmbStringSerializer();
public static final CmbCompositeSerializer COMPOSITE_SERIALIZER = new CmbCompositeSerializer();
public static final CmbLongSerializer LONG_SERIALIZER = new CmbLongSerializer();
};
public static final String CNS_TOPICS = "CNSTopics";
public static final String CNS_TOPICS_BY_USER_ID = "CNSTopicsByUserId";
public static final String CNS_TOPIC_SUBSCRIPTIONS = "CNSTopicSubscriptions";
public static final String CNS_TOPIC_SUBSCRIPTIONS_INDEX = "CNSTopicSubscriptionsIndex";
public static final String CNS_TOPIC_SUBSCRIPTIONS_USER_INDEX = "CNSTopicSubscriptionsUserIndex";
public static final String CNS_TOPIC_SUBSCRIPTIONS_TOKEN_INDEX = "CNSTopicSubscriptionsTokenIndex";
public static final String CNS_TOPIC_ATTRIBUTES = "CNSTopicAttributes";
public static final String CNS_SUBSCRIPTION_ATTRIBUTES = "CNSSubscriptionAttributes";
public static final String CNS_TOPIC_STATS = "CNSTopicStats";
public static final String CNS_WORKERS = "CNSWorkers";
public static final String CNS_API_SERVERS = "CNSAPIServers";
public static final String CQS_QUEUES = "CQSQueues";
public static final String CQS_QUEUES_BY_USER_ID = "CQSQueuesByUserId";
public static final String CQS_PARTITIONED_QUEUE_MESSAGES = "CQSPartitionedQueueMessages";
public static final String CQS_API_SERVERS = "CQSAPIServers";
public static final String CMB_USERS = "Users";
public static abstract class CmbSerializer {
}
public static class CmbStringSerializer extends CmbSerializer {
}
public static class CmbCompositeSerializer extends CmbSerializer {
}
public static class CmbLongSerializer extends CmbSerializer {
}
public static abstract class CmbComposite {
public CmbComposite() {
}
public CmbComposite(List<?> l) {
}
public CmbComposite(Object... os) {
}
public abstract Object get(int i);
public abstract int compareTo(CmbComposite c);
}
public static abstract class CmbColumn<N, V> {
public CmbColumn() {
}
public abstract N getName();
public abstract V getValue();
public abstract long getClock();
}
public static abstract class CmbRow<K, N, V> {
public CmbRow() {
}
public abstract K getKey();
public abstract CmbColumnSlice<N, V> getColumnSlice();
}
public static abstract class CmbColumnSlice<N, V> {
public CmbColumnSlice() {
}
public abstract CmbColumn<N, V> getColumnByName(N name);
public abstract List<CmbColumn<N, V>> getColumns();
public abstract int size();
}
public static final String CLUSTER_NAME = CMBProperties.getInstance().getClusterName();
public static final String CLUSTER_URL = CMBProperties.getInstance().getClusterUrl();
private static long counter = 0;
public static synchronized long newTime(long t, boolean isHidden) {
t = t << 21;
//top 2 bits are 0. 64th and 63rd.
//set 21st bit if hidden
if (isHidden) {
t |= 0x0000000000100000L;
}
//add 20 bit counter
if (counter == 1048575) {
counter = 0;
}
t += counter++;
return t;
}
public static long getTimestampFromHash(long t){
t = t >> 21;
return t;
}
public java.util.UUID getTimeUUID(long timeMillis) throws InterruptedException {
return new java.util.UUID(newTime(timeMillis, false), com.eaio.uuid.UUIDGen.getClockSeqAndNode());
}
public java.util.UUID getUniqueTimeUUID(long millis) {
return new java.util.UUID(com.eaio.uuid.UUIDGen.createTime(millis), com.eaio.uuid.UUIDGen.getClockSeqAndNode());
}
public long getTimeLong(long timeMillis) throws InterruptedException {
long newTime = timeMillis * 1000000000 + (System.nanoTime() % 1000000) * 1000 + rand.nextInt(999999);
return newTime;
}
public abstract boolean isAlive();
public abstract CmbComposite getCmbComposite(List<?> l);
public abstract CmbComposite getCmbComposite(Object... os);
public abstract <K, N, V> void update(String keyspace, String columnFamily, K key, N column, V value,
CmbSerializer keySerializer, CmbSerializer nameSerializer, CmbSerializer valueSerializer, Integer ttl) throws PersistenceException;
public abstract <K, N, V> List<CmbRow<K, N, V>> readAllRows(
String keyspace, String columnFamily, int numRows, int numCols, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer, CmbSerializer valueSerializer) throws PersistenceException;
public abstract <K, N, V> List<CmbRow<K, N, V>> readRowsByIndex(
String keyspace, String columnFamily, N whereColumn, V whereValue,
int numRows, int numCols, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer, CmbSerializer valueSerializer) throws PersistenceException;
public abstract <K, N, V> List<CmbRow<K, N, V>> readRowsByIndices(
String keyspace, String columnFamily, Map<N, V> columnValues,
int numRows, int numCols, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer, CmbSerializer valueSerializer) throws PersistenceException;
public abstract <K, N, V> CmbColumnSlice<N, V> readColumnSlice(
String keyspace, String columnFamily, K key, N firstColumnName, N lastColumnName,
int numCols, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer, CmbSerializer valueSerializer) throws PersistenceException;
public abstract <K, N, V> void insertRow(String keyspace, K rowKey,
String columnFamily, Map<N, V> columnValues,
CmbSerializer keySerializer, CmbSerializer nameSerializer,
CmbSerializer valueSerializer, Integer ttl) throws PersistenceException;
public abstract <K, N, V> void insertRows(
String keyspace, Map<K, Map<N, V>> rowColumnValues, String columnFamily,
CmbSerializer keySerializer, CmbSerializer nameSerializer,
CmbSerializer valueSerializer, Integer ttl) throws PersistenceException;
public abstract <K, N> void delete(String keyspace, String columnFamily, K key, N column,
CmbSerializer keySerializer, CmbSerializer columnSerializer) throws PersistenceException;
public abstract <K, N> void deleteBatch(String keyspace, String columnFamily,
List<K> keyList, List<N> columnList, CmbSerializer keySerializer,
CmbSerializer columnSerializer) throws PersistenceException;
public abstract <K, N> int getCount(String keyspace, String columnFamily, K key,
CmbSerializer keySerializer, CmbSerializer columnNameSerializer) throws PersistenceException;
public abstract <K, N> void incrementCounter(String keyspace, String columnFamily, K rowKey,
String columnName, int incrementBy, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer) throws PersistenceException;
public abstract <K, N> void decrementCounter(String keyspace, String columnFamily, K rowKey,
String columnName, int decrementBy, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer) throws PersistenceException;
/*public abstract <K, N> void deleteCounter(String keyspace, String columnFamily, K rowKey,
N columnName, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer) throws PersistenceException;*/
public abstract <K, N> long getCounter(String keyspace, String columnFamily, K rowKey,
N columnName, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer) throws PersistenceException;
public abstract <K, N, V> CmbColumn<N, V> readColumn(String keyspace, String columnFamily,
K key, N columnName, CmbSerializer keySerializer,
CmbSerializer columnNameSerializer, CmbSerializer valueSerializer)
throws PersistenceException;
}