Added models and services for users, nodes, buckets
This commit is contained in:
parent
a9c157c00b
commit
6b841e80c9
26
src/main/java/ru/dragonestia/loadbalancer/model/Bucket.java
Normal file
26
src/main/java/ru/dragonestia/loadbalancer/model/Bucket.java
Normal file
@ -0,0 +1,26 @@
|
||||
package ru.dragonestia.loadbalancer.model;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.dragonestia.loadbalancer.model.type.SlotLimit;
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public class Bucket {
|
||||
|
||||
private final String identifier;
|
||||
private final String nodeIdentifier;
|
||||
private final SlotLimit slots;
|
||||
private final String payload;
|
||||
private boolean locked = false;
|
||||
|
||||
public void setLocked(boolean value) {
|
||||
locked = value;
|
||||
}
|
||||
|
||||
public boolean isAvailable(int usedSlots, int requiredSlots) {
|
||||
if (locked) return false;
|
||||
if (slots.isUnlimited()) return true;
|
||||
return slots.getSlots() >= usedSlots + requiredSlots;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package ru.dragonestia.loadbalancer.model;
|
||||
|
||||
import lombok.NonNull;
|
||||
import ru.dragonestia.loadbalancer.model.type.LoadBalancingMethod;
|
||||
|
||||
public record Node(@NonNull String identifier, @NonNull LoadBalancingMethod method) {}
|
||||
@ -0,0 +1,5 @@
|
||||
package ru.dragonestia.loadbalancer.model;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
public record User(@NonNull String identifier) {}
|
||||
@ -0,0 +1,7 @@
|
||||
package ru.dragonestia.loadbalancer.model.type;
|
||||
|
||||
public enum LoadBalancingMethod {
|
||||
SEQUENTIAL_FILLING,
|
||||
ROUND_ROBIN,
|
||||
LEAST_PICKED,
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package ru.dragonestia.loadbalancer.model.type;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class SlotLimit {
|
||||
|
||||
private final static int UNLIMITED_VALUE = -1;
|
||||
|
||||
private final int slots;
|
||||
|
||||
private SlotLimit(int slots) {
|
||||
this.slots = slots;
|
||||
}
|
||||
|
||||
public static SlotLimit unlimited() {
|
||||
return new SlotLimit(UNLIMITED_VALUE);
|
||||
}
|
||||
|
||||
public static SlotLimit of(int slots) {
|
||||
return new SlotLimit(slots);
|
||||
}
|
||||
|
||||
public boolean isUnlimited() {
|
||||
return slots == UNLIMITED_VALUE;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package ru.dragonestia.loadbalancer.service;
|
||||
|
||||
import ru.dragonestia.loadbalancer.model.Bucket;
|
||||
import ru.dragonestia.loadbalancer.model.Node;
|
||||
import ru.dragonestia.loadbalancer.model.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BucketService {
|
||||
|
||||
void createBucket(Node node, Bucket lobby);
|
||||
|
||||
void removeBucket(Node node, Bucket lobby);
|
||||
|
||||
List<Bucket> allBuckets(Node node);
|
||||
|
||||
int countAvailableBuckets(Node node);
|
||||
|
||||
Bucket pickAvailableBucket(Node node, List<User> users);
|
||||
|
||||
void freeBucket(Node node, List<User> users);
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package ru.dragonestia.loadbalancer.service;
|
||||
|
||||
import ru.dragonestia.loadbalancer.model.Node;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface NodeService {
|
||||
|
||||
void createNode(Node node);
|
||||
|
||||
void removeNode(Node node);
|
||||
|
||||
List<Node> allNodes();
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package ru.dragonestia.loadbalancer.service;
|
||||
|
||||
import ru.dragonestia.loadbalancer.model.Bucket;
|
||||
import ru.dragonestia.loadbalancer.model.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
List<Bucket> getUserBuckets(User user);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user