Control de versiones de interfaz de grano
En este artículo, aprenderá a usar el control de versiones de interfaz de grano. El control de versiones del estado de grano está fuera del ámbito.
Información general
En un clúster determinado, los silos pueden admitir diferentes versiones de un tipo de grano.
En este ejemplo, el cliente y silo{1,2,3} se compilaron con la versión 1 A
de la interfaz de grano. Silo 4 se compiló con la versión 2 A
.
Limitaciones
- Sin control de versiones en el trabajo sin estado
- Las interfaces de streaming no tienen versiones
Permitir control de versiones
Si el atributo de versión no se agrega explícitamente a la interfaz de grano, los granos tienen una versión predeterminada de 0. Puede usar VersionAttribute en la interfaz de grano para controlar la versión del grano:
[Version(X)]
public interface IVersionUpgradeTestGrain : IGrainWithIntegerKey
{
}
Donde X
es el número de versión de la interfaz de grano, que suele aumentar de forma monotónica.
Compatibilidad y colocación de versiones de grano
Cuando llega una llamada desde un grano con versiones en un clúster:
- Si no existe ninguna activación, se creará una activación compatible
- Si existe una activación:
- Si el actual no es compatible, se desactivará y se creará uno compatible nuevo (consulte la estrategia del selector de versiones)
- Si el actual es compatible (consulte granos compatibles), la llamada se controlará normalmente.
De manera predeterminada:
- Se supone que todos los granos con versiones son compatibles con versiones anteriores (consulte las directrices de compatibilidad con versiones anteriores y los granos compatibles). Esto significa que un grano v1 puede realizar llamadas a un grano v2, pero un grano v2 no puede llamar a una versión 1.
- Cuando existen varias versiones en el clúster, la nueva activación se colocará aleatoriamente en un silo compatible.
Puede cambiar este comportamiento predeterminado con GrainVersioningOptions:
var silo = new HostBuilder()
.UseOrleans(c =>
{
c.Configure<GrainVersioningOptions>(options =>
{
options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
});
});
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de