blob: 0bdd017a86465af4e96fc6819606d4dd141365bf [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.accumulo.fate;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Transient in memory store for transactions.
*/
public class SimpleStore<T> implements TStore<T> {
private long nextId = 1;
private Map<Long,TStatus> statuses = new HashMap<>();
private Set<Long> reserved = new HashSet<>();
@Override
public long create() {
statuses.put(nextId, TStatus.NEW);
return nextId++;
}
@Override
public long reserve() {
throw new UnsupportedOperationException();
}
@Override
public void reserve(long tid) {
if (reserved.contains(tid))
throw new IllegalStateException(); // zoo store would wait, but do not expect test to reserve
// twice... if test change, then change this
reserved.add(tid);
}
@Override
public void unreserve(long tid, long deferTime) {
if (!reserved.remove(tid)) {
throw new IllegalStateException();
}
}
@Override
public Repo<T> top(long tid) {
throw new UnsupportedOperationException();
}
@Override
public void push(long tid, Repo<T> repo) {
throw new UnsupportedOperationException();
}
@Override
public void pop(long tid) {
throw new UnsupportedOperationException();
}
@Override
public org.apache.accumulo.fate.TStore.TStatus getStatus(long tid) {
if (!reserved.contains(tid))
throw new IllegalStateException();
TStatus status = statuses.get(tid);
if (status == null)
return TStatus.UNKNOWN;
return status;
}
@Override
public void setStatus(long tid, org.apache.accumulo.fate.TStore.TStatus status) {
if (!reserved.contains(tid))
throw new IllegalStateException();
if (!statuses.containsKey(tid))
throw new IllegalStateException();
statuses.put(tid, status);
}
@Override
public org.apache.accumulo.fate.TStore.TStatus waitForStatusChange(long tid,
EnumSet<org.apache.accumulo.fate.TStore.TStatus> expected) {
throw new UnsupportedOperationException();
}
@Override
public void setProperty(long tid, String prop, Serializable val) {
throw new UnsupportedOperationException();
}
@Override
public Serializable getProperty(long tid, String prop) {
throw new UnsupportedOperationException();
}
@Override
public void delete(long tid) {
if (!reserved.contains(tid))
throw new IllegalStateException();
statuses.remove(tid);
}
@Override
public List<Long> list() {
return new ArrayList<>(statuses.keySet());
}
@Override
public long timeCreated(long tid) {
throw new UnsupportedOperationException();
}
@Override
public List<ReadOnlyRepo<T>> getStack(long tid) {
throw new UnsupportedOperationException();
}
}