对分片操作符注释进行修改和完善,针对定时分片时间的补偿,防止提前创建表导致重启后内存中可能不会存在分片信息
This commit is contained in:
parent
7b8f163893
commit
9b1af63ada
|
@ -26,6 +26,5 @@ namespace Sample.SqlServer.Shardings
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace ShardingCore.Core.Collections
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public IReadOnlyList<T> Data => _list;
|
public ImmutableList<T> Data => _list;
|
||||||
|
|
||||||
public void Append(T value)
|
public void Append(T value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace ShardingCore.Jobs.Abstaractions
|
||||||
public interface IJob
|
public interface IJob
|
||||||
{
|
{
|
||||||
string JobName { get; }
|
string JobName { get; }
|
||||||
string[] GetCronExpressions();
|
string[] GetJobCronExpressions();
|
||||||
Task ExecuteAsync();
|
Task ExecuteAsync();
|
||||||
bool AppendJob();
|
bool AppendJob();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,12 @@ namespace ShardingCore.Jobs.Impls
|
||||||
*/
|
*/
|
||||||
public sealed class JobEntry
|
public sealed class JobEntry
|
||||||
{
|
{
|
||||||
|
public JobEntry(IJob job)
|
||||||
|
{
|
||||||
|
JobInstance = job;
|
||||||
|
JobName = job.JobName;
|
||||||
|
JobCronExpressions = job.GetJobCronExpressions();
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 保证多线程只有一个清理操作
|
/// 保证多线程只有一个清理操作
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -32,7 +38,7 @@ namespace ShardingCore.Jobs.Impls
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// job实例
|
/// job实例
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IJob JobInstance { get; set; }
|
public IJob JobInstance { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否跳过如果正在运行
|
/// 是否跳过如果正在运行
|
||||||
|
@ -43,6 +49,10 @@ namespace ShardingCore.Jobs.Impls
|
||||||
/// 下次运行时间
|
/// 下次运行时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? NextUtcTime { get; set; }
|
public DateTime? NextUtcTime { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 任务的cron表达式
|
||||||
|
/// </summary>
|
||||||
|
public string[] JobCronExpressions { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否正在运行
|
/// 是否正在运行
|
||||||
|
@ -69,7 +79,7 @@ namespace ShardingCore.Jobs.Impls
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void CalcNextUtcTime()
|
public void CalcNextUtcTime()
|
||||||
{
|
{
|
||||||
this.NextUtcTime= JobInstance.GetCronExpressions().Select(cron => new CronExpression(cron).GetTimeAfter(DateTime.UtcNow)).Min();
|
this.NextUtcTime= JobCronExpressions.Select(cron => new CronExpression(cron).GetTimeAfter(DateTime.UtcNow)).Min();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,11 +17,7 @@ namespace ShardingCore.Jobs
|
||||||
public static JobEntry Create(IJob job)
|
public static JobEntry Create(IJob job)
|
||||||
{
|
{
|
||||||
|
|
||||||
var jobEntry = new JobEntry()
|
var jobEntry = new JobEntry(job);
|
||||||
{
|
|
||||||
JobInstance = job,
|
|
||||||
JobName = job.JobName,
|
|
||||||
};
|
|
||||||
jobEntry.CalcNextUtcTime();
|
jobEntry.CalcNextUtcTime();
|
||||||
return jobEntry;
|
return jobEntry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,12 +22,17 @@ using ShardingCore.TableCreator;
|
||||||
|
|
||||||
namespace ShardingCore.VirtualRoutes.Abstractions
|
namespace ShardingCore.VirtualRoutes.Abstractions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 分片字段追加
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TEntity"></typeparam>
|
||||||
|
/// <typeparam name="TKey"></typeparam>
|
||||||
[ExcludeFromCodeCoverage]
|
[ExcludeFromCodeCoverage]
|
||||||
public abstract class
|
public abstract class
|
||||||
AbstractShardingAutoCreateOperatorVirtualTableRoute<TEntity, TKey> :
|
AbstractShardingAutoCreateOperatorVirtualTableRoute<TEntity, TKey> :
|
||||||
AbstractShardingOperatorVirtualTableRoute<TEntity, TKey>, ITailAppendable, IJob where TEntity : class
|
AbstractShardingOperatorVirtualTableRoute<TEntity, TKey>, ITailAppendable, IJob where TEntity : class
|
||||||
{
|
{
|
||||||
private static readonly object APPEND_LOCK = new object();
|
private readonly object APPEND_LOCK = new object();
|
||||||
|
|
||||||
|
|
||||||
private readonly SafeReadAppendList<string> _tails = new SafeReadAppendList<string>();
|
private readonly SafeReadAppendList<string> _tails = new SafeReadAppendList<string>();
|
||||||
|
@ -85,6 +90,17 @@ namespace ShardingCore.VirtualRoutes.Abstractions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual int IncrementMinutes => 10;
|
public virtual int IncrementMinutes => 10;
|
||||||
|
|
||||||
|
public string[] GetJobCronExpressions()
|
||||||
|
{
|
||||||
|
var cronExpressions = GetCronExpressions();
|
||||||
|
var compensateCronExpressions = GetCompensateCronExpressions();
|
||||||
|
return cronExpressions.Concat(compensateCronExpressions).Distinct().ToArray();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 补偿cron防止提前创建后没有添加tail到内存中从而无法识别
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public abstract string[] GetCompensateCronExpressions();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 重写改方法后请一起重写IncrementMinutes值,比如你按月分表但是你设置cron表达式为月中的时候建表,
|
/// 重写改方法后请一起重写IncrementMinutes值,比如你按月分表但是你设置cron表达式为月中的时候建表,
|
||||||
/// 那么会在月中的时候 <code>DateTime.Now.AddMinutes(IncrementMinutes);</code>来获取tail会导致还是当月的所以不会建表
|
/// 那么会在月中的时候 <code>DateTime.Now.AddMinutes(IncrementMinutes);</code>来获取tail会导致还是当月的所以不会建表
|
||||||
|
@ -99,6 +115,7 @@ namespace ShardingCore.VirtualRoutes.Abstractions
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected abstract string ConvertNowToTail(DateTime now);
|
protected abstract string ConvertNowToTail(DateTime now);
|
||||||
|
|
||||||
|
|
||||||
public virtual Task ExecuteAsync()
|
public virtual Task ExecuteAsync()
|
||||||
{
|
{
|
||||||
var logger=RouteShardingProvider
|
var logger=RouteShardingProvider
|
||||||
|
|
|
@ -85,5 +85,10 @@ namespace ShardingCore.VirtualRoutes.Days
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 * * ?" };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -80,5 +80,9 @@ namespace ShardingCore.VirtualRoutes.Days
|
||||||
"0 1 0 * * ?",
|
"0 1 0 * * ?",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 * * ?" };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -76,6 +76,10 @@ namespace ShardingCore.VirtualRoutes.Months
|
||||||
"0 1 0 1 * ?",
|
"0 1 0 1 * ?",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 1 * ?" };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -79,5 +79,9 @@ namespace ShardingCore.VirtualRoutes.Months
|
||||||
"0 1 0 1 * ?",
|
"0 1 0 1 * ?",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 1 * ?" };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -78,6 +78,10 @@ namespace ShardingCore.VirtualRoutes.Weeks
|
||||||
"0 1 0 ? * 2",
|
"0 1 0 ? * 2",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 ? * 2" };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -81,5 +81,9 @@ namespace ShardingCore.VirtualRoutes.Weeks
|
||||||
"0 1 0 ? * 2",
|
"0 1 0 ? * 2",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 ? * 2" };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -78,5 +78,9 @@ namespace ShardingCore.VirtualRoutes.Years
|
||||||
"0 1 0 1 1 ?",
|
"0 1 0 1 1 ?",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 1 1 ?" };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -102,5 +102,9 @@ namespace ShardingCore.VirtualRoutes.Years
|
||||||
"0 1 0 1 1 ?",
|
"0 1 0 1 1 ?",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public override string[] GetCompensateCronExpressions()
|
||||||
|
{
|
||||||
|
return new[] { "0 0 0 1 1 ?" };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue