Ir al contenido

ShardUtils

ShardUtils es un servicio Spring que proporciona métodos para gestionar la configuración de shards de OpenKM. Los shards permiten distribuir el repositorio de documentos entre varios discos físicos o directorios. Acceda a él mediante ContextWrapper.getContext().getBean(ShardUtils.class) o inyéctelo con @Autowired.

Descripción:

Método Valores de retorno Descripción
setCurrentShard(Long shardId) void Establece el shard activo con el ID de shard dado. Actualiza la configuración en la base de datos y la recarga en todo el clúster si el clustering está habilitado. Lanza RepositoryException si el ID de shard no está registrado.

Ejemplo:

package com.openkm;
import com.openkm.util.ContextWrapper;
import com.openkm.util.ShardUtils;
public class Test {
public static void main(String[] args) {
try {
ShardUtils shardUtils = ContextWrapper.getContext().getBean(ShardUtils.class);
shardUtils.setCurrentShard(1L);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
createShardDirs(Long shardId) void Crea los directorios de almacenamiento necesarios para el ID de shard dado en todos los tenants. Debe llamarse tras registrar un nuevo shard en la base de datos. Lanza RuntimeException si falla la creación del directorio.

Ejemplo:

package com.openkm;
import com.openkm.util.ContextWrapper;
import com.openkm.util.ShardUtils;
public class Test {
public static void main(String[] args) {
try {
ShardUtils shardUtils = ContextWrapper.getContext().getBean(ShardUtils.class);
shardUtils.createShardDirs(2L);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
changeNodeShard(String uuid, Long newShardId) void Mueve el contenido físico del nodo de repositorio dado al shard de destino. El comportamiento varía según el tipo de nodo:
- Document: mueve todos los ficheros de contenido de versión y el fichero de extracción de texto.
- Mail: mueve el contenido de correo en bruto, el fichero de extracción y todos los nodos hijos adjuntos de forma recursiva.
- Folder / Record: aplica el movimiento de forma recursiva a todos los nodos hijos.
Lanza RepositoryException si el shard de destino no está registrado. Lanza IOException si falla algún movimiento de fichero.
  • uuid: el UUID del documento, carpeta, correo o registro a mover.
  • newShardId: el ID del shard de destino.

Ejemplo:

package com.openkm;
import com.openkm.util.ContextWrapper;
import com.openkm.util.ShardUtils;
public class Test {
public static void main(String[] args) {
try {
ShardUtils shardUtils = ContextWrapper.getContext().getBean(ShardUtils.class);
shardUtils.changeNodeShard("e2391b01-ce10-42c7-94a9-b0d6b394048e", 2L);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores de retorno Descripción
getShardIds() List Devuelve la lista de todos los IDs de shard registrados.

Descripción:

Método Valores de retorno Descripción
getShardSize(Long shardId) Long Devuelve el tamaño total en bytes de todo el contenido almacenado en el shard dado, en todos los tenants. Lanza DatabaseException si no se pueden recuperar los datos del tenant.

Descripción:

Método Valores de retorno Descripción
getShardPaths(Long shardId) List Devuelve la lista de rutas absolutas del sistema de ficheros para el shard dado, una por tenant. Lanza DatabaseException si no se pueden recuperar los datos del tenant.

Descripción:

Método Valores de retorno Descripción
getShards() List Devuelve la lista de todas las entidades Shard registradas en la base de datos.

Descripción:

Método Valores de retorno Descripción
getShardFolders() List Devuelve la lista de directorios de shard encontrados bajo Config.REPOSITORY_HOME. Los directorios se identifican por el prefijo de shard configurado y se devuelven ordenados alfabéticamente.

Ejemplo:

package com.openkm;
import com.openkm.db.bean.Shard;
import com.openkm.util.ContextWrapper;
import com.openkm.util.ShardUtils;
import java.io.File;
import java.util.List;
public class Test {
public static void main(String[] args) {
try {
ShardUtils shardUtils = ContextWrapper.getContext().getBean(ShardUtils.class);
System.out.println("Shard IDs: " + shardUtils.getShardIds());
for (long id : shardUtils.getShardIds()) {
System.out.println("Shard " + id + " size: " + shardUtils.getShardSize(id) + " bytes");
System.out.println("Shard " + id + " paths: " + shardUtils.getShardPaths(id));
}
List<Shard> shards = shardUtils.getShards();
for (Shard shard : shards) {
System.out.println(shard);
}
List<File> folders = shardUtils.getShardFolders();
for (File f : folders) {
System.out.println(f.getPath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}