コード例 #1
0
        public ActionResult Delete(int id)
        {
            try
            {
                tb_mqpath_partition_model model = null;
                using (DbConn conn = DbConfig.CreateConn(DataConfig.MqManage))
                {
                    try
                    {
                        conn.Open();
                        conn.BeginTransaction();
                        model = pathPartitionDal.Get(conn, id);
                        if (model == null)
                        {
                            throw new Exception("分区不存在");
                        }

                        if (model.state == (int)XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.EnumMqPathPartitionState.Running)
                        {
                            throw new Exception("正在运行中");
                        }
                        if (model.partitionindex != new tb_mqpath_partition_dal().GetMaxPartitionIndex(conn, model.mqpathid))
                        {
                            throw new Exception("分区请优先移除最大的分区顺序的分区");
                        }
                        //移除该分区的所有消费者信息
                        new tb_consumer_partition_dal().Delete2(conn, model.partitionid);
                        pathPartitionDal.Delete(conn, id);
                        new tb_partition_dal().UpdateIsUsed(conn, 0, model.partitionid);
                        conn.Commit();
                    }
                    catch (Exception exp)
                    {
                        conn.Rollback();
                        throw exp;
                    }
                }
                ReStartQuque(model.mqpathid);
                return(Json(new { code = 1, msg = "成功" }));
            }
            catch (Exception e)
            {
                return(Json(new { code = -1, msg = e.Message }));
            }
        }
