Added models and services for users, nodes, buckets

This commit is contained in:
Andrey Terentev 2023-11-11 14:07:34 +07:00
parent a9c157c00b
commit 6b841e80c9
8 changed files with 118 additions and 0 deletions

View 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;
}
}

View File

@ -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) {}

View File

@ -0,0 +1,5 @@
package ru.dragonestia.loadbalancer.model;
import lombok.NonNull;
public record User(@NonNull String identifier) {}

View File

@ -0,0 +1,7 @@
package ru.dragonestia.loadbalancer.model.type;
public enum LoadBalancingMethod {
SEQUENTIAL_FILLING,
ROUND_ROBIN,
LEAST_PICKED,
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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();
}

View File

@ -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);
}