blob: 5fba424f429c44b84f81d328130d5b1bb0164616 [file] [log] [blame]
/*
* Druid - a distributed column store.
* Copyright (C) 2012 Metamarkets Group Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.metamx.druid.master;
import com.metamx.common.logger.Logger;
import com.metamx.druid.client.DataSegment;
import com.metamx.druid.client.DruidServer;
/**
*/
public class ServerHolder implements Comparable<ServerHolder>
{
private static final Logger log = new Logger(ServerHolder.class);
private final DruidServer server;
private final LoadQueuePeon peon;
public ServerHolder(
DruidServer server,
LoadQueuePeon peon
)
{
this.server = server;
this.peon = peon;
}
public DruidServer getServer()
{
return server;
}
public LoadQueuePeon getPeon()
{
return peon;
}
public Long getMaxSize()
{
return server.getMaxSize();
}
public Long getCurrServerSize()
{
return server.getCurrSize();
}
public Long getLoadQueueSize()
{
return peon.getLoadQueueSize();
}
public Long getSizeUsed()
{
return getCurrServerSize() + getLoadQueueSize();
}
public Double getPercentUsed()
{
return (100 * getSizeUsed().doubleValue()) / getMaxSize();
}
public Long getAvailableSize()
{
long maxSize = getMaxSize();
long sizeUsed = getSizeUsed();
long availableSize = maxSize - sizeUsed;
log.debug(
"Server[%s], MaxSize[%,d], CurrSize[%,d], QueueSize[%,d], SizeUsed[%,d], AvailableSize[%,d]",
server.getName(),
maxSize,
getCurrServerSize(),
getLoadQueueSize(),
sizeUsed,
availableSize
);
return availableSize;
}
public boolean isServingSegment(DataSegment segment)
{
return (server.getSegment(segment.getIdentifier()) != null);
}
public boolean isLoadingSegment(DataSegment segment)
{
return peon.getSegmentsToLoad().contains(segment);
}
@Override
public int compareTo(ServerHolder serverHolder)
{
return getAvailableSize().compareTo(serverHolder.getAvailableSize());
}
@Override
public boolean equals(Object o)
{
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ServerHolder that = (ServerHolder) o;
if (peon != null ? !peon.equals(that.peon) : that.peon != null) {
return false;
}
if (server != null ? !server.equals(that.server) : that.server != null) {
return false;
}
return true;
}
@Override
public int hashCode()
{
int result = server != null ? server.hashCode() : 0;
result = 31 * result + (peon != null ? peon.hashCode() : 0);
return result;
}
}