(), OnlineReplica), 并且发送LeaderAndIsrRequest到各broker nodes: handleStateChanges(controllerContext.allLiveReplicas currentAssignedReplicas.contains(replicaId)) controllerContext.partitionReplicaAssignment.put -- curBrokerIds controllerContext.liveBrokers = curBrokerIds.map(zkUtils.getBrokerInfo (_)).filter(_.isDefined).map(_.get) newBrokers.foreach(controllerContext.controllerChannelManager.addBroker (_)) deadBrokerIds.foreach(controllerContext.controllerChannelManager.removeBroker(_))
controllerContext) { if (! controllerContext) { if (controllerContext == null) { (controllerContext); if (jsonData == null) { return null; controllerContext, ModelBindingContext bindingContext, , bindingContext, propertyDescriptor, newPropertyValue); OnPropertyValidated(controllerContext
Action方法的执行可以直接通过调用方法Execute来完成,该方法的两个参数controllerContext和parameters分别代表Action方法执行所在的Controller上下文和传入的参数 如下面的代码片断所示,ActionSelector委托具有唯一的类型为ControllerContext的参数,布尔类型的返回值表示目标Action方法是否与指定的Controller上下文相匹配。 1: public delegate bool ActionSelector(ControllerContext controllerContext); ActionDescriptor的GetFilters controllerContext, IDictionary<string, object> parameters, AsyncCallback callback, object state); controllerContext, MethodInfo methodInfo); 5: } 在ASP.NET MVC应用编程接口中定义了如下四个基于HTTP方法(GET、POST、PUT和
controllerContext, string viewPath); 6: protected BuildManagerCompiledView(ControllerContext (ControllerContext controllerContext, string viewPath, IViewPageActivator viewPageActivator, IDependencyResolver 1: public interface IViewPageActivator 2: { 3: object Create(ControllerContext controllerContext = viewType) 9: { 10: //controllerContext字段表示在构造函数中指定的ControllerContext 11: ); 4: public RazorView(ControllerContext controllerContext, string viewPath, string layoutPath
1: public interface IActionInvoker 2: { 3: void InvokeAction(ControllerContext controllerContext controllerContext, string actionName) 9: { 10: MethodInfo method = controllerContext.Controller.GetType 该接口具有唯一的BindModel根据ControllerContext和Model名称(在这里实际上是参数名称)和类型得到一个作为参数的对象。 1: public interface IModelBinder 2: { 3: object BindModel(ControllerContext controllerContext, 如下面的代码片断所示,该抽象类具有一个参数类型为ControllerContext的抽象方法ExecuteResult,我们最终对请求的响应就实现在这里。
public class DataGridFilterBinderProvider : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext = = null) throw new ArgumentNullException("controllerContext", "controllerContext is null bindingContext.ModelType == typeof(dataGridFilter)) { HttpRequestBase request = controllerContext.HttpContext.Request } } else { return BindModel(controllerContext
controllerContext, string partialPath) { return base.CreatePartialView(controllerContext , partialPath); } protected override IView CreateView(ControllerContext controllerContext , string viewPath, string masterPath) { return base.CreateView(controllerContext, viewPath, masterPath); } protected override bool FileExists(ControllerContext controllerContext , string virtualPath) { return base.FileExists(controllerContext, virtualPath);
通过上面的代码片断可以看出ViewContext是ControllerContext的子类,用于表示状态数据的ViewData、ViewBag和TempData对应着ControllerBase的同名属性 1: public interface IViewEngine 2: { 3: ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache); 4: ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache); 5: void ReleaseView(ControllerContext controllerContext, string partialViewName); 15: public virtual ViewEngineResult FindView(ControllerContext
controllerContext, string partialViewName, bool useCache) 15: { 16: return FindView( controllerContext, partialViewName, null, useCache); 17: } 18: 19: public ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) 20 : { 21: string controllerName = controllerContext.RouteData.GetRequiredString("controller controllerContext, IView view) 42: { 43: IDisposable disposable = view as IDisposable
初始化ControllerContext, 主要是从zk上获取broker, topic, parition, isr, partition leader, replicas等信息; d. -- curBrokerIds controllerContext.liveBrokers = curBrokerIds.map(zkUtils.getBrokerInfo val deletedTopics = controllerContext.allTopics -- currentChildren controllerContext.allTopics = controllerContext.partitionReplicaAssignment.filter(p => ! deletedTopics.contains(p._1.topic)) controllerContext.partitionReplicaAssignment.
controllerContext.allTopics.contains(t)) topicsToBeDeleted –= nonExistentTopics if(topicsToBeDeleted.size = topic) controllerContext.zkClient.deleteRecursive(ZkUtils.getTopicPath(topic)) controllerContext.zkClient.deleteRecursive (ZkUtils.getTopicConfigPath(topic)) controllerContext.zkClient.delete(ZkUtils.getDeleteTopicPath(topic 4,手动删除zk上topic信息和磁盘数据 TopicChangeListener会监听处理,但是处理很简单,只是更新了 val deletedTopics = controllerContext.allTopics – currentChildren controllerContext.allTopics = currentChildren val addedPartitionReplicaAssignment
(); 9: Task<object> task = base.ExecuteAsync(controllerContext, arguments, cancellationToken ); 10: controllerContext.Request.ResetCurrentUICulture(); 11: return task; 12: , CancellationToken cancellationToken) 4: { 5: controllerContext.Request.SetCurrentUICulture (); 6: Task < HttpResponseMessage > task = base.ExecuteAsync(controllerContext, cancellationToken ); 7: controllerContext.Request.ResetCurrentUICulture(); 8: return task; 9:
③获取Controller与Action的描述信息和过滤器信息 public virtual bool InvokeAction(ControllerContext controllerContext 再次转到定义看看: protected virtual ActionResult InvokeActionMethod(ControllerContext controllerContext ⑤ActionResult闪亮登场:Filter->Result public virtual bool InvokeAction(ControllerContext controllerContext protected virtual void InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult writer) : base(controllerContext) { if (controllerContext == null)
controllerContext) 4: { 5: return base.GetControllerDescriptor(controllerContext); controllerContext) 12: { 13: return base.GetControllerDescriptor(controllerContext); =>actionInvoker.GetControllerDescriptor(ControllerContext),ControllerContext); 11: } 12: => actionInvoker.GetControllerDescriptor(ControllerContext), ControllerContext); 29: } 30: , ControllerDescriptor> controllerDescriptorAccessor, ControllerContext controllerContext) 56:
OnAuthentication方法的这个参数类型为AuthenticationContext,如下面的代码片断所示,它是ControllerContext的子类。 (); 4: public ActionExecutingContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor 如下面的代码片断所示,它依然是ControllerContext的子类。 (); 4: public ActionExecutedContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor controllerContext,IList<IAuthenticationFilter> filters, ActionDescriptor actionDescriptor); 5:
</exception> public virtual IDictionary<string, object> LoadTempData(ControllerContext controllerContext </exception> public virtual void SaveTempData(ControllerContext controllerContext, IDictionary<string "controllerContext"); HttpSessionStateBase session = controllerContext.HttpContext.Session; </param> public void Load(ControllerContext controllerContext, ITempDataProvider tempDataProvider </param> public void Save(ControllerContext controllerContext, ITempDataProvider tempDataProvider
func startHPAController(ctx context.Context, controllerContext ControllerContext) (controller.Interface ) } func startHPAControllerWithRESTClient(ctx context.Context, controllerContext ControllerContext) , metricsClient) } func startHPAControllerWithMetricsClient(ctx context.Context, controllerContext ControllerContext (), controllerContext.InformerFactory.Core().V1().Pods(), controllerContext.ComponentConfig.HPAController.HorizontalPodAutoscalerSyncPeriod.Duration , controllerContext.ComponentConfig.HPAController.HorizontalPodAutoscalerTolerance, controllerContext.ComponentConfig.HPAController.HorizontalPodAutoscalerCPUInitializationPeriod.Duration
controllerContext.allTopics.contains(t)) topicsToBeDeleted --= nonExistentTopics if(topicsToBeDeleted.size = topic) controllerContext.zkClient.deleteRecursive(ZkUtils.getTopicPath(topic)) controllerContext.zkClient.deleteRecursive (ZkUtils.getTopicConfigPath(topic)) controllerContext.zkClient.delete(ZkUtils.getDeleteTopicPath(topic 4,手动删除zk上topic信息和磁盘数据 TopicChangeListener会监听处理,但是处理很简单,只是更新了 val deletedTopics = controllerContext.allTopics -- currentChildren controllerContext.allTopics = currentChildren val addedPartitionReplicaAssignment
将触发: val curBrokerIds = currentBrokerList.map(_.toInt).toSet val newBrokerIds = curBrokerIds -- controllerContext.liveOrShuttingDownBrokerIds -- curBrokerIds controllerContext.liveBrokers = curBrokerIds.map(zkUtils.getBrokerInfo(_)).filter (_.isDefined).map(_.get) newBrokers.foreach(controllerContext.controllerChannelManager.addBroker(_)) deadBrokerIds.foreach(controllerContext.controllerChannelManager.removeBroker(_)) if controller.onBrokerFailure(deadBrokerIds.toSeq) 从zk返回了当前的broker列表信息; val deadBrokerIds = controllerContext.liveOrShuttingDownBrokerIds
该方法为虚方法,可在子类中重写; Validate<TEntity>():验证给定实体并使用空前缀将验证错误添加到模型状态; Initialize():使用指定的 controllerContext //参数:controllerContext:测试控制器的当前上下文。cancellationToken:取消操作的通知。 //返回结果:控制器。 Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken /// </returns> /// <param name="<em>controllerContext</em>">单个 HTTP 操作的控制器上下文。 </param> public virtual Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext