/*
* FileRequestStorage.java
*
* Created on June 17, 2004, 3:18 PM
*/
package org.dcache.srm.request.sql;
import org.springframework.dao.DataAccessException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.ScheduledExecutorService;
import org.dcache.srm.SRMUser;
import org.dcache.srm.SRMUserPersistenceManager;
import org.dcache.srm.request.Job;
import org.dcache.srm.request.Request;
import org.dcache.srm.request.ReserveSpaceRequest;
import org.dcache.srm.util.Configuration;
/**
*
* @author timur
*/
public class ReserveSpaceRequestStorage extends DatabaseRequestStorage<ReserveSpaceRequest> {
public static final String TABLE_NAME ="reservespacerequests";
private static final String UPDATE_PREFIX = "UPDATE " + TABLE_NAME + " SET "+
"NEXTJOBID=?, " +
"CREATIONTIME=?, " +
"LIFETIME=?, " +
"STATE=?, " +
"ERRORMESSAGE=?, " +//5
"SCHEDULERID=?, " +
"SCHEDULERTIMESTAMP=?," +
"NUMOFRETR=?," +
"LASTSTATETRANSITIONTIME=? ";
private static final String INSERT_SQL = "INSERT INTO "+ TABLE_NAME+ "( " +
"ID ,"+
"NEXTJOBID ,"+
"CREATIONTIME ,"+
"LIFETIME ,"+
"STATE ,"+ //5
"ERRORMESSAGE ,"+
"SCHEDULERID ,"+
"SCHEDULERTIMESTAMP ,"+
"NUMOFRETR ,"+
"LASTSTATETRANSITIONTIME,"+ // 10
//Database Request Storage
"RETRYDELTATIME , "+
"SHOULDUPDATERETRYDELTATIME ,"+
"DESCRIPTION ,"+
"CLIENTHOST ,"+ // 15
"STATUSCODE ,"+
"USERID ,"+
// Reserve Space Request
"SIZEINBYTES, "+
"RESERVATIONLIFETIME, "+
"SPACETOKEN, "+
"RETENTIONPOLICY, "+
"ACCESSLATENCY ) " +
"VALUES (?,?,?,?,?,?,?,?,?,?,?," +//Job
"?,?,?,?,?,?,?," +//Request
"?,?,?)";
@Override
public PreparedStatement getCreateStatement(Connection connection, Job job) throws SQLException {
ReserveSpaceRequest rsr = (ReserveSpaceRequest)job;
String retentionPolicyValue=null;
if(rsr.getRetentionPolicy() != null) {
retentionPolicyValue = rsr.getRetentionPolicy().getValue();
}
String accessLatencyValue=null;
if(rsr.getAccessLatency() != null) {
accessLatencyValue = rsr.getAccessLatency().getValue();
}
return getPreparedStatement(connection,
INSERT_SQL,
rsr.getId(),
rsr.getNextJobId(),
rsr.getCreationTime(),
rsr.getLifetime(),
rsr.getState().getStateId(),//5
rsr.latestHistoryEvent(),
rsr.getSchedulerId(),
rsr.getSchedulerTimeStamp(),
0, // num of retries
rsr.getLastStateTransitionTime(), // 10
//Database Request Storage
rsr.getRetryDeltaTime(),
rsr.isShould_updateretryDeltaTime()?0:1,
rsr.getDescription(),
rsr.getClient_host(),
rsr.getStatusCodeString(),
rsr.getUser().getId(),
rsr.getSizeInBytes(),
rsr.getSpaceReservationLifetime(),
rsr.getSpaceToken(),
retentionPolicyValue,
accessLatencyValue);
}
private static final String UPDATE_REQUEST_SQL =
UPDATE_PREFIX + ", RETRYDELTATIME=?," +
" SHOULDUPDATERETRYDELTATIME=?," +
" DESCRIPTION=?," +
" CLIENTHOST=?," +
" STATUSCODE=?," +
" USERID=?," +
// Reserve Space Request
" SIZEINBYTES=?, "+
" RESERVATIONLIFETIME=?, "+
" SPACETOKEN=?, "+
" RETENTIONPOLICY=?,"+
" ACCESSLATENCY=?" +
" WHERE ID=?";
@Override
public PreparedStatement getUpdateStatement(Connection connection,
Job job) throws SQLException {
ReserveSpaceRequest rsr = (ReserveSpaceRequest)job;
String retentionPolicyValue=null;
if(rsr.getRetentionPolicy() != null) {
retentionPolicyValue = rsr.getRetentionPolicy().getValue();
}
String accessLatencyValue=null;
if(rsr.getAccessLatency() != null) {
accessLatencyValue = rsr.getAccessLatency().getValue();
}
return getPreparedStatement(connection,
UPDATE_REQUEST_SQL,
rsr.getNextJobId(),
rsr.getCreationTime(),
rsr.getLifetime(),
rsr.getState().getStateId(),
rsr.latestHistoryEvent(),//5
rsr.getSchedulerId(),
rsr.getSchedulerTimeStamp(),
0, // num of retries
rsr.getLastStateTransitionTime(),
//Database Request Storage
rsr.getRetryDeltaTime(), // 10
rsr.isShould_updateretryDeltaTime()?0:1,
rsr.getDescription(),
rsr.getClient_host(),
rsr.getStatusCodeString(),
rsr.getUser().getId(),
rsr.getSizeInBytes(),
rsr.getSpaceReservationLifetime(),
rsr.getSpaceToken(),
retentionPolicyValue,
accessLatencyValue,
rsr.getId());
}
/** Creates a new instance of FileRequestStorage */
public ReserveSpaceRequestStorage(Configuration.DatabaseParameters configuration,
ScheduledExecutorService executor, SRMUserPersistenceManager manager)
throws DataAccessException
{
super(configuration, executor, manager);
}
@Override
protected ReserveSpaceRequest getRequest(
Connection _con,
long ID,
Long NEXTJOBID,
long CREATIONTIME,
long LIFETIME,
int STATE,
SRMUser user,
String SCHEDULERID,
long SCHEDULER_TIMESTAMP,
int NUMOFRETR,
long LASTSTATETRANSITIONTIME,
Long CREDENTIALID,
int RETRYDELTATIME,
boolean SHOULDUPDATERETRYDELTATIME,
String DESCRIPTION,
String CLIENTHOST,
String STATUSCODE,
ResultSet set,
int next_index) throws SQLException {
Job.JobHistory[] jobHistoryArray =
getJobHistory(ID,_con);
long SIZEINBYTES = set.getLong(next_index++);
long RESERVATIONLIFETIME = set.getLong(next_index++);
String SPACETOKEN = set.getString(next_index++);
String RETENTIONPOLICY = set.getString(next_index++);
String ACCESSLATENCY = set.getString(next_index++);
return new ReserveSpaceRequest(
ID,
NEXTJOBID ,
CREATIONTIME,
LIFETIME,
STATE,
user,
SCHEDULERID,
SCHEDULER_TIMESTAMP,
NUMOFRETR,
LASTSTATETRANSITIONTIME,
jobHistoryArray,
RETRYDELTATIME,
SIZEINBYTES,
RESERVATIONLIFETIME,
SPACETOKEN,
RETENTIONPOLICY,
ACCESSLATENCY,
DESCRIPTION,
CLIENTHOST,
STATUSCODE);
}
@Override
public String getTableName() {
return TABLE_NAME;
}
public void getUpdateAssignements(Request request,StringBuffer sb) {
if(request == null || !(request instanceof ReserveSpaceRequest)) {
throw new IllegalArgumentException("Request is not ReserveSpaceRequest" );
}
ReserveSpaceRequest r = (ReserveSpaceRequest)request;
/*
*additional fields:
","+
","+
"CREDENTIALID "+ longType+
","+
"SIZEINBYTES "+ longType+
","+
"RESERVATIONLIFETIME "+ longType+
","+
"SPACETOKEN "+ stringType+
","+
"RETENTIONPOLICY "+ stringType+
","+
"ACCESSLATENCY "+ stringType+
","+
"DESCRIPTION "+ stringType;
*/
sb.append(", SIZEINBYTES = ").append( r.getSizeInBytes());
sb.append(", RESERVATIONLIFETIME = ").append( r.getSpaceReservationLifetime());
String spaceToken = r.getSpaceToken();
if(spaceToken ==null){
sb.append(", SPACETOKEN =NULL");
} else {
sb.append(", SPACETOKEN = \'").append( spaceToken).append('\'');
}
if(r.getRetentionPolicy() ==null) {
sb.append(", RETENTIONPOLICY =NULL");
} else {
sb.append(", RETENTIONPOLICY = \'").append( r.getRetentionPolicy().getValue()).append('\'');
}
if(r.getAccessLatency() ==null) {
sb.append(", ACCESSLATENCY =NULL");
} else {
sb.append(", ACCESSLATENCY = \'").append( r.getAccessLatency().getValue()).append('\'');
}
}
}