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