Skip to content

Commit

Permalink
daily progress
Browse files Browse the repository at this point in the history
  • Loading branch information
or-else committed Nov 12, 2017
1 parent 49defb1 commit 6e1cb03
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 30 deletions.
5 changes: 3 additions & 2 deletions server/datamodel.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ type MsgSeqRange struct {

// Either an individual ID or a randge of deleted IDs
type MsgDelQuery struct {
SeqId int `json:"id,omitempty"`
Range *MsgSeqRange `json:"range,omitempty"`
SeqId int `json:"seq,omitempty"`
LowId int `json:"low,omitempty"`
HiId int `json:"hi,omitempty"`
}

// Client to Server (C2S) messages
Expand Down
9 changes: 3 additions & 6 deletions server/pbconverter.go
Original file line number Diff line number Diff line change
Expand Up @@ -701,8 +701,7 @@ func pb_DelQuery_serialize(in []MsgDelQuery) []*pbx.DelQuery {
out[i].DelId = &pbx.DelQuery_SeqId{SeqId: int32(dq.SeqId)}
} else {
out[i].DelId = &pbx.DelQuery_Range{
Range: &pbx.SeqRange{
Low: int32(dq.Range.Low), Hi: int32(dq.Range.Hi)}}
Range: &pbx.SeqRange{Low: int32(dq.LowId), Hi: int32(dq.HiId)}}
}
}

Expand All @@ -717,10 +716,8 @@ func pb_DelQuery_deserialize(in []*pbx.DelQuery) []MsgDelQuery {
out := make([]MsgDelQuery, len(in))
for i, dq := range in {
if r := dq.GetRange(); r != nil {
out[i].Range = &MsgSeqRange{
Low: int(r.GetLow()),
Hi: int(r.GetHi()),
}
out[i].LowId = int(r.GetLow())
out[i].HiId = int(r.GetHi())
} else {
out[i].SeqId = int(dq.GetSeqId())
}
Expand Down
53 changes: 31 additions & 22 deletions server/topic.go
Original file line number Diff line number Diff line change
Expand Up @@ -1124,9 +1124,9 @@ func (t *Topic) replyGetDesc(sess *Session, id, tempName string, opts *MsgGetOpt
if (pud.modeGiven & pud.modeWant).IsReader() {
desc.SeqId = t.lastId
// Make sure reported values are sane:
// t.clearId <= pud.clearId <= t.readId <= t.recvId <= t.lastId
// t.clearId <= pud.clearId; t.readId <= t.recvId <= t.lastId
desc.DelId = max(pud.delId, t.delId)
desc.ReadSeqId = max(pud.readId, desc.ClearId)
desc.ReadSeqId = pud.readId
desc.RecvSeqId = max(pud.recvId, pud.readId)
}

Expand Down Expand Up @@ -1436,7 +1436,7 @@ func (t *Topic) replyGetSub(sess *Session, id string, opts *MsgGetOpts) error {
if isReader {
mts.SeqId = sub.GetSeqId()
// Report whatever is the greatest - soft - or hard- deleted id
clearId = max(sub.GetHardClearId(), sub.ClearId)
clearId = max(sub.GetDelId(), sub.ClearId)
mts.ClearId = clearId
}

Expand Down Expand Up @@ -1614,31 +1614,40 @@ func (t *Topic) replyDelMsg(sess *Session, del *MsgClientDel) error {

var err error
var filteredList []int
if del.Before > t.lastId || del.Before < 0 {
err = errors.New("del.msg: invalid parameter 'before'")
} else if del.Before == 0 {
if del.SeqList == nil || len(del.SeqList) == 0 {
err = errors.New("del.msg without parameters")
} else {
for _, seq := range del.SeqList {
if seq > t.lastId && seq < 0 {
err = errors.New("del.msg: invalid entry in list")
break
}
if seq == 0 {
continue
}
if del.DelSeq == nil || len(del.DelSeq) == 0 {
err = error.New("del.msg: not IDs to delete")
} else {
remains := MAX_SEQ_COUNT
for _, dq := range del.DelSeq {
if dq.SeqId > t.lastId || dq.SeqId < 0 ||
dq.LowId > t.lastId || dq.LowId < 0 ||
dq.HiId > t.lastId || dq.HiId < 0 ||
dq.HiId < dq.LowId ||
(dq.SeqId > 0 && (dq.HiId > 0 || dq.LowId > 0)) ||
(dq.HiId != 0 || dq.HiId == dq.LowId) {
err = errors.New("del.msg: invalid entry in list")
break
}

filteredList = append(filteredList, seq)
if len(filteredList) == MAX_SEQ_COUNT {
break
if dq.SeqId != 0 && remains > 0 {
filteredList = append(filteredList, dq.SeqId)
remains--
} else {
// Expand the range into individial IDs
for i := dq.LowId; i <= dq.HiId && remains > 0; i++ {
filteredList = append(filteredList, i)
remains--
}
}

if len(filteredList) == 0 {
err = errors.New("del.msg: no valid entries in list")
if remains <= 0 {
break
}
}

if len(filteredList) == 0 {
err = errors.New("del.msg: no valid entries in list")
}
}

if err != nil {
Expand Down

0 comments on commit 6e1cb03

Please sign in to comment.