Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class LifecycleBean {

@Inject
ObjectSchemaUpgradeService objectSchemaUpgradeService;

private ZonedDateTime startDateTime;

public static void logConfig(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import io.quarkus.runtime.StartupEvent;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.inject.Any;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
import tech.ebp.oqm.core.api.service.mongo.InventoryItemService;
import tech.ebp.oqm.core.api.service.mongo.MongoDbAwareService;
import tech.ebp.oqm.core.api.service.mongo.MongoService;
import tech.ebp.oqm.core.api.service.serviceState.InstanceMutexService;
import tech.ebp.oqm.core.api.service.serviceState.db.DbCacheEntry;
import tech.ebp.oqm.core.api.service.serviceState.db.OqmDatabaseService;
Expand All @@ -14,45 +18,54 @@
@Slf4j
public class MongoDbInit {

@Inject
InventoryItemService inventoryItemService;

@Inject
OqmDatabaseService oqmDatabaseService;

@Inject
InstanceMutexService instanceMutexService;


/**
* This was introduced in version 4.4.8 ~ May 15, 2026
*
* It was intended to ensure that all inventory items created before an upgrade have a mutex registered for them.
*
* This can be removed once all inventory items have mutexes.
*/
private void ensureItemMutexesExist() {
log.info("Ensuring inventory item mutexes exist.");

for(DbCacheEntry curDb : this.oqmDatabaseService.getDatabases()) {
log.info("Ensuring inventory item mutexes exist for database: {}", curDb.getDbName());
this.inventoryItemService.iterator(curDb.getDbId().toHexString()).forEachRemaining((item) -> {
this.instanceMutexService.register(
this.instanceMutexService.getMutexIdFor(curDb.getDbId().toHexString(), item)
);
});
log.info("DONE Ensuring inventory item mutexes exist for database: {}", curDb.getDbName());
}

log.info("DONE Ensuring inventory item mutexes exist.");
}


void onStart(
@Observes
StartupEvent ev
Comment thread
GregJohnStewart marked this conversation as resolved.
) {
this.ensureItemMutexesExist();

}
@Inject
InventoryItemService inventoryItemService;

@Inject
OqmDatabaseService oqmDatabaseService;

@Inject
InstanceMutexService instanceMutexService;

@Inject
@Any
Instance<MongoService<?, ?, ?>> mongoServices;

/**
* This was introduced in version 4.4.8 ~ May 15, 2026
* <p>
* It was intended to ensure that all inventory items created before an upgrade have a mutex registered for them.
* <p>
* This can be removed once all inventory items have mutexes.
*/
private void ensureItemMutexesExist() {
log.info("Ensuring inventory item mutexes exist.");

for (DbCacheEntry curDb : this.oqmDatabaseService.getDatabases()) {
log.info("Ensuring inventory item mutexes exist for database: {}", curDb.getDbName());
this.inventoryItemService.iterator(curDb.getDbId().toHexString()).forEachRemaining((item) -> {
this.instanceMutexService.register(
this.instanceMutexService.getMutexIdFor(curDb.getDbId().toHexString(), item)
);
});
log.info("DONE Ensuring inventory item mutexes exist for database: {}", curDb.getDbName());
}

log.info("DONE Ensuring inventory item mutexes exist.");
}


void onStart(
@Observes
StartupEvent ev
) {
this.initDb();
}

void initDb() {
for(MongoService<?, ?, ?> service : this.mongoServices){
service.initDb();
}
this.ensureItemMutexesExist();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mongodb.client.ClientSession;
import com.mongodb.client.FindIterable;
import com.mongodb.client.model.Indexes;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
Expand All @@ -13,6 +14,7 @@
import lombok.Getter;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import org.jetbrains.annotations.NotNull;
import tech.ebp.oqm.core.api.config.CoreApiInteractingEntity;
Expand Down Expand Up @@ -447,4 +449,11 @@ public void runPostUpgrade(String oqmDbIdOrName, ClientSession cs, CollectionUpg
}
}
}

@Override
public List<Bson> getDbIndexes() {
return List.of(
Indexes.ascending("name")
);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package tech.ebp.oqm.core.api.service.mongo;

import com.mongodb.client.ClientSession;
import com.mongodb.client.model.Indexes;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.json.JsonObject;
import lombok.extern.slf4j.Slf4j;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import tech.ebp.oqm.core.api.model.collectionStats.CollectionStats;
import tech.ebp.oqm.core.api.model.object.history.events.itemList.ItemListActionAddEvent;
Expand All @@ -12,6 +14,8 @@
import tech.ebp.oqm.core.api.model.object.itemList.ItemListAction;
import tech.ebp.oqm.core.api.model.rest.search.ItemListSearch;

import java.util.List;

@Slf4j
@ApplicationScoped
public class ItemListService extends MongoHistoriedObjectService<ItemList, ItemListSearch, CollectionStats> {
Comment thread
axgiri marked this conversation as resolved.
Expand Down Expand Up @@ -62,4 +66,11 @@ public ItemList updateAction(String oqmDbIdOrName, ObjectId listId, ObjectId ite
public int getCurrentSchemaVersion() {
return ItemList.CUR_SCHEMA_VERSION;
}

@Override
public List<Bson> getDbIndexes() {
return List.of(
Indexes.ascending("name")
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.IndexOptions;
import jakarta.inject.Inject;
import jakarta.validation.*;
import lombok.Getter;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import tech.ebp.oqm.core.api.model.collectionStats.CollectionStats;
import tech.ebp.oqm.core.api.model.object.FileAttachmentContaining;
Expand All @@ -25,6 +27,7 @@
import tech.ebp.oqm.core.api.service.serviceState.db.OqmDatabaseService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
Expand Down Expand Up @@ -172,5 +175,18 @@ protected <X extends CollectionStats.CollectionStatsBuilder<?,?>> X addBaseStats

public void runPostUpgrade(String oqmDbIdOrName, ClientSession cs, CollectionUpgradeResult upgradeResult) {
//nothing to do.
};
}

@Override
public List<Bson> getDbIndexes() {
return List.of();
}

public void initDbByIdOrName(String oqmDbIdOrName) {
setupIndexes(getDocumentCollection(oqmDbIdOrName), this.getDbIndexes());
}

public void initDb(){
oqmDatabaseService.getDatabases().forEach(db -> this.initDbByIdOrName(db.getDbName()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,23 @@
import com.mongodb.WriteConcern;
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.IndexOptions;
import jakarta.inject.Inject;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.bson.conversions.Bson;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import tech.ebp.oqm.core.api.model.collectionStats.CollectionStats;
import tech.ebp.oqm.core.api.model.object.MainObject;
import tech.ebp.oqm.core.api.model.rest.search.SearchObject;

import java.util.List;

/**
* This is the main mongo class. It specifies top level, commonly shared utilities.
* @param <T> The type of object this mongo service is dealing with
Expand Down Expand Up @@ -104,4 +109,15 @@ public MongoService(Class<T> clazz) {
}

public abstract int getCurrentSchemaVersion();

public abstract List<Bson> getDbIndexes();

public abstract void initDb();

protected static void setupIndexes(MongoCollection<?> collection, List<Bson> indexes) {
IndexOptions options = new IndexOptions().background(true);
for (Bson index : indexes) {
collection.createIndex(index, options);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tech.ebp.oqm.core.api.service.mongo;

import com.mongodb.client.ClientSession;
import com.mongodb.client.model.Indexes;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
Expand Down Expand Up @@ -191,4 +192,11 @@ public Map<String, Set<ObjectId>> getReferencingObjects(String oqmDbIdOrName, Cl
public int getCurrentSchemaVersion() {
return StorageBlock.CUR_SCHEMA_VERSION;
}

@Override
public List<Bson> getDbIndexes() {
return List.of(
Indexes.ascending("name")
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.IndexOptions;
import com.mongodb.client.model.Sorts;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -202,5 +203,15 @@ public CollectionStats collectionStats() {

public void runPostUpgrade(ClientSession cs, CollectionUpgradeResult upgradeResult) {
//nothing to do.
};
}

@Override
public List<Bson> getDbIndexes() {
return List.of();
}

@Override
public void initDb() {
setupIndexes(getDocumentCollection(), this.getDbIndexes());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Indexes;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.validation.Valid;
Expand All @@ -11,6 +12,7 @@
import lombok.NonNull;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;
Expand Down Expand Up @@ -186,4 +188,11 @@ public boolean ensureDatabase(String dbName) {
public int getCurrentSchemaVersion() {
return OqmMongoDatabase.CUR_SCHEMA_VERSION;
}

@Override
public List<Bson> getDbIndexes() {
return List.of(
Indexes.ascending("name")
);
}
}
Loading