package com.navercorp.pinpoint.web.dao.hbase;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.TraceDao;
import org.apache.commons.collections.CollectionUtils;
import java.util.List;
/**
* @author Woonduk Kang(emeroad)
*/
public class HbaseTraceCompatibilityDao implements TraceDao {
private final TraceDao master;
private final TraceDao slave;
public HbaseTraceCompatibilityDao(TraceDao master, TraceDao slave) {
if (master == null) {
throw new NullPointerException("master must not be null");
}
if (slave == null) {
throw new NullPointerException("slave must not be null");
}
this.master = master;
this.slave = slave;
}
@Override
public List<SpanBo> selectSpan(TransactionId transactionId) {
List<SpanBo> spanBos = this.master.selectSpan(transactionId);
if (CollectionUtils.isNotEmpty(spanBos)) {
return spanBos;
}
return slave.selectSpan(transactionId);
}
@Override
public List<List<SpanBo>> selectSpans(List<TransactionId> transactionIdList) {
List<List<SpanBo>> spanBos = this.master.selectSpans(transactionIdList);
if (CollectionUtils.isNotEmpty(spanBos)) {
for (List<SpanBo> spanBo : spanBos) {
if (CollectionUtils.isNotEmpty(spanBo)) {
return spanBos;
}
}
}
return slave.selectSpans(transactionIdList);
}
@Override
public List<List<SpanBo>> selectAllSpans(List<TransactionId> transactionIdList) {
List<List<SpanBo>> spanBos = this.master.selectAllSpans(transactionIdList);
if (CollectionUtils.isNotEmpty(spanBos)) {
for (List<SpanBo> spanBo : spanBos) {
if (CollectionUtils.isNotEmpty(spanBo)) {
return spanBos;
}
}
}
return slave.selectAllSpans(transactionIdList);
}
}