diff --git a/sysmodule/mongomodule/mongomodule.go b/sysmodule/mongomodule/mongomodule.go deleted file mode 100644 index 5c9fe49..0000000 --- a/sysmodule/mongomodule/mongomodule.go +++ /dev/null @@ -1,181 +0,0 @@ -package mongomodule - -import ( - "github.com/duanhf2012/origin/v2/log" - "gopkg.in/mgo.v2" - "gopkg.in/mgo.v2/bson" - "sync" - "time" - "container/heap" - _ "gopkg.in/mgo.v2" -) - -// session -type Session struct { - *mgo.Session - ref int - index int -} - -type SessionHeap []*Session - -func (h SessionHeap) Len() int { - return len(h) -} - -func (h SessionHeap) Less(i, j int) bool { - return h[i].ref < h[j].ref -} - -func (h SessionHeap) Swap(i, j int) { - h[i], h[j] = h[j], h[i] - h[i].index = i - h[j].index = j -} - -func (h *SessionHeap) Push(s interface{}) { - s.(*Session).index = len(*h) - *h = append(*h, s.(*Session)) -} - -func (h *SessionHeap) Pop() interface{} { - l := len(*h) - s := (*h)[l-1] - s.index = -1 - *h = (*h)[:l-1] - return s -} - -type DialContext struct { - sync.Mutex - sessions SessionHeap -} - -type MongoModule struct { - dailContext *DialContext -} - -func (slf *MongoModule) Init(url string,sessionNum uint32,dialTimeout time.Duration, timeout time.Duration) error { - var err error - slf.dailContext, err = dialWithTimeout(url, sessionNum, dialTimeout, timeout) - - return err -} - -func (slf *MongoModule) Ref() *Session{ - return slf.dailContext.Ref() -} - -func (slf *MongoModule) UnRef(s *Session) { - slf.dailContext.UnRef(s) -} - -// goroutine safe -func dialWithTimeout(url string, sessionNum uint32, dialTimeout time.Duration, timeout time.Duration) (*DialContext, error) { - if sessionNum <= 0 { - sessionNum = 100 - log.Release("invalid sessionNum, reset to %v", sessionNum) - } - - s, err := mgo.DialWithTimeout(url, dialTimeout) - if err != nil { - return nil, err - } - - s.SetMode(mgo.Strong,true) - s.SetSyncTimeout(timeout) - s.SetSocketTimeout(timeout) - - c := new(DialContext) - - // sessions - c.sessions = make(SessionHeap, sessionNum) - c.sessions[0] = &Session{s, 0, 0} - for i := 1; i < int(sessionNum); i++ { - c.sessions[i] = &Session{s.New(), 0, i} - } - heap.Init(&c.sessions) - - return c, nil -} - -// goroutine safe -func (c *DialContext) Close() { - c.Lock() - for _, s := range c.sessions { - s.Close() - } - c.Unlock() -} - -// goroutine safe -func (c *DialContext) Ref() *Session { - c.Lock() - s := c.sessions[0] - if s.ref == 0 { - s.Refresh() - } - s.ref++ - heap.Fix(&c.sessions, 0) - c.Unlock() - - return s -} - -// goroutine safe -func (c *DialContext) UnRef(s *Session) { - if s == nil { - return - } - c.Lock() - s.ref-- - heap.Fix(&c.sessions, s.index) - c.Unlock() -} - - -// goroutine safe -func (s *Session) EnsureCounter(db string, collection string, id string) error { - err := s.DB(db).C(collection).Insert(bson.M{ - "_id": id, - "seq": 0, - }) - if mgo.IsDup(err) { - return nil - } else { - return err - } -} - -// goroutine safe -func (s *Session) NextSeq(db string, collection string, id string) (int, error) { - var res struct { - Seq int - } - _, err := s.DB(db).C(collection).FindId(id).Apply(mgo.Change{ - Update: bson.M{"$inc": bson.M{"seq": 1}}, - ReturnNew: true, - }, &res) - - return res.Seq, err -} - -// goroutine safe -func (s *Session) EnsureIndex(db string, collection string, key []string, bBackground bool) error { - return s.DB(db).C(collection).EnsureIndex(mgo.Index{ - Key: key, - Unique: false, - Sparse: true, - Background: bBackground, - }) -} - -// goroutine safe -func (s *Session) EnsureUniqueIndex(db string, collection string, key []string, bBackground bool) error { - return s.DB(db).C(collection).EnsureIndex(mgo.Index{ - Key: key, - Unique: true, - Sparse: true, - Background: bBackground, - }) -} diff --git a/sysmodule/mongomodule/mongomodule_test.go b/sysmodule/mongomodule/mongomodule_test.go deleted file mode 100644 index 6606345..0000000 --- a/sysmodule/mongomodule/mongomodule_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package mongomodule - -import ( - "fmt" - _ "gopkg.in/mgo.v2" - "gopkg.in/mgo.v2/bson" - "testing" - "time" -) - - - -type Student struct { - ID bson.ObjectId `bson:"_id"` - Name string `bson: "name"` - Age int `bson: "age"` - Sid string `bson: "sid"` - Status int `bson: "status"` -} - -type StudentName struct { - Name string `bson: "name"` -} - - -func Test_Example(t *testing.T) { - module:=MongoModule{} - module.Init("mongodb://admin:123456@192.168.2.119:27017",100, 5*time.Second,5*time.Second) - - // take session - s := module.Take() - c := s.DB("test2").C("t_student") - - //2.定义对象 - insertData := Student{ - ID:bson.NewObjectId(), - Name: "seeta11", - Age: 35, //*^_^* - Sid: "s20180907", - Status: 1, - } - - updateData := Student{ - Name: "seeta11", - Age: 18, - Sid: "s20180907", - Status: 1, - } - - - //3.插入数据 - err := c.Insert(&insertData) - - //4.查找数据 - selector := bson.M{"_id":bson.ObjectIdHex("5f25303e999c622d361989b0")} - m:=Student{} - err = c.Find(selector).One(&m) - - //5.更新数据 - //selector2 := bson.M{"_id":bson.ObjectIdHex("5f25303e999c622d361989b0")} - updateData.ID = bson.ObjectIdHex("5f25303e999c622d361989b0") - err = c.UpdateId(bson.ObjectIdHex("5f25303e999c622d361989b0"),&updateData) - if err != nil { - fmt.Print(err) - } - - //6.删除数据 - err = c.RemoveId(bson.ObjectIdHex("5f252f09999c622d36198951")) - if err != nil { - fmt.Print(err) - } - - //7.序号自增 - s.EnsureCounter("test2","t_student","5f252f09999c622d36198951") - for i := 0; i < 3; i++ { - id, err := s.NextSeq("test2", "t_student", "5f252f09999c622d36198951") - if err != nil { - fmt.Println(err) - return - } - fmt.Println(id) - } - - //8.setoninsert使用 - info,uErr := c.Upsert(bson.M{"_id":bson.ObjectIdHex("5f252f09999c622d36198951")},bson.M{ - "$setOnInsert":bson.M{"Name":"setoninsert","Age":55}}) - - - //9.修改部分数字数据 - selector1 := bson.M{"_id":bson.ObjectIdHex("60473de655f1012e7453b369")} - update1 := bson.M{"$set":bson.M{"name":"xxxxx","age":1111}} - c.Update(selector1,update1) - - fmt.Println(info,uErr) -}