コード例 #2
0
        public virtual bool Add2(DbConn PubConn, tb_mqpath_partition_model model)
        {
            List <ProcedureParameter> Par = new List <ProcedureParameter>()
            {
                //某路径下的mq的id
                new ProcedureParameter("@mqpathid", model.mqpathid),
                //分区id编号
                new ProcedureParameter("@partitionid", model.partitionid),
                //分区顺序号(某个路径下mq的顺序号)
                new ProcedureParameter("@partitionindex", model.partitionindex),
                //某路径下mq的状态,1 运行中,0 待数据迁移或停止,-1 待删除
                new ProcedureParameter("@state", model.state),
            };
            int rev = PubConn.ExecuteSql(@"insert into tb_mqpath_partition(mqpathid,partitionid,partitionindex,state,createtime)
										   values(@mqpathid,@partitionid,@partitionindex,@state,getdate())"                                        , Par);

            return(rev == 1);
        }
コード例 #3
0
 public ActionResult SetState(int partitionid, int state)
 {
     try
     {
         tb_mqpath_partition_model model = null;
         using (DbConn conn = DbConfig.CreateConn(DataConfig.MqManage))
         {
             conn.Open();
             model = new tb_mqpath_partition_dal().GetByPartitionId(conn, partitionid);
             new tb_mqpath_partition_dal().SetState(conn, partitionid, state);
         }
         SendCommandToRedistReStart(model.mqpathid, EnumCommandReceiver.Producter);
         return(Json(new { code = 1, msg = "成功" }));
     }
     catch (Exception exp)
     {
         return(Json(new { code = -1, msg = exp.Message }));
     }
 }
コード例 #4
0
        public virtual bool Edit(DbConn PubConn, tb_mqpath_partition_model model)
        {
            List <ProcedureParameter> Par = new List <ProcedureParameter>()
            {
                //某路径下的mq的id
                new ProcedureParameter("@mqpathid", model.mqpathid),
                //分区id编号
                new ProcedureParameter("@partitionid", model.partitionid),
                //分区顺序号(某个路径下mq的顺序号)
                new ProcedureParameter("@partitionindex", model.partitionindex),
                //某路径下mq的状态,1 运行中,0 待数据迁移或停止,-1 待删除
                new ProcedureParameter("@state", model.state),
                //创建时间(以当前库时间为准)
                new ProcedureParameter("@createtime", model.createtime)
            };

            Par.Add(new ProcedureParameter("@id", model.id));

            int rev = PubConn.ExecuteSql("update tb_mqpath_partition set mqpathid=@mqpathid,partitionid=@partitionid,partitionindex=@partitionindex,state=@state,createtime=@createtime where id=@id", Par);

            return(rev == 1);
        }
コード例 #5
0
        public virtual tb_mqpath_partition_model CreateModel(DataRow dr)
        {
            var o = new tb_mqpath_partition_model();

            //
            if (dr.Table.Columns.Contains("id"))
            {
                o.id = dr["id"].Toint();
            }
            //某路径下的mq的id
            if (dr.Table.Columns.Contains("mqpathid"))
            {
                o.mqpathid = dr["mqpathid"].Toint();
            }
            //分区id编号
            if (dr.Table.Columns.Contains("partitionid"))
            {
                o.partitionid = dr["partitionid"].Toint();
            }
            //分区顺序号(某个路径下mq的顺序号)
            if (dr.Table.Columns.Contains("partitionindex"))
            {
                o.partitionindex = dr["partitionindex"].Toint();
            }
            //某路径下mq的状态,1 运行中,0 待数据迁移或停止,-1 待删除
            if (dr.Table.Columns.Contains("state"))
            {
                o.state = dr["state"].ToByte();
            }
            //创建时间(以当前库时间为准)
            if (dr.Table.Columns.Contains("createtime"))
            {
                o.createtime = dr["createtime"].ToDateTime();
            }
            return(o);
        }
コード例 #6
0
 public ActionResult Add(tb_mqpath_partition_model model)
 {
     try
     {
         using (DbConn conn = DbConfig.CreateConn(DataConfig.MqManage))
         {
             try
             {
                 conn.Open();
                 conn.BeginTransaction();
                 model.state          = (byte)XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.EnumMqPathPartitionState.Running;
                 model.partitionindex = new tb_mqpath_partition_dal().GetMaxPartitionIndexOfMqPath(conn, model.mqpathid) + 1;
                 if (new tb_mqpath_dal().Get(conn, model.mqpathid) == null)
                 {
                     throw new Exception("无法找到队列");
                 }
                 if (new tb_mqpath_partition_dal().GetByPartitionId(conn, model.partitionid) != null)
                 {
                     throw new Exception("分区已被使用");
                 }
                 if (new tb_mqpath_partition_dal().CheckMaxPartitionIndexOfMqPathIsRunning(conn, model.mqpathid) == false)
                 {
                     throw new Exception("最后的分区未处于正常使用状态,若分区正在待删状态,请删除完毕后新增分区。");
                 }
                 if (new tb_mqpath_partition_dal().Add2(conn, model))
                 {
                     new tb_partition_dal().UpdateIsUsed(conn, 1, model.partitionid);
                     var partitioninfo = XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.PartitionRuleHelper.GetPartitionIDInfo(model.partitionid);
                     //创建3天的表
                     var serverdate = conn.GetServerDate().Date;
                     for (int i = 0; i < 3; i++)
                     {
                         var currentdate = serverdate.AddDays(i);
                         var tablename   = XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.PartitionRuleHelper.GetTableName(partitioninfo.TablePartition, currentdate);//
                         SqlHelper.ExcuteSql(DataConfig.DataNodeParConn(partitioninfo.DataNodePartition + ""), (c) =>
                         {
                             bool exsit = c.TableIsExist(tablename);
                             if (exsit != true)
                             {
                                 string cmd = DataConfig.MQCreateTableSql.Replace("{tablepartiton}", XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.PartitionRuleHelper.PartitionNameRule(partitioninfo.TablePartition))
                                              .Replace("{daypartition}", currentdate.ToString("yyMMdd")).Replace("{datanodepartiton}", XXF.BaseService.MessageQuque.BusinessMQ.SystemRuntime.PartitionRuleHelper.PartitionNameRule(partitioninfo.DataNodePartition));
                                 c.ExecuteSql(cmd, new List <XXF.Db.ProcedureParameter>());
                             }
                         });
                     }
                     conn.Commit();
                 }
                 else
                 {
                     throw new Exception("更新错误");
                 }
             }
             catch (Exception exp)
             {
                 conn.Rollback();
                 throw exp;
             }
         }
         ReStartQuque(model.mqpathid);
         return(RedirectToAction("index"));
     }
     catch (Exception e)
     {
         ModelState.AddModelError("Error", e.Message);
         return(View(model));
     }
 }