소스 검색

fix item name corruption + use native go-redis type-convert functions

backfeed-full-error
Fusl 2 년 전
부모
커밋
c7bebb89f8
1개의 변경된 파일16개의 추가작업 그리고 22개의 파일을 삭제
  1. +16
    -22
      main.go

+ 16
- 22
main.go 파일 보기

@@ -163,21 +163,18 @@ func (that *ProjectBackfeedManager) Do() {
} }
var sAddItems []interface{} var sAddItems []interface{}
for key, items := range keyMap { for key, items := range keyMap {
rawRes, err := resultMap[key].Result()
res, err := resultMap[key].BoolSlice()
if err != nil { if err != nil {
log.Printf("%s", err) log.Printf("%s", err)
continue continue
} }
rawResArray, ok := rawRes.([]interface{})
if !ok || len(keyMap[key]) != len(rawResArray) {
if len(res) != len(keyMap[key]) {
continue continue
} }
for i, vi := range rawResArray {
v, ok := vi.(int64)
if !ok || v != 1 {
continue
for i, v := range res {
if v {
sAddItems = append(sAddItems, items[i])
} }
sAddItems = append(sAddItems, items[i])
} }
} }
dupes := wrapped - len(sAddItems) dupes := wrapped - len(sAddItems)
@@ -188,22 +185,17 @@ func (that *ProjectBackfeedManager) Do() {
} }
args = append(args, sAddItems...) args = append(args, sAddItems...)


rawRes, err := that.LegacyRedis.Do(context.Background(), args...).Result()
res, err := that.LegacyRedis.Do(context.Background(), args...).BoolSlice()
if err != nil { if err != nil {
log.Printf("unable to dedupe against %s legacy backfeed: %s", that.Name, err) log.Printf("unable to dedupe against %s legacy backfeed: %s", that.Name, err)
} else {
rawResArray, ok := rawRes.([]interface{})
if ok && len(sAddItems) == len(rawResArray) {
var filteredSAddItems []interface{}
for i, vi := range rawResArray {
v, ok := vi.(int64)
if !ok || v != 0 {
continue
}
} else if len(res) == len(sAddItems) {
var filteredSAddItems []interface{}
for i, v := range res {
if !v {
filteredSAddItems = append(filteredSAddItems, sAddItems[i]) filteredSAddItems = append(filteredSAddItems, sAddItems[i])
} }
sAddItems = filteredSAddItems
} }
sAddItems = filteredSAddItems
} }
} }
if len(sAddItems) != 0 { if len(sAddItems) != 0 {
@@ -433,10 +425,12 @@ func (that *GlobalBackfeedManager) Handle(res http.ResponseWriter, req *http.Req
if len(b) == 0 { if len(b) == 0 {
continue continue
} }
bcopy := make([]byte, 0, len(b))
copy(bcopy, b)
item := &BackfeedItem{ item := &BackfeedItem{
PrimaryShard: GenShardHash(b),
PrimaryShard: GenShardHash(bcopy),
SecondaryShard: secondaryShard, SecondaryShard: secondaryShard,
Item: b,
Item: bcopy,
} }
ok := projectBackfeedManager.PushItem(req.Context(), item) ok := projectBackfeedManager.PushItem(req.Context(), item)
if !ok { if !ok {
@@ -455,7 +449,7 @@ func (that *GlobalBackfeedManager) Handle(res http.ResponseWriter, req *http.Req
if err != nil { if err != nil {
WriteResponse(res, statusCode, err) WriteResponse(res, statusCode, err)
} else { } else {
WriteResponse(res, http.StatusOK, fmt.Sprintf("%d items queued", n))
WriteResponse(res, http.StatusOK, fmt.Sprintf("%d items queued for deduplication", n))
} }
return return
} }


불러오는 중...
취소
저장