Merge branch 'ref/duplicate-handle' into 'master'

Ref/duplicate handle

See merge request sheepitrenderfarm/client!282
This commit is contained in:
Sheepit Renderfarm
2023-12-07 15:29:58 +00:00
6 changed files with 100 additions and 51 deletions

View File

@@ -41,25 +41,21 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.sheepit.client.Error.ServerCode; import com.sheepit.client.Error.ServerCode;
import com.sheepit.client.Error.Type; import com.sheepit.client.Error.Type;
import com.sheepit.client.datamodel.Chunk; import com.sheepit.client.datamodel.Chunk;
import com.sheepit.client.exception.SheepItException; import com.sheepit.client.exception.SheepItException;
import com.sheepit.client.exception.SheepItExceptionBadResponseFromServer;
import com.sheepit.client.exception.SheepItExceptionNoRendererAvailable; import com.sheepit.client.exception.SheepItExceptionNoRendererAvailable;
import com.sheepit.client.exception.SheepItExceptionNoRightToRender; import com.sheepit.client.exception.SheepItExceptionNoRightToRender;
import com.sheepit.client.exception.SheepItExceptionNoSession; import com.sheepit.client.exception.SheepItExceptionNoSession;
import com.sheepit.client.exception.SheepItExceptionNoSpaceLeftOnDevice; import com.sheepit.client.exception.SheepItExceptionNoSpaceLeftOnDevice;
import com.sheepit.client.exception.SheepItExceptionPathInvalid; import com.sheepit.client.exception.SheepItExceptionPathInvalid;
import com.sheepit.client.exception.SheepItExceptionNoWritePermission; import com.sheepit.client.exception.SheepItExceptionNoWritePermission;
import com.sheepit.client.exception.SheepItExceptionServerInMaintenance;
import com.sheepit.client.exception.SheepItExceptionServerOverloaded;
import com.sheepit.client.exception.SheepItExceptionSessionDisabled; import com.sheepit.client.exception.SheepItExceptionSessionDisabled;
import com.sheepit.client.exception.SheepItExceptionSessionDisabledDenoisingNotSupported; import com.sheepit.client.exception.SheepItExceptionSessionDisabledDenoisingNotSupported;
import com.sheepit.client.exception.SheepItServerDown; import com.sheepit.client.exception.SheepItExceptionWithRequiredWait;
import com.sheepit.client.hardware.cpu.CPU; import com.sheepit.client.hardware.cpu.CPU;
import com.sheepit.client.os.OS; import com.sheepit.client.os.OS;
@@ -267,11 +263,15 @@ import okhttp3.HttpUrl;
} }
} }
} }
catch (SheepItServerDown e) { catch (SheepItExceptionWithRequiredWait e) {
int wait = ThreadLocalRandom.current().nextInt(10, 30 + 1); // max is exclusive // exception example:
int time_sleep = 1000 * 60 * wait; // SheepItExceptionServerInMaintenance
this.gui.status(String.format("Cannot connect to the server. Please check your connectivity. Will try again at %tR", // SheepItExceptionServerOverloaded
new Date(new Date().getTime() + time_sleep))); // SheepItServerDown
// SheepItExceptionBadResponseFromServer
int time_sleep = e.getWaitDuration();
this.gui.status(String.format(e.getHumanText(), new Date(new Date().getTime() + time_sleep)));
if (this.activeSleep(time_sleep) == false) { if (this.activeSleep(time_sleep) == false) {
return -3; return -3;
@@ -279,43 +279,6 @@ import okhttp3.HttpUrl;
this.log.removeCheckPoint(step); this.log.removeCheckPoint(step);
continue; // go back to ask job continue; // go back to ask job
} }
catch (SheepItExceptionServerOverloaded e) {
int wait = ThreadLocalRandom.current().nextInt(10, 30 + 1); // max is exclusive
int time_sleep = 1000 * 60 * wait;
this.gui.status(String.format("The server is overloaded and cannot allocate a job. Will try again at %tR",
new Date(new Date().getTime() + time_sleep)));
if (this.activeSleep(time_sleep) == false) {
return -3;
}
this.log.removeCheckPoint(step);
continue; // go back to ask job
}
catch (SheepItExceptionServerInMaintenance e) {
int wait = ThreadLocalRandom.current().nextInt(20, 30 + 1); // max is exclusive
int time_sleep = 1000 * 60 * wait;
this.gui.status(String.format("The server is under maintenance and cannot allocate a job. Will try again at %tR",
new Date(new Date().getTime() + time_sleep)));
if (this.activeSleep(time_sleep) == false) {
return -3;
}
this.log.removeCheckPoint(step);
continue; // go back to ask job
}
catch (SheepItExceptionBadResponseFromServer e) {
int wait = ThreadLocalRandom.current().nextInt(15, 30 + 1); // max is exclusive
int time_sleep = 1000 * 60 * wait;
this.gui.status(String.format("Bad answer from the server. Will try again at %tR", new Date(new Date().getTime() + time_sleep)));
if (this.activeSleep(time_sleep) == false) {
return -3;
}
this.log.removeCheckPoint(step);
continue; // go back to ask job
}
catch (SheepItException e) { catch (SheepItException e) {
this.gui.error("Client::run exception requestJob (1) " + e.getMessage()); this.gui.error("Client::run exception requestJob (1) " + e.getMessage());
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();

View File

@@ -19,7 +19,9 @@
package com.sheepit.client.exception; package com.sheepit.client.exception;
public class SheepItExceptionBadResponseFromServer extends SheepItException { import java.util.concurrent.ThreadLocalRandom;
public class SheepItExceptionBadResponseFromServer extends SheepItExceptionWithRequiredWait {
public SheepItExceptionBadResponseFromServer() { public SheepItExceptionBadResponseFromServer() {
super(); super();
} }
@@ -27,4 +29,12 @@ public class SheepItExceptionBadResponseFromServer extends SheepItException {
public SheepItExceptionBadResponseFromServer(String message_) { public SheepItExceptionBadResponseFromServer(String message_) {
super(message_); super(message_);
} }
public String getHumanText() {
return "Bad answer from the server. Will try again at %tR";
}
public int getWaitDuration() {
return 1000 * 60 * ThreadLocalRandom.current().nextInt(15, 30 + 1);
}
} }

View File

@@ -19,7 +19,9 @@
package com.sheepit.client.exception; package com.sheepit.client.exception;
public class SheepItExceptionServerInMaintenance extends SheepItException { import java.util.concurrent.ThreadLocalRandom;
public class SheepItExceptionServerInMaintenance extends SheepItExceptionWithRequiredWait {
public SheepItExceptionServerInMaintenance() { public SheepItExceptionServerInMaintenance() {
super(); super();
} }
@@ -27,4 +29,12 @@ public class SheepItExceptionServerInMaintenance extends SheepItException {
public SheepItExceptionServerInMaintenance(String message_) { public SheepItExceptionServerInMaintenance(String message_) {
super(message_); super(message_);
} }
public String getHumanText() {
return "The server is under maintenance and cannot allocate a job. Will try again at %tR";
}
public int getWaitDuration() {
return 1000 * 60 * ThreadLocalRandom.current().nextInt(20, 30 + 1);
}
} }

View File

@@ -19,7 +19,9 @@
package com.sheepit.client.exception; package com.sheepit.client.exception;
public class SheepItExceptionServerOverloaded extends SheepItException { import java.util.concurrent.ThreadLocalRandom;
public class SheepItExceptionServerOverloaded extends SheepItExceptionWithRequiredWait {
public SheepItExceptionServerOverloaded() { public SheepItExceptionServerOverloaded() {
super(); super();
} }
@@ -27,4 +29,12 @@ public class SheepItExceptionServerOverloaded extends SheepItException {
public SheepItExceptionServerOverloaded(String message_) { public SheepItExceptionServerOverloaded(String message_) {
super(message_); super(message_);
} }
public String getHumanText() {
return "The server is overloaded and cannot allocate a job. Will try again at %tR";
}
public int getWaitDuration() {
return 1000 * 60 * ThreadLocalRandom.current().nextInt(10, 30 + 1);
}
} }

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2023 Laurent CLOUET
* Author Laurent CLOUET <laurent.clouet@nopnop.net>
*
* 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; version 2
* of the License.
*
* 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.sheepit.client.exception;
/**
* When a request to the server generate this exception.
* The client must wait a bit before retrying.
*/
public class SheepItExceptionWithRequiredWait extends SheepItException {
public SheepItExceptionWithRequiredWait() {
super();
}
public SheepItExceptionWithRequiredWait(String message_) {
super(message_);
}
public String getHumanText() {
return "Please wait a bit";
}
/** how much time, it needs to wait
*
* @return duration in ms
*/
public int getWaitDuration() {
return 0;
}
}

View File

@@ -19,10 +19,12 @@
package com.sheepit.client.exception; package com.sheepit.client.exception;
import java.util.concurrent.ThreadLocalRandom;
/** /**
* Server down (server side error) or unreachable (client side error) * Server down (server side error) or unreachable (client side error)
*/ */
public class SheepItServerDown extends SheepItException { public class SheepItServerDown extends SheepItExceptionWithRequiredWait {
public SheepItServerDown() { public SheepItServerDown() {
super(); super();
} }
@@ -30,4 +32,12 @@ public class SheepItServerDown extends SheepItException {
public SheepItServerDown(String message_) { public SheepItServerDown(String message_) {
super(message_); super(message_);
} }
public String getHumanText() {
return "Cannot connect to the server. Please check your connectivity. Will try again at %tR";
}
public int getWaitDuration() {
return 1000 * 60 * ThreadLocalRandom.current().nextInt(10, 30 + 1);
}
} }