
org.globus.ftp.dc.StripeContextManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JGlobus-GridFTP Show documentation
Show all versions of JGlobus-GridFTP Show documentation
GridFTP is a high-performance, secure, reliable data transfer protocol optimized for high-bandwidth wide-area networks. The GridFTP protocol is based on FTP, the highly-popular Internet file transfer protocol. We have selected a set of protocol features and extensions defined already in IETF RFCs and added a few additional features to meet requirements from current data grid projects. This GRIDFTP libary and client is based on JAVA.
The newest version!
/*
* Copyright 1999-2006 University of Chicago
*
* 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 org.globus.ftp.dc;
import org.globus.ftp.extended.GridFTPServerFacade;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class StripeContextManager {
static Log logger =
LogFactory.getLog(StripeContextManager.class.getName());
protected int stripes;
protected StripeTransferContext contextList[];
protected int stripeQuitTokens = 0;
protected Object contextQuitToken = new Object();
public StripeContextManager(int stripes,
SocketPool pool,
GridFTPServerFacade facade) {
this.stripes = stripes;
contextList = new StripeTransferContext[stripes];
for (int i = 0; i < stripes; i++) {
contextList[i] = new StripeTransferContext(this);
contextList[i].setSocketPool(pool);
contextList[i].setTransferThreadManager(
facade.createTransferThreadManager());
}
}
/**
return number of stripes
**/
public int getStripes() {
return stripes;
}
public EBlockParallelTransferContext getStripeContext(int stripe) {
return contextList[stripe];
}
public Object getQuitToken() {
int i = 0;
while (i < stripes) {
logger.debug("examining stripe " + i);
if (contextList[i].getStripeQuitToken() != null) {
// obtained quit token from one stripe.
stripeQuitTokens ++;
logger.debug("obtained stripe quit token. Total = " + stripeQuitTokens + "; total needed = " + stripes);
}
i ++;
}
if (stripeQuitTokens == stripes) {
// obtained quit tokens from all stripes.
// ready to release the quit token. But make sure not to do it twice.
// This section only returns non-nul the first time it is entered.
if (contextQuitToken == null) {
logger.debug("not releasing the quit token.");
} else {
logger.debug("releasing the quit token.");
}
Object myToken = contextQuitToken;
contextQuitToken = null;
return myToken;
} else {
// not all stripes ready to quit
logger.debug("not releasing the quit token. ");
return null;
}
}
class StripeTransferContext extends EBlockParallelTransferContext {
StripeContextManager mgr;
public StripeTransferContext(StripeContextManager mgr) {
this.mgr = mgr;
}
/**
@return non-null if this stripe received or sent all the EODs
**/
public Object getStripeQuitToken() {
Object token = super.getQuitToken();
StripeContextManager.logger.debug(
(token != null) ? "stripe released the quit token" : "stripe did not release the quit token");
return token;
}
/**
@return non-null if all EODs in all stripes have been transferred.
**/
public Object getQuitToken() {
return mgr.getQuitToken();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy